[PATCH] D62726: [X86] Use fresh MemOps when emitting VAARG64
Luke Lau via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 4 02:41:48 PDT 2019
luke updated this revision to Diff 202886.
luke added a comment.
Remember other flags when cloning
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62726/new/
https://reviews.llvm.org/D62726
Files:
llvm/lib/Target/X86/X86ISelLowering.cpp
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -28669,10 +28669,24 @@
unsigned ArgMode = MI.getOperand(7).getImm();
unsigned Align = MI.getOperand(8).getImm();
+ MachineFunction *MF = MBB->getParent();
+
// Memory Reference
assert(MI.hasOneMemOperand() && "Expected VAARG_64 to have one memoperand");
- SmallVector<MachineMemOperand *, 1> MMOs(MI.memoperands_begin(),
- MI.memoperands_end());
+
+ MachineMemOperand *OldMMO = MI.memoperands().front();
+
+ // Clone the MMO into two separate MMOs for loading and storing
+ MachineMemOperand *LoadOnlyMMO = MF->getMachineMemOperand(
+ OldMMO->getPointerInfo(), OldMMO->getFlags() & ~MachineMemOperand::MOStore,
+ OldMMO->getSize(), OldMMO->getBaseAlignment(), OldMMO->getAAInfo(),
+ OldMMO->getRanges(), OldMMO->getSyncScopeID(), OldMMO->getOrdering(),
+ OldMMO->getFailureOrdering());
+ MachineMemOperand *StoreOnlyMMO = MF->getMachineMemOperand(
+ OldMMO->getPointerInfo(), OldMMO->getFlags() & ~MachineMemOperand::MOLoad,
+ OldMMO->getSize(), OldMMO->getBaseAlignment(), OldMMO->getAAInfo(),
+ OldMMO->getRanges(), OldMMO->getSyncScopeID(), OldMMO->getOrdering(),
+ OldMMO->getFailureOrdering());
// Machine Information
const TargetInstrInfo *TII = Subtarget.getInstrInfo();
@@ -28737,7 +28751,6 @@
OverflowDestReg = MRI.createVirtualRegister(AddrRegClass);
const BasicBlock *LLVM_BB = MBB->getBasicBlock();
- MachineFunction *MF = MBB->getParent();
overflowMBB = MF->CreateMachineBasicBlock(LLVM_BB);
offsetMBB = MF->CreateMachineBasicBlock(LLVM_BB);
endMBB = MF->CreateMachineBasicBlock(LLVM_BB);
@@ -28770,7 +28783,7 @@
.add(Index)
.addDisp(Disp, UseFPOffset ? 4 : 0)
.add(Segment)
- .setMemRefs(MMOs);
+ .setMemRefs(LoadOnlyMMO);
// Check if there is enough room left to pull this argument.
BuildMI(thisMBB, DL, TII->get(X86::CMP32ri))
@@ -28795,7 +28808,7 @@
.add(Index)
.addDisp(Disp, 16)
.add(Segment)
- .setMemRefs(MMOs);
+ .setMemRefs(LoadOnlyMMO);
// Zero-extend the offset
unsigned OffsetReg64 = MRI.createVirtualRegister(AddrRegClass);
@@ -28823,7 +28836,7 @@
.addDisp(Disp, UseFPOffset ? 4 : 0)
.add(Segment)
.addReg(NextOffsetReg)
- .setMemRefs(MMOs);
+ .setMemRefs(StoreOnlyMMO);
// Jump to endMBB
BuildMI(offsetMBB, DL, TII->get(X86::JMP_1))
@@ -28842,7 +28855,7 @@
.add(Index)
.addDisp(Disp, 8)
.add(Segment)
- .setMemRefs(MMOs);
+ .setMemRefs(LoadOnlyMMO);
// If we need to align it, do so. Otherwise, just copy the address
// to OverflowDestReg.
@@ -28879,7 +28892,7 @@
.addDisp(Disp, 8)
.add(Segment)
.addReg(NextAddrReg)
- .setMemRefs(MMOs);
+ .setMemRefs(StoreOnlyMMO);
// If we branched, emit the PHI to the front of endMBB.
if (offsetMBB) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62726.202886.patch
Type: text/x-patch
Size: 3151 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190604/9a0afb63/attachment.bin>
More information about the llvm-commits
mailing list