mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-05 11:17:53 +00:00
R600/SI: Use VSrc_* register classes as the default classes for types
Since the VSrc_* register classes contain both VGPRs and SGPRs, copies that used be emitted by isel like this: SGPR = COPY VGPR Will now be emitted like this: VSrC = COPY VGPR This patch also adds a pass that tries to identify and fix situations where a VGPR to SGPR copy may occur. Hopefully, these changes will make it impossible for the compiler to generate illegal VGPR to SGPR copies. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187831 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -32,7 +32,7 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) :
|
||||
AMDGPUTargetLowering(TM) {
|
||||
|
||||
addRegisterClass(MVT::i1, &AMDGPU::SReg_64RegClass);
|
||||
addRegisterClass(MVT::i64, &AMDGPU::SReg_64RegClass);
|
||||
addRegisterClass(MVT::i64, &AMDGPU::VSrc_64RegClass);
|
||||
|
||||
addRegisterClass(MVT::v2i1, &AMDGPU::VReg_64RegClass);
|
||||
addRegisterClass(MVT::v4i1, &AMDGPU::VReg_128RegClass);
|
||||
@@ -41,14 +41,14 @@ SITargetLowering::SITargetLowering(TargetMachine &TM) :
|
||||
addRegisterClass(MVT::v32i8, &AMDGPU::SReg_256RegClass);
|
||||
addRegisterClass(MVT::v64i8, &AMDGPU::SReg_512RegClass);
|
||||
|
||||
addRegisterClass(MVT::i32, &AMDGPU::VReg_32RegClass);
|
||||
addRegisterClass(MVT::f32, &AMDGPU::VReg_32RegClass);
|
||||
addRegisterClass(MVT::i32, &AMDGPU::VSrc_32RegClass);
|
||||
addRegisterClass(MVT::f32, &AMDGPU::VSrc_32RegClass);
|
||||
|
||||
addRegisterClass(MVT::v1i32, &AMDGPU::VReg_32RegClass);
|
||||
addRegisterClass(MVT::v1i32, &AMDGPU::VSrc_32RegClass);
|
||||
|
||||
addRegisterClass(MVT::v2i32, &AMDGPU::VReg_64RegClass);
|
||||
addRegisterClass(MVT::v2f32, &AMDGPU::VReg_64RegClass);
|
||||
addRegisterClass(MVT::f64, &AMDGPU::VReg_64RegClass);
|
||||
addRegisterClass(MVT::f64, &AMDGPU::VSrc_64RegClass);
|
||||
addRegisterClass(MVT::v2i32, &AMDGPU::VSrc_64RegClass);
|
||||
addRegisterClass(MVT::v2f32, &AMDGPU::VSrc_64RegClass);
|
||||
|
||||
addRegisterClass(MVT::v4i32, &AMDGPU::VReg_128RegClass);
|
||||
addRegisterClass(MVT::v4f32, &AMDGPU::VReg_128RegClass);
|
||||
@@ -1042,20 +1042,6 @@ MachineSDNode *SITargetLowering::AdjustRegClass(MachineSDNode *N,
|
||||
|
||||
switch (N->getMachineOpcode()) {
|
||||
default: return N;
|
||||
case AMDGPU::REG_SEQUENCE: {
|
||||
// MVT::i128 only use SGPRs, so i128 REG_SEQUENCEs don't need to be
|
||||
// rewritten.
|
||||
if (N->getValueType(0) == MVT::i128) {
|
||||
return N;
|
||||
}
|
||||
const SDValue Ops[] = {
|
||||
DAG.getTargetConstant(AMDGPU::VReg_64RegClassID, MVT::i32),
|
||||
N->getOperand(1) , N->getOperand(2),
|
||||
N->getOperand(3), N->getOperand(4)
|
||||
};
|
||||
return DAG.getMachineNode(AMDGPU::REG_SEQUENCE, DL, MVT::i64, Ops);
|
||||
}
|
||||
|
||||
case AMDGPU::S_LOAD_DWORD_IMM:
|
||||
NewOpcode = AMDGPU::BUFFER_LOAD_DWORD_ADDR64;
|
||||
// Fall-through
|
||||
|
Reference in New Issue
Block a user