[llvm] [AMDGPU] Remove functions with incompatible gws attribute (PR #78143)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 15 03:08:10 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Jay Foad (jayfoad)
<details>
<summary>Changes</summary>
This change is to remove incompatible gws related functions
in order to make device-libs work correctly under -O0 for
gfx1200+
---
Full diff: https://github.com/llvm/llvm-project/pull/78143.diff
2 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp (+2-1)
- (added) llvm/test/CodeGen/AMDGPU/remove-incompatible-gws.ll (+54)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp b/llvm/lib/Target/AMDGPU/AMDGPURemoveIncompatibleFunctions.cpp
index 552380d54dfd09..6f1236fd3b7dae 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 00000000000000..78ca923ddb0f0c
--- /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 }
``````````
</details>
https://github.com/llvm/llvm-project/pull/78143
More information about the llvm-commits
mailing list