mips32 long long register inline asm constraint support.
authorJack Carter <jcarter@mips.com>
Mon, 2 Jul 2012 23:35:23 +0000 (23:35 +0000)
committerJack Carter <jcarter@mips.com>
Mon, 2 Jul 2012 23:35:23 +0000 (23:35 +0000)
    inlineasm-cnstrnt-bad-r-1.ll is NOT supposed to fail, so it was removed.    This resulted in the removal of a negative test (inlineasm-cnstrnt-bad-r-1.ll)

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

lib/Target/Mips/MipsISelLowering.cpp
test/CodeGen/Mips/inlineasm-operand-code.ll

index abf22bd8041f3b878b3f94a0f8a06e5924f5d161..a7e2aa32fc6bdd5afc77cea69178a54b63b31df7 100644 (file)
@@ -3355,6 +3355,8 @@ getRegForInlineAsmConstraint(const std::string &Constraint, EVT VT) const
     case 'r':
       if (VT == MVT::i32 || VT == MVT::i16 || VT == MVT::i8)
         return std::make_pair(0U, &Mips::CPURegsRegClass);
+      if (VT == MVT::i64 && !HasMips64)
+        return std::make_pair(0U, &Mips::CPURegsRegClass);
       if (VT == MVT::i64 && HasMips64)
         return std::make_pair(0U, &Mips::CPU64RegsRegClass);
       // This will generate an error message
index ca4f3e4c5aed19b05c33273bca811951e7548da0..d75f7f2f806e4efed33e56bb64cd864b5f2f21e3 100644 (file)
@@ -41,5 +41,11 @@ entry:
 ;CHECK:        #NO_APP
   tail call i32 asm sideeffect "addi $0,$1,${2:z}", "=r,r,I"(i32 7, i32 0) nounwind
 
+; a long long in 32 bit mode (use to assert)
+;CHECK:        #APP
+;CHECK:        addi ${{[0-9]+}},${{[0-9]+}},3
+;CHECK:        #NO_APP
+  tail call i64 asm sideeffect "addi $0,$1,$2 \0A\09", "=r,r,X"(i64 1229801703532086340, i64 3) nounwind
+
   ret i32 0
 }