mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
R600/SI: Re-order MUBUF operands to match asm strings.
llvm-svn: 231797
This commit is contained in:
parent
f486efe507
commit
78a9d058b0
@ -1863,10 +1863,10 @@ void SIInstrInfo::legalizeOperands(MachineInstr *MI) const {
|
||||
MachineInstr *Addr64 =
|
||||
BuildMI(MBB, MI, MI->getDebugLoc(), get(Addr64Opcode))
|
||||
.addOperand(*VData)
|
||||
.addOperand(*SRsrc)
|
||||
.addReg(AMDGPU::NoRegister) // Dummy value for vaddr.
|
||||
// This will be replaced later
|
||||
// with the new value of vaddr.
|
||||
.addOperand(*SRsrc)
|
||||
.addOperand(*SOffset)
|
||||
.addOperand(*Offset)
|
||||
.addImm(0) // glc
|
||||
@ -2051,11 +2051,10 @@ void SIInstrInfo::moveSMRDToVALU(MachineInstr *MI, MachineRegisterInfo &MRI) con
|
||||
.addImm(AMDGPU::sub3);
|
||||
MI->setDesc(get(NewOpcode));
|
||||
if (MI->getOperand(2).isReg()) {
|
||||
MI->getOperand(2).setReg(MI->getOperand(1).getReg());
|
||||
MI->getOperand(2).setReg(SRsrc);
|
||||
} else {
|
||||
MI->getOperand(2).ChangeToRegister(MI->getOperand(1).getReg(), false);
|
||||
MI->getOperand(2).ChangeToRegister(SRsrc, false);
|
||||
}
|
||||
MI->getOperand(1).setReg(SRsrc);
|
||||
MI->addOperand(*MBB->getParent(), MachineOperand::CreateImm(0));
|
||||
MI->addOperand(*MBB->getParent(), MachineOperand::CreateImm(ImmOffset));
|
||||
MI->addOperand(*MBB->getParent(), MachineOperand::CreateImm(0)); // glc
|
||||
|
@ -1911,7 +1911,7 @@ multiclass MUBUF_Load_Helper <mubuf op, string name, RegisterClass regClass,
|
||||
|
||||
let offen = 1, idxen = 0 in {
|
||||
defm _OFFEN : MUBUF_m <op, name#"_offen", (outs regClass:$vdata),
|
||||
(ins SReg_128:$srsrc, VGPR_32:$vaddr,
|
||||
(ins VGPR_32:$vaddr, SReg_128:$srsrc,
|
||||
SCSrc_32:$soffset, mbuf_offset:$offset, glc:$glc, slc:$slc,
|
||||
tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset offen"#"$offset"#"$glc"#"$slc"#"$tfe", []>;
|
||||
@ -1919,7 +1919,7 @@ multiclass MUBUF_Load_Helper <mubuf op, string name, RegisterClass regClass,
|
||||
|
||||
let offen = 0, idxen = 1 in {
|
||||
defm _IDXEN : MUBUF_m <op, name#"_idxen", (outs regClass:$vdata),
|
||||
(ins SReg_128:$srsrc, VGPR_32:$vaddr,
|
||||
(ins VGPR_32:$vaddr, SReg_128:$srsrc,
|
||||
SCSrc_32:$soffset, mbuf_offset:$offset, glc:$glc,
|
||||
slc:$slc, tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset idxen"#"$offset"#"$glc"#"$slc"#"$tfe", []>;
|
||||
@ -1927,14 +1927,14 @@ multiclass MUBUF_Load_Helper <mubuf op, string name, RegisterClass regClass,
|
||||
|
||||
let offen = 1, idxen = 1 in {
|
||||
defm _BOTHEN : MUBUF_m <op, name#"_bothen", (outs regClass:$vdata),
|
||||
(ins SReg_128:$srsrc, VReg_64:$vaddr, SCSrc_32:$soffset,
|
||||
(ins VReg_64:$vaddr, SReg_128:$srsrc, SCSrc_32:$soffset,
|
||||
mbuf_offset:$offset, glc:$glc, slc:$slc, tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset idxen offen"#"$offset"#"$glc"#"$slc"#"$tfe", []>;
|
||||
}
|
||||
|
||||
let offen = 0, idxen = 0 in {
|
||||
defm _ADDR64 : MUBUFAddr64_m <op, name#"_addr64", (outs regClass:$vdata),
|
||||
(ins SReg_128:$srsrc, VReg_64:$vaddr,
|
||||
(ins VReg_64:$vaddr, SReg_128:$srsrc,
|
||||
SCSrc_32:$soffset, mbuf_offset:$offset,
|
||||
glc:$glc, slc:$slc, tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset addr64"#"$offset"#
|
||||
@ -1951,7 +1951,7 @@ multiclass MUBUF_Store_Helper <mubuf op, string name, RegisterClass vdataClass,
|
||||
ValueType store_vt = i32, SDPatternOperator st = null_frag> {
|
||||
let mayLoad = 0, mayStore = 1 in {
|
||||
defm : MUBUF_m <op, name, (outs),
|
||||
(ins vdataClass:$vdata, SReg_128:$srsrc, VGPR_32:$vaddr, SCSrc_32:$soffset,
|
||||
(ins vdataClass:$vdata, VGPR_32:$vaddr, SReg_128:$srsrc, SCSrc_32:$soffset,
|
||||
mbuf_offset:$offset, offen:$offen, idxen:$idxen, glc:$glc, slc:$slc,
|
||||
tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset"#"$offen"#"$idxen"#"$offset"#
|
||||
@ -1968,7 +1968,7 @@ multiclass MUBUF_Store_Helper <mubuf op, string name, RegisterClass vdataClass,
|
||||
|
||||
let offen = 1, idxen = 0 in {
|
||||
defm _OFFEN : MUBUF_m <op, name#"_offen", (outs),
|
||||
(ins vdataClass:$vdata, SReg_128:$srsrc, VGPR_32:$vaddr,
|
||||
(ins vdataClass:$vdata, VGPR_32:$vaddr, SReg_128:$srsrc,
|
||||
SCSrc_32:$soffset, mbuf_offset:$offset, glc:$glc,
|
||||
slc:$slc, tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset offen"#"$offset"#
|
||||
@ -1977,8 +1977,8 @@ multiclass MUBUF_Store_Helper <mubuf op, string name, RegisterClass vdataClass,
|
||||
|
||||
let offen = 0, idxen = 0 in {
|
||||
defm _ADDR64 : MUBUFAddr64_m <op, name#"_addr64", (outs),
|
||||
(ins vdataClass:$vdata, SReg_128:$srsrc,
|
||||
VReg_64:$vaddr, SCSrc_32:$soffset,
|
||||
(ins vdataClass:$vdata, VReg_64:$vaddr, SReg_128:$srsrc,
|
||||
SCSrc_32:$soffset,
|
||||
mbuf_offset:$offset, glc:$glc, slc:$slc,
|
||||
tfe:$tfe),
|
||||
name#" $vdata, $vaddr, $srsrc, $soffset addr64"#
|
||||
|
@ -2118,7 +2118,7 @@ def : Pat <
|
||||
/* int_SI_vs_load_input */
|
||||
def : Pat<
|
||||
(SIload_input v4i32:$tlst, imm:$attr_offset, i32:$buf_idx_vgpr),
|
||||
(BUFFER_LOAD_FORMAT_XYZW_IDXEN $tlst, $buf_idx_vgpr, 0, imm:$attr_offset, 0, 0, 0)
|
||||
(BUFFER_LOAD_FORMAT_XYZW_IDXEN $buf_idx_vgpr, $tlst, 0, imm:$attr_offset, 0, 0, 0)
|
||||
>;
|
||||
|
||||
/* int_SI_export */
|
||||
@ -2812,7 +2812,7 @@ def : Ext32Pat <anyext>;
|
||||
// Offset in an 32Bit VGPR
|
||||
def : Pat <
|
||||
(SIload_constant v4i32:$sbase, i32:$voff),
|
||||
(BUFFER_LOAD_DWORD_OFFEN $sbase, $voff, 0, 0, 0, 0, 0)
|
||||
(BUFFER_LOAD_DWORD_OFFEN $voff, $sbase, 0, 0, 0, 0, 0)
|
||||
>;
|
||||
|
||||
// The multiplication scales from [0,1] to the unsigned integer range
|
||||
@ -2974,7 +2974,7 @@ multiclass MUBUFLoad_Pattern <MUBUF Instr_ADDR64, ValueType vt,
|
||||
def : Pat <
|
||||
(vt (constant_ld (MUBUFAddr64 v4i32:$srsrc, i64:$vaddr, i32:$soffset,
|
||||
i16:$offset, i1:$glc, i1:$slc, i1:$tfe))),
|
||||
(Instr_ADDR64 $srsrc, $vaddr, $soffset, $offset, $glc, $slc, $tfe)
|
||||
(Instr_ADDR64 $vaddr, $srsrc, $soffset, $offset, $glc, $slc, $tfe)
|
||||
>;
|
||||
}
|
||||
|
||||
@ -2991,7 +2991,7 @@ defm : MUBUFLoad_Pattern <BUFFER_LOAD_DWORDX4_ADDR64, v4i32, constant_load>;
|
||||
class MUBUFScratchLoadPat <MUBUF Instr, ValueType vt, PatFrag ld> : Pat <
|
||||
(vt (ld (MUBUFScratch v4i32:$srsrc, i32:$vaddr,
|
||||
i32:$soffset, u16imm:$offset))),
|
||||
(Instr $srsrc, $vaddr, $soffset, $offset, 0, 0, 0)
|
||||
(Instr $vaddr, $srsrc, $soffset, $offset, 0, 0, 0)
|
||||
>;
|
||||
|
||||
def : MUBUFScratchLoadPat <BUFFER_LOAD_SBYTE_OFFEN, i32, sextloadi8_private>;
|
||||
@ -3018,7 +3018,7 @@ multiclass MUBUF_Load_Dword <ValueType vt, MUBUF offset, MUBUF offen, MUBUF idxe
|
||||
(vt (int_SI_buffer_load_dword v4i32:$rsrc, i32:$vaddr, i32:$soffset,
|
||||
imm:$offset, 1, 0, imm:$glc, imm:$slc,
|
||||
imm:$tfe)),
|
||||
(offen $rsrc, $vaddr, $soffset, (as_i16imm $offset), (as_i1imm $glc), (as_i1imm $slc),
|
||||
(offen $vaddr, $rsrc, $soffset, (as_i16imm $offset), (as_i1imm $glc), (as_i1imm $slc),
|
||||
(as_i1imm $tfe))
|
||||
>;
|
||||
|
||||
@ -3026,7 +3026,7 @@ multiclass MUBUF_Load_Dword <ValueType vt, MUBUF offset, MUBUF offen, MUBUF idxe
|
||||
(vt (int_SI_buffer_load_dword v4i32:$rsrc, i32:$vaddr, i32:$soffset,
|
||||
imm:$offset, 0, 1, imm:$glc, imm:$slc,
|
||||
imm:$tfe)),
|
||||
(idxen $rsrc, $vaddr, $soffset, (as_i16imm $offset), (as_i1imm $glc),
|
||||
(idxen $vaddr, $rsrc, $soffset, (as_i16imm $offset), (as_i1imm $glc),
|
||||
(as_i1imm $slc), (as_i1imm $tfe))
|
||||
>;
|
||||
|
||||
@ -3034,7 +3034,7 @@ multiclass MUBUF_Load_Dword <ValueType vt, MUBUF offset, MUBUF offen, MUBUF idxe
|
||||
(vt (int_SI_buffer_load_dword v4i32:$rsrc, v2i32:$vaddr, i32:$soffset,
|
||||
imm:$offset, 1, 1, imm:$glc, imm:$slc,
|
||||
imm:$tfe)),
|
||||
(bothen $rsrc, $vaddr, $soffset, (as_i16imm $offset), (as_i1imm $glc), (as_i1imm $slc),
|
||||
(bothen $vaddr, $rsrc, $soffset, (as_i16imm $offset), (as_i1imm $glc), (as_i1imm $slc),
|
||||
(as_i1imm $tfe))
|
||||
>;
|
||||
}
|
||||
@ -3049,7 +3049,7 @@ defm : MUBUF_Load_Dword <v4i32, BUFFER_LOAD_DWORDX4_OFFSET, BUFFER_LOAD_DWORDX4_
|
||||
class MUBUFScratchStorePat <MUBUF Instr, ValueType vt, PatFrag st> : Pat <
|
||||
(st vt:$value, (MUBUFScratch v4i32:$srsrc, i32:$vaddr, i32:$soffset,
|
||||
u16imm:$offset)),
|
||||
(Instr $value, $srsrc, $vaddr, $soffset, $offset, 0, 0, 0)
|
||||
(Instr $value, $vaddr, $srsrc, $soffset, $offset, 0, 0, 0)
|
||||
>;
|
||||
|
||||
def : MUBUFScratchStorePat <BUFFER_STORE_BYTE_OFFEN, i32, truncstorei8_private>;
|
||||
|
Loading…
Reference in New Issue
Block a user