[llvm] r195759 - Darwin-ARM: use movw/movt for static relocations
Tim Northover
tnorthover at apple.com
Tue Nov 26 04:45:05 PST 2013
Author: tnorthover
Date: Tue Nov 26 06:45:05 2013
New Revision: 195759
URL: http://llvm.org/viewvc/llvm-project?rev=195759&view=rev
Log:
Darwin-ARM: use movw/movt for static relocations
Modified:
llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
llvm/trunk/test/CodeGen/ARM/movt-movw-global.ll
Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMFastISel.cpp?rev=195759&r1=195758&r2=195759&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Tue Nov 26 06:45:05 2013
@@ -679,14 +679,12 @@ unsigned ARMFastISel::ARMMaterializeGV(c
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) {
Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=195759&r1=195758&r2=195759&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Tue Nov 26 06:45:05 2013
@@ -2537,9 +2537,7 @@ SDValue ARMTargetLowering::LowerGlobalAd
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.
Modified: llvm/trunk/test/CodeGen/ARM/movt-movw-global.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/movt-movw-global.ll?rev=195759&r1=195758&r2=195759&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/movt-movw-global.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/movt-movw-global.ll Tue Nov 26 06:45:05 2013
@@ -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
}
More information about the llvm-commits
mailing list