R600: Re-enable sub-reg liveness

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
This commit is contained in:
Tom Stellard 2015-06-04 01:20:04 +00:00
parent c212856f78
commit 8c009e3943
4 changed files with 5 additions and 38 deletions

View File

@ -272,7 +272,7 @@ public:
}
bool enableSubRegLiveness() const override {
return false;
return true;
}
};

View 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

View 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

View 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>