Issue |
117767
|
Summary |
Crash in sinkCommonCodeFromPredecessors(llvm::BasicBlock*, llvm::DomTreeUpdater*) lib/Transforms/Utils/SimplifyCFG.cpp:2475:20
|
Labels |
new issue
|
Assignees |
|
Reporter |
hiraditya
|
Encountered this while debugging a pending issue in #103688. I modified llvm a bit
```diff
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 509b6d622655..c5d4ee453184 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -871,6 +871,7 @@ static bool
CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ,
const SmallPtrSetImpl<BasicBlock *> &BBPreds) {
assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
+ return false;
LLVM_DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
<< Succ->getName() << "\n");
```
With this patch the following testcase fails
```cpp
#include<stdio.h>
__attribute__((noinline))
int foo(int state) {
void* bytecode[2];
bytecode[0] = &&VM__OP_1;
bytecode[1] = &&VM__TERMINATE;
//int state = 0;
int index = 0;
while (1) {
if (state==0) {
goto *bytecode[index];
}
if (state == 1) {
//printf("Unreachable\n");
// NOTE: THIS IS ONLY REACHABLE VIA INDIRECT GOTOS
VM__OP_1:
printf("VM__OP_1\n");
state = 2;
}
else if (state== 2) {
printf("OP_1:(instruction=%d)\n", index);
index++;
goto *bytecode[index];
}
}
VM__TERMINATE:
printf("TERMINATE:(instruction=%d)\n", index);
return 0;
}
int main() {
foo(0);
return 0;
}
```
$ ./bin/clang++ noswitch.cpp -O3
```
4. Running pass "simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>" on function "_Z3fooi"
#0 0x000055810039ca2c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
#1 0x000055810039ce6a PrintStackTraceSignalHandler(void*) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x000055810039a5f0 llvm::sys::RunSignalHandlers() /usr/local/user/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x000055810039c408 SignalHandler(int) /usr/local/user/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
#4 0x00007fc55eb74590 (/lib/x86_64-linux-gnu/libc.so.6+0x3f590)
#5 0x00005580fd9a2bd0 llvm::Use::operator llvm::Value*() const /usr/local/user/llvm-project/llvm/include/llvm/IR/Use.h:65:37
#6 0x000055810057bc10 sinkCommonCodeFromPredecessors(llvm::BasicBlock*, llvm::DomTreeUpdater*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:2475:20
#7 0x0000558100595ea8 (anonymous namespace)::SimplifyCFGOpt::simplifyOnce(llvm::BasicBlock*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8323:49
#8 0x0000558100596209 (anonymous namespace)::SimplifyCFGOpt::run(llvm::BasicBlock*) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8381:13
#9 0x0000558100596298 llvm::simplifyCFG(llvm::BasicBlock*, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&, llvm::ArrayRef<llvm::WeakVH>) /usr/local/user/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp:8393:1
#10 0x000055810025ab74 iterativelySimplifyCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DomTreeUpdater*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:264:7
#11 0x000055810025acf9 simplifyFunctionCFGImpl(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:282:15
#12 0x000055810025ae87 simplifyFunctionCFG(llvm::Function&, llvm::TargetTransformInfo const&, llvm::DominatorTree*, llvm::SimplifyCFGOptions const&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:310:41
#13 0x000055810025b4d9 llvm::SimplifyCFGPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp:381:7
#14 0x00005581022921a6 llvm::detail::PassModel<llvm::Function, llvm::SimplifyCFGPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:91:3
#15 0x00005580ffc5a1fb llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) /usr/local/user/llvm-project/llvm/include/llvm/IR/PassManagerImpl.h:85:18
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs