OSDN Git Service

Change -arm-divmod-libcall to a target neutral option.
authorEvan Cheng <evan.cheng@apple.com>
Thu, 7 Apr 2011 00:58:44 +0000 (00:58 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 7 Apr 2011 00:58:44 +0000 (00:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129045 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetOptions.h
lib/Target/ARM/ARMISelLowering.cpp
lib/Target/TargetMachine.cpp
test/CodeGen/ARM/divmod.ll

index 97ceffd..fc80a06 100644 (file)
@@ -157,6 +157,10 @@ namespace llvm {
   /// wth earlier copy coalescing.
   extern bool StrongPHIElim;
 
+  /// HasDivModLibcall - This flag indicates whether the target compiler
+  /// runtime library has integer divmod libcalls.
+  extern bool HasDivModLibcall;
+
 } // End llvm namespace
 
 #endif
index 6ff5752..d030f68 100644 (file)
@@ -72,11 +72,6 @@ ARMInterworking("arm-interworking", cl::Hidden,
   cl::desc("Enable / disable ARM interworking (for debugging only)"),
   cl::init(true));
 
-static cl::opt<bool>
-UseDivMod("arm-divmod-libcall", cl::Hidden,
-  cl::desc("Use __{u}divmod libcalls for div / rem pairs"),
-  cl::init(false));
-
 void ARMTargetLowering::addTypeForNEON(EVT VT, EVT PromotedLdStVT,
                                        EVT PromotedBitwiseVT) {
   if (VT != PromotedLdStVT) {
@@ -398,7 +393,7 @@ ARMTargetLowering::ARMTargetLowering(TargetMachine &TM)
     setLibcallCallingConv(RTLIB::UDIV_I32, CallingConv::ARM_AAPCS);
   }
 
-  if (UseDivMod) {
+  if (HasDivModLibcall) {
     setLibcallName(RTLIB::SDIVREM_I32, "__divmodsi4");
     setLibcallName(RTLIB::UDIVREM_I32, "__udivmodsi4");
   }
index 681842e..8c7330a 100644 (file)
@@ -48,6 +48,7 @@ namespace llvm {
   bool RealignStack;
   bool DisableJumpTables;
   bool StrongPHIElim;
+  bool HasDivModLibcall;
   bool AsmVerbosityDefault(false);
 }
 
@@ -205,6 +206,11 @@ EnableStrongPHIElim(cl::Hidden, "strong-phi-elim",
   cl::desc("Use strong PHI elimination."),
   cl::location(StrongPHIElim),
   cl::init(false));
+static cl::opt<bool, true>
+UseDivMod("use-divmod-libcall",
+  cl::desc("Use __{u}divmod libcalls for div / rem pairs"),
+  cl::location(HasDivModLibcall),
+  cl::init(false));
 static cl::opt<bool>
 DataSections("fdata-sections",
   cl::desc("Emit data into separate sections"),
index 9b51297..04b8fbf 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc < %s -mtriple=arm-apple-darwin -arm-divmod-libcall | FileCheck %s
+; RUN: llc < %s -mtriple=arm-apple-darwin -use-divmod-libcall | FileCheck %s
 
 define void @foo(i32 %x, i32 %y, i32* nocapture %P) nounwind ssp {
 entry: