[MIPS GlobalISel] Select phi instruction for integers
[llvm-complete.git] / test / CodeGen / Mips / GlobalISel / legalizer / phi.mir
bloba3e5bd9fa5a3406a7ac896542f76ff79abc47060
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define i1 @test_i1(i1 %cnd, i1 %a, i1 %b) {
6   entry:
7     br i1 %cnd, label %cond.true, label %cond.false
9   cond.true:                                        ; preds = %entry
10     br label %cond.end
12   cond.false:                                       ; preds = %entry
13     br label %cond.end
15   cond.end:                                         ; preds = %cond.false, %cond.true
16     %cond = phi i1 [ %a, %cond.true ], [ %b, %cond.false ]
17     ret i1 %cond
18   }
20   define i8 @test_i8(i1 %cnd, i8 %a, i8 %b) {
21   entry:
22     br i1 %cnd, label %cond.true, label %cond.false
24   cond.true:                                        ; preds = %entry
25     br label %cond.end
27   cond.false:                                       ; preds = %entry
28     br label %cond.end
30   cond.end:                                         ; preds = %cond.false, %cond.true
31     %cond = phi i8 [ %a, %cond.true ], [ %b, %cond.false ]
32     ret i8 %cond
33   }
35   define i16 @test_i16(i1 %cnd, i16 %a, i16 %b) {
36   entry:
37     br i1 %cnd, label %cond.true, label %cond.false
39   cond.true:                                        ; preds = %entry
40     br label %cond.end
42   cond.false:                                       ; preds = %entry
43     br label %cond.end
45   cond.end:                                         ; preds = %cond.false, %cond.true
46     %cond = phi i16 [ %a, %cond.true ], [ %b, %cond.false ]
47     ret i16 %cond
48   }
50   define i32 @test_i32(i1 %cnd, i32 %a, i32 %b) {
51   entry:
52     br i1 %cnd, label %cond.true, label %cond.false
54   cond.true:                                        ; preds = %entry
55     br label %cond.end
57   cond.false:                                       ; preds = %entry
58     br label %cond.end
60   cond.end:                                         ; preds = %cond.false, %cond.true
61     %cond = phi i32 [ %a, %cond.true ], [ %b, %cond.false ]
62     ret i32 %cond
63   }
65 ...
66 ---
67 name:            test_i1
68 alignment:       2
69 tracksRegLiveness: true
70 body:             |
71   ; MIPS32-LABEL: name: test_i1
72   ; MIPS32: bb.0.entry:
73   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
74   ; MIPS32:   liveins: $a0, $a1, $a2
75   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
76   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
77   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
78   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
79   ; MIPS32:   [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
80   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
81   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
82   ; MIPS32:   G_BR %bb.2
83   ; MIPS32: bb.1.cond.true:
84   ; MIPS32:   successors: %bb.3(0x80000000)
85   ; MIPS32:   [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
86   ; MIPS32:   G_BR %bb.3
87   ; MIPS32: bb.2.cond.false:
88   ; MIPS32:   successors: %bb.3(0x80000000)
89   ; MIPS32:   [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
90   ; MIPS32: bb.3.cond.end:
91   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY5]](s32), %bb.2
92   ; MIPS32:   [[COPY6:%[0-9]+]]:_(s32) = COPY [[PHI]](s32)
93   ; MIPS32:   $v0 = COPY [[COPY6]](s32)
94   ; MIPS32:   RetRA implicit $v0
95   bb.1.entry:
96     liveins: $a0, $a1, $a2
98     %3:_(s32) = COPY $a0
99     %0:_(s1) = G_TRUNC %3(s32)
100     %4:_(s32) = COPY $a1
101     %1:_(s1) = G_TRUNC %4(s32)
102     %5:_(s32) = COPY $a2
103     %2:_(s1) = G_TRUNC %5(s32)
104     G_BRCOND %0(s1), %bb.2
105     G_BR %bb.3
107   bb.2.cond.true:
108     G_BR %bb.4
110   bb.3.cond.false:
112   bb.4.cond.end:
113     %6:_(s1) = G_PHI %1(s1), %bb.2, %2(s1), %bb.3
114     %7:_(s32) = G_ANYEXT %6(s1)
115     $v0 = COPY %7(s32)
116     RetRA implicit $v0
120 name:            test_i8
121 alignment:       2
122 tracksRegLiveness: true
123 body:             |
124   ; MIPS32-LABEL: name: test_i8
125   ; MIPS32: bb.0.entry:
126   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
127   ; MIPS32:   liveins: $a0, $a1, $a2
128   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
129   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
130   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
131   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
132   ; MIPS32:   [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
133   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
134   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
135   ; MIPS32:   G_BR %bb.2
136   ; MIPS32: bb.1.cond.true:
137   ; MIPS32:   successors: %bb.3(0x80000000)
138   ; MIPS32:   [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
139   ; MIPS32:   G_BR %bb.3
140   ; MIPS32: bb.2.cond.false:
141   ; MIPS32:   successors: %bb.3(0x80000000)
142   ; MIPS32:   [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
143   ; MIPS32: bb.3.cond.end:
144   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY5]](s32), %bb.2
145   ; MIPS32:   [[COPY6:%[0-9]+]]:_(s32) = COPY [[PHI]](s32)
146   ; MIPS32:   $v0 = COPY [[COPY6]](s32)
147   ; MIPS32:   RetRA implicit $v0
148   bb.1.entry:
149     liveins: $a0, $a1, $a2
151     %3:_(s32) = COPY $a0
152     %0:_(s1) = G_TRUNC %3(s32)
153     %4:_(s32) = COPY $a1
154     %1:_(s8) = G_TRUNC %4(s32)
155     %5:_(s32) = COPY $a2
156     %2:_(s8) = G_TRUNC %5(s32)
157     G_BRCOND %0(s1), %bb.2
158     G_BR %bb.3
160   bb.2.cond.true:
161     G_BR %bb.4
163   bb.3.cond.false:
165   bb.4.cond.end:
166     %6:_(s8) = G_PHI %1(s8), %bb.2, %2(s8), %bb.3
167     %7:_(s32) = G_ANYEXT %6(s8)
168     $v0 = COPY %7(s32)
169     RetRA implicit $v0
173 name:            test_i16
174 alignment:       2
175 tracksRegLiveness: true
176 body:             |
177   ; MIPS32-LABEL: name: test_i16
178   ; MIPS32: bb.0.entry:
179   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
180   ; MIPS32:   liveins: $a0, $a1, $a2
181   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
182   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
183   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
184   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
185   ; MIPS32:   [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
186   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
187   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
188   ; MIPS32:   G_BR %bb.2
189   ; MIPS32: bb.1.cond.true:
190   ; MIPS32:   successors: %bb.3(0x80000000)
191   ; MIPS32:   [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
192   ; MIPS32:   G_BR %bb.3
193   ; MIPS32: bb.2.cond.false:
194   ; MIPS32:   successors: %bb.3(0x80000000)
195   ; MIPS32:   [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
196   ; MIPS32: bb.3.cond.end:
197   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY4]](s32), %bb.1, [[COPY5]](s32), %bb.2
198   ; MIPS32:   [[COPY6:%[0-9]+]]:_(s32) = COPY [[PHI]](s32)
199   ; MIPS32:   $v0 = COPY [[COPY6]](s32)
200   ; MIPS32:   RetRA implicit $v0
201   bb.1.entry:
202     liveins: $a0, $a1, $a2
204     %3:_(s32) = COPY $a0
205     %0:_(s1) = G_TRUNC %3(s32)
206     %4:_(s32) = COPY $a1
207     %1:_(s16) = G_TRUNC %4(s32)
208     %5:_(s32) = COPY $a2
209     %2:_(s16) = G_TRUNC %5(s32)
210     G_BRCOND %0(s1), %bb.2
211     G_BR %bb.3
213   bb.2.cond.true:
214     G_BR %bb.4
216   bb.3.cond.false:
218   bb.4.cond.end:
219     %6:_(s16) = G_PHI %1(s16), %bb.2, %2(s16), %bb.3
220     %7:_(s32) = G_ANYEXT %6(s16)
221     $v0 = COPY %7(s32)
222     RetRA implicit $v0
226 name:            test_i32
227 alignment:       2
228 tracksRegLiveness: true
229 body:             |
230   ; MIPS32-LABEL: name: test_i32
231   ; MIPS32: bb.0.entry:
232   ; MIPS32:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
233   ; MIPS32:   liveins: $a0, $a1, $a2
234   ; MIPS32:   [[COPY:%[0-9]+]]:_(s32) = COPY $a0
235   ; MIPS32:   [[COPY1:%[0-9]+]]:_(s32) = COPY $a1
236   ; MIPS32:   [[COPY2:%[0-9]+]]:_(s32) = COPY $a2
237   ; MIPS32:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
238   ; MIPS32:   [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
239   ; MIPS32:   [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
240   ; MIPS32:   G_BRCOND [[AND]](s32), %bb.1
241   ; MIPS32:   G_BR %bb.2
242   ; MIPS32: bb.1.cond.true:
243   ; MIPS32:   successors: %bb.3(0x80000000)
244   ; MIPS32:   G_BR %bb.3
245   ; MIPS32: bb.2.cond.false:
246   ; MIPS32:   successors: %bb.3(0x80000000)
247   ; MIPS32: bb.3.cond.end:
248   ; MIPS32:   [[PHI:%[0-9]+]]:_(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
249   ; MIPS32:   $v0 = COPY [[PHI]](s32)
250   ; MIPS32:   RetRA implicit $v0
251   bb.1.entry:
252     liveins: $a0, $a1, $a2
254     %3:_(s32) = COPY $a0
255     %0:_(s1) = G_TRUNC %3(s32)
256     %1:_(s32) = COPY $a1
257     %2:_(s32) = COPY $a2
258     G_BRCOND %0(s1), %bb.2
259     G_BR %bb.3
261   bb.2.cond.true:
262     G_BR %bb.4
264   bb.3.cond.false:
266   bb.4.cond.end:
267     %4:_(s32) = G_PHI %1(s32), %bb.2, %2(s32), %bb.3
268     $v0 = COPY %4(s32)
269     RetRA implicit $v0