Set ABI if it hasn't been set on the command line.
authorAkira Hatanaka <ahatanak@gmail.com>
Wed, 21 Sep 2011 02:45:29 +0000 (02:45 +0000)
committerAkira Hatanaka <ahatanak@gmail.com>
Wed, 21 Sep 2011 02:45:29 +0000 (02:45 +0000)
Check if architecture & ABI combination is valid.

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

lib/Target/Mips/MipsSubtarget.cpp
lib/Target/Mips/MipsSubtarget.h

index 3bb501176a8874111d8aeabc0f47beb4bd2d1914..5c8823eb3f2fc20e4ba35448e9d177be983cf288 100644 (file)
@@ -39,6 +39,15 @@ MipsSubtarget::MipsSubtarget(const std::string &TT, const std::string &CPU,
   // Initialize scheduling itinerary for the specified CPU.
   InstrItins = getInstrItineraryForCPU(CPUName);
 
+  // Set MipsABI if it hasn't been set yet.
+  if (MipsABI == UnknownABI)
+    MipsABI = hasMips64() ? N64 : O32; 
+
+  // Check if Architecture and ABI are compatible.
+  assert(((!hasMips64() && (isABI_O32() || isABI_EABI())) ||
+          (hasMips64() && (isABI_N32() || isABI_N64()))) &&
+         "Invalid  Arch & ABI pair.");
+
   // Is the target system Linux ?
   if (TT.find("linux") == std::string::npos)
     IsLinux = false;
index c6b43a7bccf4bf813025047f8cbce26dde1a5bf4..d9dddad23a48ef333e48f985804fe83bd85738d4 100644 (file)
@@ -29,7 +29,7 @@ class MipsSubtarget : public MipsGenSubtargetInfo {
 public:
   // NOTE: O64 will not be supported.
   enum MipsABIEnum {
-    O32, N32, N64, EABI
+    UnknownABI, O32, N32, N64, EABI
   };
 
 protected: