[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Mips / GlobalISel / mips-prelegalizer-combiner / zextLoad_and_sextLoad.mir
blobaddd57c330c78e1268b97a5d346e856a78e0a20a
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=mips-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3 --- |
5   define void @load1_s8_to_zextLoad1_s32(i8* %px) {entry: ret void}
6   define void @load2_s16_to_zextLoad2_s32(i16* %px) {entry: ret void}
7   define void @load1_s8_to_zextLoad1_s16(i8* %px) {entry: ret void}
8   define void @load1_s8_to_zextLoad1_s16_to_zextLoad1_s32(i8* %px) {entry: ret void}
9   define void @load4_s32_to_zextLoad4_s64(i8* %px) {entry: ret void}
10   define void @load1_s8_to_sextLoad1_s32(i8* %px) {entry: ret void}
11   define void @load2_s16_to_sextLoad2_s32(i16* %px) {entry: ret void}
12   define void @load1_s8_to_sextLoad1_s16(i8* %px) {entry: ret void}
13   define void @load1_s8_to_sextLoad1_s16_to_sextLoad1_s32(i8* %px) {entry: ret void}
14   define void @load4_s32_to_sextLoad4_s64(i8* %px) {entry: ret void}
16 ...
17 ---
18 name:            load1_s8_to_zextLoad1_s32
19 alignment:       4
20 tracksRegLiveness: true
21 body:             |
22   bb.1.entry:
23     liveins: $a0
25     ; MIPS32-LABEL: name: load1_s8_to_zextLoad1_s32
26     ; MIPS32: liveins: $a0
27     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
28     ; MIPS32: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
29     ; MIPS32: $v0 = COPY [[ZEXTLOAD]](s32)
30     ; MIPS32: RetRA implicit $v0
31     %0:_(p0) = COPY $a0
32     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
33     %2:_(s32) = G_ZEXT %1(s8)
34     $v0 = COPY %2(s32)
35     RetRA implicit $v0
37 ...
38 ---
39 name:            load2_s16_to_zextLoad2_s32
40 alignment:       4
41 tracksRegLiveness: true
42 body:             |
43   bb.1.entry:
44     liveins: $a0
46     ; MIPS32-LABEL: name: load2_s16_to_zextLoad2_s32
47     ; MIPS32: liveins: $a0
48     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
49     ; MIPS32: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load 2 from %ir.px)
50     ; MIPS32: $v0 = COPY [[ZEXTLOAD]](s32)
51     ; MIPS32: RetRA implicit $v0
52     %0:_(p0) = COPY $a0
53     %1:_(s16) = G_LOAD %0(p0) :: (load 2 from %ir.px)
54     %2:_(s32) = G_ZEXT %1(s16)
55     $v0 = COPY %2(s32)
56     RetRA implicit $v0
58 ...
59 ---
60 name:            load1_s8_to_zextLoad1_s16
61 alignment:       4
62 tracksRegLiveness: true
63 body:             |
64   bb.1.entry:
65     liveins: $a0
67     ; MIPS32-LABEL: name: load1_s8_to_zextLoad1_s16
68     ; MIPS32: liveins: $a0
69     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
70     ; MIPS32: [[ZEXTLOAD:%[0-9]+]]:_(s16) = G_ZEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
71     ; MIPS32: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ZEXTLOAD]](s16)
72     ; MIPS32: $v0 = COPY [[ANYEXT]](s32)
73     ; MIPS32: RetRA implicit $v0
74     %0:_(p0) = COPY $a0
75     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
76     %2:_(s16) = G_ZEXT %1(s8)
77     %3:_(s32) = G_ANYEXT %2(s16)
78     $v0 = COPY %3(s32)
79     RetRA implicit $v0
81 ...
82 ---
83 name:            load1_s8_to_zextLoad1_s16_to_zextLoad1_s32
84 alignment:       4
85 tracksRegLiveness: true
86 body:             |
87   bb.1.entry:
88     liveins: $a0
90     ; MIPS32-LABEL: name: load1_s8_to_zextLoad1_s16_to_zextLoad1_s32
91     ; MIPS32: liveins: $a0
92     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
93     ; MIPS32: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
94     ; MIPS32: $v0 = COPY [[ZEXTLOAD]](s32)
95     ; MIPS32: RetRA implicit $v0
96     %0:_(p0) = COPY $a0
97     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
98     %2:_(s16) = G_ZEXT %1(s8)
99     %3:_(s32) = G_ZEXT %2(s16)
100     $v0 = COPY %3(s32)
101     RetRA implicit $v0
105 name:            load4_s32_to_zextLoad4_s64
106 alignment:       4
107 tracksRegLiveness: true
108 body:             |
109   bb.1.entry:
110     liveins: $a0
112     ; MIPS32-LABEL: name: load4_s32_to_zextLoad4_s64
113     ; MIPS32: liveins: $a0
114     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
115     ; MIPS32: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load 4 from %ir.px)
116     ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ZEXTLOAD]](s64)
117     ; MIPS32: $v0 = COPY [[UV]](s32)
118     ; MIPS32: $v1 = COPY [[UV1]](s32)
119     ; MIPS32: RetRA implicit $v0, implicit $v1
120     %0:_(p0) = COPY $a0
121     %1:_(s32) = G_LOAD %0(p0) :: (load 4 from %ir.px)
122     %2:_(s64) = G_ZEXT %1(s32)
123     %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
124     $v0 = COPY %3(s32)
125     $v1 = COPY %4(s32)
126     RetRA implicit $v0, implicit $v1
130 name:            load1_s8_to_sextLoad1_s32
131 alignment:       4
132 tracksRegLiveness: true
133 body:             |
134   bb.1.entry:
135     liveins: $a0
137     ; MIPS32-LABEL: name: load1_s8_to_sextLoad1_s32
138     ; MIPS32: liveins: $a0
139     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
140     ; MIPS32: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
141     ; MIPS32: $v0 = COPY [[SEXTLOAD]](s32)
142     ; MIPS32: RetRA implicit $v0
143     %0:_(p0) = COPY $a0
144     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
145     %2:_(s32) = G_SEXT %1(s8)
146     $v0 = COPY %2(s32)
147     RetRA implicit $v0
151 name:            load2_s16_to_sextLoad2_s32
152 alignment:       4
153 tracksRegLiveness: true
154 body:             |
155   bb.1.entry:
156     liveins: $a0
158     ; MIPS32-LABEL: name: load2_s16_to_sextLoad2_s32
159     ; MIPS32: liveins: $a0
160     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
161     ; MIPS32: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load 2 from %ir.px)
162     ; MIPS32: $v0 = COPY [[SEXTLOAD]](s32)
163     ; MIPS32: RetRA implicit $v0
164     %0:_(p0) = COPY $a0
165     %1:_(s16) = G_LOAD %0(p0) :: (load 2 from %ir.px)
166     %2:_(s32) = G_SEXT %1(s16)
167     $v0 = COPY %2(s32)
168     RetRA implicit $v0
172 name:            load1_s8_to_sextLoad1_s16
173 alignment:       4
174 tracksRegLiveness: true
175 body:             |
176   bb.1.entry:
177     liveins: $a0
179     ; MIPS32-LABEL: name: load1_s8_to_sextLoad1_s16
180     ; MIPS32: liveins: $a0
181     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
182     ; MIPS32: [[SEXTLOAD:%[0-9]+]]:_(s16) = G_SEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
183     ; MIPS32: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[SEXTLOAD]](s16)
184     ; MIPS32: $v0 = COPY [[ANYEXT]](s32)
185     ; MIPS32: RetRA implicit $v0
186     %0:_(p0) = COPY $a0
187     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
188     %2:_(s16) = G_SEXT %1(s8)
189     %3:_(s32) = G_ANYEXT %2(s16)
190     $v0 = COPY %3(s32)
191     RetRA implicit $v0
195 name:            load1_s8_to_sextLoad1_s16_to_sextLoad1_s32
196 alignment:       4
197 tracksRegLiveness: true
198 body:             |
199   bb.1.entry:
200     liveins: $a0
202     ; MIPS32-LABEL: name: load1_s8_to_sextLoad1_s16_to_sextLoad1_s32
203     ; MIPS32: liveins: $a0
204     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
205     ; MIPS32: [[SEXTLOAD:%[0-9]+]]:_(s32) = G_SEXTLOAD [[COPY]](p0) :: (load 1 from %ir.px)
206     ; MIPS32: $v0 = COPY [[SEXTLOAD]](s32)
207     ; MIPS32: RetRA implicit $v0
208     %0:_(p0) = COPY $a0
209     %1:_(s8) = G_LOAD %0(p0) :: (load 1 from %ir.px)
210     %2:_(s16) = G_SEXT %1(s8)
211     %3:_(s32) = G_SEXT %2(s16)
212     $v0 = COPY %3(s32)
213     RetRA implicit $v0
217 name:            load4_s32_to_sextLoad4_s64
218 alignment:       4
219 tracksRegLiveness: true
220 body:             |
221   bb.1.entry:
222     liveins: $a0
224     ; MIPS32-LABEL: name: load4_s32_to_sextLoad4_s64
225     ; MIPS32: liveins: $a0
226     ; MIPS32: [[COPY:%[0-9]+]]:_(p0) = COPY $a0
227     ; MIPS32: [[SEXTLOAD:%[0-9]+]]:_(s64) = G_SEXTLOAD [[COPY]](p0) :: (load 4 from %ir.px)
228     ; MIPS32: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXTLOAD]](s64)
229     ; MIPS32: $v0 = COPY [[UV]](s32)
230     ; MIPS32: $v1 = COPY [[UV1]](s32)
231     ; MIPS32: RetRA implicit $v0, implicit $v1
232     %0:_(p0) = COPY $a0
233     %1:_(s32) = G_LOAD %0(p0) :: (load 4 from %ir.px)
234     %2:_(s64) = G_SEXT %1(s32)
235     %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %2(s64)
236     $v0 = COPY %3(s32)
237     $v1 = COPY %4(s32)
238     RetRA implicit $v0, implicit $v1