Use logarithmic units for basic block alignment.
This was actually a bit of a mess. TLI.setPrefLoopAlignment was clearly documented as taking log2(bytes) units, but the x86 target would still set a preferred loop alignment of '16'. CodePlacementOpt passed this number on to the basic block, and AsmPrinter interpreted it as bytes. Now both MachineFunction and MachineBasicBlock use logarithmic alignments. Obviously, MachineConstantPool still measures alignments in bytes, so we can emulate the thrill of using as. llvm-svn: 145889
This commit is contained in:
parent
f7cef7ecad
commit
10e1252269
|
@ -84,8 +84,9 @@ class MachineBasicBlock : public ilist_node<MachineBasicBlock> {
|
||||||
|
|
||||||
/// Alignment - Alignment of the basic block. Zero if the basic block does
|
/// Alignment - Alignment of the basic block. Zero if the basic block does
|
||||||
/// not need to be aligned.
|
/// not need to be aligned.
|
||||||
|
/// The alignment is specified as log2(bytes).
|
||||||
unsigned Alignment;
|
unsigned Alignment;
|
||||||
|
|
||||||
/// IsLandingPad - Indicate that this basic block is entered via an
|
/// IsLandingPad - Indicate that this basic block is entered via an
|
||||||
/// exception handler.
|
/// exception handler.
|
||||||
bool IsLandingPad;
|
bool IsLandingPad;
|
||||||
|
@ -219,10 +220,12 @@ public:
|
||||||
bool livein_empty() const { return LiveIns.empty(); }
|
bool livein_empty() const { return LiveIns.empty(); }
|
||||||
|
|
||||||
/// getAlignment - Return alignment of the basic block.
|
/// getAlignment - Return alignment of the basic block.
|
||||||
|
/// The alignment is specified as log2(bytes).
|
||||||
///
|
///
|
||||||
unsigned getAlignment() const { return Alignment; }
|
unsigned getAlignment() const { return Alignment; }
|
||||||
|
|
||||||
/// setAlignment - Set alignment of the basic block.
|
/// setAlignment - Set alignment of the basic block.
|
||||||
|
/// The alignment is specified as log2(bytes).
|
||||||
///
|
///
|
||||||
void setAlignment(unsigned Align) { Alignment = Align; }
|
void setAlignment(unsigned Align) { Alignment = Align; }
|
||||||
|
|
||||||
|
|
|
@ -1970,7 +1970,7 @@ static void EmitBasicBlockLoopComments(const MachineBasicBlock &MBB,
|
||||||
void AsmPrinter::EmitBasicBlockStart(const MachineBasicBlock *MBB) const {
|
void AsmPrinter::EmitBasicBlockStart(const MachineBasicBlock *MBB) const {
|
||||||
// Emit an alignment directive for this block, if needed.
|
// Emit an alignment directive for this block, if needed.
|
||||||
if (unsigned Align = MBB->getAlignment())
|
if (unsigned Align = MBB->getAlignment())
|
||||||
EmitAlignment(Log2_32(Align));
|
EmitAlignment(Align);
|
||||||
|
|
||||||
// If the block has its address taken, emit any labels that were used to
|
// If the block has its address taken, emit any labels that were used to
|
||||||
// reference the block. It is possible that there is more than one label
|
// reference the block. It is possible that there is more than one label
|
||||||
|
|
|
@ -1211,10 +1211,10 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||||
maxStoresPerMemcpyOptSize = Subtarget->isTargetDarwin() ? 8 : 4;
|
maxStoresPerMemcpyOptSize = Subtarget->isTargetDarwin() ? 8 : 4;
|
||||||
maxStoresPerMemmove = 8; // For @llvm.memmove -> sequence of stores
|
maxStoresPerMemmove = 8; // For @llvm.memmove -> sequence of stores
|
||||||
maxStoresPerMemmoveOptSize = Subtarget->isTargetDarwin() ? 8 : 4;
|
maxStoresPerMemmoveOptSize = Subtarget->isTargetDarwin() ? 8 : 4;
|
||||||
setPrefLoopAlignment(16);
|
setPrefLoopAlignment(4); // 2^4 bytes.
|
||||||
benefitFromCodePlacementOpt = true;
|
benefitFromCodePlacementOpt = true;
|
||||||
|
|
||||||
setPrefFunctionAlignment(4);
|
setPrefFunctionAlignment(4); // 2^4 bytes.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue