mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-22 04:05:05 +00:00
[Hexagon] NFC. Canonicalizing absolute address instruction names.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@283507 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4a0edca8c6
commit
27ab1b8a7a
lib/Target/Hexagon
@ -417,46 +417,46 @@ void HexagonDisassembler::adjustExtendedInstructions(MCInst &MCI,
|
||||
// GP relative instruction in the absence of the corresponding immediate
|
||||
// extender.
|
||||
switch (MCI.getOpcode()) {
|
||||
case Hexagon::S2_storerbabs:
|
||||
case Hexagon::PS_storerbabs:
|
||||
opcode = Hexagon::S2_storerbgp;
|
||||
break;
|
||||
case Hexagon::S2_storerhabs:
|
||||
case Hexagon::PS_storerhabs:
|
||||
opcode = Hexagon::S2_storerhgp;
|
||||
break;
|
||||
case Hexagon::S2_storerfabs:
|
||||
case Hexagon::PS_storerfabs:
|
||||
opcode = Hexagon::S2_storerfgp;
|
||||
break;
|
||||
case Hexagon::S2_storeriabs:
|
||||
case Hexagon::PS_storeriabs:
|
||||
opcode = Hexagon::S2_storerigp;
|
||||
break;
|
||||
case Hexagon::S2_storerbnewabs:
|
||||
case Hexagon::PS_storerbnewabs:
|
||||
opcode = Hexagon::S2_storerbnewgp;
|
||||
break;
|
||||
case Hexagon::S2_storerhnewabs:
|
||||
case Hexagon::PS_storerhnewabs:
|
||||
opcode = Hexagon::S2_storerhnewgp;
|
||||
break;
|
||||
case Hexagon::S2_storerinewabs:
|
||||
case Hexagon::PS_storerinewabs:
|
||||
opcode = Hexagon::S2_storerinewgp;
|
||||
break;
|
||||
case Hexagon::S2_storerdabs:
|
||||
case Hexagon::PS_storerdabs:
|
||||
opcode = Hexagon::S2_storerdgp;
|
||||
break;
|
||||
case Hexagon::L4_loadrb_abs:
|
||||
case Hexagon::PS_loadrbabs:
|
||||
opcode = Hexagon::L2_loadrbgp;
|
||||
break;
|
||||
case Hexagon::L4_loadrub_abs:
|
||||
case Hexagon::PS_loadrubabs:
|
||||
opcode = Hexagon::L2_loadrubgp;
|
||||
break;
|
||||
case Hexagon::L4_loadrh_abs:
|
||||
case Hexagon::PS_loadrhabs:
|
||||
opcode = Hexagon::L2_loadrhgp;
|
||||
break;
|
||||
case Hexagon::L4_loadruh_abs:
|
||||
case Hexagon::PS_loadruhabs:
|
||||
opcode = Hexagon::L2_loadruhgp;
|
||||
break;
|
||||
case Hexagon::L4_loadri_abs:
|
||||
case Hexagon::PS_loadriabs:
|
||||
opcode = Hexagon::L2_loadrigp;
|
||||
break;
|
||||
case Hexagon::L4_loadrd_abs:
|
||||
case Hexagon::PS_loadrdabs:
|
||||
opcode = Hexagon::L2_loadrdgp;
|
||||
break;
|
||||
default:
|
||||
@ -811,20 +811,20 @@ static const unsigned int StoreConditionalOpcodeData[][2] = {
|
||||
// HexagonII::INST_ICLASS_LD
|
||||
|
||||
// HexagonII::INST_ICLASS_LD_ST_2
|
||||
static unsigned int LoadStoreOpcodeData[][2] = {{L4_loadrd_abs, 0x49c00000},
|
||||
{L4_loadri_abs, 0x49800000},
|
||||
{L4_loadruh_abs, 0x49600000},
|
||||
{L4_loadrh_abs, 0x49400000},
|
||||
{L4_loadrub_abs, 0x49200000},
|
||||
{L4_loadrb_abs, 0x49000000},
|
||||
{S2_storerdabs, 0x48c00000},
|
||||
{S2_storerinewabs, 0x48a01000},
|
||||
{S2_storerhnewabs, 0x48a00800},
|
||||
{S2_storerbnewabs, 0x48a00000},
|
||||
{S2_storeriabs, 0x48800000},
|
||||
{S2_storerfabs, 0x48600000},
|
||||
{S2_storerhabs, 0x48400000},
|
||||
{S2_storerbabs, 0x48000000}};
|
||||
static unsigned int LoadStoreOpcodeData[][2] = {{PS_loadrdabs, 0x49c00000},
|
||||
{PS_loadriabs, 0x49800000},
|
||||
{PS_loadruhabs, 0x49600000},
|
||||
{PS_loadrhabs, 0x49400000},
|
||||
{PS_loadrubabs, 0x49200000},
|
||||
{PS_loadrbabs, 0x49000000},
|
||||
{PS_storerdabs, 0x48c00000},
|
||||
{PS_storerinewabs, 0x48a01000},
|
||||
{PS_storerhnewabs, 0x48a00800},
|
||||
{PS_storerbnewabs, 0x48a00000},
|
||||
{PS_storeriabs, 0x48800000},
|
||||
{PS_storerfabs, 0x48600000},
|
||||
{PS_storerhabs, 0x48400000},
|
||||
{PS_storerbabs, 0x48000000}};
|
||||
static const size_t NumCondS = array_lengthof(StoreConditionalOpcodeData);
|
||||
static const size_t NumLS = array_lengthof(LoadStoreOpcodeData);
|
||||
|
||||
@ -982,15 +982,15 @@ static DecodeStatus decodeSpecial(MCInst &MI, uint32_t insn) {
|
||||
break;
|
||||
|
||||
// op: g16_2
|
||||
case (Hexagon::L4_loadri_abs):
|
||||
case (Hexagon::PS_loadriabs):
|
||||
++shift;
|
||||
// op: g16_1
|
||||
case Hexagon::L4_loadrh_abs:
|
||||
case Hexagon::L4_loadruh_abs:
|
||||
case Hexagon::PS_loadrhabs:
|
||||
case Hexagon::PS_loadruhabs:
|
||||
++shift;
|
||||
// op: g16_0
|
||||
case Hexagon::L4_loadrb_abs:
|
||||
case Hexagon::L4_loadrub_abs: {
|
||||
case Hexagon::PS_loadrbabs:
|
||||
case Hexagon::PS_loadrubabs: {
|
||||
// op: Rd
|
||||
Value |= insn & UINT64_C(31);
|
||||
DecodeIntRegsRegisterClass(MI, Value, 0, 0);
|
||||
@ -1001,7 +1001,7 @@ static DecodeStatus decodeSpecial(MCInst &MI, uint32_t insn) {
|
||||
break;
|
||||
}
|
||||
|
||||
case Hexagon::L4_loadrd_abs: {
|
||||
case Hexagon::PS_loadrdabs: {
|
||||
Value = insn & UINT64_C(31);
|
||||
DecodeDoubleRegsRegisterClass(MI, Value, 0, 0);
|
||||
Value = (insn >> 11) & UINT64_C(49152);
|
||||
@ -1011,7 +1011,7 @@ static DecodeStatus decodeSpecial(MCInst &MI, uint32_t insn) {
|
||||
break;
|
||||
}
|
||||
|
||||
case Hexagon::S2_storerdabs: {
|
||||
case Hexagon::PS_storerdabs: {
|
||||
// op: g16_3
|
||||
Value = (insn >> 11) & UINT64_C(49152);
|
||||
Value |= (insn >> 7) & UINT64_C(15872);
|
||||
@ -1025,13 +1025,13 @@ static DecodeStatus decodeSpecial(MCInst &MI, uint32_t insn) {
|
||||
}
|
||||
|
||||
// op: g16_2
|
||||
case Hexagon::S2_storerinewabs:
|
||||
case Hexagon::PS_storerinewabs:
|
||||
++shift;
|
||||
// op: g16_1
|
||||
case Hexagon::S2_storerhnewabs:
|
||||
case Hexagon::PS_storerhnewabs:
|
||||
++shift;
|
||||
// op: g16_0
|
||||
case Hexagon::S2_storerbnewabs: {
|
||||
case Hexagon::PS_storerbnewabs: {
|
||||
Value = (insn >> 11) & UINT64_C(49152);
|
||||
Value |= (insn >> 7) & UINT64_C(15872);
|
||||
Value |= (insn >> 5) & UINT64_C(256);
|
||||
@ -1044,14 +1044,14 @@ static DecodeStatus decodeSpecial(MCInst &MI, uint32_t insn) {
|
||||
}
|
||||
|
||||
// op: g16_2
|
||||
case Hexagon::S2_storeriabs:
|
||||
case Hexagon::PS_storeriabs:
|
||||
++shift;
|
||||
// op: g16_1
|
||||
case Hexagon::S2_storerhabs:
|
||||
case Hexagon::S2_storerfabs:
|
||||
case Hexagon::PS_storerhabs:
|
||||
case Hexagon::PS_storerfabs:
|
||||
++shift;
|
||||
// op: g16_0
|
||||
case Hexagon::S2_storerbabs: {
|
||||
case Hexagon::PS_storerbabs: {
|
||||
Value = (insn >> 11) & UINT64_C(49152);
|
||||
Value |= (insn >> 7) & UINT64_C(15872);
|
||||
Value |= (insn >> 5) & UINT64_C(256);
|
||||
|
@ -999,7 +999,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadrb_pci:
|
||||
case L2_loadrb_pcr:
|
||||
case L2_loadrb_pi:
|
||||
case L4_loadrb_abs:
|
||||
case PS_loadrbabs:
|
||||
case L4_loadrb_ap:
|
||||
case L4_loadrb_rr:
|
||||
case L4_loadrb_ur:
|
||||
@ -1013,7 +1013,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadrub_pci:
|
||||
case L2_loadrub_pcr:
|
||||
case L2_loadrub_pi:
|
||||
case L4_loadrub_abs:
|
||||
case PS_loadrubabs:
|
||||
case L4_loadrub_ap:
|
||||
case L4_loadrub_rr:
|
||||
case L4_loadrub_ur:
|
||||
@ -1027,7 +1027,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadrh_pci:
|
||||
case L2_loadrh_pcr:
|
||||
case L2_loadrh_pi:
|
||||
case L4_loadrh_abs:
|
||||
case PS_loadrhabs:
|
||||
case L4_loadrh_ap:
|
||||
case L4_loadrh_rr:
|
||||
case L4_loadrh_ur:
|
||||
@ -1042,7 +1042,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadruh_pcr:
|
||||
case L2_loadruh_pi:
|
||||
case L4_loadruh_rr:
|
||||
case L4_loadruh_abs:
|
||||
case PS_loadruhabs:
|
||||
case L4_loadruh_ap:
|
||||
case L4_loadruh_ur:
|
||||
BitNum = 16;
|
||||
@ -1056,7 +1056,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadri_pcr:
|
||||
case L2_loadri_pi:
|
||||
case L2_loadw_locked:
|
||||
case L4_loadri_abs:
|
||||
case PS_loadriabs:
|
||||
case L4_loadri_ap:
|
||||
case L4_loadri_rr:
|
||||
case L4_loadri_ur:
|
||||
@ -1072,7 +1072,7 @@ bool HexagonEvaluator::evaluateLoad(const MachineInstr &MI,
|
||||
case L2_loadrd_pcr:
|
||||
case L2_loadrd_pi:
|
||||
case L4_loadd_locked:
|
||||
case L4_loadrd_abs:
|
||||
case PS_loadrdabs:
|
||||
case L4_loadrd_ap:
|
||||
case L4_loadrd_rr:
|
||||
case L4_loadrd_ur:
|
||||
|
@ -3534,7 +3534,7 @@ multiclass ST_Abs<string mnemonic, string CextOp, RegisterClass RC,
|
||||
Operand ImmOp, bits<2> MajOp, bit isHalf = 0> {
|
||||
let CextOpcode = CextOp, BaseOpcode = CextOp#_abs in {
|
||||
let opExtendable = 0, isPredicable = 1 in
|
||||
def S2_#NAME#abs : T_StoreAbs <mnemonic, RC, ImmOp, MajOp, isHalf>;
|
||||
def PS_#NAME#abs : T_StoreAbs <mnemonic, RC, ImmOp, MajOp, isHalf>;
|
||||
|
||||
// Predicated
|
||||
def S4_p#NAME#t_abs : T_StoreAbs_Pred<mnemonic, RC, MajOp, isHalf, 0, 0>;
|
||||
@ -3636,7 +3636,7 @@ multiclass ST_Abs_NV <string mnemonic, string CextOp, Operand ImmOp,
|
||||
bits<2> MajOp> {
|
||||
let CextOpcode = CextOp, BaseOpcode = CextOp#_abs in {
|
||||
let opExtendable = 0, isPredicable = 1 in
|
||||
def S2_#NAME#newabs : T_StoreAbs_NV <mnemonic, ImmOp, MajOp>;
|
||||
def PS_#NAME#newabs : T_StoreAbs_NV <mnemonic, ImmOp, MajOp>;
|
||||
|
||||
// Predicated
|
||||
def S4_p#NAME#newt_abs : T_StoreAbs_NV_Pred <mnemonic, MajOp, 0, 0>;
|
||||
@ -3733,14 +3733,14 @@ class Stoream_pat<PatFrag Store, PatFrag Value, PatFrag Addr, PatFrag ValueMod,
|
||||
(MI Addr:$addr, (ValueMod Value:$val))>;
|
||||
|
||||
let AddedComplexity = 30 in {
|
||||
def: Storea_pat<truncstorei8, I32, addrga, S2_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrga, S2_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrga, S2_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrga, S2_storerdabs>;
|
||||
def: Storea_pat<truncstorei8, I32, addrga, PS_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrga, PS_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrga, PS_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrga, PS_storerdabs>;
|
||||
|
||||
def: Stoream_pat<truncstorei8, I64, addrga, LoReg, S2_storerbabs>;
|
||||
def: Stoream_pat<truncstorei16, I64, addrga, LoReg, S2_storerhabs>;
|
||||
def: Stoream_pat<truncstorei32, I64, addrga, LoReg, S2_storeriabs>;
|
||||
def: Stoream_pat<truncstorei8, I64, addrga, LoReg, PS_storerbabs>;
|
||||
def: Stoream_pat<truncstorei16, I64, addrga, LoReg, PS_storerhabs>;
|
||||
def: Stoream_pat<truncstorei32, I64, addrga, LoReg, PS_storeriabs>;
|
||||
}
|
||||
|
||||
def: Storea_pat<SwapSt<atomic_store_8>, I32, addrgp, S2_storerbgp>;
|
||||
@ -3856,7 +3856,7 @@ multiclass LD_Abs<string mnemonic, string CextOp, RegisterClass RC,
|
||||
Operand ImmOp, bits<3> MajOp> {
|
||||
let CextOpcode = CextOp, BaseOpcode = CextOp#_abs in {
|
||||
let opExtendable = 1, isPredicable = 1 in
|
||||
def L4_#NAME#_abs: T_LoadAbs <mnemonic, RC, ImmOp, MajOp>;
|
||||
def PS_#NAME#abs: T_LoadAbs <mnemonic, RC, ImmOp, MajOp>;
|
||||
|
||||
// Predicated
|
||||
defm L4_p#NAME#t : LD_Abs_Pred<mnemonic, RC, MajOp, 0>;
|
||||
@ -3885,20 +3885,20 @@ class LoadAbs_pats <PatFrag ldOp, InstHexagon MI, ValueType VT = i32>
|
||||
(VT (MI tglobaladdr:$absaddr))>;
|
||||
|
||||
let AddedComplexity = 30 in {
|
||||
def: LoadAbs_pats <load, L4_loadri_abs>;
|
||||
def: LoadAbs_pats <zextloadi1, L4_loadrub_abs>;
|
||||
def: LoadAbs_pats <sextloadi8, L4_loadrb_abs>;
|
||||
def: LoadAbs_pats <extloadi8, L4_loadrub_abs>;
|
||||
def: LoadAbs_pats <zextloadi8, L4_loadrub_abs>;
|
||||
def: LoadAbs_pats <sextloadi16, L4_loadrh_abs>;
|
||||
def: LoadAbs_pats <extloadi16, L4_loadruh_abs>;
|
||||
def: LoadAbs_pats <zextloadi16, L4_loadruh_abs>;
|
||||
def: LoadAbs_pats <load, L4_loadrd_abs, i64>;
|
||||
def: LoadAbs_pats <load, PS_loadriabs>;
|
||||
def: LoadAbs_pats <zextloadi1, PS_loadrubabs>;
|
||||
def: LoadAbs_pats <sextloadi8, PS_loadrbabs>;
|
||||
def: LoadAbs_pats <extloadi8, PS_loadrubabs>;
|
||||
def: LoadAbs_pats <zextloadi8, PS_loadrubabs>;
|
||||
def: LoadAbs_pats <sextloadi16, PS_loadrhabs>;
|
||||
def: LoadAbs_pats <extloadi16, PS_loadruhabs>;
|
||||
def: LoadAbs_pats <zextloadi16, PS_loadruhabs>;
|
||||
def: LoadAbs_pats <load, PS_loadrdabs, i64>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 30 in
|
||||
def: Pat<(i64 (zextloadi1 (HexagonCONST32 tglobaladdr:$absaddr))),
|
||||
(Zext64 (L4_loadrub_abs tglobaladdr:$absaddr))>;
|
||||
(Zext64 (PS_loadrubabs tglobaladdr:$absaddr))>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// multiclass for load instructions with GP-relative addressing mode.
|
||||
@ -3936,10 +3936,10 @@ def: Loada_pat<atomic_load_32, i32, addrgp, L2_loadrigp>;
|
||||
def: Loada_pat<atomic_load_64, i64, addrgp, L2_loadrdgp>;
|
||||
|
||||
// Map from Pd = load(globaladdress) -> Rd = memb(globaladdress), Pd = Rd
|
||||
def: Loadam_pat<load, i1, addrga, I32toI1, L4_loadrub_abs>;
|
||||
def: Loadam_pat<load, i1, addrga, I32toI1, PS_loadrubabs>;
|
||||
def: Loadam_pat<load, i1, addrgp, I32toI1, L2_loadrubgp>;
|
||||
|
||||
def: Stoream_pat<store, I1, addrga, I1toI32, S2_storerbabs>;
|
||||
def: Stoream_pat<store, I1, addrga, I1toI32, PS_storerbabs>;
|
||||
def: Stoream_pat<store, I1, addrgp, I1toI32, S2_storerbgp>;
|
||||
|
||||
// Map from load(globaladdress) -> mem[u][bhwd](#foo)
|
||||
@ -3972,17 +3972,17 @@ def: Pat<(HexagonCONST32_GP tblockaddress:$Rs), (A2_tfrsi s16Ext:$Rs)>;
|
||||
def: Pat<(HexagonCONST32_GP tglobaladdr:$Rs), (A2_tfrsi s16Ext:$Rs)>;
|
||||
|
||||
let AddedComplexity = 30 in {
|
||||
def: Storea_pat<truncstorei8, I32, u32ImmPred, S2_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, u32ImmPred, S2_storerhabs>;
|
||||
def: Storea_pat<store, I32, u32ImmPred, S2_storeriabs>;
|
||||
def: Storea_pat<truncstorei8, I32, u32ImmPred, PS_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, u32ImmPred, PS_storerhabs>;
|
||||
def: Storea_pat<store, I32, u32ImmPred, PS_storeriabs>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 30 in {
|
||||
def: Loada_pat<load, i32, u32ImmPred, L4_loadri_abs>;
|
||||
def: Loada_pat<sextloadi8, i32, u32ImmPred, L4_loadrb_abs>;
|
||||
def: Loada_pat<zextloadi8, i32, u32ImmPred, L4_loadrub_abs>;
|
||||
def: Loada_pat<sextloadi16, i32, u32ImmPred, L4_loadrh_abs>;
|
||||
def: Loada_pat<zextloadi16, i32, u32ImmPred, L4_loadruh_abs>;
|
||||
def: Loada_pat<load, i32, u32ImmPred, PS_loadriabs>;
|
||||
def: Loada_pat<sextloadi8, i32, u32ImmPred, PS_loadrbabs>;
|
||||
def: Loada_pat<zextloadi8, i32, u32ImmPred, PS_loadrubabs>;
|
||||
def: Loada_pat<sextloadi16, i32, u32ImmPred, PS_loadrhabs>;
|
||||
def: Loada_pat<zextloadi16, i32, u32ImmPred, PS_loadruhabs>;
|
||||
}
|
||||
|
||||
// Indexed store word - global address.
|
||||
@ -3992,74 +3992,74 @@ defm: Storex_add_pat<store, addrga, u6_2ImmPred, S4_storeiri_io>;
|
||||
|
||||
// Load from a global address that has only one use in the current basic block.
|
||||
let AddedComplexity = 100 in {
|
||||
def: Loada_pat<extloadi8, i32, addrga, L4_loadrub_abs>;
|
||||
def: Loada_pat<sextloadi8, i32, addrga, L4_loadrb_abs>;
|
||||
def: Loada_pat<zextloadi8, i32, addrga, L4_loadrub_abs>;
|
||||
def: Loada_pat<extloadi8, i32, addrga, PS_loadrubabs>;
|
||||
def: Loada_pat<sextloadi8, i32, addrga, PS_loadrbabs>;
|
||||
def: Loada_pat<zextloadi8, i32, addrga, PS_loadrubabs>;
|
||||
|
||||
def: Loada_pat<extloadi16, i32, addrga, L4_loadruh_abs>;
|
||||
def: Loada_pat<sextloadi16, i32, addrga, L4_loadrh_abs>;
|
||||
def: Loada_pat<zextloadi16, i32, addrga, L4_loadruh_abs>;
|
||||
def: Loada_pat<extloadi16, i32, addrga, PS_loadruhabs>;
|
||||
def: Loada_pat<sextloadi16, i32, addrga, PS_loadrhabs>;
|
||||
def: Loada_pat<zextloadi16, i32, addrga, PS_loadruhabs>;
|
||||
|
||||
def: Loada_pat<load, i32, addrga, L4_loadri_abs>;
|
||||
def: Loada_pat<load, i64, addrga, L4_loadrd_abs>;
|
||||
def: Loada_pat<load, i32, addrga, PS_loadriabs>;
|
||||
def: Loada_pat<load, i64, addrga, PS_loadrdabs>;
|
||||
}
|
||||
|
||||
// Store to a global address that has only one use in the current basic block.
|
||||
let AddedComplexity = 100 in {
|
||||
def: Storea_pat<truncstorei8, I32, addrga, S2_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrga, S2_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrga, S2_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrga, S2_storerdabs>;
|
||||
def: Storea_pat<truncstorei8, I32, addrga, PS_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrga, PS_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrga, PS_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrga, PS_storerdabs>;
|
||||
|
||||
def: Stoream_pat<truncstorei32, I64, addrga, LoReg, S2_storeriabs>;
|
||||
def: Stoream_pat<truncstorei32, I64, addrga, LoReg, PS_storeriabs>;
|
||||
}
|
||||
|
||||
// i8/i16/i32 -> i64 loads
|
||||
// We need a complexity of 120 here to override preceding handling of
|
||||
// zextload.
|
||||
let AddedComplexity = 120 in {
|
||||
def: Loadam_pat<extloadi8, i64, addrga, Zext64, L4_loadrub_abs>;
|
||||
def: Loadam_pat<sextloadi8, i64, addrga, Sext64, L4_loadrb_abs>;
|
||||
def: Loadam_pat<zextloadi8, i64, addrga, Zext64, L4_loadrub_abs>;
|
||||
def: Loadam_pat<extloadi8, i64, addrga, Zext64, PS_loadrubabs>;
|
||||
def: Loadam_pat<sextloadi8, i64, addrga, Sext64, PS_loadrbabs>;
|
||||
def: Loadam_pat<zextloadi8, i64, addrga, Zext64, PS_loadrubabs>;
|
||||
|
||||
def: Loadam_pat<extloadi16, i64, addrga, Zext64, L4_loadruh_abs>;
|
||||
def: Loadam_pat<sextloadi16, i64, addrga, Sext64, L4_loadrh_abs>;
|
||||
def: Loadam_pat<zextloadi16, i64, addrga, Zext64, L4_loadruh_abs>;
|
||||
def: Loadam_pat<extloadi16, i64, addrga, Zext64, PS_loadruhabs>;
|
||||
def: Loadam_pat<sextloadi16, i64, addrga, Sext64, PS_loadrhabs>;
|
||||
def: Loadam_pat<zextloadi16, i64, addrga, Zext64, PS_loadruhabs>;
|
||||
|
||||
def: Loadam_pat<extloadi32, i64, addrga, Zext64, L4_loadri_abs>;
|
||||
def: Loadam_pat<sextloadi32, i64, addrga, Sext64, L4_loadri_abs>;
|
||||
def: Loadam_pat<zextloadi32, i64, addrga, Zext64, L4_loadri_abs>;
|
||||
def: Loadam_pat<extloadi32, i64, addrga, Zext64, PS_loadriabs>;
|
||||
def: Loadam_pat<sextloadi32, i64, addrga, Sext64, PS_loadriabs>;
|
||||
def: Loadam_pat<zextloadi32, i64, addrga, Zext64, PS_loadriabs>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 100 in {
|
||||
def: Loada_pat<extloadi8, i32, addrgp, L4_loadrub_abs>;
|
||||
def: Loada_pat<sextloadi8, i32, addrgp, L4_loadrb_abs>;
|
||||
def: Loada_pat<zextloadi8, i32, addrgp, L4_loadrub_abs>;
|
||||
def: Loada_pat<extloadi8, i32, addrgp, PS_loadrubabs>;
|
||||
def: Loada_pat<sextloadi8, i32, addrgp, PS_loadrbabs>;
|
||||
def: Loada_pat<zextloadi8, i32, addrgp, PS_loadrubabs>;
|
||||
|
||||
def: Loada_pat<extloadi16, i32, addrgp, L4_loadruh_abs>;
|
||||
def: Loada_pat<sextloadi16, i32, addrgp, L4_loadrh_abs>;
|
||||
def: Loada_pat<zextloadi16, i32, addrgp, L4_loadruh_abs>;
|
||||
def: Loada_pat<extloadi16, i32, addrgp, PS_loadruhabs>;
|
||||
def: Loada_pat<sextloadi16, i32, addrgp, PS_loadrhabs>;
|
||||
def: Loada_pat<zextloadi16, i32, addrgp, PS_loadruhabs>;
|
||||
|
||||
def: Loada_pat<load, i32, addrgp, L4_loadri_abs>;
|
||||
def: Loada_pat<load, i64, addrgp, L4_loadrd_abs>;
|
||||
def: Loada_pat<load, i32, addrgp, PS_loadriabs>;
|
||||
def: Loada_pat<load, i64, addrgp, PS_loadrdabs>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 100 in {
|
||||
def: Storea_pat<truncstorei8, I32, addrgp, S2_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrgp, S2_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrgp, S2_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrgp, S2_storerdabs>;
|
||||
def: Storea_pat<truncstorei8, I32, addrgp, PS_storerbabs>;
|
||||
def: Storea_pat<truncstorei16, I32, addrgp, PS_storerhabs>;
|
||||
def: Storea_pat<store, I32, addrgp, PS_storeriabs>;
|
||||
def: Storea_pat<store, I64, addrgp, PS_storerdabs>;
|
||||
}
|
||||
|
||||
def: Loada_pat<atomic_load_8, i32, addrgp, L4_loadrub_abs>;
|
||||
def: Loada_pat<atomic_load_16, i32, addrgp, L4_loadruh_abs>;
|
||||
def: Loada_pat<atomic_load_32, i32, addrgp, L4_loadri_abs>;
|
||||
def: Loada_pat<atomic_load_64, i64, addrgp, L4_loadrd_abs>;
|
||||
def: Loada_pat<atomic_load_8, i32, addrgp, PS_loadrubabs>;
|
||||
def: Loada_pat<atomic_load_16, i32, addrgp, PS_loadruhabs>;
|
||||
def: Loada_pat<atomic_load_32, i32, addrgp, PS_loadriabs>;
|
||||
def: Loada_pat<atomic_load_64, i64, addrgp, PS_loadrdabs>;
|
||||
|
||||
def: Storea_pat<SwapSt<atomic_store_8>, I32, addrgp, S2_storerbabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_16>, I32, addrgp, S2_storerhabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_32>, I32, addrgp, S2_storeriabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_64>, I64, addrgp, S2_storerdabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_8>, I32, addrgp, PS_storerbabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_16>, I32, addrgp, PS_storerhabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_32>, I32, addrgp, PS_storeriabs>;
|
||||
def: Storea_pat<SwapSt<atomic_store_64>, I64, addrgp, PS_storerdabs>;
|
||||
|
||||
let Constraints = "@earlyclobber $dst" in
|
||||
def Insert4 : PseudoM<(outs DoubleRegs:$dst), (ins IntRegs:$a, IntRegs:$b,
|
||||
|
@ -118,9 +118,9 @@ let AddedComplexity = 20 in {
|
||||
}
|
||||
|
||||
let AddedComplexity = 80 in {
|
||||
def: Loada_pat<load, f32, u32ImmPred, L4_loadri_abs>;
|
||||
def: Loada_pat<load, f32, addrga, L4_loadri_abs>;
|
||||
def: Loada_pat<load, f64, addrga, L4_loadrd_abs>;
|
||||
def: Loada_pat<load, f32, u32ImmPred, PS_loadriabs>;
|
||||
def: Loada_pat<load, f32, addrga, PS_loadriabs>;
|
||||
def: Loada_pat<load, f64, addrga, PS_loadrdabs>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 100 in {
|
||||
@ -153,8 +153,8 @@ let AddedComplexity = 20 in {
|
||||
}
|
||||
|
||||
let AddedComplexity = 80 in {
|
||||
def: Storea_pat<store, F32, addrga, S2_storeriabs>;
|
||||
def: Storea_pat<store, F64, addrga, S2_storerdabs>;
|
||||
def: Storea_pat<store, F32, addrga, PS_storeriabs>;
|
||||
def: Storea_pat<store, F64, addrga, PS_storerdabs>;
|
||||
}
|
||||
|
||||
let AddedComplexity = 100 in {
|
||||
|
Loading…
x
Reference in New Issue
Block a user