Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / ifcvt-no-branch-predictor.ll
blob7149e720333043491040166cf7c94573c46cb328
1 ; RUN: llc < %s -mtriple=thumbv7m -mattr=-no-branch-predictor | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-BP
2 ; RUN: llc < %s -mtriple=thumbv7m -mcpu=cortex-m3 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOBP
4 declare void @otherfn()
6 ; CHECK-LABEL: triangle1:
7 ; CHECK: itt ne
8 ; CHECK: movne
9 ; CHECK: strne
10 define i32 @triangle1(i32 %n, ptr %p) {
11 entry:
12   %tobool = icmp eq i32 %n, 0
13   br i1 %tobool, label %if.end, label %if.then
15 if.then:
16   store i32 1, ptr %p, align 4
17   br label %if.end
19 if.end:
20   tail call void @otherfn()
21   ret i32 0
24 ; CHECK-LABEL: triangle2:
25 ; CHECK-BP: itttt ne
26 ; CHECK-BP: movne
27 ; CHECK-BP: strne
28 ; CHECK-BP: movne
29 ; CHECK-BP: strne
30 ; CHECK-NOBP: cbz
31 ; CHECK-NOBP: movs
32 ; CHECK-NOBP: str
33 ; CHECK-NOBP: movs
34 ; CHECK-NOBP: str
35 define i32 @triangle2(i32 %n, ptr %p, ptr %q) {
36 entry:
37   %tobool = icmp eq i32 %n, 0
38   br i1 %tobool, label %if.end, label %if.then
40 if.then:
41   store i32 1, ptr %p, align 4
42   store i32 2, ptr %q, align 4
43   br label %if.end
45 if.end:
46   tail call void @otherfn()
47   ret i32 0
50 ; CHECK-LABEL: triangle3:
51 ; CHECK: cbz
52 ; CHECK: movs
53 ; CHECK: str
54 ; CHECK: movs
55 ; CHECK: str
56 ; CHECK: movs
57 ; CHECK: str
58 define i32 @triangle3(i32 %n, ptr %p, ptr %q, ptr %r) {
59 entry:
60   %tobool = icmp eq i32 %n, 0
61   br i1 %tobool, label %if.end, label %if.then
63 if.then:
64   store i32 1, ptr %p, align 4
65   store i32 2, ptr %q, align 4
66   store i32 3, ptr %r, align 4
67   store i32 4, ptr %p, align 4
68   br label %if.end
70 if.end:
71   tail call void @otherfn()
72   ret i32 0
75 ; CHECK-LABEL: diamond1:
76 ; CHECK: itee eq
77 ; CHECK: ldreq
78 ; CHECK: strne
79 define i32 @diamond1(i32 %n, ptr %p) {
80 entry:
81   %tobool = icmp eq i32 %n, 0
82   br i1 %tobool, label %if.else, label %if.then
84 if.then:
85   store i32 %n, ptr %p, align 4
86   br label %if.end
88 if.else:
89   %0 = load i32, ptr %p, align 4
90   br label %if.end
92 if.end:
93   %n.addr.0 = phi i32 [ %n, %if.then ], [ %0, %if.else ]
94   tail call void @otherfn()
95   ret i32 %n.addr.0
98 ; CHECK-LABEL: diamond2:
99 ; CHECK-BP: cbz
100 ; CHECK-BP: str
101 ; CHECK-BP: str
102 ; CHECK-BP: b
103 ; CHECK-BP: str
104 ; CHECK-BP: add
105 ; CHECK-NOBP: ittee
106 ; CHECK-NOBP: streq
107 ; CHECK-NOBP: addeq
108 ; CHECK-NOBP: strne
109 ; CHECK-NOBP: strne
110 define i32 @diamond2(i32 %n, ptr %p, ptr %q) {
111 entry:
112   %tobool = icmp eq i32 %n, 0
113   br i1 %tobool, label %if.else, label %if.then
115 if.then:
116   store i32 %n, ptr %p, align 4
117   %arrayidx = getelementptr inbounds i32, ptr %p, i32 2
118   store i32 %n, ptr %arrayidx, align 4
119   br label %if.end
121 if.else:
122   store i32 %n, ptr %q, align 4
123   %0 = add i32 %n, 10
124   br label %if.end
126 if.end:
127   %n.addr.0 = phi i32 [ %n, %if.then ], [ %0, %if.else ]
128   tail call void @otherfn()
129   ret i32 %n.addr.0
132 ; CHECK-LABEL: diamond3:
133 ; CHECK: cbz
134 ; CHECK: movs
135 ; CHECK: str
136 ; CHECK: b
137 ; CHECK: ldr
138 ; CHECK: ldr
139 ; CHECK: adds
140 define i32 @diamond3(i32 %n, ptr %p, ptr %q) {
141 entry:
142   %tobool = icmp eq i32 %n, 0
143   br i1 %tobool, label %if.else, label %if.then
145 if.then:
146   store i32 1, ptr %p, align 4
147   br label %if.end
149 if.else:
150   %0 = load i32, ptr %p, align 4
151   %1 = load i32, ptr %q, align 4
152   %add = add nsw i32 %1, %0
153   br label %if.end
155 if.end:
156   %n.addr.0 = phi i32 [ %n, %if.then ], [ %add, %if.else ]
157   tail call void @otherfn()
158   ret i32 %n.addr.0