From: Sanjay Patel Date: Tue, 16 Aug 2022 18:37:41 +0000 (-0400) Subject: [FlattenCFG] avoid crash on malformed code X-Git-Tag: upstream/17.0.6~36336 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ce081776b298b0c85fa24f3bc149106f24b096a4;p=platform%2Fupstream%2Fllvm.git [FlattenCFG] avoid crash on malformed code We don't have a dominator tree in this pass, so we can't bail out sooner by checking for unreachable code, but this is a minimal fix for the example in issue #56875. --- diff --git a/llvm/lib/Transforms/Utils/FlattenCFG.cpp b/llvm/lib/Transforms/Utils/FlattenCFG.cpp index ddd3f59..89823ed 100644 --- a/llvm/lib/Transforms/Utils/FlattenCFG.cpp +++ b/llvm/lib/Transforms/Utils/FlattenCFG.cpp @@ -431,6 +431,9 @@ bool FlattenCFGOpt::MergeIfRegion(BasicBlock *BB, IRBuilder<> &Builder) { return false; BasicBlock *FirstEntryBlock = CInst1->getParent(); + // Don't die trying to process degenerate/unreachable code. + if (FirstEntryBlock == SecondEntryBlock) + return false; // Either then-path or else-path should be empty. bool InvertCond2 = false; diff --git a/llvm/test/Transforms/Util/flattencfg.ll b/llvm/test/Transforms/Util/flattencfg.ll index e94e0cd..3e598ee 100644 --- a/llvm/test/Transforms/Util/flattencfg.ll +++ b/llvm/test/Transforms/Util/flattencfg.ll @@ -216,3 +216,20 @@ if.else.y: exit: ret void } + +; This would crash. + +declare i1 @llvm.smax.i1(i1, i1) #0 + +; CHECK-LABEL: @PR56875 +define void @PR56875(i1 %val_i1_5) { +entry_1: + ret void + +bb_2: ; preds = %bb_4 + br label %bb_4 + +bb_4: ; preds = %bb_4, %bb_2 + %val_i1_46 = call i1 @llvm.smax.i1(i1 %val_i1_5, i1 %val_i1_5) + br i1 %val_i1_46, label %bb_4, label %bb_2 +}