diff options
Diffstat (limited to 'test/Transforms/SimplifyCFG/trapping-load-unreachable.ll')
-rw-r--r-- | test/Transforms/SimplifyCFG/trapping-load-unreachable.ll | 51 |
1 files changed, 47 insertions, 4 deletions
diff --git a/test/Transforms/SimplifyCFG/trapping-load-unreachable.ll b/test/Transforms/SimplifyCFG/trapping-load-unreachable.ll index 7bca5f5..10d6981 100644 --- a/test/Transforms/SimplifyCFG/trapping-load-unreachable.ll +++ b/test/Transforms/SimplifyCFG/trapping-load-unreachable.ll @@ -11,14 +11,14 @@ entry: br i1 %0, label %bb, label %return bb: ; preds = %entry - %1 = volatile load i32* null + %1 = load volatile i32* null unreachable br label %return return: ; preds = %entry ret void ; CHECK: @test1 -; CHECK: volatile load +; CHECK: load volatile } ; rdar://7958343 @@ -35,10 +35,53 @@ entry: ; PR7369 define void @test3() nounwind { entry: - volatile store i32 4, i32* null + store volatile i32 4, i32* null ret void ; CHECK: @test3 -; CHECK: volatile store i32 4, i32* null +; CHECK: store volatile i32 4, i32* null ; CHECK: ret } + +; Check store before unreachable. +define void @test4(i1 %C, i32* %P) { +; CHECK: @test4 +; CHECK: entry: +; CHECK-NEXT: br i1 %C +entry: + br i1 %C, label %T, label %F +T: + store volatile i32 0, i32* %P + unreachable +F: + ret void +} + +; Check cmpxchg before unreachable. +define void @test5(i1 %C, i32* %P) { +; CHECK: @test5 +; CHECK: entry: +; CHECK-NEXT: br i1 %C +entry: + br i1 %C, label %T, label %F +T: + cmpxchg volatile i32* %P, i32 0, i32 1 seq_cst + unreachable +F: + ret void +} + +; Check atomicrmw before unreachable. +define void @test6(i1 %C, i32* %P) { +; CHECK: @test6 +; CHECK: entry: +; CHECK-NEXT: br i1 %C +entry: + br i1 %C, label %T, label %F +T: + atomicrmw volatile xchg i32* %P, i32 0 seq_cst + unreachable +F: + ret void +} + |