Fix SpeculativelyExecuteBB to either speculate all or none of the phis
[oota-llvm.git] / test / Transforms / SimplifyCFG / 2009-01-19-UnconditionalTrappingConstantExpr.ll
1 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
2 ; PR3354
3 ; Do not merge bb1 into the entry block, it might trap.
4
5 @G = extern_weak global i32
6
7 ; CHECK: @test(
8 ; CHECK: br i1 %tmp25
9 ; CHECK: bb1:
10 ; CHECK: sdiv
11
12 define i32 @test(i32 %tmp21, i32 %tmp24) {
13         %tmp25 = icmp sle i32 %tmp21, %tmp24            
14         br i1 %tmp25, label %bb2, label %bb1    
15                                         
16 bb1:            ; preds = %bb   
17         %tmp26 = icmp sgt i32 sdiv (i32 -32768, i32 ptrtoint (i32* @G to i32)), 0
18         br i1 %tmp26, label %bb6, label %bb2            
19 bb2:
20         ret i32 42
21
22 bb6:
23         ret i32 927
24 }
25
26 ; CHECK: @test2(
27 ; CHECK: br i1 %tmp34
28 ; CHECK: bb5:
29 ; CHECK: sdiv
30
31 define i32 @test2(i32 %tmp21, i32 %tmp24, i1 %tmp34) {
32         br i1 %tmp34, label %bb5, label %bb6
33
34 bb5:            ; preds = %bb4
35         br i1 icmp sgt (i32 sdiv (i32 32767, i32 ptrtoint (i32* @G to i32)), i32 0), label %bb6, label %bb7
36 bb6:
37         ret i32 42
38 bb7:
39         ret i32 927
40 }
41