[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