mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
6f935bda6e
This commit allows v_cndmask_b32_e64 with abs, neg source modifiers on src0, src1 to be assembled and disassembled. This does appear to be allowed, even though they are floating point modifiers and the operand type is b32. To do this, I added src0_modifiers and src1_modifiers to the MachineInstr, which involved fixing up several places in codegen and mir tests. Differential Revision: https://reviews.llvm.org/D59191 Change-Id: I69bf4a8c73ebc65744f6110bb8fc4e937d79fbea llvm-svn: 356398
157 lines
5.6 KiB
YAML
157 lines
5.6 KiB
YAML
# RUN: llc -march=amdgcn -mcpu=gfx803 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,VI %s
|
|
# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s
|
|
|
|
# If there's a base offset, check that SILoadStoreOptimizer creates
|
|
# V_ADD_{I|U}32_e64 for that offset; _e64 uses a vreg for the carry (rather than
|
|
# $vcc, which is used in _e32); this ensures that $vcc is not inadvertently
|
|
# clobbered.
|
|
|
|
# GCN-LABEL: name: ds_combine_base_offset{{$}}
|
|
|
|
# VI: V_ADD_I32_e64 %6, %0,
|
|
# VI-NEXT: DS_WRITE2_B32 killed %7, %0, %3, 0, 8,
|
|
# VI: V_ADD_I32_e64 %10, %3,
|
|
# VI-NEXT: DS_READ2_B32 killed %11, 0, 8,
|
|
|
|
# GFX9: V_ADD_U32_e64 %6, %0,
|
|
# GFX9-NEXT: DS_WRITE2_B32_gfx9 killed %7, %0, %3, 0, 8,
|
|
# GFX9: V_ADD_U32_e64 %9, %3,
|
|
# GFX9-NEXT: DS_READ2_B32_gfx9 killed %10, 0, 8,
|
|
|
|
--- |
|
|
@0 = internal unnamed_addr addrspace(3) global [256 x float] undef, align 4
|
|
|
|
define amdgpu_kernel void @ds_combine_base_offset() {
|
|
bb.0:
|
|
br label %bb2
|
|
|
|
bb1:
|
|
ret void
|
|
|
|
bb2:
|
|
%tmp = getelementptr inbounds [256 x float], [256 x float] addrspace(3)* @0, i32 0, i32 0
|
|
%tmp1 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 8
|
|
%tmp2 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 16
|
|
%tmp3 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 24
|
|
br label %bb1
|
|
}
|
|
|
|
define amdgpu_kernel void @ds_combine_base_offset_subreg() {
|
|
bb.0:
|
|
br label %bb2
|
|
|
|
bb1:
|
|
ret void
|
|
|
|
bb2:
|
|
%tmp = getelementptr inbounds [256 x float], [256 x float] addrspace(3)* @0, i32 0, i32 0
|
|
%tmp1 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 8
|
|
%tmp2 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 16
|
|
%tmp3 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 24
|
|
br label %bb1
|
|
}
|
|
|
|
define amdgpu_kernel void @ds_combine_subreg() {
|
|
bb.0:
|
|
br label %bb2
|
|
|
|
bb1:
|
|
ret void
|
|
|
|
bb2:
|
|
%tmp = getelementptr inbounds [256 x float], [256 x float] addrspace(3)* @0, i32 0, i32 0
|
|
%tmp1 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 8
|
|
%tmp2 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 16
|
|
%tmp3 = getelementptr inbounds float, float addrspace(3)* %tmp, i32 24
|
|
br label %bb1
|
|
}
|
|
---
|
|
name: ds_combine_base_offset
|
|
body: |
|
|
bb.0:
|
|
%0:vgpr_32 = IMPLICIT_DEF
|
|
S_BRANCH %bb.2
|
|
|
|
bb.1:
|
|
S_ENDPGM 0
|
|
|
|
bb.2:
|
|
%1:sreg_64_xexec = V_CMP_NE_U32_e64 %0, 0, implicit $exec
|
|
%2:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %1, implicit $exec
|
|
V_CMP_NE_U32_e32 1, %2, implicit-def $vcc, implicit $exec
|
|
DS_WRITE_B32 %0, %0, 1024, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp)
|
|
%3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
|
|
DS_WRITE_B32 %0, %3, 1056, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp1)
|
|
%4:vgpr_32 = DS_READ_B32 %3, 1088, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp2)
|
|
%5:vgpr_32 = DS_READ_B32 %3, 1120, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp3)
|
|
$vcc = S_AND_B64 $exec, $vcc, implicit-def $scc
|
|
S_CBRANCH_VCCNZ %bb.1, implicit $vcc
|
|
S_BRANCH %bb.1
|
|
...
|
|
|
|
# GCN-LABEL: name: ds_combine_base_offset_subreg{{$}}
|
|
|
|
# VI: V_ADD_I32_e64 %6, %0.sub0,
|
|
# VI-NEXT: DS_WRITE2_B32 killed %7, %0.sub0, %3.sub0, 0, 8,
|
|
# VI: V_ADD_I32_e64 %10, %3.sub0,
|
|
# VI-NEXT: DS_READ2_B32 killed %11, 0, 8,
|
|
|
|
# GFX9: V_ADD_U32_e64 %6, %0.sub0,
|
|
# GFX9-NEXT: DS_WRITE2_B32_gfx9 killed %7, %0.sub0, %3.sub0, 0, 8,
|
|
# GFX9: V_ADD_U32_e64 %9, %3.sub0,
|
|
# GFX9-NEXT: DS_READ2_B32_gfx9 killed %10, 0, 8,
|
|
---
|
|
name: ds_combine_base_offset_subreg
|
|
body: |
|
|
bb.0:
|
|
%0:vreg_64 = IMPLICIT_DEF
|
|
S_BRANCH %bb.2
|
|
|
|
bb.1:
|
|
S_ENDPGM 0
|
|
|
|
bb.2:
|
|
%1:sreg_64_xexec = V_CMP_NE_U32_e64 %0.sub0, 0, implicit $exec
|
|
%2:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %1, implicit $exec
|
|
V_CMP_NE_U32_e32 1, %2, implicit-def $vcc, implicit $exec
|
|
DS_WRITE_B32 %0.sub0, %0.sub0, 1024, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp)
|
|
undef %3.sub0:vreg_64 = V_MOV_B32_e32 0, implicit $exec
|
|
DS_WRITE_B32 %0.sub0, %3.sub0, 1056, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp1)
|
|
%4:vgpr_32 = DS_READ_B32 %3.sub0, 1088, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp2)
|
|
%5:vgpr_32 = DS_READ_B32 %3.sub0, 1120, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp3)
|
|
$vcc = S_AND_B64 $exec, $vcc, implicit-def $scc
|
|
S_CBRANCH_VCCNZ %bb.1, implicit $vcc
|
|
S_BRANCH %bb.1
|
|
...
|
|
|
|
# GCN-LABEL: name: ds_combine_subreg{{$}}
|
|
|
|
# VI: DS_WRITE2_B32 %0.sub0, %0.sub0, %3.sub0, 0, 8,
|
|
# VI: DS_READ2_B32 %3.sub0, 0, 8,
|
|
|
|
# GFX9: DS_WRITE2_B32_gfx9 %0.sub0, %0.sub0, %3.sub0, 0, 8,
|
|
# GFX9: DS_READ2_B32_gfx9 %3.sub0, 0, 8,
|
|
---
|
|
name: ds_combine_subreg
|
|
body: |
|
|
bb.0:
|
|
%0:vreg_64 = IMPLICIT_DEF
|
|
S_BRANCH %bb.2
|
|
|
|
bb.1:
|
|
S_ENDPGM 0
|
|
|
|
bb.2:
|
|
%1:sreg_64_xexec = V_CMP_NE_U32_e64 %0.sub0, 0, implicit $exec
|
|
%2:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, 1, %1, implicit $exec
|
|
V_CMP_NE_U32_e32 1, %2, implicit-def $vcc, implicit $exec
|
|
DS_WRITE_B32 %0.sub0, %0.sub0, 0, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp)
|
|
undef %3.sub0:vreg_64 = V_MOV_B32_e32 0, implicit $exec
|
|
DS_WRITE_B32 %0.sub0, %3.sub0, 32, 0, implicit $m0, implicit $exec :: (store 4 into %ir.tmp1)
|
|
%4:vgpr_32 = DS_READ_B32 %3.sub0, 0, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp2)
|
|
%5:vgpr_32 = DS_READ_B32 %3.sub0, 32, 0, implicit $m0, implicit $exec :: (load 4 from %ir.tmp3)
|
|
$vcc = S_AND_B64 $exec, $vcc, implicit-def $scc
|
|
S_CBRANCH_VCCNZ %bb.1, implicit $vcc
|
|
S_BRANCH %bb.1
|
|
...
|