[PATCH][AArch64] implement aarch64 neon load/store instructions class AdvSIMD (lselem)

Tim Northover t.p.northover at gmail.com
Fri Oct 4 08:45:01 PDT 2013


Hi Hao,

> The second argument of DTriple should be "v3i64". As there is no v3i64, I
> have to use untyped. But then I can't get the DTripleRegClass in
> getRegClassFor(MVT VT) of AArch64ISelLowering.cpp.

Why do you think you need this? Can't you just create an untyped
REG_SEQUENCE for them? The node already seems to encode the
RegisterClass directly. I'd expect something like this to work:

SDNode *AArch64DAGToDAGISel::createDRegTripleNode(SDValue V0, SDValue
V1, SDValue V2) {
  SDLoc dl(V0.getNode());
  SDValue RegClass =
      CurDAG->getTargetConstant(AArch64::DTripleRegClassID, MVT::i32);
  SDValue SubReg0 = CurDAG->getTargetConstant(AArch64::qsub_0, MVT::i32);
  SDValue SubReg1 = CurDAG->getTargetConstant(AArch64::qsub_1, MVT::i32);
  const SDValue Ops[] = { RegClass, V0, SubReg0, V1, SubReg1 };
  return CurDAG->getMachineNode(TargetOpcode::REG_SEQUENCE, dl, MVT::untyped,
                                Ops);
}

Hopefully it will use the hint you give it there rather than asking
for a registerclass from getRegClassFor. I'm sure we can get it
working somehow without adding v3i64 (or v3v8i8 or whatever), send me
a patch if you get stuck and I'll see what I can do with it.

Cheers.

Tim.



More information about the llvm-commits mailing list