diff options
Diffstat (limited to 'test/Transforms/LICM/2007-09-24-PromoteNullValue.ll')
-rw-r--r-- | test/Transforms/LICM/2007-09-24-PromoteNullValue.ll | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll b/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll new file mode 100644 index 0000000..916f479 --- /dev/null +++ b/test/Transforms/LICM/2007-09-24-PromoteNullValue.ll @@ -0,0 +1,46 @@ +; Do not promote null value because it may be unsafe to do so. +; RUN: opt < %s -licm -S | not grep promoted + +define i32 @f(i32 %foo, i32 %bar, i32 %com) { +entry: + %tmp2 = icmp eq i32 %foo, 0 ; <i1> [#uses=1] + br i1 %tmp2, label %cond_next, label %cond_true + +cond_true: ; preds = %entry + br label %return + +cond_next: ; preds = %entry + br label %bb + +bb: ; preds = %bb15, %cond_next + switch i32 %bar, label %bb15 [ + i32 1, label %bb6 + ] + +bb6: ; preds = %bb + %tmp8 = icmp eq i32 %com, 0 ; <i1> [#uses=1] + br i1 %tmp8, label %cond_next14, label %cond_true11 + +cond_true11: ; preds = %bb6 + br label %return + +cond_next14: ; preds = %bb6 + store i8 0, i8* null + br label %bb15 + +bb15: ; preds = %cond_next14, %bb + br label %bb + +return: ; preds = %cond_true11, %cond_true + %storemerge = phi i32 [ 0, %cond_true ], [ undef, %cond_true11 ] ; <i32> [#uses=1] + ret i32 %storemerge +} + +define i32 @kdMain() { +entry: + %tmp1 = call i32 @f( i32 0, i32 1, i32 1 ) ; <i32> [#uses=0] + call void @exit( i32 0 ) + unreachable +} + +declare void @exit(i32) |