handle "st" as "st(0)"
authorChris Lattner <sabre@nondot.org>
Tue, 31 Oct 2006 19:42:44 +0000 (19:42 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 31 Oct 2006 19:42:44 +0000 (19:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31320 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 96ab93949d2ed53b4423ae4dcebd0a3b878298bb..83bf28073339ac78ff45835a9987e766ff6bd7e1 100644 (file)
@@ -32,6 +32,7 @@
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Target/TargetOptions.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/ADT/StringExtras.h"
 using namespace llvm;
 
 // FIXME: temporary.
@@ -5532,9 +5533,17 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint,
   // constraint into a member of a register class.
   std::pair<unsigned, const TargetRegisterClass*> Res;
   Res = TargetLowering::getRegForInlineAsmConstraint(Constraint, VT);
-  
-  // Not found?  Bail out.
-  if (Res.second == 0) return Res;
+
+  // Not found as a standard register?
+  if (Res.second == 0) {
+    // GCC calls "st(0)" just plain "st".
+    if (StringsEqualNoCase("{st}", Constraint)) {
+      Res.first = X86::ST0;
+      Res.second = X86::RSTRegisterClass;
+    }
+    
+    return Res;
+  }
   
   // Otherwise, check to see if this is a register class of the wrong value
   // type.  For example, we want to map "{ax},i32" -> {eax}, we don't want it to