242 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=aarch64-- -run-pass=legalizer %s -o - | FileCheck %s3---4name: test_urem_645body: |6 bb.0.entry:7 ; CHECK-LABEL: name: test_urem_648 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x09 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x110 ; CHECK-NEXT: [[UDIV:%[0-9]+]]:_(s64) = G_UDIV [[COPY]], [[COPY1]]11 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[UDIV]], [[COPY1]]12 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[MUL]]13 ; CHECK-NEXT: $x0 = COPY [[SUB]](s64)14 %0:_(s64) = COPY $x015 %1:_(s64) = COPY $x116 %2:_(s64) = G_UREM %0, %117 $x0 = COPY %2(s64)18 19...20---21name: test_srem_3222body: |23 bb.0.entry:24 ; CHECK-LABEL: name: test_srem_3225 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x026 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x127 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)28 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)29 ; CHECK-NEXT: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[TRUNC]], [[TRUNC1]]30 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[SDIV]], [[TRUNC1]]31 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[TRUNC]], [[MUL]]32 ; CHECK-NEXT: $w0 = COPY [[SUB]](s32)33 %0:_(s64) = COPY $x034 %1:_(s64) = COPY $x135 %2:_(s32) = G_TRUNC %0(s64)36 %3:_(s32) = G_TRUNC %1(s64)37 %4:_(s32) = G_SREM %2, %338 $w0 = COPY %4(s32)39 40...41---42name: test_srem_843body: |44 bb.0.entry:45 ; CHECK-LABEL: name: test_srem_846 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x047 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x148 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)49 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC]], 850 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)51 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 852 ; CHECK-NEXT: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[SEXT_INREG]], [[SEXT_INREG1]]53 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)54 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[SDIV]], [[TRUNC2]]55 ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)56 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[TRUNC3]], [[MUL]]57 ; CHECK-NEXT: $w0 = COPY [[SUB]](s32)58 %0:_(s64) = COPY $x059 %1:_(s64) = COPY $x160 %2:_(s8) = G_TRUNC %0(s64)61 %3:_(s8) = G_TRUNC %1(s64)62 %4:_(s8) = G_SREM %2, %363 %5:_(s32) = G_ANYEXT %4(s8)64 $w0 = COPY %5(s32)65 66...67---68name: test_srem_169body: |70 bb.0.entry:71 ; CHECK-LABEL: name: test_srem_172 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x073 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x174 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)75 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC]], 176 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)77 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 178 ; CHECK-NEXT: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[SEXT_INREG]], [[SEXT_INREG1]]79 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[SDIV]], [[SEXT_INREG1]]80 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[SEXT_INREG]], [[MUL]]81 ; CHECK-NEXT: $w0 = COPY [[SUB]](s32)82 %0:_(s64) = COPY $x083 %1:_(s64) = COPY $x184 %2:_(s1) = G_TRUNC %0(s64)85 %3:_(s1) = G_TRUNC %1(s64)86 %4:_(s1) = G_SREM %2, %387 %5:_(s32) = G_ANYEXT %4(s1)88 $w0 = COPY %5(s32)89 90...91 92---93name: test_urem_194body: |95 bb.0.entry:96 ; CHECK-LABEL: name: test_urem_197 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x098 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x199 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)100 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1101 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]102 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)103 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC1]], [[C]]104 ; CHECK-NEXT: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[AND]], [[AND1]]105 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[UDIV]], [[AND1]]106 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[AND]], [[MUL]]107 ; CHECK-NEXT: $w0 = COPY [[SUB]](s32)108 %0:_(s64) = COPY $x0109 %1:_(s64) = COPY $x1110 %2:_(s1) = G_TRUNC %0(s64)111 %3:_(s1) = G_TRUNC %1(s64)112 %4:_(s1) = G_UREM %2, %3113 %5:_(s32) = G_ANYEXT %4(s1)114 $w0 = COPY %5(s32)115 116...117 118---119name: test_frem120body: |121 bb.0.entry:122 ; CHECK-LABEL: name: test_frem123 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0124 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1125 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp126 ; CHECK-NEXT: $d0 = COPY [[COPY]](s64)127 ; CHECK-NEXT: $d1 = COPY [[COPY1]](s64)128 ; CHECK-NEXT: BL &fmod, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit $d1, implicit-def $d0129 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp130 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $d0131 ; CHECK-NEXT: $x0 = COPY [[COPY2]](s64)132 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)133 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)134 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp135 ; CHECK-NEXT: $s0 = COPY [[TRUNC]](s32)136 ; CHECK-NEXT: $s1 = COPY [[TRUNC1]](s32)137 ; CHECK-NEXT: BL &fmodf, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $s1, implicit-def $s0138 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp139 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0140 ; CHECK-NEXT: $w0 = COPY [[COPY3]](s32)141 %0:_(s64) = COPY $x0142 %1:_(s64) = COPY $x1143 %2:_(s64) = G_FREM %0, %1144 $x0 = COPY %2(s64)145 %3:_(s32) = G_TRUNC %0(s64)146 %4:_(s32) = G_TRUNC %1(s64)147 %5:_(s32) = G_FREM %3, %4148 $w0 = COPY %5(s32)149 150...151---152name: test_srem_v2s32153body: |154 bb.0.entry:155 ; CHECK-LABEL: name: test_srem_v2s32156 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0157 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1158 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)159 ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)160 ; CHECK-NEXT: [[SDIV:%[0-9]+]]:_(s32) = G_SDIV [[UV]], [[UV2]]161 ; CHECK-NEXT: [[SDIV1:%[0-9]+]]:_(s32) = G_SDIV [[UV1]], [[UV3]]162 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SDIV]](s32), [[SDIV1]](s32)163 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<2 x s32>) = G_MUL [[BUILD_VECTOR]], [[COPY1]]164 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<2 x s32>) = G_SUB [[COPY]], [[MUL]]165 ; CHECK-NEXT: $d0 = COPY [[SUB]](<2 x s32>)166 %0:_(<2 x s32>) = COPY $d0167 %1:_(<2 x s32>) = COPY $d1168 %2:_(<2 x s32>) = G_SREM %0, %1169 $d0 = COPY %2(<2 x s32>)170 171...172---173name: test_srem_v4s32174body: |175 bb.0.entry:176 ; CHECK-LABEL: name: test_srem_v4s32177 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0178 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1179 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)180 ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<4 x s32>)181 ; CHECK-NEXT: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[UV]], [[UV4]]182 ; CHECK-NEXT: [[UDIV1:%[0-9]+]]:_(s32) = G_UDIV [[UV1]], [[UV5]]183 ; CHECK-NEXT: [[UDIV2:%[0-9]+]]:_(s32) = G_UDIV [[UV2]], [[UV6]]184 ; CHECK-NEXT: [[UDIV3:%[0-9]+]]:_(s32) = G_UDIV [[UV3]], [[UV7]]185 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UDIV]](s32), [[UDIV1]](s32), [[UDIV2]](s32), [[UDIV3]](s32)186 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[BUILD_VECTOR]], [[COPY1]]187 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s32>) = G_SUB [[COPY]], [[MUL]]188 ; CHECK-NEXT: $q0 = COPY [[SUB]](<4 x s32>)189 %0:_(<4 x s32>) = COPY $q0190 %1:_(<4 x s32>) = COPY $q1191 %2:_(<4 x s32>) = G_UREM %0, %1192 $q0 = COPY %2(<4 x s32>)193 194...195---196name: test_srem_v2s64197body: |198 bb.0.entry:199 ; CHECK-LABEL: name: test_srem_v2s64200 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0201 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1202 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)203 ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)204 ; CHECK-NEXT: [[SDIV:%[0-9]+]]:_(s64) = G_SDIV [[UV]], [[UV2]]205 ; CHECK-NEXT: [[SDIV1:%[0-9]+]]:_(s64) = G_SDIV [[UV1]], [[UV3]]206 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SDIV]](s64), [[SDIV1]](s64)207 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<2 x s64>) = G_MUL [[BUILD_VECTOR]], [[COPY1]]208 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<2 x s64>) = G_SUB [[COPY]], [[MUL]]209 ; CHECK-NEXT: $q0 = COPY [[SUB]](<2 x s64>)210 %0:_(<2 x s64>) = COPY $q0211 %1:_(<2 x s64>) = COPY $q1212 %2:_(<2 x s64>) = G_SREM %0, %1213 $q0 = COPY %2(<2 x s64>)214 215...216---217name: test_srem_v4s16218body: |219 bb.0.entry:220 ; CHECK-LABEL: name: test_srem_v4s16221 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0222 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1223 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(<4 x s32>) = G_ZEXT [[COPY]](<4 x s16>)224 ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(<4 x s32>) = G_ZEXT [[COPY1]](<4 x s16>)225 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ZEXT]](<4 x s32>)226 ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ZEXT1]](<4 x s32>)227 ; CHECK-NEXT: [[UDIV:%[0-9]+]]:_(s32) = G_UDIV [[UV]], [[UV4]]228 ; CHECK-NEXT: [[UDIV1:%[0-9]+]]:_(s32) = G_UDIV [[UV1]], [[UV5]]229 ; CHECK-NEXT: [[UDIV2:%[0-9]+]]:_(s32) = G_UDIV [[UV2]], [[UV6]]230 ; CHECK-NEXT: [[UDIV3:%[0-9]+]]:_(s32) = G_UDIV [[UV3]], [[UV7]]231 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UDIV]](s32), [[UDIV1]](s32), [[UDIV2]](s32), [[UDIV3]](s32)232 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[BUILD_VECTOR]], [[ZEXT1]]233 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s32>) = G_SUB [[ZEXT]], [[MUL]]234 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[SUB]](<4 x s32>)235 ; CHECK-NEXT: $d0 = COPY [[TRUNC]](<4 x s16>)236 %0:_(<4 x s16>) = COPY $d0237 %1:_(<4 x s16>) = COPY $d1238 %2:_(<4 x s16>) = G_UREM %0, %1239 $d0 = COPY %2(<4 x s16>)240 241...242