diff options
| author | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-06-21 13:36:44 +0000 |
|---|---|---|
| committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-06-21 13:36:44 +0000 |
| commit | 0ab200b6c906391817852970fccb4ae45a90c79d (patch) | |
| tree | 48553960addaa2d3d630f116ef9bb90b699d1f71 /llvm/lib/Target/AMDGPU/Disassembler | |
| parent | e741d7e0fd90c5b1599fd1539c7ca2728adc76dd (diff) | |
| download | bcm5719-llvm-0ab200b6c906391817852970fccb4ae45a90c79d.tar.gz bcm5719-llvm-0ab200b6c906391817852970fccb4ae45a90c79d.zip | |
AMDGPU: Refactor MIMG instruction TableGen using generic tables
Summary:
This allows us to access rich information about MIMG opcodes from C++ code.
Simplifying the mapping between equivalent opcodes of different data size
becomes quite natural.
This also flattens the MIMG-related class and multiclass hierarchy a little,
and collapses together some of the scaffolding for sample and gather4 opcodes.
Change-Id: I1a2549fdc1e881ff100e5393d2d87e73729a0ccd
Reviewers: arsenm, rampitec
Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits
Differential Revision: https://reviews.llvm.org/D48016
llvm-svn: 335227
Diffstat (limited to 'llvm/lib/Target/AMDGPU/Disassembler')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index 741cf0ea6cd..d7908f6902b 100644 --- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -329,19 +329,15 @@ DecodeStatus AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { int NewOpcode = -1; - if (IsAtomic) { - if (DMask == 0x1 || DMask == 0x3 || DMask == 0xF) { - NewOpcode = AMDGPU::getMaskedMIMGAtomicOp(*MCII, MI.getOpcode(), DstSize); - } - if (NewOpcode == -1) return MCDisassembler::Success; - } else if (IsGather4) { + if (IsGather4) { if (D16 && AMDGPU::hasPackedD16(STI)) - NewOpcode = AMDGPU::getMIMGGatherOpPackedD16(MI.getOpcode()); + NewOpcode = AMDGPU::getMaskedMIMGOp(MI.getOpcode(), 2); else return MCDisassembler::Success; } else { - NewOpcode = AMDGPU::getMaskedMIMGOp(*MCII, MI.getOpcode(), DstSize); - assert(NewOpcode != -1 && "could not find matching mimg channel instruction"); + NewOpcode = AMDGPU::getMaskedMIMGOp(MI.getOpcode(), DstSize); + if (NewOpcode == -1) + return MCDisassembler::Success; } auto RCID = MCII->get(NewOpcode).OpInfo[VDataIdx].RegClass; |

