brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.9 KiB · 8af2783 Raw
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