mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-20 08:54:08 +00:00
Align ARM constant pool islands via their basic block.
Previously, all ARM::CONSTPOOL_ENTRY instructions had a hardwired alignment of 4 bytes emitted by ARMAsmPrinter. Now the same alignment is set on the basic block. This is in preparation of supporting ARM constant pool islands with different alignments. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145890 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8c741b8064
commit
3e572ac2fb
@ -1481,11 +1481,10 @@ void ARMAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
/// in the function. The first operand is the ID# for this instruction, the
|
||||
/// second is the index into the MachineConstantPool that this is, the third
|
||||
/// is the size in bytes of this constant pool entry.
|
||||
/// The required alignment is specified on the basic block holding this MI.
|
||||
unsigned LabelId = (unsigned)MI->getOperand(0).getImm();
|
||||
unsigned CPIdx = (unsigned)MI->getOperand(1).getIndex();
|
||||
|
||||
EmitAlignment(2);
|
||||
|
||||
// Mark the constant pool entry as data if we're not already in a data
|
||||
// region.
|
||||
OutStreamer.EmitDataRegion();
|
||||
|
@ -398,6 +398,9 @@ void ARMConstantIslands::DoInitialPlacement(MachineFunction &MF,
|
||||
MachineBasicBlock *BB = MF.CreateMachineBasicBlock();
|
||||
MF.push_back(BB);
|
||||
|
||||
// Mark the basic block as 4-byte aligned as required by the const-pool.
|
||||
BB->setAlignment(2);
|
||||
|
||||
// Add all of the constants from the constant pool to the end block, use an
|
||||
// identity mapping of CPI's to CPE's.
|
||||
const std::vector<MachineConstantPoolEntry> &CPs =
|
||||
@ -1311,6 +1314,9 @@ bool ARMConstantIslands::HandleConstantPoolUser(MachineFunction &MF,
|
||||
CPEntries[CPI].push_back(CPEntry(U.CPEMI, ID, 1));
|
||||
++NumCPEs;
|
||||
|
||||
// Mark the basic block as 4-byte aligned as required by the const-pool entry.
|
||||
NewIsland->setAlignment(2);
|
||||
|
||||
BBOffsets[NewIsland->getNumber()] = BBOffsets[NewMBB->getNumber()];
|
||||
// Compensate for .align 2 in thumb mode.
|
||||
if (isThumb && (BBOffsets[NewIsland->getNumber()]%4 != 0 || HasInlineAsm))
|
||||
|
@ -70,6 +70,5 @@ define i32 @test1() {
|
||||
; LinuxPIC: .align 2
|
||||
; LinuxPIC: .LCPI0_0:
|
||||
; LinuxPIC: .long _GLOBAL_OFFSET_TABLE_-(.LPC0_0+8)
|
||||
; LinuxPIC: .align 2
|
||||
; LinuxPIC: .LCPI0_1:
|
||||
; LinuxPIC: .long G(GOT)
|
||||
|
Loading…
x
Reference in New Issue
Block a user