diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp index 3fa773b856cc..d62df4dcc33c 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp @@ -376,18 +376,23 @@ bool MipsAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum, const MachineOperand &MO = MI->getOperand(OpNum); switch (ExtraCode[0]) { - default: - return true; // Unknown modifier. - case 'X': // hex const int - if ((MO.getType()) != MachineOperand::MO_Immediate) - return true; - O << "0x" << StringRef(utohexstr(MO.getImm())).lower(); - return false; - case 'x': // hex const int (low 16 bits) - if ((MO.getType()) != MachineOperand::MO_Immediate) - return true; - O << "0x" << StringRef(utohexstr(MO.getImm() & 0xffff)).lower(); - return false; + default: + return true; // Unknown modifier. + case 'X': // hex const int + if ((MO.getType()) != MachineOperand::MO_Immediate) + return true; + O << "0x" << StringRef(utohexstr(MO.getImm())).lower(); + return false; + case 'x': // hex const int (low 16 bits) + if ((MO.getType()) != MachineOperand::MO_Immediate) + return true; + O << "0x" << StringRef(utohexstr(MO.getImm() & 0xffff)).lower(); + return false; + case 'd': // decimal const int + if ((MO.getType()) != MachineOperand::MO_Immediate) + return true; + O << MO.getImm(); + return false; } } diff --git a/llvm/test/CodeGen/Mips/inlineasm-operand-code.ll b/llvm/test/CodeGen/Mips/inlineasm-operand-code.ll index 63190fa5c42e..92abf84cc7e9 100644 --- a/llvm/test/CodeGen/Mips/inlineasm-operand-code.ll +++ b/llvm/test/CodeGen/Mips/inlineasm-operand-code.ll @@ -17,5 +17,11 @@ entry: ;CHECK: #NO_APP tail call i32 asm sideeffect "addi $0,$1,${2:x}", "=r,r,I"(i32 7, i32 -3) nounwind +; d with -3 +;CHECK: #APP +;CHECK: addi ${{[0-9]+}},${{[0-9]+}},-3 +;CHECK: #NO_APP + tail call i32 asm sideeffect "addi $0,$1,${2:d}", "=r,r,I"(i32 7, i32 -3) nounwind + ret i32 0 }