diff options
author | Evan Cheng <evan.cheng@apple.com> | 2012-10-11 00:15:48 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2012-10-11 00:15:48 +0000 |
commit | a395f4df5b6d9c2feb661091ca75be2500d07cb0 (patch) | |
tree | f98d61460f8f4c348f7ddcb744a06feb78716ddf | |
parent | 6b61491de3f361a149919936e6264eff3746d80b (diff) | |
download | external_llvm-a395f4df5b6d9c2feb661091ca75be2500d07cb0.zip external_llvm-a395f4df5b6d9c2feb661091ca75be2500d07cb0.tar.gz external_llvm-a395f4df5b6d9c2feb661091ca75be2500d07cb0.tar.bz2 |
Change MachineInstrBuilder::addDisp to copy over target flags by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165677 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/MachineInstrBuilder.h | 17 | ||||
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 7 |
2 files changed, 15 insertions, 9 deletions
diff --git a/include/llvm/CodeGen/MachineInstrBuilder.h b/include/llvm/CodeGen/MachineInstrBuilder.h index 654361f..7706853 100644 --- a/include/llvm/CodeGen/MachineInstrBuilder.h +++ b/include/llvm/CodeGen/MachineInstrBuilder.h @@ -176,15 +176,24 @@ public: } // Add a displacement from an existing MachineOperand with an added offset. - const MachineInstrBuilder &addDisp(const MachineOperand &Disp, - int64_t off) const { + const MachineInstrBuilder &addDisp(const MachineOperand &Disp, int64_t off, + unsigned char TargetFlags = 0) const { switch (Disp.getType()) { default: llvm_unreachable("Unhandled operand type in addDisp()"); case MachineOperand::MO_Immediate: return addImm(Disp.getImm() + off); - case MachineOperand::MO_GlobalAddress: - return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off); + case MachineOperand::MO_GlobalAddress: { + // If caller specifies new TargetFlags then use it, otherwise the + // default behavior is to copy the target flags from the existing + // MachineOperand. This means if the caller wants to clear the + // target flags it needs to do so explicitly. + if (TargetFlags) + return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off, + TargetFlags); + return addGlobalAddress(Disp.getGlobal(), Disp.getOffset() + off, + Disp.getTargetFlags()); + } } } }; diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 2fbc6bd..9ff05a2 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -12329,12 +12329,9 @@ X86TargetLowering::EmitAtomicLoadArith6432(MachineInstr *MI, // Hi MIB = BuildMI(thisMBB, DL, TII->get(LOADOpc), X86::EDX); for (unsigned i = 0; i < X86::AddrNumOperands; ++i) { - if (i == X86::AddrDisp) { + if (i == X86::AddrDisp) MIB.addDisp(MI->getOperand(MemOpndSlot + i), 4); // 4 == sizeof(i32) - // Don't forget to transfer the target flag. - MachineOperand &MO = MIB->getOperand(MIB->getNumOperands()-1); - MO.setTargetFlags(MI->getOperand(MemOpndSlot + i).getTargetFlags()); - } else + else MIB.addOperand(MI->getOperand(MemOpndSlot + i)); } MIB.setMemRefs(MMOBegin, MMOEnd); |