[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / Thumb / peephole-cmp.mir
blob33b1581cdce76b5dfe8d62ba639cb504e708c44e
1 # RUN: llc -mtriple thumbv8m.base-none-eabi -run-pass=peephole-opt -verify-machineinstrs -o - %s | FileCheck %s
2 --- |
3   target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
4   target triple = "thumbv8m.base-none-none-eabi"
6   define i32 @test_subrr(i32 %a, i32 %b) { ret i32 %a }
7   define i32 @test_subrr_c(i32 %a, i32 %b) { ret i32 %a }
8   define i32 @test_subri3(i32 %a) { ret i32 %a }
9   define i32 @test_subri8(i32 %a) { ret i32 %a }
10   define i32 @test_addrr(i32 %a) { ret i32 %a }
11   define i32 @test_addri3(i32 %a) { ret i32 %a }
12   define i32 @test_addri8(i32 %a) { ret i32 %a }
14 ...
15 ---
16 name:            test_subrr
17 liveins:
18   - { reg: '$r0', virtual-reg: '%1' }
19   - { reg: '$r1', virtual-reg: '%2' }
20 body:             |
21   bb.0:
22     successors: %bb.2(0x40000000), %bb.1(0x40000000)
23     liveins: $r0, $r1
25     %2:tgpr = COPY $r1
26     %1:tgpr = COPY $r0
27     %0:tgpr, $cpsr = tSUBrr %2, %1, 14, $noreg
28     tCMPr %1, %2, 14, $noreg, implicit-def $cpsr
29     tBcc %bb.2, 3, $cpsr
30     tB %bb.1, 14, $noreg
32   bb.1:
33     $r0 = COPY %0
34     tBX_RET 14, $noreg, implicit $r0
36   bb.2:
37     %3:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
38     $r0 = COPY %3
39     tBX_RET 14, $noreg, implicit $r0
41 # CHECK-LABEL: name: test_subrr
42 # CHECK:      [[COPY1:%[0-9]+]]:tgpr = COPY $r1
43 # CHECK-NEXT: [[COPY0:%[0-9]+]]:tgpr = COPY $r0
44 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tSUBrr [[COPY1]], [[COPY0]], 14, $noreg
45 # CHECK-NEXT: tBcc %bb.2, 8, $cpsr
46 ...
47 ---
48 name:            test_subrr_c
49 liveins:
50   - { reg: '$r0', virtual-reg: '%1' }
51   - { reg: '$r1', virtual-reg: '%2' }
52 body:             |
53   bb.0:
54     successors: %bb.2(0x40000000), %bb.1(0x40000000)
55     liveins: $r0, $r1
57     %2:tgpr = COPY $r1
58     %1:tgpr = COPY $r0
59     %0:tgpr, $cpsr = tSUBrr %1, %2, 14, $noreg
60     tCMPr %1, %2, 14, $noreg, implicit-def $cpsr
61     tBcc %bb.2, 3, $cpsr
62     tB %bb.1, 14, $noreg
64   bb.1:
65     $r0 = COPY %0
66     tBX_RET 14, $noreg, implicit $r0
68   bb.2:
69     %3:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
70     $r0 = COPY %3
71     tBX_RET 14, $noreg, implicit $r0
73 # CHECK-LABEL: name: test_subrr_c
74 # CHECK:      [[COPY1:%[0-9]+]]:tgpr = COPY $r1
75 # CHECK-NEXT: [[COPY0:%[0-9]+]]:tgpr = COPY $r0
76 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tSUBrr [[COPY0]], [[COPY1]], 14, $noreg
77 # CHECK-NEXT: tBcc %bb.2, 3, $cpsr
78 ...
79 ---
80 name:            test_subri3
81 liveins:
82   - { reg: '$r0', virtual-reg: '%1' }
83 body:             |
84   bb.0:
85     successors: %bb.2(0x40000000), %bb.1(0x40000000)
86     liveins: $r0
88     %1:tgpr = COPY $r0
89     %0:tgpr, $cpsr = tSUBi3 %1, 1, 14, $noreg
90     tCMPi8 %1, 1, 14, $noreg, implicit-def $cpsr
91     tBcc %bb.2, 3, $cpsr
92     tB %bb.1, 14, $noreg
94   bb.1:
95     $r0 = COPY %0
96     tBX_RET 14, $noreg, implicit $r0
98   bb.2:
99     %2:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
100     $r0 = COPY %2
101     tBX_RET 14, $noreg, implicit $r0
103 # CHECK-LABEL: name: test_subri3
104 # CHECK:      [[COPY:%[0-9]+]]:tgpr = COPY $r0
105 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tSUBi3 [[COPY]], 1, 14, $noreg
106 # CHECK-NEXT: tBcc %bb.2, 3, $cpsr
109 name:            test_subri8
110 liveins:
111   - { reg: '$r0', virtual-reg: '%1' }
112 body:             |
113   bb.0:
114     successors: %bb.2(0x40000000), %bb.1(0x40000000)
115     liveins: $r0
117     %1:tgpr = COPY $r0
118     %0:tgpr, $cpsr = tSUBi8 %1, 1, 14, $noreg
119     tCMPi8 %1, 1, 14, $noreg, implicit-def $cpsr
120     tBcc %bb.2, 3, $cpsr
121     tB %bb.1, 14, $noreg
123   bb.1:
124     $r0 = COPY %0
125     tBX_RET 14, $noreg, implicit $r0
127   bb.2:
128     %2:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
129     $r0 = COPY %2
130     tBX_RET 14, $noreg, implicit $r0
132 # CHECK-LABEL: name: test_subri8
133 # CHECK:      [[COPY:%[0-9]+]]:tgpr = COPY $r0
134 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tSUBi8 [[COPY]], 1, 14, $noreg
135 # CHECK-NEXT: tBcc %bb.2, 3, $cpsr
138 name:            test_addrr
139 liveins:
140   - { reg: '$r0', virtual-reg: '%1' }
141   - { reg: '$r1', virtual-reg: '%2' }
142 body:             |
143   bb.0:
144     successors: %bb.2(0x40000000), %bb.1(0x40000000)
145     liveins: $r0, $r1
147     %2:tgpr = COPY $r1
148     %1:tgpr = COPY $r0
149     %0:tgpr, $cpsr = tADDrr %2, %1, 14, $noreg
150     tCMPr %0, %2, 14, $noreg, implicit-def $cpsr
151     tBcc %bb.2, 3, $cpsr
152     tB %bb.1, 14, $noreg
154   bb.1:
155     $r0 = COPY %0
156     tBX_RET 14, $noreg, implicit $r0
158   bb.2:
159     %3:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
160     $r0 = COPY %3
161     tBX_RET 14, $noreg, implicit $r0
163 # CHECK-LABEL: name: test_addrr
164 # CHECK:      [[COPY1:%[0-9]+]]:tgpr = COPY $r1
165 # CHECK-NEXT: [[COPY0:%[0-9]+]]:tgpr = COPY $r0
166 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tADDrr [[COPY1]], [[COPY0]], 14, $noreg
167 # CHECK-NEXT: tBcc %bb.2, 2, $cpsr
170 name:            test_addri3
171 liveins:
172   - { reg: '$r0', virtual-reg: '%1' }
173 body:             |
174   bb.0:
175     successors: %bb.2(0x40000000), %bb.1(0x40000000)
176     liveins: $r0
178     %0:tgpr = COPY $r0
179     %1:tgpr, $cpsr = tADDi3 %0, 1, 14, $noreg
180     tCMPr %1, %0, 14, $noreg, implicit-def $cpsr
181     tBcc %bb.2, 3, $cpsr
182     tB %bb.1, 14, $noreg
184   bb.1:
185     $r0 = COPY %0
186     tBX_RET 14, $noreg, implicit $r0
188   bb.2:
189     %2:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
190     $r0 = COPY %2
191     tBX_RET 14, $noreg, implicit $r0
193 # CHECK-LABEL: name: test_addri3
194 # CHECK:      [[COPY:%[0-9]+]]:tgpr = COPY $r0
195 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tADDi3 [[COPY]], 1, 14, $noreg
196 # CHECK-NEXT: tBcc %bb.2, 2, $cpsr
199 name:            test_addri8
200 liveins:
201   - { reg: '$r0', virtual-reg: '%1' }
202 body:             |
203   bb.0:
204     successors: %bb.2(0x40000000), %bb.1(0x40000000)
205     liveins: $r0
207     %0:tgpr = COPY $r0
208     %1:tgpr, $cpsr = tADDi8 %0, 10, 14, $noreg
209     tCMPr %1, %0, 14, $noreg, implicit-def $cpsr
210     tBcc %bb.2, 3, $cpsr
211     tB %bb.1, 14, $noreg
213   bb.1:
214     $r0 = COPY %0
215     tBX_RET 14, $noreg, implicit $r0
217   bb.2:
218     %2:tgpr, dead $cpsr = tMOVi8 0, 14, $noreg
219     $r0 = COPY %2
220     tBX_RET 14, $noreg, implicit $r0
222 # CHECK-LABEL: name: test_addri8
223 # CHECK:      [[COPY:%[0-9]+]]:tgpr = COPY $r0
224 # CHECK-NEXT: [[ADD:%[0-9]+]]:tgpr, $cpsr = tADDi8 [[COPY]], 10, 14, $noreg
225 # CHECK-NEXT: tBcc %bb.2, 2, $cpsr