[PATCH] D39848: [RISCV] Support lowering FrameIndex
Krzysztof Parzyszek via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 21 13:04:14 PST 2017
kparzysz added a comment.
FrameIndex cannot be matched directly in patterns, but it can be matched by a ComplexPattern, which then can be used in selection patterns.
We have this in Hexagon (the relevant part is the getTargetFrameIndex):
bool HexagonDAGToDAGISel::SelectAddrFI(SDValue &N, SDValue &R) {
if (N.getOpcode() != ISD::FrameIndex)
return false;
auto &HFI = *HST->getFrameLowering();
MachineFrameInfo &MFI = MF->getFrameInfo();
int FX = cast<FrameIndexSDNode>(N)->getIndex();
if (!MFI.isFixedObjectIndex(FX) && HFI.needsAligna(*MF))
return false;
R = CurDAG->getTargetFrameIndex(FX, MVT::i32);
return true;
}
Then in HexagonPatterns.td:
def AddrFI: ComplexPattern<i32, 1, "SelectAddrFI", [frameindex], []>;
And then some Pat:
def: Pat<(VT (Load (add (i32 AddrFI:$fi), ImmPred:$Off))),
(VT (MI AddrFI:$fi, imm:$Off))>;
https://reviews.llvm.org/D39848
More information about the llvm-commits
mailing list