diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/inline-asm-bad-modifier.ll | 8 |
2 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index c9be0b98cab..be361d5f93b 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -372,6 +372,12 @@ static bool printAsmMRegister(X86AsmPrinter &P, const MachineOperand &MO, unsigned Reg = MO.getReg(); bool EmitPercent = true; + if (!X86::GR8RegClass.contains(Reg) && + !X86::GR16RegClass.contains(Reg) && + !X86::GR32RegClass.contains(Reg) && + !X86::GR64RegClass.contains(Reg)) + return true; + switch (Mode) { default: return true; // Unknown mode. case 'b': // Print QImode register diff --git a/llvm/test/CodeGen/X86/inline-asm-bad-modifier.ll b/llvm/test/CodeGen/X86/inline-asm-bad-modifier.ll new file mode 100644 index 00000000000..819b9fcfa79 --- /dev/null +++ b/llvm/test/CodeGen/X86/inline-asm-bad-modifier.ll @@ -0,0 +1,8 @@ +; RUN: not llc -mtriple=x86_64-- < %s 2>&1 | FileCheck %s + +;CHECK: error: invalid operand in inline asm: 'vmovd ${1:x}, $0' +define i32 @foo() { +entry: + %0 = tail call i32 asm sideeffect "vmovd ${1:x}, $0", "=r,x,~{dirflag},~{fpsr},~{flags}"(<2 x i64> <i64 240518168632, i64 240518168632>) + ret i32 %0 +} |

