[llvm] [AMDGPU] Define constrained multi-dword scalar load instructions. (PR #96161)
Christudasan Devadasan via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 30 23:00:20 PDT 2024
https://github.com/cdevadas updated https://github.com/llvm/llvm-project/pull/96161
>From 37495cbd2f8661bddcb1cf5b7f30d1cc47297766 Mon Sep 17 00:00:00 2001
From: Christudasan Devadasan <Christudasan.Devadasan at amd.com>
Date: Thu, 20 Jun 2024 10:00:59 +0000
Subject: [PATCH 1/2] [AMDGPU] Define constrained multi-dword scalar load
instructions.
---
llvm/lib/Target/AMDGPU/SMInstructions.td | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/llvm/lib/Target/AMDGPU/SMInstructions.td b/llvm/lib/Target/AMDGPU/SMInstructions.td
index df1722b1f7fb4..4551a3a615b15 100644
--- a/llvm/lib/Target/AMDGPU/SMInstructions.td
+++ b/llvm/lib/Target/AMDGPU/SMInstructions.td
@@ -167,6 +167,20 @@ multiclass SM_Pseudo_Loads<RegisterClass baseClass,
def _IMM : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
def _SGPR : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
def _SGPR_IMM : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
+
+ // The constrained multi-dword load equivalents with early clobber flag at
+ // the dst operand. They are needed only for codegen and there is no need for
+ // their real opcodes.
+ let SubtargetPredicate = isGFX8Plus,
+ Constraints = !if(!gt(dstClass.RegTypes[0].Size, 32),
+ "@earlyclobber $sdst", "") in {
+ let PseudoInstr = NAME # !cast<OffsetMode>(IMM_Offset).Variant in
+ def _IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_Offset).Variant in
+ def _SGPR_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_IMM_Offset).Variant in
+ def _SGPR_IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
+ }
}
multiclass SM_Pseudo_Stores<RegisterClass baseClass,
>From c954705eca57144a5a1a1e57513501b5195bfe5e Mon Sep 17 00:00:00 2001
From: Christudasan Devadasan <Christudasan.Devadasan at amd.com>
Date: Thu, 20 Jun 2024 14:41:06 +0000
Subject: [PATCH 2/2] skip _ec ld insn when data size is lesser or equal to 32.
---
llvm/lib/Target/AMDGPU/SMInstructions.td | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/SMInstructions.td b/llvm/lib/Target/AMDGPU/SMInstructions.td
index 4551a3a615b15..137acd3130731 100644
--- a/llvm/lib/Target/AMDGPU/SMInstructions.td
+++ b/llvm/lib/Target/AMDGPU/SMInstructions.td
@@ -171,15 +171,15 @@ multiclass SM_Pseudo_Loads<RegisterClass baseClass,
// The constrained multi-dword load equivalents with early clobber flag at
// the dst operand. They are needed only for codegen and there is no need for
// their real opcodes.
- let SubtargetPredicate = isGFX8Plus,
- Constraints = !if(!gt(dstClass.RegTypes[0].Size, 32),
- "@earlyclobber $sdst", "") in {
- let PseudoInstr = NAME # !cast<OffsetMode>(IMM_Offset).Variant in
- def _IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
- let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_Offset).Variant in
- def _SGPR_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
- let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_IMM_Offset).Variant in
- def _SGPR_IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
+ if !gt(dstClass.RegTypes[0].Size, 32) then {
+ let SubtargetPredicate = isGFX8Plus, Constraints = "@earlyclobber $sdst" in {
+ let PseudoInstr = NAME # !cast<OffsetMode>(IMM_Offset).Variant in
+ def _IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, IMM_Offset>;
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_Offset).Variant in
+ def _SGPR_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_Offset>;
+ let PseudoInstr = NAME # !cast<OffsetMode>(SGPR_IMM_Offset).Variant in
+ def _SGPR_IMM_ec : SM_Load_Pseudo <opName, baseClass, dstClass, SGPR_IMM_Offset>;
+ }
}
}
More information about the llvm-commits
mailing list