handle "st" as "st(0)"

llvm-svn: 31320
This commit is contained in:
Chris Lattner 2006-10-31 19:42:44 +00:00
parent 6f043b90ea
commit f6a6966cd2
1 changed files with 12 additions and 3 deletions

View 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.
@ -5533,8 +5534,16 @@ X86TargetLowering::getRegForInlineAsmConstraint(const std::string &Constraint,
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