[PATCH] D66657: [CodegenPrepare] Guard against degenerate branches
Valentin Churavy via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 23 08:19:27 PDT 2019
vchuravy created this revision.
Herald added subscribers: llvm-commits, hiraditya.
Herald added a project: LLVM.
Guard against a potential crash observed in https://github.com/JuliaLang/julia/issues/32994#issuecomment-524249628
If two branches are collapsed we can encounter a degenerate conditional branch `TBB==FBB`.
The subsequent code assumes that they differ, so we exit out early.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D66657
Files:
llvm/lib/CodeGen/CodeGenPrepare.cpp
llvm/test/CodeGen/X86/codegen-prepare-collapse.ll
Index: llvm/test/CodeGen/X86/codegen-prepare-collapse.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/X86/codegen-prepare-collapse.ll
@@ -0,0 +1,15 @@
+; RUN: llc -fast-isel=true -O1 -mtriple=x86_64-unkown-linux-gnu -start-before=codegenprepare -stop-after=codegenprepare < %s
+
+define void @foo() {
+top:
+ br label %L34
+
+L34: ; preds = %L34, %L34, %top
+ %.sroa.075.0 = phi i64 [ undef, %top ], [ undef, %L34 ], [ undef, %L34 ]
+ %0 = icmp sgt i8 undef, -1
+ %cond5896 = icmp eq i8 0, 2
+ %cond58 = and i1 %cond5896, %0
+ ; During codegenprepare such degenerate branches can occure and should not
+ ; lead to crashes.
+ br i1 %cond58, label %L34, label %L34
+}
Index: llvm/lib/CodeGen/CodeGenPrepare.cpp
===================================================================
--- llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -7204,6 +7204,11 @@
if (Br1->getMetadata(LLVMContext::MD_unpredictable))
continue;
+ // The merging of mostly empty BB can cause a degenerate branch
+ if (TBB == FBB)
+ LLVM_DEBUG(dbgs() << "Don't split degenerate branch\n"; BB.dump());
+ continue;
+
unsigned Opc;
Value *Cond1, *Cond2;
if (match(LogicOp, m_And(m_OneUse(m_Value(Cond1)),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66657.216855.patch
Type: text/x-patch
Size: 1359 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190823/851331a5/attachment.bin>
More information about the llvm-commits
mailing list