// fold the conditions into logical ops and one cond br.
if (&BB->front() != BI)
return false;
+
+
+ if (ConstantExpr *CE = dyn_cast<ConstantExpr>(BI->getCondition()))
+ if (CE->canTrap())
+ return false;
int PBIOp, BIOp;
if (PBI->getSuccessor(0) == BI->getSuccessor(0))
-; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep {br i1 } | count 2
+; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep {br i1 } | count 4
; PR3354
; Do not merge bb1 into the entry block, it might trap.
unwind
}
+define i32 @test2(i32 %tmp21, i32 %tmp24, i1 %tmp34) {
+ br i1 %tmp34, label %bb5, label %bb6
+
+bb5: ; preds = %bb4
+ br i1 icmp sgt (i32 sdiv (i32 32767, i32 0), i32 0), label %bb6, label %bb7
+bb6:
+ ret i32 42
+bb7:
+ unwind
+}
+