diff options
| author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-02-27 13:12:12 +0000 |
|---|---|---|
| committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-02-27 13:12:12 +0000 |
| commit | ef920358277603c69f4f548d2e5c40842972dd71 (patch) | |
| tree | 940d8d07e659f3d6105b287119d6a43bfbd63c4e /llvm/lib/Target/AMDGPU/InstPrinter | |
| parent | 3fc81c29db3212a5a5684cbec718e29f47ff1b1e (diff) | |
| download | bcm5719-llvm-ef920358277603c69f4f548d2e5c40842972dd71.tar.gz bcm5719-llvm-ef920358277603c69f4f548d2e5c40842972dd71.zip | |
[AMDGPU][MC][GFX8+] Added syntactic sugar for 'vgpr index' operand of instructions s_set_gpr_idx_on and s_set_gpr_idx_mode
See bug 39331: https://bugs.llvm.org/show_bug.cgi?id=39331
Reviewers: artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D58288
llvm-svn: 354969
Diffstat (limited to 'llvm/lib/Target/AMDGPU/InstPrinter')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp index 3871cfd1674..7550dc45dc6 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp @@ -934,23 +934,24 @@ void AMDGPUInstPrinter::printInterpAttrChan(const MCInst *MI, unsigned OpNum, void AMDGPUInstPrinter::printVGPRIndexMode(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O) { + using namespace llvm::AMDGPU::VGPRIndexMode; unsigned Val = MI->getOperand(OpNo).getImm(); - if (Val == 0) { - O << " 0"; - return; - } - - if (Val & VGPRIndexMode::DST_ENABLE) - O << " dst"; - - if (Val & VGPRIndexMode::SRC0_ENABLE) - O << " src0"; - - if (Val & VGPRIndexMode::SRC1_ENABLE) - O << " src1"; - if (Val & VGPRIndexMode::SRC2_ENABLE) - O << " src2"; + if ((Val & ~ENABLE_MASK) != 0) { + O << " " << formatHex(static_cast<uint64_t>(Val)); + } else { + O << " gpr_idx("; + bool NeedComma = false; + for (unsigned ModeId = ID_MIN; ModeId <= ID_MAX; ++ModeId) { + if (Val & (1 << ModeId)) { + if (NeedComma) + O << ','; + O << IdSymbolic[ModeId]; + NeedComma = true; + } + } + O << ')'; + } } void AMDGPUInstPrinter::printMemOperand(const MCInst *MI, unsigned OpNo, |

