diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td index dfe6dd7042f989..b076411f59eaa7 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPU.td +++ b/llvm/lib/Target/AMDGPU/AMDGPU.td @@ -476,10 +476,10 @@ def FeatureR128A16 : SubtargetFeature<"r128-a16", "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128" >; -def FeatureGFX10A16 : SubtargetFeature<"a16", - "HasGFX10A16", +def FeatureA16 : SubtargetFeature<"a16", + "HasA16", "true", - "Support gfx10-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands" + "Support A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands" >; def FeatureG16 : SubtargetFeature<"g16", @@ -907,7 +907,7 @@ def FeatureGFX9 : GCNSubtargetFeatureGeneration<"GFX9", FeatureFlatInstOffsets, FeatureFlatGlobalInsts, FeatureFlatScratchInsts, FeatureAddNoCarryInsts, FeatureGFX8Insts, FeatureGFX7GFX8GFX9Insts, FeatureScalarFlatScratchInsts, FeatureScalarAtomics, FeatureR128A16, - FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureSupportsXNACK, + FeatureA16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureSupportsXNACK, FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess, FeatureNegativeScratchOffsetBug ] @@ -927,7 +927,7 @@ def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10", FeatureNoSdstCMPX, FeatureVscnt, FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts, FeatureNoDataDepHazard, FeaturePkFmacF16Inst, - FeatureGFX10A16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureG16, + FeatureA16, FeatureSMemTimeInst, FeatureFastDenormalF32, FeatureG16, FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess, FeatureImageInsts ] >; @@ -946,7 +946,7 @@ def FeatureGFX11 : GCNSubtargetFeatureGeneration<"GFX11", FeatureNoSdstCMPX, FeatureVscnt, FeatureVOP3Literal, FeatureDPP8, FeatureExtendedImageInsts, FeatureNoDataDepHazard, FeaturePkFmacF16Inst, - FeatureGFX10A16, FeatureFastDenormalF32, FeatureG16, + FeatureA16, FeatureFastDenormalF32, FeatureG16, FeatureUnalignedBufferAccess, FeatureUnalignedDSAccess ] >; @@ -1683,8 +1683,8 @@ def HasExtendedImageInsts : Predicate<"Subtarget->hasExtendedImageInsts()">, def HasR128A16 : Predicate<"Subtarget->hasR128A16()">, AssemblerPredicate<(all_of FeatureR128A16)>; -def HasGFX10A16 : Predicate<"Subtarget->hasGFX10A16()">, - AssemblerPredicate<(all_of FeatureGFX10A16)>; +def HasA16 : Predicate<"Subtarget->hasA16()">, + AssemblerPredicate<(all_of FeatureA16)>; def HasG16 : Predicate<"Subtarget->hasG16()">, AssemblerPredicate<(all_of FeatureG16)>; diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index 81b97df8a6825f..92d1ba23c56398 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -358,7 +358,7 @@ class AMDGPUOperand : public MCParsedAsmOperand { bool isUNorm() const { return isImmTy(ImmTyUNorm); } bool isDA() const { return isImmTy(ImmTyDA); } bool isR128A16() const { return isImmTy(ImmTyR128A16); } - bool isGFX10A16() const { return isImmTy(ImmTyA16); } + bool isA16() const { return isImmTy(ImmTyA16); } bool isLWE() const { return isImmTy(ImmTyLWE); } bool isOff() const { return isImmTy(ImmTyOff); } bool isExpTgt() const { return isImmTy(ImmTyExpTgt); } @@ -1406,9 +1406,7 @@ class AMDGPUAsmParser : public MCTargetAsmParser { return AMDGPU::hasPackedD16(getSTI()); } - bool hasGFX10A16() const { - return AMDGPU::hasGFX10A16(getSTI()); - } + bool hasA16() const { return AMDGPU::hasA16(getSTI()); } bool hasG16() const { return AMDGPU::hasG16(getSTI()); } @@ -5999,7 +5997,7 @@ AMDGPUAsmParser::parseNamedBit(StringRef Name, OperandVector &Operands, Error(S, "r128 modifier is not supported on this GPU"); return MatchOperand_ParseFail; } - if (Name == "a16" && !isGFX9() && !hasGFX10A16()) { + if (Name == "a16" && !hasA16()) { Error(S, "a16 modifier is not supported on this GPU"); return MatchOperand_ParseFail; } @@ -9125,7 +9123,7 @@ AMDGPUAsmParser::parseCustomOperand(OperandVector &Operands, unsigned MCK) { case MCK_gds: case MCK_ImmGDS: return parseNamedBit("gds", Operands, AMDGPUOperand::ImmTyGDS); - case MCK_ImmGFX10A16: + case MCK_ImmA16: return parseNamedBit("a16", Operands, AMDGPUOperand::ImmTyA16); case MCK_ImmHigh: return parseNamedBit("high", Operands, AMDGPUOperand::ImmTyHigh); diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h index ba24630cb70ec3..e37e1b93737cab 100644 --- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h +++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h @@ -129,7 +129,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, bool HasImageInsts = false; bool HasExtendedImageInsts = false; bool HasR128A16 = false; - bool HasGFX10A16 = false; + bool HasA16 = false; bool HasG16 = false; bool HasNSAEncoding = false; unsigned NSAMaxSize = 0; @@ -900,11 +900,7 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo, return HasR128A16; } - bool hasGFX10A16() const { - return HasGFX10A16; - } - - bool hasA16() const { return hasR128A16() || hasGFX10A16(); } + bool hasA16() const { return HasA16; } bool hasG16() const { return HasG16; } diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp index b367319cbd77be..d617e3b2bdc673 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp @@ -265,8 +265,8 @@ void AMDGPUInstPrinter::printR128A16(const MCInst *MI, unsigned OpNo, printNamedBit(MI, OpNo, O, "r128"); } -void AMDGPUInstPrinter::printGFX10A16(const MCInst *MI, unsigned OpNo, - const MCSubtargetInfo &STI, raw_ostream &O) { +void AMDGPUInstPrinter::printA16(const MCInst *MI, unsigned OpNo, + const MCSubtargetInfo &STI, raw_ostream &O) { printNamedBit(MI, OpNo, O, "a16"); } diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h index 202edeee3cb320..47e25acd7f5dab 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.h @@ -86,7 +86,7 @@ class AMDGPUInstPrinter : public MCInstPrinter { raw_ostream &O); void printR128A16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O); - void printGFX10A16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, + void printA16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O); void printLWE(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O); diff --git a/llvm/lib/Target/AMDGPU/MIMGInstructions.td b/llvm/lib/Target/AMDGPU/MIMGInstructions.td index 0085a313497e0c..c295b7f7944268 100644 --- a/llvm/lib/Target/AMDGPU/MIMGInstructions.td +++ b/llvm/lib/Target/AMDGPU/MIMGInstructions.td @@ -371,7 +371,7 @@ class MIMG_NoSampler_gfx10 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe" #!if(BaseOpcode.HasD16, "$d16", ""); @@ -384,7 +384,7 @@ class MIMG_NoSampler_nsa_gfx10 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe" #!if(BaseOpcode.HasD16, "$d16", ""); @@ -409,7 +409,7 @@ class MIMG_NoSampler_nsa_gfx11 { let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe" #!if(BaseOpcode.HasD16, "$d16", ""); @@ -554,7 +554,7 @@ class MIMG_Store_nsa_gfx10 { let InOperandList = !con((ins DataRC:$vdata, AddrRC:$vaddr0, SReg_256:$srsrc, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc$dmask$dim$unorm$cpol$r128$a16$tfe$lwe" #!if(BaseOpcode.HasD16, "$d16", ""); @@ -580,7 +580,7 @@ class MIMG_Store_nsa_gfx11 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, SReg_128:$ssamp, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc, $ssamp$dmask$dim$unorm" #"$cpol$r128$a16$tfe$lwe" @@ -912,7 +912,7 @@ class MIMG_Sampler_nsa_gfx10 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_256:$srsrc, SReg_128:$ssamp, DMask:$dmask, Dim:$dim, UNorm:$unorm, CPol:$cpol, - R128A16:$r128, GFX10A16:$a16, TFE:$tfe, LWE:$lwe), + R128A16:$r128, A16:$a16, TFE:$tfe, LWE:$lwe), !if(BaseOpcode.HasD16, (ins D16:$d16), (ins))); let AsmString = opcode#" $vdata, $vaddr0, $srsrc, $ssamp$dmask$dim$unorm" #"$cpol$r128$a16$tfe$lwe" @@ -939,7 +939,7 @@ class MIMG_Sampler_nsa_gfx11 : MIMG_Gather; -class MIMG_IntersectRay_Helper { - int num_addrs = !if(Is64, !if(A16, 9, 12), !if(A16, 8, 11)); +class MIMG_IntersectRay_Helper { + int num_addrs = !if(Is64, !if(IsA16, 9, 12), !if(IsA16, 8, 11)); RegisterClass RegClass = MIMGAddrSize.RegClass; int VAddrDwords = !srl(RegClass.Size, 5); - int gfx11_nsa_addrs = !if(A16, 4, 5); + int gfx11_nsa_addrs = !if(IsA16, 4, 5); RegisterClass node_ptr_type = !if(Is64, VReg_64, VGPR_32); list gfx11_addr_types = - !if(A16, + !if(IsA16, [node_ptr_type, VGPR_32, VReg_96, VReg_96], [node_ptr_type, VGPR_32, VReg_96, VReg_96, VReg_96]); } -class MIMG_IntersectRay_gfx10 +class MIMG_IntersectRay_gfx10 : MIMG_gfx10 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_128:$srsrc), - !if(A16, (ins GFX10A16:$a16), (ins))); - let AsmString = opcode#" $vdata, $vaddr0, $srsrc"#!if(A16, "$a16", ""); + !if(IsA16, (ins A16:$a16), (ins))); + let AsmString = opcode#" $vdata, $vaddr0, $srsrc"#!if(IsA16, "$a16", ""); let nsa = 0; } -class MIMG_IntersectRay_nsa_gfx10 +class MIMG_IntersectRay_nsa_gfx10 : MIMG_nsa_gfx10 { let InOperandList = !con(nsah.AddrIns, (ins SReg_128:$srsrc), - !if(A16, (ins GFX10A16:$a16), (ins))); - let AsmString = opcode#" $vdata, "#nsah.AddrAsm#", $srsrc"#!if(A16, "$a16", ""); + !if(IsA16, (ins A16:$a16), (ins))); + let AsmString = opcode#" $vdata, "#nsah.AddrAsm#", $srsrc"#!if(IsA16, "$a16", ""); } -class MIMG_IntersectRay_gfx11 +class MIMG_IntersectRay_gfx11 : MIMG_gfx11 { let InOperandList = !con((ins AddrRC:$vaddr0, SReg_128:$srsrc), - !if(A16, (ins GFX10A16:$a16), (ins))); - let AsmString = opcode#" $vdata, $vaddr0, $srsrc"#!if(A16, "$a16", ""); + !if(IsA16, (ins A16:$a16), (ins))); + let AsmString = opcode#" $vdata, $vaddr0, $srsrc"#!if(IsA16, "$a16", ""); let nsa = 0; } class MIMG_IntersectRay_nsa_gfx11 addr_types> + bit IsA16, list addr_types> : MIMG_nsa_gfx11 { let InOperandList = !con(nsah.AddrIns, (ins SReg_128:$srsrc), - !if(A16, (ins GFX10A16:$a16), (ins))); - let AsmString = opcode#" $vdata, "#nsah.AddrAsm#", $srsrc"#!if(A16, "$a16", ""); + !if(IsA16, (ins A16:$a16), (ins))); + let AsmString = opcode#" $vdata, "#nsah.AddrAsm#", $srsrc"#!if(IsA16, "$a16", ""); } -multiclass MIMG_IntersectRay { - defvar info = MIMG_IntersectRay_Helper; +multiclass MIMG_IntersectRay { + defvar info = MIMG_IntersectRay_Helper; def "" : MIMGBaseOpcode { let BVH = 1; } - let AsmMatchConverter = !if(A16, "cvtIntersectRay", ""), + let AsmMatchConverter = !if(IsA16, "cvtIntersectRay", ""), dmask = 0xf, unorm = 1, d16 = 0, @@ -1197,21 +1197,21 @@ multiclass MIMG_IntersectRay { r128 = 1, ssamp = 0, dim = {0, 0, 0}, - a16 = A16, + a16 = IsA16, d16 = 0, BaseOpcode = !cast(NAME), VDataDwords = 4 in { - def _sa_gfx10 : MIMG_IntersectRay_gfx10 { + def _sa_gfx10 : MIMG_IntersectRay_gfx10 { let VAddrDwords = info.VAddrDwords; } - def _sa_gfx11 : MIMG_IntersectRay_gfx11 { + def _sa_gfx11 : MIMG_IntersectRay_gfx11 { let VAddrDwords = info.VAddrDwords; } - def _nsa_gfx10 : MIMG_IntersectRay_nsa_gfx10 { + def _nsa_gfx10 : MIMG_IntersectRay_nsa_gfx10 { let VAddrDwords = info.num_addrs; } def _nsa_gfx11 : MIMG_IntersectRay_nsa_gfx11 { let VAddrDwords = info.num_addrs; } diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 978de87648996e..b41854b497c6c6 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -4620,7 +4620,7 @@ bool SIInstrInfo::verifyInstruction(const MachineInstr &MI, if (ST.hasR128A16()) { const MachineOperand *R128A16 = getNamedOperand(MI, AMDGPU::OpName::r128); IsA16 = R128A16->getImm() != 0; - } else if (ST.hasGFX10A16()) { + } else if (ST.hasA16()) { const MachineOperand *A16 = getNamedOperand(MI, AMDGPU::OpName::a16); IsA16 = A16->getImm() != 0; } diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 887aa3adaa7eb8..8bc8f43990e713 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1236,7 +1236,7 @@ def SWZ_0 : NamedOperandBit_0<"SWZ", NamedMatchClass<"SWZ">>; def UNorm : NamedOperandBit<"UNorm", NamedMatchClass<"UNorm">>; def DA : NamedOperandBit<"DA", NamedMatchClass<"DA">>; def R128A16 : NamedOperandBit<"R128A16", NamedMatchClass<"R128A16">>; -def GFX10A16 : NamedOperandBit<"GFX10A16", NamedMatchClass<"GFX10A16">>; +def A16 : NamedOperandBit<"A16", NamedMatchClass<"A16">>; def D16 : NamedOperandBit<"D16", NamedMatchClass<"D16">>; def LWE : NamedOperandBit<"LWE", NamedMatchClass<"LWE">>; def exp_compr : NamedOperandBit<"ExpCompr", NamedMatchClass<"ExpCompr">>; diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp index 00efd462bc36f9..54b72bf5a53b57 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -1878,8 +1878,8 @@ bool hasMIMG_R128(const MCSubtargetInfo &STI) { return STI.getFeatureBits()[AMDGPU::FeatureMIMG_R128] && !STI.getFeatureBits()[AMDGPU::FeatureR128A16]; } -bool hasGFX10A16(const MCSubtargetInfo &STI) { - return STI.getFeatureBits()[AMDGPU::FeatureGFX10A16]; +bool hasA16(const MCSubtargetInfo &STI) { + return STI.getFeatureBits()[AMDGPU::FeatureA16]; } bool hasG16(const MCSubtargetInfo &STI) { diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h index be52b736d7569f..ea5ecf69dfcfa4 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h @@ -1092,7 +1092,7 @@ inline bool isKernel(CallingConv::ID CC) { bool hasXNACK(const MCSubtargetInfo &STI); bool hasSRAMECC(const MCSubtargetInfo &STI); bool hasMIMG_R128(const MCSubtargetInfo &STI); -bool hasGFX10A16(const MCSubtargetInfo &STI); +bool hasA16(const MCSubtargetInfo &STI); bool hasG16(const MCSubtargetInfo &STI); bool hasPackedD16(const MCSubtargetInfo &STI);