[llvm-commits] [llvm] r60486 - in /llvm/trunk: include/llvm/CodeGen/MachineFrameInfo.h include/llvm/CodeGen/MachineInstrBuilder.h lib/Target/X86/X86InstrBuilder.h
Dan Gohman
gohman at apple.com
Wed Dec 3 10:11:46 PST 2008
Author: djg
Date: Wed Dec 3 12:11:40 2008
New Revision: 60486
URL: http://llvm.org/viewvc/llvm-project?rev=60486&view=rev
Log:
Extend X86's addFrameReference to add a MachineMemOperand for
the frame reference. This will help post-RA scheduling determine
that spills to distinct stack slots are independent.
Modified:
llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h
llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h
llvm/trunk/lib/Target/X86/X86InstrBuilder.h
Modified: llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h?rev=60486&r1=60485&r2=60486&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineFrameInfo.h Wed Dec 3 12:11:40 2008
@@ -99,7 +99,7 @@
// the function. This field has no meaning for a variable sized element.
int64_t SPOffset;
- StackObject(uint64_t Sz, unsigned Al, int64_t SP, bool IM = false)
+ StackObject(uint64_t Sz, unsigned Al, int64_t SP = 0, bool IM = false)
: Size(Sz), Alignment(Al), isImmutable(IM), SPOffset(SP) {}
};
@@ -355,7 +355,7 @@
///
int CreateStackObject(uint64_t Size, unsigned Alignment) {
assert(Size != 0 && "Cannot allocate zero size stack objects!");
- Objects.push_back(StackObject(Size, Alignment, -1));
+ Objects.push_back(StackObject(Size, Alignment));
return (int)Objects.size()-NumFixedObjects-1;
}
@@ -373,7 +373,7 @@
///
int CreateVariableSizedObject() {
HasVarSizedObjects = true;
- Objects.push_back(StackObject(0, 1, -1));
+ Objects.push_back(StackObject(0, 1));
return (int)Objects.size()-NumFixedObjects-1;
}
Modified: llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h?rev=60486&r1=60485&r2=60486&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineInstrBuilder.h Wed Dec 3 12:11:40 2008
@@ -89,6 +89,11 @@
MI->addOperand(MachineOperand::CreateES(FnName, Offset));
return *this;
}
+
+ const MachineInstrBuilder &addMemOperand(const MachineMemOperand &MMO) const {
+ MI->addMemOperand(*MI->getParent()->getParent(), MMO);
+ return *this;
+ }
};
/// BuildMI - Builder interface. Specify how to create the initial instruction
Modified: llvm/trunk/lib/Target/X86/X86InstrBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrBuilder.h?rev=60486&r1=60485&r2=60486&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86InstrBuilder.h (original)
+++ llvm/trunk/lib/Target/X86/X86InstrBuilder.h Wed Dec 3 12:11:40 2008
@@ -24,7 +24,9 @@
#ifndef X86INSTRBUILDER_H
#define X86INSTRBUILDER_H
+#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
+#include "llvm/CodeGen/PseudoSourceValue.h"
namespace llvm {
@@ -109,7 +111,22 @@
///
inline const MachineInstrBuilder &
addFrameReference(const MachineInstrBuilder &MIB, int FI, int Offset = 0) {
- return MIB.addFrameIndex(FI).addImm(1).addReg(0).addImm(Offset);
+ MachineInstr *MI = MIB;
+ MachineFunction &MF = *MI->getParent()->getParent();
+ MachineFrameInfo &MFI = *MF.getFrameInfo();
+ const TargetInstrDesc &TID = MI->getDesc();
+ unsigned Flags = 0;
+ if (TID.mayLoad())
+ Flags |= MachineMemOperand::MOLoad;
+ if (TID.mayStore())
+ Flags |= MachineMemOperand::MOStore;
+ MachineMemOperand MMO(PseudoSourceValue::getFixedStack(FI),
+ Flags,
+ MFI.getObjectOffset(FI) + Offset,
+ MFI.getObjectSize(FI),
+ MFI.getObjectAlignment(FI));
+ return MIB.addFrameIndex(FI).addImm(1).addReg(0).addImm(Offset)
+ .addMemOperand(MMO);
}
/// addConstantPoolReference - This function is used to add a reference to the
More information about the llvm-commits
mailing list