forked from OSchip/llvm-project
[XCore] Fix printing of inline asm operands.
Previously an asm operand with no operand modifier would give the error "invalid operand in inline asm". llvm-svn: 186407
This commit is contained in:
parent
069f95f926
commit
ab29d19536
|
@ -240,18 +240,14 @@ void XCoreAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
|
|||
bool XCoreAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo,
|
||||
unsigned AsmVariant,const char *ExtraCode,
|
||||
raw_ostream &O) {
|
||||
// Does this asm operand have a single letter operand modifier?
|
||||
if (ExtraCode && ExtraCode[0])
|
||||
if (ExtraCode[1] != 0) return true; // Unknown modifier.
|
||||
// Print the operand if there is no operand modifier.
|
||||
if (!ExtraCode || !ExtraCode[0]) {
|
||||
printOperand(MI, OpNo, O);
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (ExtraCode[0]) {
|
||||
default:
|
||||
// See if this is a generic print operand
|
||||
return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O);
|
||||
}
|
||||
|
||||
printOperand(MI, OpNo, O);
|
||||
return false;
|
||||
// Otherwise fallback on the default implementation.
|
||||
return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O);
|
||||
}
|
||||
|
||||
void XCoreAsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
; RUN: llc < %s -march=xcore | FileCheck %s
|
||||
; CHECK-LABEL: f1:
|
||||
; CHECK: foo r0
|
||||
define i32 @f1() nounwind {
|
||||
entry:
|
||||
%asmtmp = tail call i32 asm sideeffect "foo $0", "=r"() nounwind
|
||||
ret i32 %asmtmp
|
||||
}
|
||||
|
||||
; CHECK-LABEL: f2:
|
||||
; CHECK: foo 5
|
||||
define void @f2() nounwind {
|
||||
entry:
|
||||
tail call void asm sideeffect "foo $0", "i"(i32 5) nounwind
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: f3:
|
||||
; CHECK: foo 42
|
||||
define void @f3() nounwind {
|
||||
entry:
|
||||
tail call void asm sideeffect "foo ${0:c}", "i"(i32 42) nounwind
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: f4:
|
||||
; CHECK: foo -99
|
||||
define void @f4() nounwind {
|
||||
entry:
|
||||
tail call void asm sideeffect "foo ${0:n}", "i"(i32 99) nounwind
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue