[llvm-commits] CVS: llvm/lib/CodeGen/MachOWriter.cpp
Nate Begeman
natebegeman at mac.com
Tue Feb 6 21:47:32 PST 2007
Changes in directory llvm/lib/CodeGen:
MachOWriter.cpp updated: 1.22 -> 1.23
---
Log message:
Fix a fixme by correctly calculating preferred alignments for functions,
based on the alignment of the symbol and the target data's preferred align
for that type.
Also, rename some arguments for consistency.
---
Diffs of the changes: (+14 -11)
MachOWriter.cpp | 25 ++++++++++++++-----------
1 files changed, 14 insertions(+), 11 deletions(-)
Index: llvm/lib/CodeGen/MachOWriter.cpp
diff -u llvm/lib/CodeGen/MachOWriter.cpp:1.22 llvm/lib/CodeGen/MachOWriter.cpp:1.23
--- llvm/lib/CodeGen/MachOWriter.cpp:1.22 Fri Feb 2 20:39:40 2007
+++ llvm/lib/CodeGen/MachOWriter.cpp Tue Feb 6 23:47:16 2007
@@ -84,8 +84,8 @@
isLittleEndian = TM.getTargetData()->isLittleEndian();
}
- virtual void startFunction(MachineFunction &F);
- virtual bool finishFunction(MachineFunction &F);
+ virtual void startFunction(MachineFunction &MF);
+ virtual bool finishFunction(MachineFunction &MF);
virtual void addRelocation(const MachineRelocation &MR) {
Relocations.push_back(MR);
@@ -130,12 +130,15 @@
/// startFunction - This callback is invoked when a new machine function is
/// about to be emitted.
-void MachOCodeEmitter::startFunction(MachineFunction &F) {
+void MachOCodeEmitter::startFunction(MachineFunction &MF) {
+ const TargetData *TD = TM.getTargetData();
+ const Function *F = MF.getFunction();
+
// Align the output buffer to the appropriate alignment, power of 2.
- // FIXME: MachineFunction or TargetData should probably carry an alignment
- // field for functions that we can query here instead of hard coding 4 in both
- // the object writer and asm printer.
- unsigned Align = 4;
+ unsigned FnAlign = F->getAlignment();
+ unsigned TDAlign = TD->getTypeAlignmentPref(F->getType());
+ unsigned Align = Log2_32(std::max(FnAlign, TDAlign));
+ assert(!(Align & (Align-1)) && "Alignment is not a power of two!");
// Get the Mach-O Section that this function belongs in.
MachOWriter::MachOSection *MOS = MOW.getTextSection();
@@ -172,7 +175,7 @@
/// finishFunction - This callback is invoked after the function is completely
/// finished.
-bool MachOCodeEmitter::finishFunction(MachineFunction &F) {
+bool MachOCodeEmitter::finishFunction(MachineFunction &MF) {
// Get the Mach-O Section that this function belongs in.
MachOWriter::MachOSection *MOS = MOW.getTextSection();
@@ -180,16 +183,16 @@
// FIXME: it seems like we should call something like AddSymbolToSection
// in startFunction rather than changing the section size and symbol n_value
// here.
- const GlobalValue *FuncV = F.getFunction();
+ const GlobalValue *FuncV = MF.getFunction();
MachOSym FnSym(FuncV, MOW.Mang->getValueName(FuncV), MOS->Index, TM);
FnSym.n_value = MOS->size;
MOS->size = CurBufferPtr - BufferBegin;
// Emit constant pool to appropriate section(s)
- emitConstantPool(F.getConstantPool());
+ emitConstantPool(MF.getConstantPool());
// Emit jump tables to appropriate section
- emitJumpTables(F.getJumpTableInfo());
+ emitJumpTables(MF.getJumpTableInfo());
// If we have emitted any relocations to function-specific objects such as
// basic blocks, constant pools entries, or jump tables, record their
More information about the llvm-commits
mailing list