R600: Re-enable sub-reg liveness
authorTom Stellard <thomas.stellard@amd.com>
Thu, 4 Jun 2015 01:20:04 +0000 (01:20 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Thu, 4 Jun 2015 01:20:04 +0000 (01:20 +0000)
The bug in the R600 backend that this uncovered has been fixed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238999 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/AMDGPUSubtarget.h
test/CodeGen/R600/coalescer_remat.ll
test/CodeGen/R600/imm.ll
test/CodeGen/R600/subreg-eliminate-dead.ll

index b262cdf5771214c50aa2830e924f9c39e3bd8251..a5a901c739d47b044b5eac1c19898df2d21880f7 100644 (file)
@@ -272,7 +272,7 @@ public:
   }
 
   bool enableSubRegLiveness() const override {
-    return false;
+    return true;
   }
 };
 
index 8795174bc76ee39cbca784a59d7583b5e7e0e2a2..96730bcf2e8ff83155b76c7a7a0425c40ca47485 100644 (file)
@@ -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
index 8917cd6dba339273fe61d5b16aa73a78f24da2a9..12eed550eb1fecf27de2fbf5d023282fbc6144b9 100644 (file)
@@ -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
index a2f3c231687ad6c8046fdb2b4196dce1a2b3df92..8bd995a8ecbbb44c6d9367724d4421320e1b1d57 100644 (file)
@@ -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, <i32 0, i32 1, i32 2, i32 3>
   %v3 = sext <4 x i1> %v0 to <4 x i32>