diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td --- a/llvm/lib/Target/AMDGPU/AMDGPU.td +++ b/llvm/lib/Target/AMDGPU/AMDGPU.td @@ -1396,6 +1396,8 @@ def HasFlatScratchSTMode : Predicate<"Subtarget->hasFlatScratchSTMode()">, AssemblerPredicate<(any_of FeatureGFX10_3Insts, FeatureGFX940Insts)>; +def HasFlatScratchSVSMode : Predicate<"Subtarget->hasFlatScratchSVSMode()">, + AssemblerPredicate<(any_of FeatureGFX940Insts)>; def HasGFX10_AEncoding : Predicate<"Subtarget->hasGFX10_AEncoding()">, AssemblerPredicate<(all_of FeatureGFX10_AEncoding)>; diff --git a/llvm/lib/Target/AMDGPU/FLATInstructions.td b/llvm/lib/Target/AMDGPU/FLATInstructions.td --- a/llvm/lib/Target/AMDGPU/FLATInstructions.td +++ b/llvm/lib/Target/AMDGPU/FLATInstructions.td @@ -366,7 +366,7 @@ def _SADDR : FLAT_Scratch_Load_Pseudo, FlatScratchInst; - let SubtargetPredicate = isGFX940Plus in + let SubtargetPredicate = HasFlatScratchSVSMode in def _SVS : FLAT_Scratch_Load_Pseudo, FlatScratchInst; @@ -383,7 +383,7 @@ def _SADDR : FLAT_Scratch_Store_Pseudo, FlatScratchInst; - let SubtargetPredicate = isGFX940Plus in + let SubtargetPredicate = HasFlatScratchSVSMode in def _SVS : FLAT_Scratch_Store_Pseudo, FlatScratchInst; @@ -1272,7 +1272,7 @@ } def : ScratchLoadSVaddrPat(!cast(inst)#"_SVS"), node, vt> { - let SubtargetPredicate = isGFX940Plus; + let SubtargetPredicate = HasFlatScratchSVSMode; let AddedComplexity = 27; } } @@ -1288,7 +1288,7 @@ } def : ScratchStoreSVaddrPat(!cast(inst)#"_SVS"), node, vt> { - let SubtargetPredicate = isGFX940Plus; + let SubtargetPredicate = HasFlatScratchSVSMode; let AddedComplexity = 27; } } @@ -1303,7 +1303,7 @@ } def : ScratchLoadSVaddrPat_D16 (!cast(inst)#"_SVS"), node, vt> { - let SubtargetPredicate = isGFX940Plus; + let SubtargetPredicate = HasFlatScratchSVSMode; let AddedComplexity = 27; } } diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h --- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h +++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h @@ -571,6 +571,8 @@ return hasFlatScratchInsts() && (hasGFX10_3Insts() || hasGFX940Insts()); } + bool hasFlatScratchSVSMode() const { return GFX940Insts; } + bool hasScalarFlatScratchInsts() const { return ScalarFlatScratchInsts; }