diff options
author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2018-01-17 14:00:48 +0000 |
---|---|---|
committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2018-01-17 14:00:48 +0000 |
commit | 6b65f7c3805ea1e49ee3354802ec6ecc9ca0de21 (patch) | |
tree | aae0a039bc1627a39cc601b440490c99bbb692e9 /llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | |
parent | 243ea5b5fe3c1f41f6235ad6f13e7980704053fe (diff) | |
download | bcm5719-llvm-6b65f7c3805ea1e49ee3354802ec6ecc9ca0de21.tar.gz bcm5719-llvm-6b65f7c3805ea1e49ee3354802ec6ecc9ca0de21.zip |
[AMDGPU][MC][GFX9] Enable inline constants for SDWA operands
See bug 35771: https://bugs.llvm.org/show_bug.cgi?id=35771
Differential Revision: https://reviews.llvm.org/D42058
Reviewers: vpykhtin, artem.tamazov, arsenm
llvm-svn: 322655
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 53be8741503..41d8947efc1 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -267,7 +267,11 @@ public: return isOff() || isRegClass(AMDGPU::VGPR_32RegClassID); } - bool isSDWARegKind() const; + bool isSDWAOperand(MVT type) const; + bool isSDWAFP16Operand() const; + bool isSDWAFP32Operand() const; + bool isSDWAInt16Operand() const; + bool isSDWAInt32Operand() const; bool isImmTy(ImmTy ImmT) const { return isImm() && Imm.Type == ImmT; @@ -1285,15 +1289,31 @@ bool AMDGPUOperand::isRegClass(unsigned RCID) const { return isRegKind() && AsmParser->getMRI()->getRegClass(RCID).contains(getReg()); } -bool AMDGPUOperand::isSDWARegKind() const { +bool AMDGPUOperand::isSDWAOperand(MVT type) const { if (AsmParser->isVI()) return isVReg(); else if (AsmParser->isGFX9()) - return isRegKind(); + return isRegKind() || isInlinableImm(type); else return false; } +bool AMDGPUOperand::isSDWAFP16Operand() const { + return isSDWAOperand(MVT::f16); +} + +bool AMDGPUOperand::isSDWAFP32Operand() const { + return isSDWAOperand(MVT::f32); +} + +bool AMDGPUOperand::isSDWAInt16Operand() const { + return isSDWAOperand(MVT::i16); +} + +bool AMDGPUOperand::isSDWAInt32Operand() const { + return isSDWAOperand(MVT::i32); +} + uint64_t AMDGPUOperand::applyInputFPModifiers(uint64_t Val, unsigned Size) const { assert(isImmTy(ImmTyNone) && Imm.Mods.hasFPModifiers()); @@ -4799,7 +4819,7 @@ void AMDGPUAsmParser::cvtSDWA(MCInst &Inst, const OperandVector &Operands, } } if (isRegOrImmWithInputMods(Desc, Inst.getNumOperands())) { - Op.addRegWithInputModsOperands(Inst, 2); + Op.addRegOrImmWithInputModsOperands(Inst, 2); } else if (Op.isImm()) { // Handle optional arguments OptionalIdx[Op.getImmTy()] = I; |