summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-10-09 22:44:49 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-10-09 22:44:49 +0000
commit85dfa82302238eddf66d9fdedf565ea4d4254136 (patch)
tree86d0e82f793aed624c21d9af115a12cfd41d4433 /llvm/test
parent001826835a9b1381776e7c1c3b0ab7c8979fe555 (diff)
downloadbcm5719-llvm-85dfa82302238eddf66d9fdedf565ea4d4254136.tar.gz
bcm5719-llvm-85dfa82302238eddf66d9fdedf565ea4d4254136.zip
AMDGPU/GlobalISel: Fix crash on wide constant load with VGPR pointer
This was ignoring the register bank of the input pointer, and isUniformMMO seems overly aggressive. This will now conservatively assume a VGPR in cases where the incoming bank hasn't been determined yet (i.e. is from a loop phi). llvm-svn: 374255
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-load.mir46
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-load.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-load.mir
index 49ac13f6666..d8bd4f777b4 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-load.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-load.mir
@@ -69,6 +69,8 @@
define amdgpu_kernel void @load_constant_i32_uniform_align2() {ret void}
define amdgpu_kernel void @load_constant_i32_uniform_align1() {ret void}
define amdgpu_kernel void @load_private_uniform_sgpr_i32() {ret void}
+ define amdgpu_kernel void @load_constant_v8i32_vgpr_crash() { ret void }
+ define amdgpu_kernel void @load_constant_v8i32_vgpr_crash_loop_phi() { ret void }
declare i32 @llvm.amdgcn.workitem.id.x() #0
attributes #0 = { nounwind readnone }
@@ -652,3 +654,47 @@ body: |
%0:_(p5) = COPY $sgpr0
%1:_(s32) = G_LOAD %0 :: (load 4, addrspace 5, align 4)
...
+
+---
+name: load_constant_v8i32_vgpr_crash
+legalized: true
+tracksRegLiveness: true
+
+body: |
+ bb.0:
+ liveins: $vgpr0_vgpr1
+
+ ; CHECK-LABEL: name: load_constant_v8i32_vgpr_crash
+ ; CHECK: %0:vgpr(p4) = COPY $vgpr0_vgpr1
+ ; CHECK: vgpr(<4 x s32>) = G_LOAD %0(p4)
+ ; CHECK: vgpr(<4 x s32>) = G_LOAD
+ ; CHECK: G_CONCAT_VECTORS
+ %0:_(p4) = COPY $vgpr0_vgpr1
+ %1:_(<8 x s32>) = G_LOAD %0 :: (load 32, addrspace 4)
+...
+
+---
+name: load_constant_v8i32_vgpr_crash_loop_phi
+legalized: true
+tracksRegLiveness: true
+
+body: |
+ bb.0:
+ liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
+
+ ; CHECK-LABEL: name: load_constant_v8i32_vgpr_crash_loop_phi
+ ; CHECK: G_PHI
+ ; CHECK: vgpr(<4 x s32>) = G_LOAD
+ ; CHECK: vgpr(<4 x s32>) = G_LOAD
+ ; CHECK: G_CONCAT_VECTORS
+
+ %0:_(p4) = COPY $sgpr0_sgpr1
+ %1:_(p4) = COPY $sgpr2_sgpr3
+ G_BR %bb.1
+
+ bb.1:
+ %2:_(p4) = G_PHI %0, %bb.0, %4, %bb.1
+ %3:_(<8 x s32>) = G_LOAD %2 :: (load 32, addrspace 4)
+ %4:_(p4) = COPY %1
+ G_BR %bb.1
+...
OpenPOWER on IntegriCloud