Instead of generating two i64 instructions for each load or store of a
volatile i128 value (two LDRs or STRs), now emit a single LDP or STP.
Details
Details
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
Comment Actions
Amending patch to include the transfer of memory operands from the original
SDNode to the new MachineSDNode.
Comment Actions
- Create new AArch64ISD nodes specific to load/store of pairs of registers.
- Custom lower i128 volatile loads/stores to these new AArch64ISD nodes.
Comment Actions
- Move new ISD node definitions to TableGen.
- Instruction selection done in TableGen using patterns.
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | ||
---|---|---|
3025 | Not sure we're actually guaranteed here that StoreNode->getValue() is an i128. |
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | ||
---|---|---|
3025 | Actually, we're probably fine here if it's a volatile store. Maybe worth adding an assert, though. |
Not sure we're actually guaranteed here that StoreNode->getValue() is an i128.