546 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -global-isel -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs -o - %s | FileCheck %s3 4---5name: test_sdiv_srem6tracksRegLiveness: true7body: |8 bb.0:9 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr510 ; CHECK-LABEL: name: test_sdiv_srem11 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr512 ; CHECK-NEXT: {{ $}}13 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr014 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr115 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr316 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr517 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_SDIVREM %src1, %src218 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)19 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)20 %src1:_(s32) = COPY $vgpr021 %src2:_(s32) = COPY $vgpr122 %ptr1:_(p1) = COPY $vgpr2_vgpr323 %ptr2:_(p1) = COPY $vgpr4_vgpr524 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)25 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)26 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)27 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)28...29---30name: test_sdiv_srem_v231tracksRegLiveness: true32body: |33 bb.0:34 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr735 ; CHECK-LABEL: name: test_sdiv_srem_v236 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr737 ; CHECK-NEXT: {{ $}}38 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr139 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr340 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr541 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr742 ; CHECK-NEXT: %div:_(<2 x s32>), %rem:_ = G_SDIVREM %src1, %src243 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)44 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)45 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr146 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr347 %ptr1:_(p1) = COPY $vgpr4_vgpr548 %ptr2:_(p1) = COPY $vgpr6_vgpr749 %div:_(<2 x s32>) = G_SDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)50 G_STORE %div:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)51 %rem:_(<2 x s32>) = G_SREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)52 G_STORE %rem:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)53...54---55name: test_sdiv_srem_v456tracksRegLiveness: true57body: |58 bb.0:59 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr1160 ; CHECK-LABEL: name: test_sdiv_srem_v461 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr1162 ; CHECK-NEXT: {{ $}}63 ; CHECK-NEXT: %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr364 ; CHECK-NEXT: %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr765 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr8_vgpr966 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr10_vgpr1167 ; CHECK-NEXT: %div:_(<4 x s32>), %rem:_ = G_SDIVREM %src1, %src268 ; CHECK-NEXT: G_STORE %div(<4 x s32>), %ptr1(p1) :: (store (<4 x s32>), align 4, addrspace 1)69 ; CHECK-NEXT: G_STORE %rem(<4 x s32>), %ptr2(p1) :: (store (<4 x s32>), align 4, addrspace 1)70 %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr371 %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr772 %ptr1:_(p1) = COPY $vgpr8_vgpr973 %ptr2:_(p1) = COPY $vgpr10_vgpr1174 %div:_(<4 x s32>) = G_SDIV %src1:_(<4 x s32>), %src2:_(<4 x s32>)75 G_STORE %div:_(<4 x s32>), %ptr1:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)76 %rem:_(<4 x s32>) = G_SREM %src1:_(<4 x s32>), %src2:_(<4 x s32>)77 G_STORE %rem:_(<4 x s32>), %ptr2:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)78...79---80name: test_srem_sdiv81tracksRegLiveness: true82body: |83 bb.0:84 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr585 ; CHECK-LABEL: name: test_srem_sdiv86 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr587 ; CHECK-NEXT: {{ $}}88 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr089 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr190 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr391 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr592 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_SDIVREM %src1, %src293 ; CHECK-NEXT: G_STORE %rem(s32), %ptr1(p1) :: (store (s32), addrspace 1)94 ; CHECK-NEXT: G_STORE %div(s32), %ptr2(p1) :: (store (s32), addrspace 1)95 %src1:_(s32) = COPY $vgpr096 %src2:_(s32) = COPY $vgpr197 %ptr1:_(p1) = COPY $vgpr2_vgpr398 %ptr2:_(p1) = COPY $vgpr4_vgpr599 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)100 G_STORE %rem:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)101 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)102 G_STORE %div:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)103...104---105name: test_srem_sdiv_v2106tracksRegLiveness: true107body: |108 bb.0:109 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7110 ; CHECK-LABEL: name: test_srem_sdiv_v2111 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7112 ; CHECK-NEXT: {{ $}}113 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1114 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3115 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr5116 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr7117 ; CHECK-NEXT: %div:_(<2 x s32>), %rem:_ = G_SDIVREM %src1, %src2118 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)119 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)120 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1121 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3122 %ptr1:_(p1) = COPY $vgpr4_vgpr5123 %ptr2:_(p1) = COPY $vgpr6_vgpr7124 %rem:_(<2 x s32>) = G_SREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)125 G_STORE %rem:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)126 %div:_(<2 x s32>) = G_SDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)127 G_STORE %div:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)128...129---130name: test_srem_sdiv_v4131tracksRegLiveness: true132body: |133 bb.0:134 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11135 ; CHECK-LABEL: name: test_srem_sdiv_v4136 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11137 ; CHECK-NEXT: {{ $}}138 ; CHECK-NEXT: %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3139 ; CHECK-NEXT: %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7140 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr8_vgpr9141 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr10_vgpr11142 ; CHECK-NEXT: %div:_(<4 x s32>), %rem:_ = G_SDIVREM %src1, %src2143 ; CHECK-NEXT: G_STORE %rem(<4 x s32>), %ptr1(p1) :: (store (<4 x s32>), align 4, addrspace 1)144 ; CHECK-NEXT: G_STORE %div(<4 x s32>), %ptr2(p1) :: (store (<4 x s32>), align 4, addrspace 1)145 %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3146 %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7147 %ptr1:_(p1) = COPY $vgpr8_vgpr9148 %ptr2:_(p1) = COPY $vgpr10_vgpr11149 %rem:_(<4 x s32>) = G_SREM %src1:_(<4 x s32>), %src2:_(<4 x s32>)150 G_STORE %rem:_(<4 x s32>), %ptr1:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)151 %div:_(<4 x s32>) = G_SDIV %src1:_(<4 x s32>), %src2:_(<4 x s32>)152 G_STORE %div:_(<4 x s32>), %ptr2:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)153...154---155name: test_udiv_urem156tracksRegLiveness: true157body: |158 bb.0:159 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5160 ; CHECK-LABEL: name: test_udiv_urem161 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5162 ; CHECK-NEXT: {{ $}}163 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0164 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1165 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3166 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5167 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_UDIVREM %src1, %src2168 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)169 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)170 %src1:_(s32) = COPY $vgpr0171 %src2:_(s32) = COPY $vgpr1172 %ptr1:_(p1) = COPY $vgpr2_vgpr3173 %ptr2:_(p1) = COPY $vgpr4_vgpr5174 %div:_(s32) = G_UDIV %src1:_(s32), %src2:_(s32)175 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)176 %rem:_(s32) = G_UREM %src1:_(s32), %src2:_(s32)177 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)178...179---180name: test_udiv_urem_v2181tracksRegLiveness: true182body: |183 bb.0:184 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7185 ; CHECK-LABEL: name: test_udiv_urem_v2186 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7187 ; CHECK-NEXT: {{ $}}188 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1189 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3190 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr5191 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr7192 ; CHECK-NEXT: %div:_(<2 x s32>), %rem:_ = G_UDIVREM %src1, %src2193 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)194 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)195 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1196 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3197 %ptr1:_(p1) = COPY $vgpr4_vgpr5198 %ptr2:_(p1) = COPY $vgpr6_vgpr7199 %div:_(<2 x s32>) = G_UDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)200 G_STORE %div:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)201 %rem:_(<2 x s32>) = G_UREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)202 G_STORE %rem:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)203...204---205name: test_udiv_urem_v4206tracksRegLiveness: true207body: |208 bb.0:209 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11210 ; CHECK-LABEL: name: test_udiv_urem_v4211 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11212 ; CHECK-NEXT: {{ $}}213 ; CHECK-NEXT: %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3214 ; CHECK-NEXT: %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7215 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr8_vgpr9216 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr10_vgpr11217 ; CHECK-NEXT: %div:_(<4 x s32>), %rem:_ = G_UDIVREM %src1, %src2218 ; CHECK-NEXT: G_STORE %div(<4 x s32>), %ptr1(p1) :: (store (<4 x s32>), align 4, addrspace 1)219 ; CHECK-NEXT: G_STORE %rem(<4 x s32>), %ptr2(p1) :: (store (<4 x s32>), align 4, addrspace 1)220 %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3221 %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7222 %ptr1:_(p1) = COPY $vgpr8_vgpr9223 %ptr2:_(p1) = COPY $vgpr10_vgpr11224 %div:_(<4 x s32>) = G_UDIV %src1:_(<4 x s32>), %src2:_(<4 x s32>)225 G_STORE %div:_(<4 x s32>), %ptr1:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)226 %rem:_(<4 x s32>) = G_UREM %src1:_(<4 x s32>), %src2:_(<4 x s32>)227 G_STORE %rem:_(<4 x s32>), %ptr2:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)228...229---230name: test_urem_udiv231tracksRegLiveness: true232body: |233 bb.0:234 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5235 ; CHECK-LABEL: name: test_urem_udiv236 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5237 ; CHECK-NEXT: {{ $}}238 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0239 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1240 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3241 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5242 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_UDIVREM %src1, %src2243 ; CHECK-NEXT: G_STORE %rem(s32), %ptr1(p1) :: (store (s32), addrspace 1)244 ; CHECK-NEXT: G_STORE %div(s32), %ptr2(p1) :: (store (s32), addrspace 1)245 %src1:_(s32) = COPY $vgpr0246 %src2:_(s32) = COPY $vgpr1247 %ptr1:_(p1) = COPY $vgpr2_vgpr3248 %ptr2:_(p1) = COPY $vgpr4_vgpr5249 %rem:_(s32) = G_UREM %src1:_(s32), %src2:_(s32)250 G_STORE %rem:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)251 %div:_(s32) = G_UDIV %src1:_(s32), %src2:_(s32)252 G_STORE %div:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)253...254---255name: test_urem_udiv_v2256tracksRegLiveness: true257body: |258 bb.0:259 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7260 ; CHECK-LABEL: name: test_urem_udiv_v2261 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7262 ; CHECK-NEXT: {{ $}}263 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1264 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3265 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr5266 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr7267 ; CHECK-NEXT: %div:_(<2 x s32>), %rem:_ = G_UDIVREM %src1, %src2268 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)269 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)270 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1271 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3272 %ptr1:_(p1) = COPY $vgpr4_vgpr5273 %ptr2:_(p1) = COPY $vgpr6_vgpr7274 %rem:_(<2 x s32>) = G_UREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)275 G_STORE %rem:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)276 %div:_(<2 x s32>) = G_UDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)277 G_STORE %div:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)278...279---280name: test_urem_udiv_v4281tracksRegLiveness: true282body: |283 bb.0:284 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11285 ; CHECK-LABEL: name: test_urem_udiv_v4286 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7, $vgpr8_vgpr9, $vgpr10_vgpr11287 ; CHECK-NEXT: {{ $}}288 ; CHECK-NEXT: %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3289 ; CHECK-NEXT: %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7290 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr8_vgpr9291 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr10_vgpr11292 ; CHECK-NEXT: %div:_(<4 x s32>), %rem:_ = G_UDIVREM %src1, %src2293 ; CHECK-NEXT: G_STORE %rem(<4 x s32>), %ptr1(p1) :: (store (<4 x s32>), align 4, addrspace 1)294 ; CHECK-NEXT: G_STORE %div(<4 x s32>), %ptr2(p1) :: (store (<4 x s32>), align 4, addrspace 1)295 %src1:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3296 %src2:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7297 %ptr1:_(p1) = COPY $vgpr8_vgpr9298 %ptr2:_(p1) = COPY $vgpr10_vgpr11299 %rem:_(<4 x s32>) = G_UREM %src1:_(<4 x s32>), %src2:_(<4 x s32>)300 G_STORE %rem:_(<4 x s32>), %ptr1:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)301 %div:_(<4 x s32>) = G_UDIV %src1:_(<4 x s32>), %src2:_(<4 x s32>)302 G_STORE %div:_(<4 x s32>), %ptr2:_(p1) :: (store (<4 x s32>), addrspace 1, align 4)303...304---305name: test_sdiv_srem_extra_use306tracksRegLiveness: true307body: |308 bb.0:309 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5310 ; CHECK-LABEL: name: test_sdiv_srem_extra_use311 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5312 ; CHECK-NEXT: {{ $}}313 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0314 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1315 ; CHECK-NEXT: %ptr1:_(p1) = G_IMPLICIT_DEF316 ; CHECK-NEXT: %ptr2:_(p1) = G_IMPLICIT_DEF317 ; CHECK-NEXT: %ptr3:_(p1) = COPY $vgpr2_vgpr3318 ; CHECK-NEXT: %ptr4:_(p1) = COPY $vgpr4_vgpr5319 ; CHECK-NEXT: G_STORE %src1(s32), %ptr1(p1) :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)320 ; CHECK-NEXT: G_STORE %src2(s32), %ptr2(p1) :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)321 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_SDIVREM %src1, %src2322 ; CHECK-NEXT: G_STORE %div(s32), %ptr3(p1) :: (store (s32), addrspace 1)323 ; CHECK-NEXT: G_STORE %rem(s32), %ptr4(p1) :: (store (s32), addrspace 1)324 %src1:_(s32) = COPY $vgpr0325 %src2:_(s32) = COPY $vgpr1326 %ptr1:_(p1) = G_IMPLICIT_DEF327 %ptr2:_(p1) = G_IMPLICIT_DEF328 %ptr3:_(p1) = COPY $vgpr2_vgpr3329 %ptr4:_(p1) = COPY $vgpr4_vgpr5330 G_STORE %src1:_(s32), %ptr1:_(p1) :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)331 G_STORE %src2:_(s32), %ptr2:_(p1) :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)332 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)333 G_STORE %div:_(s32), %ptr3:_(p1) :: (store (s32), addrspace 1, align 4)334 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)335 G_STORE %rem:_(s32), %ptr4:_(p1) :: (store (s32), addrspace 1, align 4)336...337---338name: test_sdiv_srem_extra_sdiv339tracksRegLiveness: true340body: |341 bb.0:342 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7343 ; Combine the first sdiv/srem pair into sdivrem and retain the extra344 ; sdiv instruction.345 ; CHECK-LABEL: name: test_sdiv_srem_extra_sdiv346 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7347 ; CHECK-NEXT: {{ $}}348 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0349 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1350 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3351 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5352 ; CHECK-NEXT: %ptr3:_(p1) = COPY $vgpr6_vgpr7353 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_SDIVREM %src1, %src2354 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)355 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)356 ; CHECK-NEXT: %div2:_(s32) = G_SDIV %src1, %src2357 ; CHECK-NEXT: G_STORE %div2(s32), %ptr3(p1) :: (store (s32), addrspace 1)358 %src1:_(s32) = COPY $vgpr0359 %src2:_(s32) = COPY $vgpr1360 %ptr1:_(p1) = COPY $vgpr2_vgpr3361 %ptr2:_(p1) = COPY $vgpr4_vgpr5362 %ptr3:_(p1) = COPY $vgpr6_vgpr7363 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)364 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)365 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)366 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)367 %div2:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)368 G_STORE %div2:_(s32), %ptr3:_(p1) :: (store (s32), addrspace 1, align 4)369...370---371name: test_sdiv_srem_extra_srem372tracksRegLiveness: true373body: |374 bb.0:375 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7376 ; Combine the first sdiv/srem pair into sdivrem and retain the extra377 ; srem instruction.378 ; CHECK-LABEL: name: test_sdiv_srem_extra_srem379 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7380 ; CHECK-NEXT: {{ $}}381 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0382 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1383 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3384 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5385 ; CHECK-NEXT: %ptr3:_(p1) = COPY $vgpr6_vgpr7386 ; CHECK-NEXT: %div:_(s32), %rem:_ = G_SDIVREM %src1, %src2387 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)388 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)389 ; CHECK-NEXT: %rem2:_(s32) = G_SREM %src1, %src2390 ; CHECK-NEXT: G_STORE %rem2(s32), %ptr3(p1) :: (store (s32), addrspace 1)391 %src1:_(s32) = COPY $vgpr0392 %src2:_(s32) = COPY $vgpr1393 %ptr1:_(p1) = COPY $vgpr2_vgpr3394 %ptr2:_(p1) = COPY $vgpr4_vgpr5395 %ptr3:_(p1) = COPY $vgpr6_vgpr7396 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)397 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)398 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)399 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)400 %rem2:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)401 G_STORE %rem2:_(s32), %ptr3:_(p1) :: (store (s32), addrspace 1, align 4)402...403# Some negative tests.404---405name: test_sdiv_srem_different_src_opnd2406tracksRegLiveness: true407body: |408 bb.0:409 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3_vgpr4, $vgpr5_vgpr6410 ; CHECK-LABEL: name: test_sdiv_srem_different_src_opnd2411 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3_vgpr4, $vgpr5_vgpr6412 ; CHECK-NEXT: {{ $}}413 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0414 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1415 ; CHECK-NEXT: %src3:_(s32) = COPY $vgpr2416 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr3_vgpr4417 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr5_vgpr6418 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2419 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)420 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src3421 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)422 %src1:_(s32) = COPY $vgpr0423 %src2:_(s32) = COPY $vgpr1424 %src3:_(s32) = COPY $vgpr2425 %ptr1:_(p1) = COPY $vgpr3_vgpr4426 %ptr2:_(p1) = COPY $vgpr5_vgpr6427 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)428 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)429 %rem:_(s32) = G_SREM %src1:_(s32), %src3:_(s32)430 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)431...432---433name: test_sdiv_srem_src_opnds_swapped434tracksRegLiveness: true435body: |436 bb.0:437 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5438 ; CHECK-LABEL: name: test_sdiv_srem_src_opnds_swapped439 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5440 ; CHECK-NEXT: {{ $}}441 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0442 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1443 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3444 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5445 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2446 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)447 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src2, %src1448 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)449 %src1:_(s32) = COPY $vgpr0450 %src2:_(s32) = COPY $vgpr1451 %ptr1:_(p1) = COPY $vgpr2_vgpr3452 %ptr2:_(p1) = COPY $vgpr4_vgpr5453 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)454 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)455 %rem:_(s32) = G_SREM %src2:_(s32), %src1:_(s32)456 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)457...458---459name: test_sdiv_urem460tracksRegLiveness: true461body: |462 bb.0:463 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5464 ; CHECK-LABEL: name: test_sdiv_urem465 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5466 ; CHECK-NEXT: {{ $}}467 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0468 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1469 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3470 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5471 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2472 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)473 ; CHECK-NEXT: %rem:_(s32) = G_UREM %src1, %src2474 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)475 %src1:_(s32) = COPY $vgpr0476 %src2:_(s32) = COPY $vgpr1477 %ptr1:_(p1) = COPY $vgpr2_vgpr3478 %ptr2:_(p1) = COPY $vgpr4_vgpr5479 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)480 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)481 %rem:_(s32) = G_UREM %src1:_(s32), %src2:_(s32)482 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)483...484---485name: test_udiv_srem486tracksRegLiveness: true487body: |488 bb.0:489 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5490 ; CHECK-LABEL: name: test_udiv_srem491 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5492 ; CHECK-NEXT: {{ $}}493 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0494 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1495 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3496 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5497 ; CHECK-NEXT: %div:_(s32) = G_UDIV %src1, %src2498 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)499 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src2500 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)501 %src1:_(s32) = COPY $vgpr0502 %src2:_(s32) = COPY $vgpr1503 %ptr1:_(p1) = COPY $vgpr2_vgpr3504 %ptr2:_(p1) = COPY $vgpr4_vgpr5505 %div:_(s32) = G_UDIV %src1:_(s32), %src2:_(s32)506 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)507 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)508 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)509...510---511name: test_sdiv_srem_different_blocks512tracksRegLiveness: true513body: |514 ; CHECK-LABEL: name: test_sdiv_srem_different_blocks515 ; CHECK: bb.0:516 ; CHECK-NEXT: successors: %bb.1(0x80000000)517 ; CHECK-NEXT: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5518 ; CHECK-NEXT: {{ $}}519 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0520 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1521 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3522 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2523 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)524 ; CHECK-NEXT: S_BRANCH %bb.1525 ; CHECK-NEXT: {{ $}}526 ; CHECK-NEXT: bb.1:527 ; CHECK-NEXT: liveins: $vgpr4_vgpr5528 ; CHECK-NEXT: {{ $}}529 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5530 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src2531 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)532 bb.0:533 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5534 %src1:_(s32) = COPY $vgpr0535 %src2:_(s32) = COPY $vgpr1536 %ptr1:_(p1) = COPY $vgpr2_vgpr3537 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)538 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)539 S_BRANCH %bb.1540 bb.1:541 liveins: $vgpr4_vgpr5542 %ptr2:_(p1) = COPY $vgpr4_vgpr5543 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)544 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)545...546