mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
R600: Turn BUILD_VECTOR into Reg_Sequence
Reviewed-by: Tom Stellard <thomas.stellard at amd.com> llvm-svn: 176487
This commit is contained in:
parent
03f33e1dfc
commit
9ca3635aac
@ -162,6 +162,35 @@ SDNode *AMDGPUDAGToDAGISel::Select(SDNode *N) {
|
||||
}
|
||||
switch (Opc) {
|
||||
default: break;
|
||||
case ISD::BUILD_VECTOR: {
|
||||
const AMDGPUSubtarget &ST = TM.getSubtarget<AMDGPUSubtarget>();
|
||||
if (ST.device()->getGeneration() > AMDGPUDeviceInfo::HD6XXX) {
|
||||
break;
|
||||
}
|
||||
// BUILD_VECTOR is usually lowered into an IMPLICIT_DEF + 4 INSERT_SUBREG
|
||||
// that adds a 128 bits reg copy when going through TwoAddressInstructions
|
||||
// pass. We want to avoid 128 bits copies as much as possible because they
|
||||
// can't be bundled by our scheduler.
|
||||
SDValue RegSeqArgs[9] = {
|
||||
CurDAG->getTargetConstant(AMDGPU::R600_Reg128RegClassID, MVT::i32),
|
||||
SDValue(), CurDAG->getTargetConstant(AMDGPU::sub0, MVT::i32),
|
||||
SDValue(), CurDAG->getTargetConstant(AMDGPU::sub1, MVT::i32),
|
||||
SDValue(), CurDAG->getTargetConstant(AMDGPU::sub2, MVT::i32),
|
||||
SDValue(), CurDAG->getTargetConstant(AMDGPU::sub3, MVT::i32)
|
||||
};
|
||||
bool IsRegSeq = true;
|
||||
for (unsigned i = 0; i < N->getNumOperands(); i++) {
|
||||
if (dyn_cast<RegisterSDNode>(N->getOperand(i))) {
|
||||
IsRegSeq = false;
|
||||
break;
|
||||
}
|
||||
RegSeqArgs[2 * i + 1] = N->getOperand(i);
|
||||
}
|
||||
if (!IsRegSeq)
|
||||
break;
|
||||
return CurDAG->SelectNodeTo(N, AMDGPU::REG_SEQUENCE, N->getVTList(),
|
||||
RegSeqArgs, 2 * N->getNumOperands() + 1);
|
||||
}
|
||||
case ISD::ConstantFP:
|
||||
case ISD::Constant: {
|
||||
const AMDGPUSubtarget &ST = TM.getSubtarget<AMDGPUSubtarget>();
|
||||
|
@ -37,7 +37,6 @@ add_llvm_target(R600CodeGen
|
||||
R600ExpandSpecialInstrs.cpp
|
||||
R600InstrInfo.cpp
|
||||
R600ISelLowering.cpp
|
||||
R600LowerConstCopy.cpp
|
||||
R600MachineFunctionInfo.cpp
|
||||
R600RegisterInfo.cpp
|
||||
SIAnnotateControlFlow.cpp
|
||||
|
@ -1,12 +1,12 @@
|
||||
;RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
|
||||
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: MUL_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: MUL_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: MUL_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: RECIP_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: MUL_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
;CHECK: MUL_IEEE T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
|
||||
|
||||
define void @test(<4 x float> addrspace(1)* %out, <4 x float> addrspace(1)* %in) {
|
||||
|
Loading…
Reference in New Issue
Block a user