[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / SimplifyCFG / trapping-load-unreachable.ll
blobb074393e453af58ffd2553b6f470d9fa861d732d
1 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
2 ; PR2967
4 target datalayout =
5 "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32"
6 target triple = "i386-pc-linux-gnu"
8 define void @test1(i32 %x) nounwind {
9 entry:
10         %0 = icmp eq i32 %x, 0          ; <i1> [#uses=1]
11         br i1 %0, label %bb, label %return
13 bb:             ; preds = %entry
14         %1 = load volatile i32, i32* null
15         unreachable
16         
17         br label %return
18 return:         ; preds = %entry
19         ret void
20 ; CHECK-LABEL: @test1(
21 ; CHECK: load volatile
24 define void @test1_no_null_opt(i32 %x) nounwind #0 {
25 entry:
26         %0 = icmp eq i32 %x, 0          ; <i1> [#uses=1]
27         br i1 %0, label %bb, label %return
29 bb:             ; preds = %entry
30         %1 = load volatile i32, i32* null
31         unreachable
33         br label %return
34 return:         ; preds = %entry
35         ret void
36 ; CHECK-LABEL: @test1_no_null_opt(
37 ; CHECK: load volatile
38 ; CHECK: unreachable
41 ; rdar://7958343
42 define void @test2() nounwind {
43 entry:
44         store i32 4,i32* null
45         ret void
47 ; CHECK-LABEL: @test2(
48 ; CHECK: call void @llvm.trap
49 ; CHECK: unreachable
52 define void @test2_no_null_opt() nounwind #0 {
53 entry:
54         store i32 4,i32* null
55         ret void
56 ; CHECK-LABEL: @test2_no_null_opt(
57 ; CHECK: store i32 4, i32* null
58 ; CHECK-NOT: call void @llvm.trap
59 ; CHECK: ret
62 ; PR7369
63 define void @test3() nounwind {
64 entry:
65         store volatile i32 4, i32* null
66         ret void
68 ; CHECK-LABEL: @test3(
69 ; CHECK: store volatile i32 4, i32* null
70 ; CHECK: ret
73 define void @test3_no_null_opt() nounwind #0 {
74 entry:
75         store volatile i32 4, i32* null
76         ret void
78 ; CHECK-LABEL: @test3_no_null_opt(
79 ; CHECK: store volatile i32 4, i32* null
80 ; CHECK: ret
83 ; Check store before unreachable.
84 define void @test4(i1 %C, i32* %P) {
85 ; CHECK-LABEL: @test4(
86 ; CHECK: entry:
87 ; CHECK-NEXT: br i1 %C
88 entry:
89   br i1 %C, label %T, label %F
91   store volatile i32 0, i32* %P
92   unreachable
94   ret void
97 ; Check cmpxchg before unreachable.
98 define void @test5(i1 %C, i32* %P) {
99 ; CHECK-LABEL: @test5(
100 ; CHECK: entry:
101 ; CHECK-NEXT: br i1 %C
102 entry:
103   br i1 %C, label %T, label %F
105   cmpxchg volatile i32* %P, i32 0, i32 1 seq_cst seq_cst
106   unreachable
108   ret void
111 ; Check atomicrmw before unreachable.
112 define void @test6(i1 %C, i32* %P) {
113 ; CHECK-LABEL: @test6(
114 ; CHECK: entry:
115 ; CHECK-NEXT: br i1 %C
116 entry:
117   br i1 %C, label %T, label %F
119   atomicrmw volatile xchg i32* %P, i32 0 seq_cst
120   unreachable
122   ret void
125 attributes #0 = { "null-pointer-is-valid"="true" }