brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.0 KiB · 996885b Raw
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