diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-08-09 20:09:35 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-08-09 20:09:35 +0000 |
commit | 36cd1859f395c1199c778879b59db9c01230a389 (patch) | |
tree | bc14b847d5654d6a40ca8c122f4ad8146741a46b /llvm/lib | |
parent | 688843d657c2f4a471fd66c15c3d6d47eed24b2e (diff) | |
download | bcm5719-llvm-36cd1859f395c1199c778879b59db9c01230a389.tar.gz bcm5719-llvm-36cd1859f395c1199c778879b59db9c01230a389.zip |
AMDGPU: Fix assert on n inline asm constraint
llvm-svn: 310515
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index 36028f7c60e..ec1e53ac826 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -1017,20 +1017,29 @@ void AMDGPUAsmPrinter::getAmdKernelCode(amd_kernel_code_t &Out, bool AMDGPUAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) { + // First try the generic code, which knows about modifiers like 'c' and 'n'. + if (!AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O)) + return false; + if (ExtraCode && ExtraCode[0]) { if (ExtraCode[1] != 0) return true; // Unknown modifier. switch (ExtraCode[0]) { - default: - // See if this is a generic print operand - return AsmPrinter::PrintAsmOperand(MI, OpNo, AsmVariant, ExtraCode, O); case 'r': break; + default: + return true; } } - AMDGPUInstPrinter::printRegOperand(MI->getOperand(OpNo).getReg(), O, - *TM.getSubtargetImpl(*MF->getFunction())->getRegisterInfo()); - return false; + // TODO: Should be able to support other operand types like globals. + const MachineOperand &MO = MI->getOperand(OpNo); + if (MO.isReg()) { + AMDGPUInstPrinter::printRegOperand(MO.getReg(), O, + *MF->getSubtarget().getRegisterInfo()); + return false; + } + + return true; } |