[PATCH] D70072: [ARM] Improve codegen of volatile load/store of i64

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 17 16:39:37 PST 2019


efriedma added inline comments.


================
Comment at: llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:3549
+    SDValue Ops[] = {SDValue(Pair, 0), Base, RegOffset, ImmOffset, Chain};
+    SDNode *New = CurDAG->getMachineNode(ARM::STOREDUAL, dl, MVT::Other, Ops);
+    ReplaceNode(N, New);
----------------
I think you could implement this pattern in TableGen (grep for REG_SEQUENCE in the ARM .td files).  But probably not the corresponding load pattern, since the inverse opcode doesn't exist, so not a big deal either way.


================
Comment at: llvm/lib/Target/ARM/ARMInstrInfo.td:2704
 
+let mayLoad = 1, hasSideEffects = 0, hasExtraDefRegAllocReq = 1, hasNoSchedulingInfo = 1 in {
+def LOADDUAL : ARMPseudoInst<(outs GPRPairOp:$Rt), (ins addrmode3:$addr),
----------------
hasExtraDefRegAllocReq shouldn't be necessary; the regular ldrd/strd are weird because the register allocation constraint isn't expressed correctly by the operand types, but you don't have that problem here.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70072/new/

https://reviews.llvm.org/D70072





More information about the llvm-commits mailing list