summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/Disassembler
diff options
context:
space:
mode:
authorNicolai Haehnle <nhaehnle@gmail.com>2018-06-21 13:36:44 +0000
committerNicolai Haehnle <nhaehnle@gmail.com>2018-06-21 13:36:44 +0000
commit0ab200b6c906391817852970fccb4ae45a90c79d (patch)
tree48553960addaa2d3d630f116ef9bb90b699d1f71 /llvm/lib/Target/AMDGPU/Disassembler
parente741d7e0fd90c5b1599fd1539c7ca2728adc76dd (diff)
downloadbcm5719-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.cpp14
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;
OpenPOWER on IntegriCloud