281 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s4---5name: shl_i86body: |7 bb.0.entry:8 ; CHECK-LABEL: name: shl_i89 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x1010 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1111 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 25512 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]13 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[AND]](s64)14 ; CHECK-NEXT: $x10 = COPY [[SHL]](s64)15 ; CHECK-NEXT: PseudoRET implicit $x1016 %0:_(s64) = COPY $x1017 %1:_(s64) = COPY $x1118 %2:_(s8) = G_TRUNC %0(s64)19 %3:_(s8) = G_TRUNC %1(s64)20 %4:_(s8) = G_SHL %2, %321 %5:_(s64) = G_ANYEXT %4(s8)22 $x10 = COPY %5(s64)23 PseudoRET implicit $x1024 25...26---27name: shl_i1528body: |29 bb.0.entry:30 ; CHECK-LABEL: name: shl_i1531 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x1032 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1133 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3276734 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]35 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[AND]](s64)36 ; CHECK-NEXT: $x10 = COPY [[SHL]](s64)37 ; CHECK-NEXT: PseudoRET implicit $x1038 %0:_(s64) = COPY $x1039 %1:_(s64) = COPY $x1140 %2:_(s15) = G_TRUNC %0(s64)41 %3:_(s15) = G_TRUNC %1(s64)42 %4:_(s15) = G_SHL %2, %343 %5:_(s64) = G_ANYEXT %4(s15)44 $x10 = COPY %5(s64)45 PseudoRET implicit $x1046 47...48---49name: shl_i1650body: |51 bb.0.entry:52 ; CHECK-LABEL: name: shl_i1653 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x1054 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1155 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 6553556 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]57 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[AND]](s64)58 ; CHECK-NEXT: $x10 = COPY [[SHL]](s64)59 ; CHECK-NEXT: PseudoRET implicit $x1060 %0:_(s64) = COPY $x1061 %1:_(s64) = COPY $x1162 %2:_(s16) = G_TRUNC %0(s64)63 %3:_(s16) = G_TRUNC %1(s64)64 %4:_(s16) = G_SHL %2, %365 %5:_(s64) = G_ANYEXT %4(s16)66 $x10 = COPY %5(s64)67 PseudoRET implicit $x1068 69...70---71name: shl_i3272body: |73 bb.0.entry:74 ; CHECK-LABEL: name: shl_i3275 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x1076 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1177 ; CHECK-NEXT: [[SLLW:%[0-9]+]]:_(s64) = G_SLLW [[COPY]], [[COPY1]]78 ; CHECK-NEXT: $x10 = COPY [[SLLW]](s64)79 ; CHECK-NEXT: PseudoRET implicit $x1080 %0:_(s64) = COPY $x1081 %1:_(s64) = COPY $x1182 %2:_(s32) = G_TRUNC %0(s64)83 %3:_(s32) = G_TRUNC %1(s64)84 %4:_(s32) = G_SHL %2, %385 %5:_(s64) = G_ANYEXT %4(s32)86 $x10 = COPY %5(s64)87 PseudoRET implicit $x1088 89...90---91name: shl_i6492body: |93 bb.0.entry:94 ; CHECK-LABEL: name: shl_i6495 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x1096 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1197 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[COPY1]](s64)98 ; CHECK-NEXT: $x10 = COPY [[SHL]](s64)99 ; CHECK-NEXT: PseudoRET implicit $x10100 %0:_(s64) = COPY $x10101 %1:_(s64) = COPY $x11102 %2:_(s64) = G_SHL %0, %1103 $x10 = COPY %2(s64)104 PseudoRET implicit $x10105 106...107---108name: shl_i72109body: |110 bb.0.entry:111 ; CHECK-LABEL: name: shl_i72112 ; CHECK: %x00:_(s64) = COPY $x10113 ; CHECK-NEXT: %x01:_(s64) = COPY $x11114 ; CHECK-NEXT: %y00:_(s64) = COPY $x12115 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64116 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB %y00, [[C]]117 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], %y00118 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0119 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), %y00(s64), [[C]]120 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), %y00(s64), [[C1]]121 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL %x00, %y00(s64)122 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR %x00, [[SUB1]](s64)123 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL %x01, %y00(s64)124 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]125 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL %x00, [[SUB]](s64)126 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[SHL]], [[C1]]127 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[OR]], [[SHL2]]128 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s64), %x01, [[SELECT1]]129 ; CHECK-NEXT: $x10 = COPY [[SELECT]](s64)130 ; CHECK-NEXT: $x11 = COPY [[SELECT2]](s64)131 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11132 %x00:_(s64) = COPY $x10133 %x01:_(s64) = COPY $x11134 %y00:_(s64) = COPY $x12135 %y01:_(s64) = COPY $x13136 %x0:_(s128) = G_MERGE_VALUES %x00(s64), %x01137 %y0:_(s128) = G_MERGE_VALUES %y00(s64), %y01138 %x:_(s72) = G_TRUNC %x0(s128)139 %y:_(s72) = G_TRUNC %y0(s128)140 %z:_(s72) = G_SHL %x, %y141 %z0:_(s128) = G_ANYEXT %z(s72)142 %z00:_(s64), %z01:_(s64) = G_UNMERGE_VALUES %z0(s128)143 $x10 = COPY %z00(s64)144 $x11 = COPY %z01(s64)145 PseudoRET implicit $x10, implicit $x11146 147...148---149name: shl_i128150body: |151 bb.0.entry:152 ; CHECK-LABEL: name: shl_i128153 ; CHECK: %lo1:_(s64) = COPY $x10154 ; CHECK-NEXT: %hi1:_(s64) = COPY $x11155 ; CHECK-NEXT: %lo2:_(s64) = COPY $x12156 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64157 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB %lo2, [[C]]158 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], %lo2159 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0160 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), %lo2(s64), [[C]]161 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), %lo2(s64), [[C1]]162 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL %lo1, %lo2(s64)163 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR %lo1, [[SUB1]](s64)164 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL %hi1, %lo2(s64)165 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]166 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL %lo1, [[SUB]](s64)167 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[SHL]], [[C1]]168 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[OR]], [[SHL2]]169 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s64), %hi1, [[SELECT1]]170 ; CHECK-NEXT: $x10 = COPY [[SELECT]](s64)171 ; CHECK-NEXT: $x11 = COPY [[SELECT2]](s64)172 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11173 %lo1:_(s64) = COPY $x10174 %hi1:_(s64) = COPY $x11175 %lo2:_(s64) = COPY $x12176 %hi2:_(s64) = COPY $x13177 %x1:_(s128) = G_MERGE_VALUES %lo1(s64), %hi1(s64)178 %x2:_(s128) = G_MERGE_VALUES %lo2(s64), %hi2(s64)179 %y:_(s128) = G_SHL %x1, %x2180 %loy:_(s64), %hiy:_(s64) = G_UNMERGE_VALUES %y(s128)181 $x10 = COPY %loy(s64)182 $x11 = COPY %hiy(s64)183 PseudoRET implicit $x10, implicit $x11184 185...186---187name: shl_i192188body: |189 bb.0.entry:190 ; CHECK-LABEL: name: shl_i192191 ; CHECK: %lo1:_(s64) = COPY $x10192 ; CHECK-NEXT: %mid1:_(s64) = COPY $x11193 ; CHECK-NEXT: %hi1:_(s64) = COPY $x12194 ; CHECK-NEXT: %lo2:_(s64) = COPY $x13195 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 128196 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB %lo2, [[C]]197 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], %lo2198 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0199 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), %lo2(s64), [[C]]200 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), %lo2(s64), [[C1]]201 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 64202 ; CHECK-NEXT: [[SUB2:%[0-9]+]]:_(s64) = G_SUB %lo2, [[C2]]203 ; CHECK-NEXT: [[SUB3:%[0-9]+]]:_(s64) = G_SUB [[C2]], %lo2204 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), %lo2(s64), [[C2]]205 ; CHECK-NEXT: [[ICMP3:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), %lo2(s64), [[C1]]206 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL %lo1, %lo2(s64)207 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR %lo1, [[SUB3]](s64)208 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL %mid1, %lo2(s64)209 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]210 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL %lo1, [[SUB2]](s64)211 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s64), [[SHL]], [[C1]]212 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s64), [[OR]], [[SHL2]]213 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP3]](s64), %mid1, [[SELECT1]]214 ; CHECK-NEXT: [[SUB4:%[0-9]+]]:_(s64) = G_SUB [[SUB1]], [[C2]]215 ; CHECK-NEXT: [[SUB5:%[0-9]+]]:_(s64) = G_SUB [[C2]], [[SUB1]]216 ; CHECK-NEXT: [[ICMP4:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[SUB1]](s64), [[C2]]217 ; CHECK-NEXT: [[ICMP5:%[0-9]+]]:_(s64) = G_ICMP intpred(eq), [[SUB1]](s64), [[C1]]218 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR %lo1, [[SUB1]](s64)219 ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s64) = G_SHL %mid1, [[SUB5]](s64)220 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL3]]221 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR %mid1, [[SUB4]](s64)222 ; CHECK-NEXT: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s64), [[OR1]], [[LSHR2]]223 ; CHECK-NEXT: [[SELECT4:%[0-9]+]]:_(s64) = G_SELECT [[ICMP5]](s64), %lo1, [[SELECT3]]224 ; CHECK-NEXT: [[ICMP6:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), %lo2(s64), [[C2]]225 ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s64) = G_SHL %hi1, %lo2(s64)226 ; CHECK-NEXT: [[SELECT5:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s64), [[SHL4]], [[C1]]227 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[SELECT4]], [[SELECT5]]228 ; CHECK-NEXT: [[ICMP7:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[SUB]](s64), [[C2]]229 ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s64) = G_SHL %lo1, [[SUB]](s64)230 ; CHECK-NEXT: [[SELECT6:%[0-9]+]]:_(s64) = G_SELECT [[ICMP7]](s64), [[SHL5]], [[C1]]231 ; CHECK-NEXT: [[SELECT7:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[SELECT]], [[C1]]232 ; CHECK-NEXT: [[SELECT8:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[SELECT2]], [[C1]]233 ; CHECK-NEXT: [[SELECT9:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[OR2]], [[SELECT6]]234 ; CHECK-NEXT: [[SELECT10:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s64), %hi1, [[SELECT9]]235 ; CHECK-NEXT: $x10 = COPY [[SELECT7]](s64)236 ; CHECK-NEXT: $x11 = COPY [[SELECT8]](s64)237 ; CHECK-NEXT: $x12 = COPY [[SELECT10]](s64)238 ; CHECK-NEXT: PseudoRET implicit $x10, implicit $x11, implicit $x12239 %lo1:_(s64) = COPY $x10240 %mid1:_(s64) = COPY $x11241 %hi1:_(s64) = COPY $x12242 %lo2:_(s64) = COPY $x13243 %mid2:_(s64) = COPY $x14244 %hi2:_(s64) = COPY $x15245 %x1:_(s192) = G_MERGE_VALUES %lo1(s64), %mid1(s64), %hi1(s64)246 %x2:_(s192) = G_MERGE_VALUES %lo2(s64), %mid2(s64), %hi2(s64)247 %y:_(s192) = G_SHL %x1, %x2248 %lo:_(s64), %mid:_(s64), %hi:_(s64) = G_UNMERGE_VALUES %y(s192)249 $x10 = COPY %lo(s64)250 $x11 = COPY %mid(s64)251 $x12 = COPY %hi(s64)252 PseudoRET implicit $x10, implicit $x11, implicit $x12253 254...255---256name: shl_i48257body: |258 bb.0:259 liveins: $x10, $x11260 261 ; CHECK-LABEL: name: shl_i48262 ; CHECK: liveins: $x10, $x11263 ; CHECK-NEXT: {{ $}}264 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10265 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11266 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 281474976710655267 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]268 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[AND]](s64)269 ; CHECK-NEXT: $x10 = COPY [[SHL]](s64)270 ; CHECK-NEXT: PseudoRET implicit $x10271 %2:_(s64) = COPY $x10272 %0:_(s48) = G_TRUNC %2(s64)273 %3:_(s64) = COPY $x11274 %1:_(s48) = G_TRUNC %3(s64)275 %4:_(s48) = G_SHL %0, %1(s48)276 %5:_(s64) = G_ANYEXT %4(s48)277 $x10 = COPY %5(s64)278 PseudoRET implicit $x10279 280...281