mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 07:31:53 +00:00
Darwin-ARM: use movw/movt for static relocations
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195759 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7a46096665
commit
2254509d71
@ -679,14 +679,12 @@ unsigned ARMFastISel::ARMMaterializeGV(const GlobalValue *GV, MVT VT) {
|
||||
if (!Subtarget->isTargetDarwin() && IsThreadLocal) return 0;
|
||||
|
||||
// Use movw+movt when possible, it avoids constant pool entries.
|
||||
// Darwin targets don't support movt with Reloc::Static, see
|
||||
// ARMTargetLowering::LowerGlobalAddressDarwin. Other targets only support
|
||||
// static movt relocations.
|
||||
// Non-darwin targets only support static movt relocations in FastISel.
|
||||
if (Subtarget->useMovt() &&
|
||||
Subtarget->isTargetDarwin() == (RelocM != Reloc::Static)) {
|
||||
(Subtarget->isTargetDarwin() || RelocM == Reloc::Static)) {
|
||||
unsigned Opc;
|
||||
unsigned char TF = 0;
|
||||
if (Subtarget->isTargetDarwin() && RelocM != Reloc::Static)
|
||||
if (Subtarget->isTargetDarwin())
|
||||
TF = ARMII::MO_NONLAZY;
|
||||
|
||||
switch (RelocM) {
|
||||
|
@ -2537,9 +2537,7 @@ SDValue ARMTargetLowering::LowerGlobalAddressDarwin(SDValue Op,
|
||||
const GlobalValue *GV = cast<GlobalAddressSDNode>(Op)->getGlobal();
|
||||
Reloc::Model RelocM = getTargetMachine().getRelocationModel();
|
||||
|
||||
// FIXME: Enable this for static codegen when tool issues are fixed. Also
|
||||
// update ARMFastISel::ARMMaterializeGV.
|
||||
if (Subtarget->useMovt() && RelocM != Reloc::Static) {
|
||||
if (Subtarget->useMovt()) {
|
||||
++NumMovwMovt;
|
||||
// FIXME: Once remat is capable of dealing with instructions with register
|
||||
// operands, expand this into two nodes.
|
||||
|
@ -16,8 +16,8 @@ entry:
|
||||
; IOS-PIC: movw r0, :lower16:(L_foo$non_lazy_ptr-(LPC0_0+8))
|
||||
; IOS-PIC-NEXT: movt r0, :upper16:(L_foo$non_lazy_ptr-(LPC0_0+8))
|
||||
|
||||
; IOS-STATIC-NOT: movw r0, :lower16:_foo
|
||||
; IOS-STATIC-NOT: movt r0, :upper16:_foo
|
||||
; IOS-STATIC: movw r0, :lower16:_foo
|
||||
; IOS-STATIC-NEXT: movt r0, :upper16:_foo
|
||||
ret i32* @foo
|
||||
}
|
||||
|
||||
@ -32,8 +32,8 @@ entry:
|
||||
; IOS-PIC: movw r1, :lower16:(L_foo$non_lazy_ptr-(LPC1_0+8))
|
||||
; IOS-PIC-NEXT: movt r1, :upper16:(L_foo$non_lazy_ptr-(LPC1_0+8))
|
||||
|
||||
; IOS-STATIC-NOT: movw r1, :lower16:_foo
|
||||
; IOS-STATIC-NOT: movt r1, :upper16:_foo
|
||||
; IOS-STATIC: movw r1, :lower16:_foo
|
||||
; IOS-STATIC-NEXT: movt r1, :upper16:_foo
|
||||
store i32 %baz, i32* @foo, align 4
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user