Consolidate the GPOpt stuff to all use the Subtarget, instead of still
authorChris Lattner <sabre@nondot.org>
Fri, 5 Aug 2005 22:05:03 +0000 (22:05 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 5 Aug 2005 22:05:03 +0000 (22:05 +0000)
depending on the command line option.  Now the command line option just
sets the subtarget as appropriate.  G5 opts will now default to on on
G5-enabled nightly testers among other machines.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22688 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/PPC.h
lib/Target/PowerPC/PPCAsmPrinter.cpp
lib/Target/PowerPC/PPCISelPattern.cpp
lib/Target/PowerPC/PPCSubtarget.cpp
lib/Target/PowerPC/PPCSubtarget.h
lib/Target/PowerPC/PPCTargetMachine.cpp

index 58b0a6fc4177e1929ea4ab33d2112ae093cf7d06..5f041b576e9d6742a445a5bd7a71a8077085f6eb 100644 (file)
@@ -33,7 +33,6 @@ FunctionPass *createPPC64ISelPattern(TargetMachine &TM);
 FunctionPass *createDarwinAsmPrinter(std::ostream &OS, TargetMachine &TM);
 FunctionPass *createAIXAsmPrinter(std::ostream &OS, TargetMachine &TM);
 
-extern bool GPOPT;
 extern bool PICEnabled;
 extern PPCTargetEnum PPCTarget;
 } // end namespace llvm;
index 55007a491000f218a3476b86973c93c6ea8573a4..9ef26a0de9f11f946910fdbbb8766b52eb6f41e4 100644 (file)
@@ -19,6 +19,7 @@
 #define DEBUG_TYPE "asmprinter"
 #include "PowerPC.h"
 #include "PowerPCTargetMachine.h"
+#include "PowerPCSubtarget.h"
 #include "llvm/Constants.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Module.h"
@@ -440,7 +441,8 @@ void DarwinAsmPrinter::printConstantPool(MachineConstantPool *MCP) {
 }
 
 bool DarwinAsmPrinter::doInitialization(Module &M) {
-  if (GPOPT) O << "\t.machine ppc970\n";
+  if (TM.getSubtarget<PPCSubtarget>().isGigaProcessor())
+    O << "\t.machine ppc970\n";
   AsmPrinter::doInitialization(M);
   return false;
 }
index b9cdb858b3e01ce66852e3d309ada71d581f4293..ae7f9b64a8859df1fc4890b00728f42fd22b6670 100644 (file)
@@ -96,7 +96,7 @@ namespace {
       setOperationAction(ISD::SREM , MVT::f32, Expand);
 
       // If we're enabling GP optimizations, use hardware square root
-      if (!GPOPT) {
+      if (!TM.getSubtarget<PPCSubtarget>().isGigaProcessor()) {
         setOperationAction(ISD::FSQRT, MVT::f64, Expand);
         setOperationAction(ISD::FSQRT, MVT::f32, Expand);
       }
@@ -536,6 +536,7 @@ namespace {
 Statistic<>Recorded("ppc-codegen", "Number of recording ops emitted");
 Statistic<>FusedFP("ppc-codegen", "Number of fused fp operations");
 Statistic<>FrameOff("ppc-codegen", "Number of frame idx offsets collapsed");
+
 //===--------------------------------------------------------------------===//
 /// ISel - PPC32 specific code to select PPC32 machine instructions for
 /// SelectionDAG operations.
@@ -929,7 +930,9 @@ unsigned ISel::getConstDouble(double doubleVal, unsigned Result=0) {
 void ISel::MoveCRtoGPR(unsigned CCReg, bool Inv, unsigned Idx, unsigned Result){
   unsigned IntCR = MakeReg(MVT::i32);
   BuildMI(BB, PPC::MCRF, 1, PPC::CR7).addReg(CCReg);
-  BuildMI(BB, GPOPT ? PPC::MFOCRF : PPC::MFCR, 1, IntCR).addReg(PPC::CR7);
+  bool GPOpt =
+    TLI.getTargetMachine().getSubtarget<PPCSubtarget>().isGigaProcessor();
+  BuildMI(BB, GPOpt ? PPC::MFOCRF : PPC::MFCR, 1, IntCR).addReg(PPC::CR7);
   if (Inv) {
     unsigned Tmp1 = MakeReg(MVT::i32);
     BuildMI(BB, PPC::RLWINM, 4, Tmp1).addReg(IntCR).addImm(32-(3-Idx))
index 3bfa7a6eefe8a1ebe2c90634eb30d7ee4143e338..686c11c6691af138dd81e60fc656d658d4b27ab5 100644 (file)
 //===----------------------------------------------------------------------===//
 
 #include "PowerPCSubtarget.h"
+#include "PowerPC.h"
 #include "llvm/Module.h"
+#include "llvm/Support/CommandLine.h"
+using namespace llvm;
+PPCTargetEnum llvm::PPCTarget = TargetDefault;
+
+namespace llvm {
+  cl::opt<PPCTargetEnum, true>
+  PPCTargetArg(cl::desc("Force generation of code for a specific PPC target:"),
+               cl::values(
+                          clEnumValN(TargetAIX,  "aix", "  Enable AIX codegen"),
+                          clEnumValN(TargetDarwin,"darwin","  Enable Darwin codegen"),
+                          clEnumValEnd),
+               cl::location(PPCTarget), cl::init(TargetDefault));
+  cl::opt<bool> EnableGPOPT("enable-gpopt", cl::Hidden,
+                             cl::desc("Enable optimizations for GP cpus"));
+}
 
 #if defined(__APPLE__)
 #include <mach/mach.h>
@@ -33,25 +49,26 @@ static boolean_t IsGP() {
 } 
 #endif
 
-using namespace llvm;
-
 PPCSubtarget::PPCSubtarget(const Module &M)
-  : TargetSubtarget(), stackAlignment(16), isGigaProcessor(false), isAIX(false),
-    isDarwin(false) {
-  // Set the boolean corresponding to the current target triple, or the default
+  : StackAlignment(16), IsGigaProcessor(false), IsAIX(false), IsDarwin(false) {
+
+    // Set the boolean corresponding to the current target triple, or the default
   // if one cannot be determined, to true.
   const std::string& TT = M.getTargetTriple();
   if (TT.length() > 5) {
-    isDarwin = TT.find("darwin") != std::string::npos;
+    IsDarwin = TT.find("darwin") != std::string::npos;
 #if defined(__APPLE__)
-    isGigaProcessor = IsGP();
+    IsGigaProcessor = IsGP();
 #endif
   } else if (TT.empty()) {
 #if defined(_POWER)
-    isAIX = true;
+    IsAIX = true;
 #elif defined(__APPLE__)
-    isDarwin = true;
-    isGigaProcessor = IsGP();
+    IsDarwin = true;
+    IsGigaProcessor = IsGP();
 #endif
   }
+  
+  // If GP opts are forced on by the commandline, do so now.
+  if (EnableGPOPT) IsGigaProcessor = true;
 }
index c1143518009c1c29d6f7d427943a1a2c8869d791..60308f0c634b8fe8f70fa198b2df2d8316899009 100644 (file)
@@ -23,12 +23,12 @@ class PPCSubtarget : public TargetSubtarget {
 protected:
   /// stackAlignment - The minimum alignment known to hold of the stack frame on
   /// entry to the function and which must be maintained by every function.
-  unsigned stackAlignment;
+  unsigned StackAlignment;
 
   /// Used by the ISel to turn in optimizations for POWER4-derived architectures
-  bool isGigaProcessor;
-  bool isAIX;
-  bool isDarwin;
+  bool IsGigaProcessor;
+  bool IsAIX;
+  bool IsDarwin;
 public:
   /// This constructor initializes the data members to match that
   /// of the specified module.
@@ -38,10 +38,12 @@ public:
   /// getStackAlignment - Returns the minimum alignment known to hold of the
   /// stack frame on entry to the function and which must be maintained by every
   /// function for this subtarget.
-  unsigned getStackAlignment() const { return stackAlignment; }
+  unsigned getStackAlignment() const { return StackAlignment; }
 
-  bool IsAIX() const { return isAIX; }
-  bool IsDarwin() const { return isDarwin; }
+  bool isAIX() const { return IsAIX; }
+  bool isDarwin() const { return IsDarwin; }
+  
+  bool isGigaProcessor() const { return IsGigaProcessor; }
 };
 } // End llvm namespace
 
index 009f4ebe633187ccfae04d95ae5b4b54084398b6..9b2670cfcac7df186c3abf8713f52cbef3d806bc 100644 (file)
 #include <iostream>
 using namespace llvm;
 
-bool llvm::GPOPT = false;
-PPCTargetEnum llvm::PPCTarget = TargetDefault;
-
-namespace llvm {
-  cl::opt<PPCTargetEnum, true>
-  PPCTargetArg(
-         cl::desc("Force generation of code for a specific PPC target:"),
-         cl::values(
-                    clEnumValN(TargetAIX,  "aix", "  Enable AIX codegen"),
-                    clEnumValN(TargetDarwin,"darwin","  Enable Darwin codegen"),
-                    clEnumValEnd),
-         cl::location(PPCTarget), cl::init(TargetDefault));
-  cl::opt<bool> EnablePPCLSR("enable-lsr-for-ppc",
-                             cl::desc("Enable LSR for PPC (beta)"),
-                             cl::Hidden);
-  cl::opt<bool, true> EnableGPOPT("enable-gpopt", cl::Hidden,
-                                  cl::location(GPOPT),
-                                  cl::desc("Enable optimizations for GP cpus"));
-}
+static cl::opt<bool> EnablePPCLSR("enable-lsr-for-ppc", cl::Hidden,
+                                  cl::desc("Enable LSR for PPC (beta)"));
 
 namespace {
   const std::string PPC32ID = "PowerPC/32bit";
@@ -71,8 +54,8 @@ PowerPCTargetMachine::PowerPCTargetMachine(const std::string &name,
                                            const PowerPCFrameInfo &TFI)
 : TargetMachine(name, IL, TD), FrameInfo(TFI), Subtarget(M) {
   if (TargetDefault == PPCTarget) {
-    if (Subtarget.IsAIX()) PPCTarget = TargetAIX;
-    if (Subtarget.IsDarwin()) PPCTarget = TargetDarwin;
+    if (Subtarget.isAIX()) PPCTarget = TargetAIX;
+    if (Subtarget.isDarwin()) PPCTarget = TargetDarwin;
   }
 }