From 1ba52feb9673f805c5b74cf185e5384f23032522 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 4 Jun 2015 01:20:04 +0000 Subject: [PATCH] R600: Re-enable sub-reg liveness The bug in the R600 backend that this uncovered has been fixed. llvm-svn: 238999 --- llvm/lib/Target/R600/AMDGPUSubtarget.h | 2 +- llvm/test/CodeGen/R600/coalescer_remat.ll | 3 ++- llvm/test/CodeGen/R600/imm.ll | 2 +- llvm/test/CodeGen/R600/subreg-eliminate-dead.ll | 36 +------------------------ 4 files changed, 5 insertions(+), 38 deletions(-) diff --git a/llvm/lib/Target/R600/AMDGPUSubtarget.h b/llvm/lib/Target/R600/AMDGPUSubtarget.h index b262cdf..a5a901c 100644 --- a/llvm/lib/Target/R600/AMDGPUSubtarget.h +++ b/llvm/lib/Target/R600/AMDGPUSubtarget.h @@ -272,7 +272,7 @@ public: } bool enableSubRegLiveness() const override { - return false; + return true; } }; diff --git a/llvm/test/CodeGen/R600/coalescer_remat.ll b/llvm/test/CodeGen/R600/coalescer_remat.ll index 8795174..96730bc 100644 --- a/llvm/test/CodeGen/R600/coalescer_remat.ll +++ b/llvm/test/CodeGen/R600/coalescer_remat.ll @@ -11,7 +11,8 @@ declare float @llvm.fma.f32(float, float, float) ; CHECK: v_mov_b32_e32 v{{[0-9]+}}, 0 ; CHECK: v_mov_b32_e32 v{{[0-9]+}}, 0 ; CHECK: v_mov_b32_e32 v{{[0-9]+}}, 0 -; CHECK: ; NumVgprs: 12 +; It's probably OK if this is slightly higher: +; CHECK: ; NumVgprs: 9 define void @foobar(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in, i32 %flag) { entry: %cmpflag = icmp eq i32 %flag, 1 diff --git a/llvm/test/CodeGen/R600/imm.ll b/llvm/test/CodeGen/R600/imm.ll index 8917cd6..12eed55 100644 --- a/llvm/test/CodeGen/R600/imm.ll +++ b/llvm/test/CodeGen/R600/imm.ll @@ -36,7 +36,7 @@ define void @store_imm_neg_0.0_i64(i64 addrspace(1) *%out) { ; CHECK-LABEL: {{^}}store_inline_imm_neg_0.0_i32: ; CHECK: v_mov_b32_e32 [[REG:v[0-9]+]], 0x80000000 -; CHECK-NEXT: buffer_store_dword [[REG]] +; CHECK: buffer_store_dword [[REG]] define void @store_inline_imm_neg_0.0_i32(i32 addrspace(1)* %out) { store i32 -2147483648, i32 addrspace(1)* %out ret void diff --git a/llvm/test/CodeGen/R600/subreg-eliminate-dead.ll b/llvm/test/CodeGen/R600/subreg-eliminate-dead.ll index a2f3c23..8bd995a 100644 --- a/llvm/test/CodeGen/R600/subreg-eliminate-dead.ll +++ b/llvm/test/CodeGen/R600/subreg-eliminate-dead.ll @@ -2,43 +2,9 @@ ; LiveRangeEdit::eliminateDeadDef did not update LiveInterval sub ranges ; properly. +; Just make sure this test doesn't crash. ; CHECK-LABEL: foobar: -; Output with subregister liveness disabled: -; CHECK: v_mov_b32_e32 v1, 1 -; CHECK: v_mov_b32_e32 v0, 0 -; CHECK: v_cmp_eq_i32_e32 vcc, s0, v0 -; CHECK: v_cmp_eq_i32_e64 s[0:1], s0, v1 -; CHECK: v_mov_b32_e32 v1, 3 -; CHECK: v_mov_b32_e32 v0, 2 -; CHECK: v_cmp_eq_i32_e64 s[2:3], s0, v0 -; CHECK: v_cmp_eq_i32_e64 s[4:5], s0, v1 -; CHECK: v_cndmask_b32_e64 v3, 0, -1, s[4:5] -; CHECK: v_cndmask_b32_e64 v2, 0, -1, s[2:3] -; CHECK: v_cndmask_b32_e64 v1, 0, -1, s[0:1] -; CHECK: v_cndmask_b32_e64 v0, 0, -1, vcc -; CHECK: v_cmp_ne_i32_e32 vcc, 0, v1 -; CHECK: v_cndmask_b32_e64 v1, 0, v0, vcc -; CHECK: s_mov_b32 s3, 0xf000 -; CHECK: s_mov_b32 s2, -1 -; CHECK: buffer_store_dwordx2 v[0:1], s[0:3], 0 ; CHECK: s_endpgm -; Output with subregister liveness enabled: -; XCHECK: v_mov_b32_e32 v1, 1 -; XCHECK: v_mov_b32_e32 v0, 0 -; XCHECK: v_cmp_eq_i32_e32 vcc, s0, v1 -; XCHECK: v_mov_b32_e32 v1, 3 -; XCHECK: v_mov_b32_e32 v0, 2 -; XCHECK: v_cmp_eq_i32_e64 s[0:1], s0, v0 -; XCHECK: v_cmp_eq_i32_e64 s[2:3], s0, v1 -; XCHECK: v_cndmask_b32_e64 v3, 0, -1, s[2:3] -; XCHECK: v_cndmask_b32_e64 v2, 0, -1, s[0:1] -; XCHECK: v_cndmask_b32_e64 v1, 0, -1, vcc -; XCHECK: v_cmp_ne_i32_e32 vcc, 0, v1 -; XCHECK: v_cndmask_b32_e64 v1, 0, v0, vcc -; XCHECK: s_mov_b32 s3, 0xf000 -; XCHECK: s_mov_b32 s2, -1 -; XCHECK: buffer_store_dwordx2 v[0:1], s[0:3], 0 -; XCHECK: s_endpgm define void @foobar() { %v0 = icmp eq <4 x i32> undef, %v3 = sext <4 x i1> %v0 to <4 x i32> -- 2.7.4