[llvm] r210814 - CodeGen: enable mov.w/mov.t pairs with minsize for WoA

Saleem Abdulrasool compnerd at compnerd.org
Thu Jun 12 13:06:33 PDT 2014


Author: compnerd
Date: Thu Jun 12 15:06:33 2014
New Revision: 210814

URL: http://llvm.org/viewvc/llvm-project?rev=210814&view=rev
Log:
CodeGen: enable mov.w/mov.t pairs with minsize for WoA

Windows on ARM uses COFF/PE which is intrinsically position independent.  For
the case of 32-bit immediates, use a pair-wise relocation as otherwise we may
exceed the range of operators.  This fixes a code generation crash when using
-Oz when targeting Windows on ARM.

Added:
    llvm/trunk/test/CodeGen/ARM/Windows/global-minsize.ll
Modified:
    llvm/trunk/lib/Target/ARM/ARMSubtarget.h

Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=210814&r1=210813&r2=210814&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMSubtarget.h (original)
+++ llvm/trunk/lib/Target/ARM/ARMSubtarget.h Thu Jun 12 15:06:33 2014
@@ -379,7 +379,12 @@ public:
 
   bool isR9Reserved() const { return IsR9Reserved; }
 
-  bool useMovt() const { return UseMovt && !isMinSize(); }
+  bool useMovt() const {
+    // NOTE Windows on ARM needs to use mov.w/mov.t pairs to materialise 32-bit
+    // immediates as it is inherently position independent, and may be out of
+    // range otherwise.
+    return UseMovt && (isTargetWindows() || !isMinSize());
+  }
   bool supportsTailCall() const { return SupportsTailCall; }
 
   bool allowsUnalignedMem() const { return AllowsUnalignedMem; }

Added: llvm/trunk/test/CodeGen/ARM/Windows/global-minsize.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/Windows/global-minsize.ll?rev=210814&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/Windows/global-minsize.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/Windows/global-minsize.ll Thu Jun 12 15:06:33 2014
@@ -0,0 +1,16 @@
+; RUN: llc -mtriple=thumbv7-windows -filetype asm -o - %s | FileCheck %s
+
+ at i = internal global i32 0, align 4
+
+; Function Attrs: minsize
+define arm_aapcs_vfpcc i32* @function() #0 {
+entry:
+  ret i32* @i
+}
+
+attributes #0 = { minsize }
+
+; CHECK: function:
+; CHECK:   movw  r0, :lower16:i
+; CHECK:   movt  r0, :upper16:i
+; CHECK:   bx    lr





More information about the llvm-commits mailing list