diff options
author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2018-03-12 15:03:34 +0000 |
---|---|---|
committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2018-03-12 15:03:34 +0000 |
commit | da4a7c01bfdeb9b8647d38c57f96a9dea64dc66a (patch) | |
tree | 8f0391105ac42b2da714cd1e2ee798478f8b8b90 /llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | |
parent | 7bbcd1d9ba969ff3505b9420b354636bf2275b01 (diff) | |
download | bcm5719-llvm-da4a7c01bfdeb9b8647d38c57f96a9dea64dc66a.tar.gz bcm5719-llvm-da4a7c01bfdeb9b8647d38c57f96a9dea64dc66a.zip |
[AMDGPU][MC] Corrected GATHER4 opcodes
See bug 36252: https://bugs.llvm.org/show_bug.cgi?id=36252
Differential Revision: https://reviews.llvm.org/D43874
Reviewers: artem.tamazov, arsenm
llvm-svn: 327278
Diffstat (limited to 'llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index 578fe50146e..75356e9a9d3 100644 --- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -273,6 +273,11 @@ DecodeStatus AMDGPUDisassembler::convertSDWAInst(MCInst &MI) const { // Consequently, decoded instructions always show address // as if it has 1 dword, which could be not really so. DecodeStatus AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { + + if (MCII->get(MI.getOpcode()).TSFlags & SIInstrFlags::Gather4) { + return MCDisassembler::Success; + } + int VDstIdx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::vdst); @@ -289,7 +294,7 @@ DecodeStatus AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { assert(DMaskIdx != -1); assert(TFEIdx != -1); - bool isAtomic = (VDstIdx != -1); + bool IsAtomic = (VDstIdx != -1); unsigned DMask = MI.getOperand(DMaskIdx).getImm() & 0xf; if (DMask == 0) @@ -310,7 +315,7 @@ DecodeStatus AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { int NewOpcode = -1; - if (isAtomic) { + if (IsAtomic) { if (DMask == 0x1 || DMask == 0x3 || DMask == 0xF) { NewOpcode = AMDGPU::getMaskedMIMGAtomicOp(*MCII, MI.getOpcode(), DstSize); } @@ -342,7 +347,7 @@ DecodeStatus AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { // in the instruction encoding. MI.getOperand(VDataIdx) = MCOperand::createReg(NewVdata); - if (isAtomic) { + if (IsAtomic) { // Atomic operations have an additional operand (a copy of data) MI.getOperand(VDstIdx) = MCOperand::createReg(NewVdata); } |