[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
arsenm wrote: ### Merge activity * **Jun 17, 10:54 PM UTC**: A user started a stack merge that includes this pull request via [Graphite](https://app.graphite.dev/github/pr/llvm/llvm-project/141948). https://github.com/llvm/llvm-project/pull/141948 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
https://github.com/arsenm updated
https://github.com/llvm/llvm-project/pull/141948
>From ed073f0e8a14686e87f580fc859a76f7f0ddf4b2 Mon Sep 17 00:00:00 2001
From: Matt Arsenault
Date: Thu, 29 May 2025 15:32:59 +0200
Subject: [PATCH] AMDGPU: Report special input intrinsics as free
---
.../AMDGPU/AMDGPUTargetTransformInfo.cpp | 23 +++-
.../AMDGPU/special-argument-intrinsics.ll | 56 +--
2 files changed, 50 insertions(+), 29 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index f3474fcbbfb56..d5a1aaef4ad68 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
+// there may be a bit instruction.
+return 0;
+ case Intrinsic::amdgcn_workgroup_id_x:
+ case Intrinsic::amdgcn_workgroup_id_y:
+ case Intrinsic::amdgcn_workgroup_id_z:
+ case Intrinsic::amdgcn_lds_kernel_id:
+ case Intrinsic::amdgcn_dispatch_ptr:
+ case Intrinsic::amdgcn_dispatch_id:
+ case Intrinsic::amdgcn_implicitarg_ptr:
+ case Intrinsic::amdgcn_queue_ptr:
+// Read from an argument register.
return 0;
+ default:
+break;
+ }
if (!intrinsicHasPackedVectorBenefit(ICA.getID()))
return BaseT::getIntrinsicInstrCost(ICA, CostKind);
diff --git a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
index ea045e04310be..00dbcff0a021f 100644
--- a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
+++ b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
@@ -7,11 +7,11 @@
define i32 @workitem_id_x() {
; ALL-LABEL: 'workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
i32 %result
;
%result = call i32 @llvm.amdgcn.workitem.id.x()
@@ -20,12 +20,12 @@ define i32 @workitem_id_x() {
define amdgpu_kernel void @kernel_workitem_id_x(ptr addrspace(1) %ptr) {
; ALL-LABEL: 'kernel_workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
void
;
; SIZE-LABEL: 'kernel_workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
void
;
@@ -36,11 +36,11 @@ define amdgpu_kernel void @kernel_workitem_id_x(ptr
addrspace(1) %ptr) {
define i32 @workitem_id_y() {
; ALL-LABEL: 'workitem_id_y'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_y'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
; SIZE-NEXT: C
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
https://github.com/arsenm updated
https://github.com/llvm/llvm-project/pull/141948
>From ed073f0e8a14686e87f580fc859a76f7f0ddf4b2 Mon Sep 17 00:00:00 2001
From: Matt Arsenault
Date: Thu, 29 May 2025 15:32:59 +0200
Subject: [PATCH] AMDGPU: Report special input intrinsics as free
---
.../AMDGPU/AMDGPUTargetTransformInfo.cpp | 23 +++-
.../AMDGPU/special-argument-intrinsics.ll | 56 +--
2 files changed, 50 insertions(+), 29 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index f3474fcbbfb56..d5a1aaef4ad68 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
+// there may be a bit instruction.
+return 0;
+ case Intrinsic::amdgcn_workgroup_id_x:
+ case Intrinsic::amdgcn_workgroup_id_y:
+ case Intrinsic::amdgcn_workgroup_id_z:
+ case Intrinsic::amdgcn_lds_kernel_id:
+ case Intrinsic::amdgcn_dispatch_ptr:
+ case Intrinsic::amdgcn_dispatch_id:
+ case Intrinsic::amdgcn_implicitarg_ptr:
+ case Intrinsic::amdgcn_queue_ptr:
+// Read from an argument register.
return 0;
+ default:
+break;
+ }
if (!intrinsicHasPackedVectorBenefit(ICA.getID()))
return BaseT::getIntrinsicInstrCost(ICA, CostKind);
diff --git a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
index ea045e04310be..00dbcff0a021f 100644
--- a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
+++ b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
@@ -7,11 +7,11 @@
define i32 @workitem_id_x() {
; ALL-LABEL: 'workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
i32 %result
;
%result = call i32 @llvm.amdgcn.workitem.id.x()
@@ -20,12 +20,12 @@ define i32 @workitem_id_x() {
define amdgpu_kernel void @kernel_workitem_id_x(ptr addrspace(1) %ptr) {
; ALL-LABEL: 'kernel_workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
void
;
; SIZE-LABEL: 'kernel_workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
void
;
@@ -36,11 +36,11 @@ define amdgpu_kernel void @kernel_workitem_id_x(ptr
addrspace(1) %ptr) {
define i32 @workitem_id_y() {
; ALL-LABEL: 'workitem_id_y'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_y'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
; SIZE-NEXT: C
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
https://github.com/rampitec approved this pull request. https://github.com/llvm/llvm-project/pull/141948 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
rampitec wrote:
Ok for now.
https://github.com/llvm/llvm-project/pull/141948
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
arsenm wrote:
Similarly also can't check if the other work items are disabled
https://github.com/llvm/llvm-project/pull/141948
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
arsenm wrote:
For some reason the calling instruction isn't set in the context where this
gets called from, so I can't figure out if it's a kernel or not so I left this
for later
https://github.com/llvm/llvm-project/pull/141948
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
rampitec wrote:
Maybe report 1 for packed tid?
https://github.com/llvm/llvm-project/pull/141948
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
llvmbot wrote:
@llvm/pr-subscribers-backend-amdgpu
Author: Matt Arsenault (arsenm)
Changes
---
Full diff: https://github.com/llvm/llvm-project/pull/141948.diff
2 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp (+22-1)
- (modified) llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
(+28-28)
``diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index 357f8c5cfcd02..f9dbfb18ab7ee 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
+// there may be a bit instruction.
+return 0;
+ case Intrinsic::amdgcn_workgroup_id_x:
+ case Intrinsic::amdgcn_workgroup_id_y:
+ case Intrinsic::amdgcn_workgroup_id_z:
+ case Intrinsic::amdgcn_lds_kernel_id:
+ case Intrinsic::amdgcn_dispatch_ptr:
+ case Intrinsic::amdgcn_dispatch_id:
+ case Intrinsic::amdgcn_implicitarg_ptr:
+ case Intrinsic::amdgcn_queue_ptr:
+// Read from an argument register.
return 0;
+ default:
+break;
+ }
if (!intrinsicHasPackedVectorBenefit(ICA.getID()))
return BaseT::getIntrinsicInstrCost(ICA, CostKind);
diff --git a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
index ea045e04310be..00dbcff0a021f 100644
--- a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
+++ b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
@@ -7,11 +7,11 @@
define i32 @workitem_id_x() {
; ALL-LABEL: 'workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
i32 %result
;
%result = call i32 @llvm.amdgcn.workitem.id.x()
@@ -20,12 +20,12 @@ define i32 @workitem_id_x() {
define amdgpu_kernel void @kernel_workitem_id_x(ptr addrspace(1) %ptr) {
; ALL-LABEL: 'kernel_workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
void
;
; SIZE-LABEL: 'kernel_workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
void
;
@@ -36,11 +36,11 @@ define amdgpu_kernel void @kernel_workitem_id_x(ptr
addrspace(1) %ptr) {
define i32 @workitem_id_y() {
; ALL-LABEL: 'workitem_id_y'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_y'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
i32 %result
;
%result = call i32
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
https://github.com/arsenm ready_for_review https://github.com/llvm/llvm-project/pull/141948 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
arsenm wrote: > [!WARNING] > This pull request is not mergeable via GitHub because a downstack PR is > open. Once all requirements are satisfied, merge this PR as a stack href="https://app.graphite.dev/github/pr/llvm/llvm-project/141948?utm_source=stack-comment-downstack-mergeability-warning"; > >on Graphite. > https://graphite.dev/docs/merge-pull-requests";>Learn more * **#141948** https://app.graphite.dev/github/pr/llvm/llvm-project/141948?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> 👈 https://app.graphite.dev/github/pr/llvm/llvm-project/141948?utm_source=stack-comment-view-in-graphite"; target="_blank">(View in Graphite) * **#141947** https://app.graphite.dev/github/pr/llvm/llvm-project/141947?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141946** https://app.graphite.dev/github/pr/llvm/llvm-project/141946?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141945** https://app.graphite.dev/github/pr/llvm/llvm-project/141945?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141944** https://app.graphite.dev/github/pr/llvm/llvm-project/141944?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141943** https://app.graphite.dev/github/pr/llvm/llvm-project/141943?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141904** https://app.graphite.dev/github/pr/llvm/llvm-project/141904?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * **#141903** https://app.graphite.dev/github/pr/llvm/llvm-project/141903?utm_source=stack-comment-icon"; target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" width="10px" height="10px"/> * `main` This stack of pull requests is managed by https://graphite.dev?utm-source=stack-comment";>Graphite. Learn more about https://stacking.dev/?utm_source=stack-comment";>stacking. https://github.com/llvm/llvm-project/pull/141948 ___ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] AMDGPU: Report special input intrinsics as free (PR #141948)
https://github.com/arsenm created
https://github.com/llvm/llvm-project/pull/141948
None
>From f69a1ebaa0ef1988c6ff36ac84e4e44efc4892a0 Mon Sep 17 00:00:00 2001
From: Matt Arsenault
Date: Thu, 29 May 2025 15:32:59 +0200
Subject: [PATCH] AMDGPU: Report special input intrinsics as free
---
.../AMDGPU/AMDGPUTargetTransformInfo.cpp | 23 +++-
.../AMDGPU/special-argument-intrinsics.ll | 56 +--
2 files changed, 50 insertions(+), 29 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
index 357f8c5cfcd02..f9dbfb18ab7ee 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetTransformInfo.cpp
@@ -704,8 +704,29 @@ static bool intrinsicHasPackedVectorBenefit(Intrinsic::ID
ID) {
InstructionCost
GCNTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
TTI::TargetCostKind CostKind) const {
- if (ICA.getID() == Intrinsic::fabs)
+ switch (ICA.getID()) {
+ case Intrinsic::fabs:
+// Free source modifier in the common case.
+return 0;
+ case Intrinsic::amdgcn_workitem_id_x:
+ case Intrinsic::amdgcn_workitem_id_y:
+ case Intrinsic::amdgcn_workitem_id_z:
+// TODO: If hasPackedTID, or if the calling context is not an entry point
+// there may be a bit instruction.
+return 0;
+ case Intrinsic::amdgcn_workgroup_id_x:
+ case Intrinsic::amdgcn_workgroup_id_y:
+ case Intrinsic::amdgcn_workgroup_id_z:
+ case Intrinsic::amdgcn_lds_kernel_id:
+ case Intrinsic::amdgcn_dispatch_ptr:
+ case Intrinsic::amdgcn_dispatch_id:
+ case Intrinsic::amdgcn_implicitarg_ptr:
+ case Intrinsic::amdgcn_queue_ptr:
+// Read from an argument register.
return 0;
+ default:
+break;
+ }
if (!intrinsicHasPackedVectorBenefit(ICA.getID()))
return BaseT::getIntrinsicInstrCost(ICA, CostKind);
diff --git a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
index ea045e04310be..00dbcff0a021f 100644
--- a/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
+++ b/llvm/test/Analysis/CostModel/AMDGPU/special-argument-intrinsics.ll
@@ -7,11 +7,11 @@
define i32 @workitem_id_x() {
; ALL-LABEL: 'workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
i32 %result
;
%result = call i32 @llvm.amdgcn.workitem.id.x()
@@ -20,12 +20,12 @@ define i32 @workitem_id_x() {
define amdgpu_kernel void @kernel_workitem_id_x(ptr addrspace(1) %ptr) {
; ALL-LABEL: 'kernel_workitem_id_x'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.x()
; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
void
;
; SIZE-LABEL: 'kernel_workitem_id_x'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.x()
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: store
i32 %result, ptr addrspace(1) %ptr, align 4
; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret
void
;
@@ -36,11 +36,11 @@ define amdgpu_kernel void @kernel_workitem_id_x(ptr
addrspace(1) %ptr) {
define i32 @workitem_id_y() {
; ALL-LABEL: 'workitem_id_y'
-; ALL-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
+; ALL-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %result
= call i32 @llvm.amdgcn.workitem.id.y()
; ALL-NEXT: Cost Model: Found an estimated cost of 10 for instruction: ret
i32 %result
;
; SIZE-LABEL: 'workitem_id_y'
-; SIZE-NEXT: Cost Model: Found an estimated cost of 1 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
+; SIZE-NEXT: Cost Model: Found an estimated cost of 0 for instruction:
%result = call i32 @llvm.amdgcn.workitem.id.y()
; SIZE-NE
