mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Enable optimization suggested by Chris Lattner to not emit reloc stubs for
static global variables whose addresses are taken. This allows us to
convert the following code for taking the address of a static function foo
addis r2, r30, ha16(Ll1__2E_foo_2$non_lazy_ptr-"L00001$pb")
lwz r3, lo16(Ll1__2E_foo_2$non_lazy_ptr-"L00001$pb")(r2)
which also includes linker stub code emitted at the end of the .s file not
shown here, and replace it with this:
addis r2, r30, ha16(l1__2E_foo_2-"L00001$pb")
la r3, lo16(l1__2E_foo_2-"L00001$pb")(r2)
which in addition to not needing linker help, also has no load instruction.
For those not up on PowerPC mnemonics, la is shorthand for add immediate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18239 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -199,20 +199,20 @@ int PPC32CodeEmitter::getMachineOpValue(MachineInstr &MI, MachineOperand &MO) {
|
||||
Offset = -((intptr_t)MovePCtoLROffset+4);
|
||||
|
||||
if (MI.getOpcode() == PPC::LOADHiAddr) {
|
||||
if (GV->hasWeakLinkage() || GV->isExternal() || isa<Function>(GV))
|
||||
if (GV->hasWeakLinkage() || GV->isExternal())
|
||||
Reloc = PPC::reloc_absolute_ptr_high; // Pointer to stub
|
||||
else
|
||||
Reloc = PPC::reloc_absolute_high; // Pointer to symbol
|
||||
|
||||
} else if (MI.getOpcode() == PPC::LA) {
|
||||
assert(!(GV->hasWeakLinkage() || GV->isExternal() || isa<Function>(GV))
|
||||
assert(!(GV->hasWeakLinkage() || GV->isExternal())
|
||||
&& "Something in the ISEL changed\n");
|
||||
|
||||
Reloc = PPC::reloc_absolute_low;
|
||||
} else if (MI.getOpcode() == PPC::LWZ) {
|
||||
Reloc = PPC::reloc_absolute_ptr_low;
|
||||
|
||||
assert((GV->hasWeakLinkage() || GV->isExternal() || isa<Function>(GV))&&
|
||||
assert((GV->hasWeakLinkage() || GV->isExternal()) &&
|
||||
"Something in the ISEL changed\n");
|
||||
} else {
|
||||
// These don't show up for global value references AFAIK, only for
|
||||
|
||||
Reference in New Issue
Block a user