Skip to content

Commit c7522f3

Browse files
author
Colin LeMahieu
committed
[Hexagon] Replacing old version of convert and load f64.
llvm-svn: 226057
1 parent 8d5d68f commit c7522f3

File tree

5 files changed

+22
-23
lines changed

5 files changed

+22
-23
lines changed

llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ class HexagonDAGToDAGISel : public SelectionDAGISel {
7979
bool SelectADDRriU6_1(SDValue& N, SDValue &R1, SDValue &R2);
8080
bool SelectADDRriU6_2(SDValue& N, SDValue &R1, SDValue &R2);
8181

82+
bool SelectAddrFI(SDValue &N, SDValue &R);
83+
8284
const char *getPassName() const override {
8385
return "Hexagon DAG->DAG Pattern Instruction Selection";
8486
}
@@ -1683,3 +1685,11 @@ bool HexagonDAGToDAGISel::foldGlobalAddressImpl(SDValue &N, SDValue &R,
16831685
}
16841686
return false;
16851687
}
1688+
1689+
bool HexagonDAGToDAGISel::SelectAddrFI(SDValue& N, SDValue &R) {
1690+
if (N.getOpcode() != ISD::FrameIndex)
1691+
return false;
1692+
FrameIndexSDNode *FX = cast<FrameIndexSDNode>(N);
1693+
R = CurDAG->getTargetFrameIndex(FX->getIndex(), MVT::i32);
1694+
return true;
1695+
}

llvm/lib/Target/Hexagon/HexagonInstrInfo.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1101,7 +1101,6 @@ isValidOffset(const int Opcode, const int Offset) const {
11011101
(Offset <= Hexagon_MEMW_OFFSET_MAX);
11021102

11031103
case Hexagon::L2_loadrd_io:
1104-
case Hexagon::LDrid_f:
11051104
case Hexagon::S2_storerd_io:
11061105
case Hexagon::STrid_f:
11071106
return (Offset >= Hexagon_MEMD_OFFSET_MIN) &&

llvm/lib/Target/Hexagon/HexagonInstrInfo.td

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,6 +1558,15 @@ defm loadri: LD_Idxd <"memw", "LDriw", IntRegs, s11_2Ext, u6_2Ext, 0b1100>;
15581558
let accessSize = DoubleWordAccess, opExtentAlign = 3, isCodeGenOnly = 0 in
15591559
defm loadrd: LD_Idxd <"memd", "LDrid", DoubleRegs, s11_3Ext, u6_3Ext, 0b1110>;
15601560

1561+
// Patterns to select load-indexed (i.e. load from base+offset).
1562+
multiclass Loadx_pat<PatFrag Load, ValueType VT, PatLeaf ImmPred,
1563+
InstHexagon MI> {
1564+
def: Pat<(VT (Load AddrFI:$fi)), (VT (MI AddrFI:$fi, 0))>;
1565+
def: Pat<(VT (Load (add (i32 IntRegs:$Rs), ImmPred:$Off))),
1566+
(VT (MI IntRegs:$Rs, imm:$Off))>;
1567+
def: Pat<(VT (Load (i32 IntRegs:$Rs))), (VT (MI IntRegs:$Rs, 0))>;
1568+
}
1569+
15611570
def : Pat < (i32 (sextloadi8 ADDRriS11_0:$addr)),
15621571
(L2_loadrb_io AddrFI:$addr, 0) >;
15631572

llvm/lib/Target/Hexagon/HexagonInstrInfoV5.td

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ def S5_popcountp : ALU64_rr<(outs IntRegs:$Rd), (ins DoubleRegs:$Rss),
112112
let Inst{20-16} = Rss;
113113
}
114114

115+
defm: Loadx_pat<load, f64, s11_3ExtPred, L2_loadrd_io>;
116+
115117
let isFP = 1, hasNewValue = 1, opNewValue = 0 in
116118
class T_MInstFloat <string mnemonic, bits<3> MajOp, bits<3> MinOp>
117119
: MInst<(outs IntRegs:$Rd),
@@ -483,26 +485,6 @@ def F2_dfimm_p : T_fimm <"dfmake", DoubleRegs, 0b1001, 0>;
483485
def F2_dfimm_n : T_fimm <"dfmake", DoubleRegs, 0b1001, 1>;
484486
}
485487

486-
// Convert single precision to double precision and vice-versa.
487-
def CONVERT_sf2df : ALU64_rr<(outs DoubleRegs:$dst), (ins IntRegs:$src),
488-
"$dst = convert_sf2df($src)",
489-
[(set DoubleRegs:$dst, (fextend IntRegs:$src))]>,
490-
Requires<[HasV5T]>;
491-
492-
def CONVERT_df2sf : ALU64_rr<(outs IntRegs:$dst), (ins DoubleRegs:$src),
493-
"$dst = convert_df2sf($src)",
494-
[(set IntRegs:$dst, (fround DoubleRegs:$src))]>,
495-
Requires<[HasV5T]>;
496-
497-
498-
// Load.
499-
def LDrid_f : LDInst<(outs DoubleRegs:$dst),
500-
(ins MEMri:$addr),
501-
"$dst = memd($addr)",
502-
[(set DoubleRegs:$dst, (f64 (load ADDRriS11_3:$addr)))]>,
503-
Requires<[HasV5T]>;
504-
505-
506488
let AddedComplexity = 20 in
507489
def LDrid_indexed_f : LDInst<(outs DoubleRegs:$dst),
508490
(ins IntRegs:$src1, s11_3Imm:$offset),

llvm/lib/Target/Hexagon/HexagonRegisterInfo.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,7 @@ void HexagonRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
165165
(MI.getOpcode() == Hexagon::L2_loadruh_io) ||
166166
(MI.getOpcode() == Hexagon::L2_loadrb_io) ||
167167
(MI.getOpcode() == Hexagon::L2_loadrub_io) ||
168-
(MI.getOpcode() == Hexagon::LDriw_f) ||
169-
(MI.getOpcode() == Hexagon::LDrid_f)) {
168+
(MI.getOpcode() == Hexagon::LDriw_f)) {
170169
unsigned dstReg = (MI.getOpcode() == Hexagon::L2_loadrd_io) ?
171170
getSubReg(MI.getOperand(0).getReg(), Hexagon::subreg_loreg) :
172171
MI.getOperand(0).getReg();

0 commit comments

Comments
 (0)