233 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-postlegalizer-combiner -verify-machineinstrs -o - %s | FileCheck %s3 4# Post-legalizer should not generate divrem instruction.5---6name: test_sdiv_srem7tracksRegLiveness: true8legalized: true9body: |10 bb.0:11 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr512 ; CHECK-LABEL: name: test_sdiv_srem13 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr514 ; CHECK-NEXT: {{ $}}15 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr016 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr117 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr318 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr519 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src220 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)21 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src222 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)23 %src1:_(s32) = COPY $vgpr024 %src2:_(s32) = COPY $vgpr125 %ptr1:_(p1) = COPY $vgpr2_vgpr326 %ptr2:_(p1) = COPY $vgpr4_vgpr527 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)28 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)29 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)30 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)31...32---33name: test_srem_sdiv34tracksRegLiveness: true35legalized: true36body: |37 bb.0:38 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr539 ; CHECK-LABEL: name: test_srem_sdiv40 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr541 ; CHECK-NEXT: {{ $}}42 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr043 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr144 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr345 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr546 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src247 ; CHECK-NEXT: G_STORE %rem(s32), %ptr1(p1) :: (store (s32), addrspace 1)48 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src249 ; CHECK-NEXT: G_STORE %div(s32), %ptr2(p1) :: (store (s32), addrspace 1)50 %src1:_(s32) = COPY $vgpr051 %src2:_(s32) = COPY $vgpr152 %ptr1:_(p1) = COPY $vgpr2_vgpr353 %ptr2:_(p1) = COPY $vgpr4_vgpr554 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)55 G_STORE %rem:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)56 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)57 G_STORE %div:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)58...59---60name: test_udiv_urem61tracksRegLiveness: true62legalized: true63body: |64 bb.0:65 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr566 ; CHECK-LABEL: name: test_udiv_urem67 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr568 ; CHECK-NEXT: {{ $}}69 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr070 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr171 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr372 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr573 ; CHECK-NEXT: %div:_(s32) = G_UDIV %src1, %src274 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)75 ; CHECK-NEXT: %rem:_(s32) = G_UREM %src1, %src276 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)77 %src1:_(s32) = COPY $vgpr078 %src2:_(s32) = COPY $vgpr179 %ptr1:_(p1) = COPY $vgpr2_vgpr380 %ptr2:_(p1) = COPY $vgpr4_vgpr581 %div:_(s32) = G_UDIV %src1:_(s32), %src2:_(s32)82 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)83 %rem:_(s32) = G_UREM %src1:_(s32), %src2:_(s32)84 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)85...86---87name: test_urem_udiv88tracksRegLiveness: true89legalized: true90body: |91 bb.0:92 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr593 ; CHECK-LABEL: name: test_urem_udiv94 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr595 ; CHECK-NEXT: {{ $}}96 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr097 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr198 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr399 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5100 ; CHECK-NEXT: %rem:_(s32) = G_UREM %src1, %src2101 ; CHECK-NEXT: G_STORE %rem(s32), %ptr1(p1) :: (store (s32), addrspace 1)102 ; CHECK-NEXT: %div:_(s32) = G_UDIV %src1, %src2103 ; CHECK-NEXT: G_STORE %div(s32), %ptr2(p1) :: (store (s32), addrspace 1)104 %src1:_(s32) = COPY $vgpr0105 %src2:_(s32) = COPY $vgpr1106 %ptr1:_(p1) = COPY $vgpr2_vgpr3107 %ptr2:_(p1) = COPY $vgpr4_vgpr5108 %rem:_(s32) = G_UREM %src1:_(s32), %src2:_(s32)109 G_STORE %rem:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)110 %div:_(s32) = G_UDIV %src1:_(s32), %src2:_(s32)111 G_STORE %div:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)112...113---114name: test_sdiv_srem_v2115tracksRegLiveness: true116legalized: true117body: |118 bb.0:119 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7120 ; CHECK-LABEL: name: test_sdiv_srem_v2121 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7122 ; CHECK-NEXT: {{ $}}123 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1124 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3125 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr5126 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr7127 ; CHECK-NEXT: %div:_(<2 x s32>) = G_SDIV %src1, %src2128 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)129 ; CHECK-NEXT: %rem:_(<2 x s32>) = G_SREM %src1, %src2130 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)131 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1132 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3133 %ptr1:_(p1) = COPY $vgpr4_vgpr5134 %ptr2:_(p1) = COPY $vgpr6_vgpr7135 %div:_(<2 x s32>) = G_SDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)136 G_STORE %div:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)137 %rem:_(<2 x s32>) = G_SREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)138 G_STORE %rem:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)139...140---141name: test_udiv_urem_v2142tracksRegLiveness: true143legalized: true144body: |145 bb.0:146 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7147 ; CHECK-LABEL: name: test_udiv_urem_v2148 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1151 ; CHECK-NEXT: %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3152 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr4_vgpr5153 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr6_vgpr7154 ; CHECK-NEXT: %div:_(<2 x s32>) = G_UDIV %src1, %src2155 ; CHECK-NEXT: G_STORE %div(<2 x s32>), %ptr1(p1) :: (store (<2 x s32>), align 4, addrspace 1)156 ; CHECK-NEXT: %rem:_(<2 x s32>) = G_UREM %src1, %src2157 ; CHECK-NEXT: G_STORE %rem(<2 x s32>), %ptr2(p1) :: (store (<2 x s32>), align 4, addrspace 1)158 %src1:_(<2 x s32>) = COPY $vgpr0_vgpr1159 %src2:_(<2 x s32>) = COPY $vgpr2_vgpr3160 %ptr1:_(p1) = COPY $vgpr4_vgpr5161 %ptr2:_(p1) = COPY $vgpr6_vgpr7162 %div:_(<2 x s32>) = G_UDIV %src1:_(<2 x s32>), %src2:_(<2 x s32>)163 G_STORE %div:_(<2 x s32>), %ptr1:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)164 %rem:_(<2 x s32>) = G_UREM %src1:_(<2 x s32>), %src2:_(<2 x s32>)165 G_STORE %rem:_(<2 x s32>), %ptr2:_(p1) :: (store (<2 x s32>), addrspace 1, align 4)166...167---168name: test_sdiv_srem_extra_sdiv169tracksRegLiveness: true170legalized: true171body: |172 bb.0:173 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7174 ; CHECK-LABEL: name: test_sdiv_srem_extra_sdiv175 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7176 ; CHECK-NEXT: {{ $}}177 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0178 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1179 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3180 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5181 ; CHECK-NEXT: %ptr3:_(p1) = COPY $vgpr6_vgpr7182 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2183 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)184 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src2185 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)186 ; CHECK-NEXT: %div2:_(s32) = G_SDIV %src1, %src2187 ; CHECK-NEXT: G_STORE %div2(s32), %ptr3(p1) :: (store (s32), addrspace 1)188 %src1:_(s32) = COPY $vgpr0189 %src2:_(s32) = COPY $vgpr1190 %ptr1:_(p1) = COPY $vgpr2_vgpr3191 %ptr2:_(p1) = COPY $vgpr4_vgpr5192 %ptr3:_(p1) = COPY $vgpr6_vgpr7193 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)194 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)195 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)196 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)197 %div2:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)198 G_STORE %div2:_(s32), %ptr3:_(p1) :: (store (s32), addrspace 1, align 4)199...200---201name: test_sdiv_srem_extra_srem202tracksRegLiveness: true203legalized: true204body: |205 bb.0:206 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7207 ; CHECK-LABEL: name: test_sdiv_srem_extra_srem208 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7209 ; CHECK-NEXT: {{ $}}210 ; CHECK-NEXT: %src1:_(s32) = COPY $vgpr0211 ; CHECK-NEXT: %src2:_(s32) = COPY $vgpr1212 ; CHECK-NEXT: %ptr1:_(p1) = COPY $vgpr2_vgpr3213 ; CHECK-NEXT: %ptr2:_(p1) = COPY $vgpr4_vgpr5214 ; CHECK-NEXT: %ptr3:_(p1) = COPY $vgpr6_vgpr7215 ; CHECK-NEXT: %div:_(s32) = G_SDIV %src1, %src2216 ; CHECK-NEXT: G_STORE %div(s32), %ptr1(p1) :: (store (s32), addrspace 1)217 ; CHECK-NEXT: %rem:_(s32) = G_SREM %src1, %src2218 ; CHECK-NEXT: G_STORE %rem(s32), %ptr2(p1) :: (store (s32), addrspace 1)219 ; CHECK-NEXT: %rem2:_(s32) = G_SREM %src1, %src2220 ; CHECK-NEXT: G_STORE %rem2(s32), %ptr3(p1) :: (store (s32), addrspace 1)221 %src1:_(s32) = COPY $vgpr0222 %src2:_(s32) = COPY $vgpr1223 %ptr1:_(p1) = COPY $vgpr2_vgpr3224 %ptr2:_(p1) = COPY $vgpr4_vgpr5225 %ptr3:_(p1) = COPY $vgpr6_vgpr7226 %div:_(s32) = G_SDIV %src1:_(s32), %src2:_(s32)227 G_STORE %div:_(s32), %ptr1:_(p1) :: (store (s32), addrspace 1, align 4)228 %rem:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)229 G_STORE %rem:_(s32), %ptr2:_(p1) :: (store (s32), addrspace 1, align 4)230 %rem2:_(s32) = G_SREM %src1:_(s32), %src2:_(s32)231 G_STORE %rem2:_(s32), %ptr3:_(p1) :: (store (s32), addrspace 1, align 4)232...233