476 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - \3# RUN: | FileCheck %s --check-prefixes=CHECK,RV64I4# RUN: llc -mtriple=riscv64 -mattr=+zbb -run-pass=legalizer %s -o - \5# RUN: | FileCheck %s --check-prefixes=CHECK,RV64ZBB6 7---8name: uaddsat_i329body: |10 bb.1:11 liveins: $x10, $x1112 13 ; CHECK-LABEL: name: uaddsat_i3214 ; CHECK: liveins: $x10, $x1115 ; CHECK-NEXT: {{ $}}16 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1017 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1118 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[COPY1]]19 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ADD]], 3220 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[SEXT_INREG]](s64)21 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 3222 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[SEXT_INREG]](s64), [[SEXT_INREG1]]23 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[TRUNC]](s32)24 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -125 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[C]](s64)26 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[COPY2]]27 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)28 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)29 ; CHECK-NEXT: PseudoRET implicit $x1030 %2:_(s64) = COPY $x1031 %0:_(s32) = G_TRUNC %2(s64)32 %3:_(s64) = COPY $x1133 %1:_(s32) = G_TRUNC %3(s64)34 %4:_(s32) = G_UADDSAT %0, %1(s32)35 %5:_(s64) = G_ANYEXT %4(s32)36 $x10 = COPY %5(s64)37 PseudoRET implicit $x1038 39...40---41name: uaddsat_i6442body: |43 bb.1:44 liveins: $x10, $x1145 46 ; RV64I-LABEL: name: uaddsat_i6447 ; RV64I: liveins: $x10, $x1148 ; RV64I-NEXT: {{ $}}49 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1050 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1151 ; RV64I-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[COPY1]]52 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[ADD]](s64), [[COPY1]]53 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[ADD]](s64)54 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -155 ; RV64I-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[C]], [[COPY2]]56 ; RV64I-NEXT: $x10 = COPY [[SELECT]](s64)57 ; RV64I-NEXT: PseudoRET implicit $x1058 ;59 ; RV64ZBB-LABEL: name: uaddsat_i6460 ; RV64ZBB: liveins: $x10, $x1161 ; RV64ZBB-NEXT: {{ $}}62 ; RV64ZBB-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1063 ; RV64ZBB-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1164 ; RV64ZBB-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -165 ; RV64ZBB-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[COPY]], [[C]]66 ; RV64ZBB-NEXT: [[UMIN:%[0-9]+]]:_(s64) = G_UMIN [[XOR]], [[COPY1]]67 ; RV64ZBB-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[UMIN]]68 ; RV64ZBB-NEXT: $x10 = COPY [[ADD]](s64)69 ; RV64ZBB-NEXT: PseudoRET implicit $x1070 %0:_(s64) = COPY $x1071 %1:_(s64) = COPY $x1172 %2:_(s64) = G_UADDSAT %0, %1(s64)73 $x10 = COPY %2(s64)74 PseudoRET implicit $x1075 76...77---78name: saddsat_i3279body: |80 bb.1:81 liveins: $x10, $x1182 83 ; CHECK-LABEL: name: saddsat_i3284 ; CHECK: liveins: $x10, $x1185 ; CHECK-NEXT: {{ $}}86 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1087 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1188 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 3289 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 3290 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[SEXT_INREG]], [[SEXT_INREG1]]91 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[ADD]](s64)92 ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ADD]], 3293 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[ADD]](s64), [[SEXT_INREG2]]94 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[TRUNC]](s32)95 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3196 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY [[SEXT_INREG2]](s64)97 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY3]], [[C]](s64)98 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -214748364899 ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(s64) = G_ADD [[ASHR]], [[C1]]100 ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ADD1]], 32101 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[SEXT_INREG3]](s64)102 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[COPY2]]103 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)104 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)105 ; CHECK-NEXT: PseudoRET implicit $x10106 %2:_(s64) = COPY $x10107 %0:_(s32) = G_TRUNC %2(s64)108 %3:_(s64) = COPY $x11109 %1:_(s32) = G_TRUNC %3(s64)110 %4:_(s32) = G_SADDSAT %0, %1(s32)111 %5:_(s64) = G_ANYEXT %4(s32)112 $x10 = COPY %5(s64)113 PseudoRET implicit $x10114 115...116---117name: saddsat_i64118body: |119 bb.1:120 liveins: $x10, $x11121 122 ; RV64I-LABEL: name: saddsat_i64123 ; RV64I: liveins: $x10, $x11124 ; RV64I-NEXT: {{ $}}125 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10126 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11127 ; RV64I-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[COPY1]]128 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0129 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(slt), [[ADD]](s64), [[COPY]]130 ; RV64I-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(slt), [[COPY1]](s64), [[C]]131 ; RV64I-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[ICMP1]], [[ICMP]]132 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[ADD]](s64)133 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 63134 ; RV64I-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY2]], [[C1]](s64)135 ; RV64I-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808136 ; RV64I-NEXT: [[ADD1:%[0-9]+]]:_(s64) = G_ADD [[ASHR]], [[C2]]137 ; RV64I-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[XOR]](s64), [[ADD1]], [[COPY2]]138 ; RV64I-NEXT: $x10 = COPY [[SELECT]](s64)139 ; RV64I-NEXT: PseudoRET implicit $x10140 ;141 ; RV64ZBB-LABEL: name: saddsat_i64142 ; RV64ZBB: liveins: $x10, $x11143 ; RV64ZBB-NEXT: {{ $}}144 ; RV64ZBB-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10145 ; RV64ZBB-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11146 ; RV64ZBB-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807147 ; RV64ZBB-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808148 ; RV64ZBB-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0149 ; RV64ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s64) = G_SMAX [[COPY]], [[C2]]150 ; RV64ZBB-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[SMAX]]151 ; RV64ZBB-NEXT: [[SMIN:%[0-9]+]]:_(s64) = G_SMIN [[COPY]], [[C2]]152 ; RV64ZBB-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C1]], [[SMIN]]153 ; RV64ZBB-NEXT: [[SMAX1:%[0-9]+]]:_(s64) = G_SMAX [[SUB1]], [[COPY1]]154 ; RV64ZBB-NEXT: [[SMIN1:%[0-9]+]]:_(s64) = G_SMIN [[SMAX1]], [[SUB]]155 ; RV64ZBB-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[SMIN1]]156 ; RV64ZBB-NEXT: $x10 = COPY [[ADD]](s64)157 ; RV64ZBB-NEXT: PseudoRET implicit $x10158 %0:_(s64) = COPY $x10159 %1:_(s64) = COPY $x11160 %2:_(s64) = G_SADDSAT %0, %1(s64)161 $x10 = COPY %2(s64)162 PseudoRET implicit $x10163 164...165---166name: usubsat_i32167body: |168 bb.1:169 liveins: $x10, $x11170 171 ; CHECK-LABEL: name: usubsat_i32172 ; CHECK: liveins: $x10, $x11173 ; CHECK-NEXT: {{ $}}174 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10175 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11176 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[COPY1]]177 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[SUB]], 32178 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[SEXT_INREG]](s64)179 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32180 ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 32181 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[SEXT_INREG1]](s64), [[SEXT_INREG2]]182 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0183 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[C]](s64)184 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[TRUNC]]185 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)186 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)187 ; CHECK-NEXT: PseudoRET implicit $x10188 %2:_(s64) = COPY $x10189 %0:_(s32) = G_TRUNC %2(s64)190 %3:_(s64) = COPY $x11191 %1:_(s32) = G_TRUNC %3(s64)192 %4:_(s32) = G_USUBSAT %0, %1(s32)193 %5:_(s64) = G_ANYEXT %4(s32)194 $x10 = COPY %5(s64)195 PseudoRET implicit $x10196 197...198---199name: usubsat_i64200body: |201 bb.1:202 liveins: $x10, $x11203 204 ; RV64I-LABEL: name: usubsat_i64205 ; RV64I: liveins: $x10, $x11206 ; RV64I-NEXT: {{ $}}207 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10208 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11209 ; RV64I-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[COPY1]]210 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[COPY]](s64), [[COPY1]]211 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0212 ; RV64I-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[C]], [[SUB]]213 ; RV64I-NEXT: $x10 = COPY [[SELECT]](s64)214 ; RV64I-NEXT: PseudoRET implicit $x10215 ;216 ; RV64ZBB-LABEL: name: usubsat_i64217 ; RV64ZBB: liveins: $x10, $x11218 ; RV64ZBB-NEXT: {{ $}}219 ; RV64ZBB-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10220 ; RV64ZBB-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11221 ; RV64ZBB-NEXT: [[UMIN:%[0-9]+]]:_(s64) = G_UMIN [[COPY]], [[COPY1]]222 ; RV64ZBB-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[UMIN]]223 ; RV64ZBB-NEXT: $x10 = COPY [[SUB]](s64)224 ; RV64ZBB-NEXT: PseudoRET implicit $x10225 %0:_(s64) = COPY $x10226 %1:_(s64) = COPY $x11227 %2:_(s64) = G_USUBSAT %0, %1(s64)228 $x10 = COPY %2(s64)229 PseudoRET implicit $x10230 231...232---233name: ssubsat_i32234body: |235 bb.1:236 liveins: $x10, $x11237 238 ; CHECK-LABEL: name: ssubsat_i32239 ; CHECK: liveins: $x10, $x11240 ; CHECK-NEXT: {{ $}}241 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10242 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11243 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32244 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY1]], 32245 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[SEXT_INREG]], [[SEXT_INREG1]]246 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[SUB]](s64)247 ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[SUB]], 32248 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[SUB]](s64), [[SEXT_INREG2]]249 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[TRUNC]](s32)250 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 31251 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY [[SEXT_INREG2]](s64)252 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY3]], [[C]](s64)253 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -2147483648254 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[ASHR]], [[C1]]255 ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ADD]], 32256 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[SEXT_INREG3]](s64)257 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[COPY2]]258 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)259 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)260 ; CHECK-NEXT: PseudoRET implicit $x10261 %2:_(s64) = COPY $x10262 %0:_(s32) = G_TRUNC %2(s64)263 %3:_(s64) = COPY $x11264 %1:_(s32) = G_TRUNC %3(s64)265 %4:_(s32) = G_SSUBSAT %0, %1(s32)266 %5:_(s64) = G_ANYEXT %4(s32)267 $x10 = COPY %5(s64)268 PseudoRET implicit $x10269 270...271---272name: ssubsat_i64273body: |274 bb.1:275 liveins: $x10, $x11276 277 ; RV64I-LABEL: name: ssubsat_i64278 ; RV64I: liveins: $x10, $x11279 ; RV64I-NEXT: {{ $}}280 ; RV64I-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10281 ; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11282 ; RV64I-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[COPY1]]283 ; RV64I-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0284 ; RV64I-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(slt), [[SUB]](s64), [[COPY]]285 ; RV64I-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(sgt), [[COPY1]](s64), [[C]]286 ; RV64I-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[ICMP1]], [[ICMP]]287 ; RV64I-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[SUB]](s64)288 ; RV64I-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 63289 ; RV64I-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY2]], [[C1]](s64)290 ; RV64I-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808291 ; RV64I-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[ASHR]], [[C2]]292 ; RV64I-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[XOR]](s64), [[ADD]], [[COPY2]]293 ; RV64I-NEXT: $x10 = COPY [[SELECT]](s64)294 ; RV64I-NEXT: PseudoRET implicit $x10295 ;296 ; RV64ZBB-LABEL: name: ssubsat_i64297 ; RV64ZBB: liveins: $x10, $x11298 ; RV64ZBB-NEXT: {{ $}}299 ; RV64ZBB-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10300 ; RV64ZBB-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11301 ; RV64ZBB-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807302 ; RV64ZBB-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808303 ; RV64ZBB-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1304 ; RV64ZBB-NEXT: [[SMAX:%[0-9]+]]:_(s64) = G_SMAX [[COPY]], [[C2]]305 ; RV64ZBB-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[SMAX]], [[C]]306 ; RV64ZBB-NEXT: [[SMIN:%[0-9]+]]:_(s64) = G_SMIN [[COPY]], [[C2]]307 ; RV64ZBB-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[SMIN]], [[C1]]308 ; RV64ZBB-NEXT: [[SMAX1:%[0-9]+]]:_(s64) = G_SMAX [[SUB]], [[COPY1]]309 ; RV64ZBB-NEXT: [[SMIN1:%[0-9]+]]:_(s64) = G_SMIN [[SMAX1]], [[SUB1]]310 ; RV64ZBB-NEXT: [[SUB2:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[SMIN1]]311 ; RV64ZBB-NEXT: $x10 = COPY [[SUB2]](s64)312 ; RV64ZBB-NEXT: PseudoRET implicit $x10313 %0:_(s64) = COPY $x10314 %1:_(s64) = COPY $x11315 %2:_(s64) = G_SSUBSAT %0, %1(s64)316 $x10 = COPY %2(s64)317 PseudoRET implicit $x10318 319...320---321name: uaddsat_i8322body: |323 bb.1:324 liveins: $x10, $x11325 326 ; CHECK-LABEL: name: uaddsat_i8327 ; CHECK: liveins: $x10, $x11328 ; CHECK-NEXT: {{ $}}329 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10330 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11331 ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[COPY]], [[COPY1]]332 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 255333 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ADD]], [[C]]334 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]335 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ult), [[AND]](s64), [[AND1]]336 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1337 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[C1]](s64)338 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[ADD]](s64)339 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC]], [[TRUNC1]]340 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)341 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)342 ; CHECK-NEXT: PseudoRET implicit $x10343 %2:_(s64) = COPY $x10344 %0:_(s8) = G_TRUNC %2(s64)345 %3:_(s64) = COPY $x11346 %1:_(s8) = G_TRUNC %3(s64)347 %4:_(s8) = G_UADDSAT %0, %1(s8)348 %5:_(s64) = G_ANYEXT %4(s8)349 $x10 = COPY %5(s64)350 PseudoRET implicit $x10351 352...353---354name: sshlsat_i32355body: |356 bb.1:357 liveins: $x10, $x11358 359 ; CHECK-LABEL: name: sshlsat_i32360 ; CHECK: liveins: $x10, $x11361 ; CHECK-NEXT: {{ $}}362 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10363 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11364 ; CHECK-NEXT: [[SLLW:%[0-9]+]]:_(s64) = G_SLLW [[COPY]], [[COPY1]]365 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[SLLW]](s64)366 ; CHECK-NEXT: [[SRAW:%[0-9]+]]:_(s64) = G_SRAW [[SLLW]], [[COPY1]]367 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -2147483648368 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[C]](s64)369 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2147483647370 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[C1]](s64)371 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0372 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32373 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(slt), [[SEXT_INREG]](s64), [[C2]]374 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[TRUNC2]]375 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[SRAW]], 32376 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[SEXT_INREG]](s64), [[SEXT_INREG1]]377 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ICMP1]](s64), [[SELECT]], [[TRUNC]]378 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT1]](s32)379 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)380 ; CHECK-NEXT: PseudoRET implicit $x10381 %0:_(s64) = COPY $x10382 %1:_(s32) = G_TRUNC %0(s64)383 %2:_(s64) = COPY $x11384 %3:_(s32) = G_TRUNC %2(s64)385 %4:_(s32) = G_SSHLSAT %1, %3(s32)386 %5:_(s64) = G_ANYEXT %4(s32)387 $x10 = COPY %5(s64)388 PseudoRET implicit $x10389 390...391---392name: sshlsat_i64393body: |394 bb.1:395 liveins: $x10, $x11396 ; CHECK-LABEL: name: sshlsat_i64397 ; CHECK: liveins: $x10, $x11398 ; CHECK-NEXT: {{ $}}399 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10400 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11401 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[COPY1]](s64)402 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[SHL]], [[COPY1]](s64)403 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -9223372036854775808404 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 9223372036854775807405 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0406 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(slt), [[COPY]](s64), [[C2]]407 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[C]], [[C1]]408 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY]](s64), [[ASHR]]409 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s64), [[SELECT]], [[SHL]]410 ; CHECK-NEXT: $x10 = COPY [[SELECT1]](s64)411 ; CHECK-NEXT: PseudoRET implicit $x10412 %0:_(s64) = COPY $x10413 %1:_(s64) = COPY $x11414 %2:_(s64) = G_SSHLSAT %0, %1(s64)415 $x10 = COPY %2(s64)416 PseudoRET implicit $x10417 418...419---420name: ushlsat_i32421body: |422 bb.1:423 liveins: $x10, $x11424 425 ; CHECK-LABEL: name: ushlsat_i32426 ; CHECK: liveins: $x10, $x11427 ; CHECK-NEXT: {{ $}}428 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10429 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11430 ; CHECK-NEXT: [[SLLW:%[0-9]+]]:_(s64) = G_SLLW [[COPY]], [[COPY1]]431 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[SLLW]](s64)432 ; CHECK-NEXT: [[SRLW:%[0-9]+]]:_(s64) = G_SRLW [[SLLW]], [[COPY1]]433 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1434 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[C]](s64)435 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32436 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[SRLW]], 32437 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[SEXT_INREG]](s64), [[SEXT_INREG1]]438 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ICMP]](s64), [[TRUNC1]], [[TRUNC]]439 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[SELECT]](s32)440 ; CHECK-NEXT: $x10 = COPY [[ANYEXT]](s64)441 ; CHECK-NEXT: PseudoRET implicit $x10442 %0:_(s64) = COPY $x10443 %1:_(s32) = G_TRUNC %0(s64)444 %2:_(s64) = COPY $x11445 %3:_(s32) = G_TRUNC %2(s64)446 %4:_(s32) = G_USHLSAT %1, %3(s32)447 %5:_(s64) = G_ANYEXT %4(s32)448 $x10 = COPY %5(s64)449 PseudoRET implicit $x10450 451...452---453name: ushlsat_i64454body: |455 bb.1:456 liveins: $x10, $x11457 ; CHECK-LABEL: name: ushlsat_i64458 ; CHECK: liveins: $x10, $x11459 ; CHECK-NEXT: {{ $}}460 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10461 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x11462 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[COPY1]](s64)463 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[SHL]], [[COPY1]](s64)464 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1465 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s64) = G_ICMP intpred(ne), [[COPY]](s64), [[LSHR]]466 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s64), [[C]], [[SHL]]467 ; CHECK-NEXT: $x10 = COPY [[SELECT]](s64)468 ; CHECK-NEXT: PseudoRET implicit $x10469 %0:_(s64) = COPY $x10470 %1:_(s64) = COPY $x11471 %2:_(s64) = G_USHLSAT %0, %1(s64)472 $x10 = COPY %2(s64)473 PseudoRET implicit $x10474 475...476