[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / Mips / GlobalISel / regbankselect / select.mir
blob6c1761c6ad2a731b9991ca7c5e682008412d42fd
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=regbankselect -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define void @select_i32(i32, i32) {entry: ret void}
6   define void @select_ptr(i32, i32) {entry: ret void}
7   define void @select_i64() {entry: ret void}
8   define void @select_ambiguous_i64_in_fpr(i64* %i64_ptr_a, i64* %i64_ptr_b, i64* %i64_ptr_c) {entry: ret void}
9   define void @select_float() {entry: ret void}
10   define void @select_ambiguous_float_in_gpr(float* %f32_ptr_a, float* %f32_ptr_b, float* %f32_ptr_c) {entry: ret void}
11   define void @select_double() {entry: ret void}
13 ...
14 ---
15 name:            select_i32
16 alignment:       4
17 legalized:       true
18 tracksRegLiveness: true
19 body:             |
20   bb.1.entry:
21     liveins: $a0, $a1, $a2
23     ; MIPS32-LABEL: name: select_i32
24     ; MIPS32: liveins: $a0, $a1, $a2
25     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
26     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a1
27     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a2
28     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
29     ; MIPS32: [[COPY3:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
30     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY3]], [[C]]
31     ; MIPS32: [[SELECT:%[0-9]+]]:gprb(s32) = G_SELECT [[AND]](s32), [[COPY1]], [[COPY2]]
32     ; MIPS32: $v0 = COPY [[SELECT]](s32)
33     ; MIPS32: RetRA implicit $v0
34     %3:_(s32) = COPY $a0
35     %1:_(s32) = COPY $a1
36     %2:_(s32) = COPY $a2
37     %6:_(s32) = G_CONSTANT i32 1
38     %7:_(s32) = COPY %3(s32)
39     %5:_(s32) = G_AND %7, %6
40     %4:_(s32) = G_SELECT %5(s32), %1, %2
41     $v0 = COPY %4(s32)
42     RetRA implicit $v0
44 ...
45 ---
46 name:            select_ptr
47 alignment:       4
48 legalized:       true
49 tracksRegLiveness: true
50 body:             |
51   bb.1.entry:
52     liveins: $a0, $a1, $a2
54     ; MIPS32-LABEL: name: select_ptr
55     ; MIPS32: liveins: $a0, $a1, $a2
56     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
57     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $a1
58     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(p0) = COPY $a2
59     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
60     ; MIPS32: [[COPY3:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
61     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY3]], [[C]]
62     ; MIPS32: [[SELECT:%[0-9]+]]:gprb(p0) = G_SELECT [[AND]](s32), [[COPY1]], [[COPY2]]
63     ; MIPS32: $v0 = COPY [[SELECT]](p0)
64     ; MIPS32: RetRA implicit $v0
65     %3:_(s32) = COPY $a0
66     %1:_(p0) = COPY $a1
67     %2:_(p0) = COPY $a2
68     %6:_(s32) = G_CONSTANT i32 1
69     %7:_(s32) = COPY %3(s32)
70     %5:_(s32) = G_AND %7, %6
71     %4:_(p0) = G_SELECT %5(s32), %1, %2
72     $v0 = COPY %4(p0)
73     RetRA implicit $v0
75 ...
76 ---
77 name:            select_i64
78 alignment:       4
79 legalized:       true
80 tracksRegLiveness: true
81 fixedStack:
82   - { id: 0, offset: 20, size: 4, alignment: 4, isImmutable: true }
83   - { id: 1, offset: 16, size: 4, alignment: 8, isImmutable: true }
84 body:             |
85   bb.1.entry:
86     liveins: $a0, $a2, $a3
88     ; MIPS32-LABEL: name: select_i64
89     ; MIPS32: liveins: $a0, $a2, $a3
90     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
91     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY $a2
92     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY $a3
93     ; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
94     ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load 4 from %fixed-stack.0, align 8)
95     ; MIPS32: [[FRAME_INDEX1:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.1
96     ; MIPS32: [[LOAD1:%[0-9]+]]:gprb(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (load 4 from %fixed-stack.1)
97     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
98     ; MIPS32: [[COPY3:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
99     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY3]], [[C]]
100     ; MIPS32: [[SELECT:%[0-9]+]]:gprb(s32) = G_SELECT [[AND]](s32), [[COPY1]], [[LOAD]]
101     ; MIPS32: [[SELECT1:%[0-9]+]]:gprb(s32) = G_SELECT [[AND]](s32), [[COPY2]], [[LOAD1]]
102     ; MIPS32: $v0 = COPY [[SELECT]](s32)
103     ; MIPS32: $v1 = COPY [[SELECT1]](s32)
104     ; MIPS32: RetRA implicit $v0, implicit $v1
105     %3:_(s32) = COPY $a0
106     %4:_(s32) = COPY $a2
107     %5:_(s32) = COPY $a3
108     %1:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)
109     %8:_(p0) = G_FRAME_INDEX %fixed-stack.1
110     %6:_(s32) = G_LOAD %8(p0) :: (load 4 from %fixed-stack.1, align 8)
111     %9:_(p0) = G_FRAME_INDEX %fixed-stack.0
112     %7:_(s32) = G_LOAD %9(p0) :: (load 4 from %fixed-stack.0)
113     %2:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)
114     %14:_(s32) = G_CONSTANT i32 1
115     %15:_(s32) = COPY %3(s32)
116     %13:_(s32) = G_AND %15, %14
117     %10:_(s64) = G_SELECT %13(s32), %1, %2
118     %11:_(s32), %12:_(s32) = G_UNMERGE_VALUES %10(s64)
119     $v0 = COPY %11(s32)
120     $v1 = COPY %12(s32)
121     RetRA implicit $v0, implicit $v1
125 name:            select_ambiguous_i64_in_fpr
126 alignment:       4
127 legalized:       true
128 tracksRegLiveness: true
129 body:             |
130   bb.1.entry:
131     liveins: $a0, $a1, $a2, $a3
133     ; MIPS32-LABEL: name: select_ambiguous_i64_in_fpr
134     ; MIPS32: liveins: $a0, $a1, $a2, $a3
135     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
136     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $a1
137     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(p0) = COPY $a2
138     ; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
139     ; MIPS32: [[LOAD:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY1]](p0) :: (load 8 from %ir.i64_ptr_a)
140     ; MIPS32: [[LOAD1:%[0-9]+]]:fprb(s64) = G_LOAD [[COPY2]](p0) :: (load 8 from %ir.i64_ptr_b)
141     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
142     ; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
143     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C]]
144     ; MIPS32: [[SELECT:%[0-9]+]]:fprb(s64) = G_SELECT [[AND]](s32), [[LOAD]], [[LOAD1]]
145     ; MIPS32: G_STORE [[SELECT]](s64), [[COPY3]](p0) :: (store 8 into %ir.i64_ptr_c)
146     ; MIPS32: RetRA
147     %4:_(s32) = COPY $a0
148     %1:_(p0) = COPY $a1
149     %2:_(p0) = COPY $a2
150     %3:_(p0) = COPY $a3
151     %5:_(s64) = G_LOAD %1(p0) :: (load 8 from %ir.i64_ptr_a)
152     %6:_(s64) = G_LOAD %2(p0) :: (load 8 from %ir.i64_ptr_b)
153     %9:_(s32) = G_CONSTANT i32 1
154     %10:_(s32) = COPY %4(s32)
155     %8:_(s32) = G_AND %10, %9
156     %7:_(s64) = G_SELECT %8(s32), %5, %6
157     G_STORE %7(s64), %3(p0) :: (store 8 into %ir.i64_ptr_c)
158     RetRA
162 name:            select_float
163 alignment:       4
164 legalized:       true
165 tracksRegLiveness: true
166 body:             |
167   bb.1.entry:
168     liveins: $a0, $a1, $a2
170     ; MIPS32-LABEL: name: select_float
171     ; MIPS32: liveins: $a0, $a1, $a2
172     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
173     ; MIPS32: [[MTC1_:%[0-9]+]]:fgr32(s32) = MTC1 $a1
174     ; MIPS32: [[MTC1_1:%[0-9]+]]:fgr32(s32) = MTC1 $a2
175     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
176     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
177     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY1]], [[C]]
178     ; MIPS32: [[SELECT:%[0-9]+]]:fprb(s32) = G_SELECT [[AND]](s32), [[MTC1_]], [[MTC1_1]]
179     ; MIPS32: $f0 = COPY [[SELECT]](s32)
180     ; MIPS32: RetRA implicit $f0
181     %3:_(s32) = COPY $a0
182     %1:fgr32(s32) = MTC1 $a1
183     %2:fgr32(s32) = MTC1 $a2
184     %6:_(s32) = G_CONSTANT i32 1
185     %7:_(s32) = COPY %3(s32)
186     %5:_(s32) = G_AND %7, %6
187     %4:_(s32) = G_SELECT %5(s32), %1, %2
188     $f0 = COPY %4(s32)
189     RetRA implicit $f0
193 name:            select_ambiguous_float_in_gpr
194 alignment:       4
195 legalized:       true
196 tracksRegLiveness: true
197 body:             |
198   bb.1.entry:
199     liveins: $a0, $a1, $a2, $a3
201     ; MIPS32-LABEL: name: select_ambiguous_float_in_gpr
202     ; MIPS32: liveins: $a0, $a1, $a2, $a3
203     ; MIPS32: [[COPY:%[0-9]+]]:gprb(s32) = COPY $a0
204     ; MIPS32: [[COPY1:%[0-9]+]]:gprb(p0) = COPY $a1
205     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(p0) = COPY $a2
206     ; MIPS32: [[COPY3:%[0-9]+]]:gprb(p0) = COPY $a3
207     ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY1]](p0) :: (load 4 from %ir.f32_ptr_a)
208     ; MIPS32: [[LOAD1:%[0-9]+]]:gprb(s32) = G_LOAD [[COPY2]](p0) :: (load 4 from %ir.f32_ptr_b)
209     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
210     ; MIPS32: [[COPY4:%[0-9]+]]:gprb(s32) = COPY [[COPY]](s32)
211     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY4]], [[C]]
212     ; MIPS32: [[SELECT:%[0-9]+]]:gprb(s32) = G_SELECT [[AND]](s32), [[LOAD]], [[LOAD1]]
213     ; MIPS32: G_STORE [[SELECT]](s32), [[COPY3]](p0) :: (store 4 into %ir.f32_ptr_c)
214     ; MIPS32: RetRA
215     %4:_(s32) = COPY $a0
216     %1:_(p0) = COPY $a1
217     %2:_(p0) = COPY $a2
218     %3:_(p0) = COPY $a3
219     %5:_(s32) = G_LOAD %1(p0) :: (load 4 from %ir.f32_ptr_a)
220     %6:_(s32) = G_LOAD %2(p0) :: (load 4 from %ir.f32_ptr_b)
221     %9:_(s32) = G_CONSTANT i32 1
222     %10:_(s32) = COPY %4(s32)
223     %8:_(s32) = G_AND %10, %9
224     %7:_(s32) = G_SELECT %8(s32), %5, %6
225     G_STORE %7(s32), %3(p0) :: (store 4 into %ir.f32_ptr_c)
226     RetRA
230 name:            select_double
231 alignment:       4
232 legalized:       true
233 tracksRegLiveness: true
234 fixedStack:
235   - { id: 0, offset: 16, size: 4, alignment: 8, isImmutable: true }
236 body:             |
237   bb.1.entry:
238     liveins: $d6, $d7
240     ; MIPS32-LABEL: name: select_double
241     ; MIPS32: liveins: $d6, $d7
242     ; MIPS32: [[COPY:%[0-9]+]]:fprb(s64) = COPY $d6
243     ; MIPS32: [[COPY1:%[0-9]+]]:fprb(s64) = COPY $d7
244     ; MIPS32: [[FRAME_INDEX:%[0-9]+]]:gprb(p0) = G_FRAME_INDEX %fixed-stack.0
245     ; MIPS32: [[LOAD:%[0-9]+]]:gprb(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load 4 from %fixed-stack.0, align 8)
246     ; MIPS32: [[C:%[0-9]+]]:gprb(s32) = G_CONSTANT i32 1
247     ; MIPS32: [[COPY2:%[0-9]+]]:gprb(s32) = COPY [[LOAD]](s32)
248     ; MIPS32: [[AND:%[0-9]+]]:gprb(s32) = G_AND [[COPY2]], [[C]]
249     ; MIPS32: [[SELECT:%[0-9]+]]:fprb(s64) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
250     ; MIPS32: $d0 = COPY [[SELECT]](s64)
251     ; MIPS32: RetRA implicit $d0
252     %0:_(s64) = COPY $d6
253     %1:_(s64) = COPY $d7
254     %4:_(p0) = G_FRAME_INDEX %fixed-stack.0
255     %3:_(s32) = G_LOAD %4(p0) :: (load 4 from %fixed-stack.0, align 8)
256     %7:_(s32) = G_CONSTANT i32 1
257     %8:_(s32) = COPY %3(s32)
258     %6:_(s32) = G_AND %8, %7
259     %5:_(s64) = G_SELECT %6(s32), %0, %1
260     $d0 = COPY %5(s64)
261     RetRA implicit $d0