[llvm] [AMDGPU] Remove functions with incompatible gws attribute (PR #78143)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 15 03:07:37 PST 2024
https://github.com/jayfoad created https://github.com/llvm/llvm-project/pull/78143
This change is to remove incompatible gws related functions
in order to make device-libs work correctly under -O0 for
gfx1200+
>From 3bd7fd8753cb4a12ee76ba570dc950183f5d881f Mon Sep 17 00:00:00 2001
From: Changpeng Fang <changpeng.fang at amd.com>
Date: Wed, 30 Aug 2023 16:08:57 -0700
Subject: [PATCH] [AMDGPU] Remove functions with incompatible gws attribute
This change is to remove incompatible gws related functions
in order to make device-libs work correctly under -O0 for
gfx1200+
---
.../AMDGPURemoveIncompatibleFunctions.cpp | 3 +-
.../CodeGen/AMDGPU/remove-incompatible-gws.ll | 54 +++++++++++++++++++
2 files changed, 56 insertions(+), 1 deletion(-)
create mode 100644 llvm/test/CodeGen/AMDGPU/remove-incompatible-gws.ll
diff --git a/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp b/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
index 552380d54dfd099..6f1236fd3b7dae1 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
@@ -105,7 +105,8 @@ constexpr unsigned FeaturesToCheck[] = {AMDGPU::FeatureGFX11Insts,
AMDGPU::FeatureDot8Insts,
AMDGPU::FeatureExtendedImageInsts,
AMDGPU::FeatureSMemRealTime,
- AMDGPU::FeatureSMemTimeInst};
+ AMDGPU::FeatureSMemTimeInst,
+ AMDGPU::FeatureGWS};
FeatureBitset expandImpliedFeatures(const FeatureBitset &Features) {
FeatureBitset Result = Features;
diff --git a/llvm/test/CodeGen/AMDGPU/remove-incompatible-gws.ll b/llvm/test/CodeGen/AMDGPU/remove-incompatible-gws.ll
new file mode 100644
index 000000000000000..78ca923ddb0f0cb
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/remove-incompatible-gws.ll
@@ -0,0 +1,54 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -march=amdgcn -mcpu=gfx1030 -stop-after=amdgpu-remove-incompatible-functions\
+; RUN: -pass-remarks=amdgpu-remove-incompatible-functions %s -o - 2>%t | FileCheck -check-prefixes=COMPATIBLE,IR %s
+; RUN: FileCheck -allow-empty --check-prefix=WARN-COMPATIBLE %s < %t
+; RUN: llc -march=amdgcn -mcpu=gfx1030 -verify-machineinstrs < %s
+
+; RUN: llc -march=amdgcn -mcpu=gfx1200 -stop-after=amdgpu-remove-incompatible-functions\
+; RUN: -pass-remarks=amdgpu-remove-incompatible-functions %s -o - 2>%t | FileCheck -check-prefixes=INCOMPATIBLE,IR %s
+; RUN: FileCheck --check-prefixes=WARN-INCOMPATIBLE %s < %t
+; RUN: llc -march=amdgcn -mcpu=gfx1200 -verify-machineinstrs < %s
+
+; Note: This test checks the IR, but also has a run line to codegen the file just to check we
+; do not crash when trying to select those functions.
+
+; WARN-COMPATIBLE-NOT: removing function 'needs_gws':
+; WARN-INCOMPATIBLE: removing function 'needs_gws': +gws is not supported on the current target
+
+
+; COMPATIBLE: @GVRefs {{.*}} [ptr @needs_gws]
+; INCOMPATIBLE: @GVRefs {{.*}} zeroinitializer
+ at GVRefs = internal global [1 x ptr] [
+ ptr @needs_gws
+]
+
+
+; COMPATIBLE: @ConstantExpr = internal global i64 ptrtoint (ptr @needs_gws to i64)
+; INCOMPATIBLE: @ConstantExpr = internal global i64 0
+ at ConstantExpr = internal global i64 ptrtoint (ptr @needs_gws to i64)
+
+
+; COMPATIBLE: define void @needs_gws
+; INCOMPATIBLE-NOT: define void @needs_gws
+define void @needs_gws(i32 %val0, i32 %val1) #0 {
+ call void @llvm.amdgcn.ds.gws.init(i32 %val0, i32 %val1)
+ call void @llvm.amdgcn.ds.gws.barrier(i32 %val0, i32 %val1)
+ ret void
+}
+
+; IR: define void @gws_caller(
+define void @gws_caller(i32 %val0, i32 %val1) {
+ ; COMPATIBLE: call void @needs_gws(
+ ; INCOMPATIBLE: call void null
+ call void @needs_gws(i32 %val0, i32 %val1)
+ ; IR: ret void
+ ret void
+}
+
+declare void @llvm.amdgcn.ds.gws.barrier(i32, i32) #1
+declare void @llvm.amdgcn.ds.gws.init(i32, i32) #2
+
+
+attributes #0 = { "target-features"="+gws"}
+attributes #1 = { convergent inaccessiblememonly nounwind }
+attributes #2 = { convergent inaccessiblememonly nounwind writeonly }
More information about the llvm-commits
mailing list