[ORC] Fix bug in source file name finding in DebuggerSupportPlugin.
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / legalize-mulo-rv32.mir
blob42de607ca31135c98570ce0fa4c71aec7b324cba
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mattr=+m -mtriple=riscv32 -run-pass=legalizer %s -o - \
3 # RUN: | FileCheck %s
4 # RUN: llc -mattr=+zmmul -mtriple=riscv32 -run-pass=legalizer %s -o - \
5 # RUN: | FileCheck %s
6 # RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - \
7 # RUN: | FileCheck %s --check-prefix=LIBCALL
9 ---
10 name:            smulo_i8
11 body:             |
12   bb.1:
13     liveins: $x10, $x11
15     ; CHECK-LABEL: name: smulo_i8
16     ; CHECK: liveins: $x10, $x11
17     ; CHECK-NEXT: {{  $}}
18     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
19     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
20     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
21     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
22     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
23     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
24     ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
25     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[ASHR]], [[ASHR1]]
26     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[MUL]], [[C]](s32)
27     ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
28     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[MUL]](s32), [[ASHR2]]
29     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
30     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
31     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
32     ;
33     ; LIBCALL-LABEL: name: smulo_i8
34     ; LIBCALL: liveins: $x10, $x11
35     ; LIBCALL-NEXT: {{  $}}
36     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
37     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
38     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
39     ; LIBCALL-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
40     ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
41     ; LIBCALL-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
42     ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
43     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
44     ; LIBCALL-NEXT: $x10 = COPY [[ASHR]](s32)
45     ; LIBCALL-NEXT: $x11 = COPY [[ASHR1]](s32)
46     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10
47     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
48     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
49     ; LIBCALL-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[C]](s32)
50     ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
51     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[COPY2]](s32), [[ASHR2]]
52     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
53     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
54     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
55     %2:_(s32) = COPY $x10
56     %0:_(s8) = G_TRUNC %2(s32)
57     %3:_(s32) = COPY $x11
58     %1:_(s8) = G_TRUNC %3(s32)
59     %4:_(s8), %5:_(s1) = G_SMULO %0, %1
60     %6:_(s32) = G_ANYEXT %4(s8)
61     %7:_(s32) = G_ANYEXT %5(s1)
62     $x10 = COPY %6(s32)
63     $x11 = COPY %7(s32)
64     PseudoRET implicit $x10, implicit $x11
66 ...
67 ---
68 name:            smulo_i16
69 body:             |
70   bb.1:
71     liveins: $x10, $x11
73     ; CHECK-LABEL: name: smulo_i16
74     ; CHECK: liveins: $x10, $x11
75     ; CHECK-NEXT: {{  $}}
76     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
77     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
78     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
79     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
80     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
81     ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
82     ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
83     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[ASHR]], [[ASHR1]]
84     ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[MUL]], [[C]](s32)
85     ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
86     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[MUL]](s32), [[ASHR2]]
87     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
88     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
89     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
90     ;
91     ; LIBCALL-LABEL: name: smulo_i16
92     ; LIBCALL: liveins: $x10, $x11
93     ; LIBCALL-NEXT: {{  $}}
94     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
95     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
96     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
97     ; LIBCALL-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s32)
98     ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32)
99     ; LIBCALL-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32)
100     ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[SHL1]], [[C]](s32)
101     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
102     ; LIBCALL-NEXT: $x10 = COPY [[ASHR]](s32)
103     ; LIBCALL-NEXT: $x11 = COPY [[ASHR1]](s32)
104     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10
105     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
106     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
107     ; LIBCALL-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[C]](s32)
108     ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[SHL2]], [[C]](s32)
109     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[COPY2]](s32), [[ASHR2]]
110     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
111     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
112     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
113     %2:_(s32) = COPY $x10
114     %0:_(s16) = G_TRUNC %2(s32)
115     %3:_(s32) = COPY $x11
116     %1:_(s16) = G_TRUNC %3(s32)
117     %4:_(s16), %5:_(s1) = G_SMULO %0, %1
118     %6:_(s32) = G_ANYEXT %4(s16)
119     %7:_(s32) = G_ANYEXT %5(s1)
120     $x10 = COPY %6(s32)
121     $x11 = COPY %7(s32)
122     PseudoRET implicit $x10, implicit $x11
126 name:            smulo_i32
127 body:             |
128   bb.1:
129     liveins: $x10, $x11
131     ; CHECK-LABEL: name: smulo_i32
132     ; CHECK: liveins: $x10, $x11
133     ; CHECK-NEXT: {{  $}}
134     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
135     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
136     ; CHECK-NEXT: [[SMULH:%[0-9]+]]:_(s32) = G_SMULH [[COPY]], [[COPY1]]
137     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[COPY]], [[COPY1]]
138     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
139     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[MUL]], [[C]](s32)
140     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[SMULH]](s32), [[ASHR]]
141     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
142     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
143     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
144     ;
145     ; LIBCALL-LABEL: name: smulo_i32
146     ; LIBCALL: liveins: $x10, $x11
147     ; LIBCALL-NEXT: {{  $}}
148     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
149     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
150     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 31
151     ; LIBCALL-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
152     ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s32)
153     ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s32) = G_ASHR [[COPY1]], [[C]](s32)
154     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
155     ; LIBCALL-NEXT: $x10 = COPY [[COPY]](s32)
156     ; LIBCALL-NEXT: $x11 = COPY [[ASHR]](s32)
157     ; LIBCALL-NEXT: $x12 = COPY [[COPY1]](s32)
158     ; LIBCALL-NEXT: $x13 = COPY [[ASHR1]](s32)
159     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10, implicit-def $x11
160     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
161     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
162     ; LIBCALL-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x11
163     ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s32) = G_ASHR [[COPY2]], [[C]](s32)
164     ; LIBCALL-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[COPY2]]
165     ; LIBCALL-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[COPY3]], [[ASHR2]]
166     ; LIBCALL-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[XOR]], [[XOR1]]
167     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[OR]](s32), [[C1]]
168     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
169     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
170     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
171     %0:_(s32) = COPY $x10
172     %1:_(s32) = COPY $x11
173     %2:_(s32), %3:_(s1) = G_SMULO %0, %1
174     %4:_(s32) = G_ANYEXT %3(s1)
175     $x10 = COPY %2(s32)
176     $x11 = COPY %4(s32)
177     PseudoRET implicit $x10, implicit $x11
181 name:            umulo_i8
182 body:             |
183   bb.1:
184     liveins: $x10, $x11
186     ; CHECK-LABEL: name: umulo_i8
187     ; CHECK: liveins: $x10, $x11
188     ; CHECK-NEXT: {{  $}}
189     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
190     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
191     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
192     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
193     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
194     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[AND]], [[AND1]]
195     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[MUL]], [[C]]
196     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[MUL]](s32), [[AND2]]
197     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
198     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
199     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
200     ;
201     ; LIBCALL-LABEL: name: umulo_i8
202     ; LIBCALL: liveins: $x10, $x11
203     ; LIBCALL-NEXT: {{  $}}
204     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
205     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
206     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
207     ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
208     ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
209     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
210     ; LIBCALL-NEXT: $x10 = COPY [[AND]](s32)
211     ; LIBCALL-NEXT: $x11 = COPY [[AND1]](s32)
212     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10
213     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
214     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
215     ; LIBCALL-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
216     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[COPY2]](s32), [[AND2]]
217     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
218     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
219     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
220     %2:_(s32) = COPY $x10
221     %0:_(s8) = G_TRUNC %2(s32)
222     %3:_(s32) = COPY $x11
223     %1:_(s8) = G_TRUNC %3(s32)
224     %4:_(s8), %5:_(s1) = G_UMULO %0, %1
225     %6:_(s32) = G_ANYEXT %4(s8)
226     %7:_(s32) = G_ANYEXT %5(s1)
227     $x10 = COPY %6(s32)
228     $x11 = COPY %7(s32)
229     PseudoRET implicit $x10, implicit $x11
233 name:            umulo_i16
234 body:             |
235   bb.1:
236     liveins: $x10, $x11
238     ; CHECK-LABEL: name: umulo_i16
239     ; CHECK: liveins: $x10, $x11
240     ; CHECK-NEXT: {{  $}}
241     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
242     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
243     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
244     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
245     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
246     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[AND]], [[AND1]]
247     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[MUL]], [[C]]
248     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[MUL]](s32), [[AND2]]
249     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
250     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
251     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
252     ;
253     ; LIBCALL-LABEL: name: umulo_i16
254     ; LIBCALL: liveins: $x10, $x11
255     ; LIBCALL-NEXT: {{  $}}
256     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
257     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
258     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
259     ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
260     ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
261     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
262     ; LIBCALL-NEXT: $x10 = COPY [[AND]](s32)
263     ; LIBCALL-NEXT: $x11 = COPY [[AND1]](s32)
264     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__mulsi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10
265     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
266     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
267     ; LIBCALL-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C]]
268     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[COPY2]](s32), [[AND2]]
269     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
270     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
271     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
272     %2:_(s32) = COPY $x10
273     %0:_(s16) = G_TRUNC %2(s32)
274     %3:_(s32) = COPY $x11
275     %1:_(s16) = G_TRUNC %3(s32)
276     %4:_(s16), %5:_(s1) = G_UMULO %0, %1
277     %6:_(s32) = G_ANYEXT %4(s16)
278     %7:_(s32) = G_ANYEXT %5(s1)
279     $x10 = COPY %6(s32)
280     $x11 = COPY %7(s32)
281     PseudoRET implicit $x10, implicit $x11
285 name:            umulo_i32
286 body:             |
287   bb.1:
288     liveins: $x10, $x11
290     ; CHECK-LABEL: name: umulo_i32
291     ; CHECK: liveins: $x10, $x11
292     ; CHECK-NEXT: {{  $}}
293     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
294     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
295     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(s32) = G_UMULH [[COPY]], [[COPY1]]
296     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
297     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[COPY]], [[COPY1]]
298     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[UMULH]](s32), [[C]]
299     ; CHECK-NEXT: $x10 = COPY [[MUL]](s32)
300     ; CHECK-NEXT: $x11 = COPY [[ICMP]](s32)
301     ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11
302     ;
303     ; LIBCALL-LABEL: name: umulo_i32
304     ; LIBCALL: liveins: $x10, $x11
305     ; LIBCALL-NEXT: {{  $}}
306     ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
307     ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
308     ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
309     ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2
310     ; LIBCALL-NEXT: $x10 = COPY [[COPY]](s32)
311     ; LIBCALL-NEXT: $x11 = COPY [[C]](s32)
312     ; LIBCALL-NEXT: $x12 = COPY [[COPY1]](s32)
313     ; LIBCALL-NEXT: $x13 = COPY [[C]](s32)
314     ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10, implicit-def $x11
315     ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2
316     ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x10
317     ; LIBCALL-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x11
318     ; LIBCALL-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
319     ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
320     ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
321     ; LIBCALL-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY2]], [[AND]]
322     ; LIBCALL-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[COPY3]], [[AND1]]
323     ; LIBCALL-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[XOR]], [[XOR1]]
324     ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[OR]](s32), [[C]]
325     ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s32)
326     ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s32)
327     ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11
328     %0:_(s32) = COPY $x10
329     %1:_(s32) = COPY $x11
330     %2:_(s32), %3:_(s1) = G_UMULO %0, %1
331     %4:_(s32) = G_ANYEXT %3(s1)
332     $x10 = COPY %2(s32)
333     $x11 = COPY %4(s32)
334     PseudoRET implicit $x10, implicit $x11