439 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mattr=+m -mtriple=riscv64 -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s4# RUN: llc -mattr=+zmmul -mtriple=riscv64 -run-pass=legalizer %s -o - \5# RUN: | FileCheck %s6# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - \7# RUN: | FileCheck %s --check-prefix=LIBCALL8 9---10name: smulo_i811body: |12 bb.1:13 liveins: $x10, $x1114 15 ; CHECK-LABEL: name: smulo_i816 ; CHECK: liveins: $x10, $x1117 ; CHECK-NEXT: {{ $}}18 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1019 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1120 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5621 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)22 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[C]](s64)23 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C]](s64)24 ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[SHL1]], [[C]](s64)25 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[ASHR]], [[ASHR1]]26 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[MUL]], [[C]](s64)27 ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[SHL2]], [[C]](s64)28 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[ASHR2]]29 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)30 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)31 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x1132 ;33 ; LIBCALL-LABEL: name: smulo_i834 ; LIBCALL: liveins: $x10, $x1135 ; LIBCALL-NEXT: {{ $}}36 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1037 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1138 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 5639 ; LIBCALL-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)40 ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[C]](s64)41 ; LIBCALL-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C]](s64)42 ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[SHL1]], [[C]](s64)43 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x244 ; LIBCALL-NEXT: $x10 = COPY [[ASHR]](s64)45 ; LIBCALL-NEXT: $x11 = COPY [[ASHR1]](s64)46 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x1047 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x248 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x1049 ; LIBCALL-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[COPY2]], [[C]](s64)50 ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[SHL2]], [[C]](s64)51 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[ASHR2]]52 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)53 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)54 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x1155 %2:_(s64) = COPY $x1056 %0:_(s8) = G_TRUNC %2(s64)57 %3:_(s64) = COPY $x1158 %1:_(s8) = G_TRUNC %3(s64)59 %4:_(s8), %5:_(s1) = G_SMULO %0, %160 %6:_(s64) = G_ANYEXT %4(s8)61 %7:_(s64) = G_ANYEXT %5(s1)62 $x10 = COPY %6(s64)63 $x11 = COPY %7(s64)64 PseudoRET implicit $x10, implicit $x1165 66...67---68name: smulo_i1669body: |70 bb.1:71 liveins: $x10, $x1172 73 ; CHECK-LABEL: name: smulo_i1674 ; CHECK: liveins: $x10, $x1175 ; CHECK-NEXT: {{ $}}76 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1077 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1178 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4879 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)80 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[C]](s64)81 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C]](s64)82 ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[SHL1]], [[C]](s64)83 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[ASHR]], [[ASHR1]]84 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[MUL]], [[C]](s64)85 ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[SHL2]], [[C]](s64)86 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[ASHR2]]87 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)88 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)89 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x1190 ;91 ; LIBCALL-LABEL: name: smulo_i1692 ; LIBCALL: liveins: $x10, $x1193 ; LIBCALL-NEXT: {{ $}}94 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1095 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1196 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4897 ; LIBCALL-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)98 ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[C]](s64)99 ; LIBCALL-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[COPY1]], [[C]](s64)100 ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[SHL1]], [[C]](s64)101 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2102 ; LIBCALL-NEXT: $x10 = COPY [[ASHR]](s64)103 ; LIBCALL-NEXT: $x11 = COPY [[ASHR1]](s64)104 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10105 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2106 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10107 ; LIBCALL-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[COPY2]], [[C]](s64)108 ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[SHL2]], [[C]](s64)109 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[ASHR2]]110 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)111 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)112 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11113 %2:_(s64) = COPY $x10114 %0:_(s16) = G_TRUNC %2(s64)115 %3:_(s64) = COPY $x11116 %1:_(s16) = G_TRUNC %3(s64)117 %4:_(s16), %5:_(s1) = G_SMULO %0, %1118 %6:_(s64) = G_ANYEXT %4(s16)119 %7:_(s64) = G_ANYEXT %5(s1)120 $x10 = COPY %6(s64)121 $x11 = COPY %7(s64)122 PseudoRET implicit $x10, implicit $x11123 124...125---126name: smulo_i32127body: |128 bb.1:129 liveins: $x10, $x11130 131 ; CHECK-LABEL: name: smulo_i32132 ; CHECK: liveins: $x10, $x11133 ; CHECK-NEXT: {{ $}}134 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10135 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11136 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32137 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 32138 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[SEXT_INREG]], [[SEXT_INREG1]]139 ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MUL]], 32140 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[SEXT_INREG2]]141 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)142 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)143 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11144 ;145 ; LIBCALL-LABEL: name: smulo_i32146 ; LIBCALL: liveins: $x10, $x11147 ; LIBCALL-NEXT: {{ $}}148 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10149 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11150 ; LIBCALL-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32151 ; LIBCALL-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 32152 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2153 ; LIBCALL-NEXT: $x10 = COPY [[SEXT_INREG]](s64)154 ; LIBCALL-NEXT: $x11 = COPY [[SEXT_INREG1]](s64)155 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10156 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2157 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10158 ; LIBCALL-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY2]], 32159 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[SEXT_INREG2]]160 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)161 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)162 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11163 %2:_(s64) = COPY $x10164 %0:_(s32) = G_TRUNC %2(s64)165 %3:_(s64) = COPY $x11166 %1:_(s32) = G_TRUNC %3(s64)167 %4:_(s32), %5:_(s1) = G_SMULO %0, %1168 %6:_(s64) = G_ANYEXT %4(s32)169 %7:_(s64) = G_ANYEXT %5(s1)170 $x10 = COPY %6(s64)171 $x11 = COPY %7(s64)172 PseudoRET implicit $x10, implicit $x11173 174...175---176name: smulo_i64177body: |178 bb.1:179 liveins: $x10, $x11180 181 ; CHECK-LABEL: name: smulo_i64182 ; CHECK: liveins: $x10, $x11183 ; CHECK-NEXT: {{ $}}184 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10185 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11186 ; CHECK-NEXT: [[SMULH:%[0-9]+]]:_(s64) = G_SMULH [[COPY]], [[COPY1]]187 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY]], [[COPY1]]188 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63189 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[MUL]], [[C]](s64)190 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[SMULH]](s64), [[ASHR]]191 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)192 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)193 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11194 ;195 ; LIBCALL-LABEL: name: smulo_i64196 ; LIBCALL: liveins: $x10, $x11197 ; LIBCALL-NEXT: {{ $}}198 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10199 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11200 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63201 ; LIBCALL-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s64)202 ; LIBCALL-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[COPY1]], [[C]](s64)203 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2204 ; LIBCALL-NEXT: $x10 = COPY [[COPY]](s64)205 ; LIBCALL-NEXT: $x11 = COPY [[ASHR]](s64)206 ; LIBCALL-NEXT: $x12 = COPY [[COPY1]](s64)207 ; LIBCALL-NEXT: $x13 = COPY [[ASHR1]](s64)208 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__multi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10, implicit-def $x11209 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2210 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10211 ; LIBCALL-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x11212 ; LIBCALL-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[COPY2]], [[C]](s64)213 ; LIBCALL-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0214 ; LIBCALL-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[COPY2]], [[COPY2]]215 ; LIBCALL-NEXT: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[COPY3]], [[ASHR2]]216 ; LIBCALL-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[XOR]], [[XOR1]]217 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[OR]](s64), [[C1]]218 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)219 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)220 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11221 %0:_(s64) = COPY $x10222 %1:_(s64) = COPY $x11223 %2:_(s64), %3:_(s1) = G_SMULO %0, %1224 %4:_(s64) = G_ANYEXT %3(s1)225 $x10 = COPY %2(s64)226 $x11 = COPY %4(s64)227 PseudoRET implicit $x10, implicit $x11228 229...230---231name: umulo_i8232body: |233 bb.1:234 liveins: $x10, $x11235 236 ; CHECK-LABEL: name: umulo_i8237 ; CHECK: liveins: $x10, $x11238 ; CHECK-NEXT: {{ $}}239 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10240 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11241 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255242 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]243 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]244 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[AND1]]245 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[MUL]], [[C]]246 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[AND2]]247 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)248 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)249 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11250 ;251 ; LIBCALL-LABEL: name: umulo_i8252 ; LIBCALL: liveins: $x10, $x11253 ; LIBCALL-NEXT: {{ $}}254 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10255 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11256 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255257 ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]258 ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]259 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2260 ; LIBCALL-NEXT: $x10 = COPY [[AND]](s64)261 ; LIBCALL-NEXT: $x11 = COPY [[AND1]](s64)262 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10263 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2264 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10265 ; LIBCALL-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]266 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[AND2]]267 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)268 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)269 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11270 %2:_(s64) = COPY $x10271 %0:_(s8) = G_TRUNC %2(s64)272 %3:_(s64) = COPY $x11273 %1:_(s8) = G_TRUNC %3(s64)274 %4:_(s8), %5:_(s1) = G_UMULO %0, %1275 %6:_(s64) = G_ANYEXT %4(s8)276 %7:_(s64) = G_ANYEXT %5(s1)277 $x10 = COPY %6(s64)278 $x11 = COPY %7(s64)279 PseudoRET implicit $x10, implicit $x11280 281...282---283name: umulo_i16284body: |285 bb.1:286 liveins: $x10, $x11287 288 ; CHECK-LABEL: name: umulo_i16289 ; CHECK: liveins: $x10, $x11290 ; CHECK-NEXT: {{ $}}291 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10292 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11293 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535294 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]295 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]296 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[AND1]]297 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[MUL]], [[C]]298 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[AND2]]299 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)300 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)301 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11302 ;303 ; LIBCALL-LABEL: name: umulo_i16304 ; LIBCALL: liveins: $x10, $x11305 ; LIBCALL-NEXT: {{ $}}306 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10307 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11308 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 65535309 ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]310 ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]311 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2312 ; LIBCALL-NEXT: $x10 = COPY [[AND]](s64)313 ; LIBCALL-NEXT: $x11 = COPY [[AND1]](s64)314 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10315 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2316 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10317 ; LIBCALL-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]318 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[AND2]]319 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)320 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)321 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11322 %2:_(s64) = COPY $x10323 %0:_(s16) = G_TRUNC %2(s64)324 %3:_(s64) = COPY $x11325 %1:_(s16) = G_TRUNC %3(s64)326 %4:_(s16), %5:_(s1) = G_UMULO %0, %1327 %6:_(s64) = G_ANYEXT %4(s16)328 %7:_(s64) = G_ANYEXT %5(s1)329 $x10 = COPY %6(s64)330 $x11 = COPY %7(s64)331 PseudoRET implicit $x10, implicit $x11332 333...334---335name: umulo_i32336body: |337 bb.1:338 liveins: $x10, $x11339 340 ; CHECK-LABEL: name: umulo_i32341 ; CHECK: liveins: $x10, $x11342 ; CHECK-NEXT: {{ $}}343 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10344 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11345 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4294967295346 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]347 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]348 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[AND1]]349 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[MUL]], [[C]]350 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[MUL]](s64), [[AND2]]351 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)352 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)353 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11354 ;355 ; LIBCALL-LABEL: name: umulo_i32356 ; LIBCALL: liveins: $x10, $x11357 ; LIBCALL-NEXT: {{ $}}358 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10359 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11360 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4294967295361 ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]362 ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]363 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2364 ; LIBCALL-NEXT: $x10 = COPY [[AND]](s64)365 ; LIBCALL-NEXT: $x11 = COPY [[AND1]](s64)366 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__muldi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit-def $x10367 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2368 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10369 ; LIBCALL-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]370 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY2]](s64), [[AND2]]371 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)372 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)373 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11374 %2:_(s64) = COPY $x10375 %0:_(s32) = G_TRUNC %2(s64)376 %3:_(s64) = COPY $x11377 %1:_(s32) = G_TRUNC %3(s64)378 %4:_(s32), %5:_(s1) = G_UMULO %0, %1379 %6:_(s64) = G_ANYEXT %4(s32)380 %7:_(s64) = G_ANYEXT %5(s1)381 $x10 = COPY %6(s64)382 $x11 = COPY %7(s64)383 PseudoRET implicit $x10, implicit $x11384 385...386---387name: umulo_i64388body: |389 bb.1:390 liveins: $x10, $x11391 392 ; CHECK-LABEL: name: umulo_i64393 ; CHECK: liveins: $x10, $x11394 ; CHECK-NEXT: {{ $}}395 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10396 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11397 ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(s64) = G_UMULH [[COPY]], [[COPY1]]398 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0399 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY]], [[COPY1]]400 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[UMULH]](s64), [[C]]401 ; CHECK-NEXT: $x10 = COPY [[MUL]](s64)402 ; CHECK-NEXT: $x11 = COPY [[ICMP]](s64)403 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11404 ;405 ; LIBCALL-LABEL: name: umulo_i64406 ; LIBCALL: liveins: $x10, $x11407 ; LIBCALL-NEXT: {{ $}}408 ; LIBCALL-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10409 ; LIBCALL-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11410 ; LIBCALL-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0411 ; LIBCALL-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $x2, implicit $x2412 ; LIBCALL-NEXT: $x10 = COPY [[COPY]](s64)413 ; LIBCALL-NEXT: $x11 = COPY [[C]](s64)414 ; LIBCALL-NEXT: $x12 = COPY [[COPY1]](s64)415 ; LIBCALL-NEXT: $x13 = COPY [[C]](s64)416 ; LIBCALL-NEXT: PseudoCALL target-flags(riscv-call) &__multi3, csr_ilp32_lp64, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit-def $x10, implicit-def $x11417 ; LIBCALL-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $x2, implicit $x2418 ; LIBCALL-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x10419 ; LIBCALL-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x11420 ; LIBCALL-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1421 ; LIBCALL-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C1]]422 ; LIBCALL-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY3]], [[C]]423 ; LIBCALL-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[COPY2]], [[AND]]424 ; LIBCALL-NEXT: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[COPY3]], [[AND1]]425 ; LIBCALL-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[XOR]], [[XOR1]]426 ; LIBCALL-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[OR]](s64), [[C]]427 ; LIBCALL-NEXT: $x10 = COPY [[COPY2]](s64)428 ; LIBCALL-NEXT: $x11 = COPY [[ICMP]](s64)429 ; LIBCALL-NEXT: PseudoRET implicit $x10, implicit $x11430 %0:_(s64) = COPY $x10431 %1:_(s64) = COPY $x11432 %2:_(s64), %3:_(s1) = G_UMULO %0, %1433 %4:_(s64) = G_ANYEXT %3(s1)434 $x10 = COPY %2(s64)435 $x11 = COPY %4(s64)436 PseudoRET implicit $x10, implicit $x11437 438...439