Author: theRonShark Date: 2026-01-02T12:17:40-05:00 New Revision: 674620670e09d0c9ff044ee76aa5f50311e82212
URL: https://github.com/llvm/llvm-project/commit/674620670e09d0c9ff044ee76aa5f50311e82212 DIFF: https://github.com/llvm/llvm-project/commit/674620670e09d0c9ff044ee76aa5f50311e82212.diff LOG: Revert "AMDGPU: Do not infer implicit inputs for !nocallback intrinsics" This reverts commit 849038cad16f18d77b5cd277980c93e8efbf1bbc. Added: Modified: llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp Removed: llvm/test/CodeGen/AMDGPU/amdgpu-attributor-intrinsic-missing-nocallback.ll llvm/test/CodeGen/AMDGPU/amdgpu-attributor-nocallback-intrinsics.ll ################################################################################ diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp index 0b2ee6371da06..821a7198e38c8 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAttributor.cpp @@ -38,10 +38,9 @@ enum ImplicitArgumentPositions { #define AMDGPU_ATTRIBUTE(Name, Str) Name = 1 << Name##_POS, enum ImplicitArgumentMask { - UNKNOWN_INTRINSIC = 0, + NOT_IMPLICIT_INPUT = 0, #include "AMDGPUAttributes.def" - ALL_ARGUMENT_MASK = (1 << LAST_ARG_POS) - 1, - NOT_IMPLICIT_INPUT + ALL_ARGUMENT_MASK = (1 << LAST_ARG_POS) - 1 }; #define AMDGPU_ATTRIBUTE(Name, Str) {Name, Str}, @@ -116,7 +115,7 @@ intrinsicToAttrMask(Intrinsic::ID ID, bool &NonKernelOnly, bool &NeedsImplicit, NeedsImplicit = (CodeObjectVersion >= AMDGPU::AMDHSA_COV5); return QUEUE_PTR; default: - return UNKNOWN_INTRINSIC; + return NOT_IMPLICIT_INPUT; } } @@ -526,21 +525,6 @@ struct AAAMDAttributesFunction : public AAAMDAttributes { ImplicitArgumentMask AttrMask = intrinsicToAttrMask(IID, NonKernelOnly, NeedsImplicit, HasApertureRegs, SupportsGetDoorbellID, COV); - - if (AttrMask == UNKNOWN_INTRINSIC) { - // Assume not-nocallback intrinsics may invoke a function which accesses - // implicit arguments. - // - // FIXME: This isn't really the correct check. We want to ensure it - // isn't calling any function that may use implicit arguments regardless - // of whether it's internal to the module or not. - // - // TODO: Ignoring callsite attributes. - if (!Callee->hasFnAttribute(Attribute::NoCallback)) - return indicatePessimisticFixpoint(); - continue; - } - if (AttrMask != NOT_IMPLICIT_INPUT) { if ((IsNonEntryFunc || !NonKernelOnly)) removeAssumedBits(AttrMask); @@ -1364,10 +1348,7 @@ struct AAAMDGPUMinAGPRAlloc default: // Some intrinsics may use AGPRs, but if we have a choice, we are not // required to use AGPRs. - - // Assume !nocallback intrinsics may call a function which requires - // AGPRs. - return CB.hasFnAttr(Attribute::NoCallback); + return true; } // TODO: Handle callsite attributes diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-intrinsic-missing-nocallback.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-intrinsic-missing-nocallback.ll deleted file mode 100644 index d7d623ac89146..0000000000000 --- a/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-intrinsic-missing-nocallback.ll +++ /dev/null @@ -1,31 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5 -; RUN: opt -S -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx90a -passes=amdgpu-attributor %s | FileCheck %s - -; Make sure we do not infer anything about implicit inputs through an -; intrinsic call which is not nocallback. - -declare zeroext i32 @return_i32() - -define i32 @test_i32_return() gc "statepoint-example" { -; CHECK-LABEL: define i32 @test_i32_return( -; CHECK-SAME: ) #[[ATTR0:[0-9]+]] gc "statepoint-example" { -; CHECK-NEXT: [[ENTRY:.*:]] -; CHECK-NEXT: [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i32 ()) @return_i32, i32 0, i32 0, i32 0, i32 0) -; CHECK-NEXT: [[CALL1:%.*]] = call zeroext i32 @llvm.experimental.gc.result.i32(token [[SAFEPOINT_TOKEN]]) -; CHECK-NEXT: ret i32 [[CALL1]] -; -entry: - %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i32 ()) @return_i32, i32 0, i32 0, i32 0, i32 0) - %call1 = call zeroext i32 @llvm.experimental.gc.result.i32(token %safepoint_token) - ret i32 %call1 -} - -declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...) -declare i32 @llvm.experimental.gc.result.i32(token) #0 - -attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) } -;. -; CHECK: attributes #[[ATTR0]] = { "target-cpu"="gfx90a" "uniform-work-group-size"="false" } -; CHECK: attributes #[[ATTR1:[0-9]+]] = { "target-cpu"="gfx90a" } -; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(none) "target-cpu"="gfx90a" } -;. diff --git a/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-nocallback-intrinsics.ll b/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-nocallback-intrinsics.ll deleted file mode 100644 index 71c509afa8e64..0000000000000 --- a/llvm/test/CodeGen/AMDGPU/amdgpu-attributor-nocallback-intrinsics.ll +++ /dev/null @@ -1,74 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5 -; RUN: opt -S -mtriple=amdgcn-unknown-amdhsa -passes=amdgpu-attributor -mcpu=gfx90a %s | FileCheck %s - -; Make sure we infer no inputs are used through some intrinsics - -define void @use_fake_use(i32 %arg) { -; CHECK-LABEL: define void @use_fake_use( -; CHECK-SAME: i32 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] { -; CHECK-NEXT: call void (...) @llvm.fake.use(i32 [[ARG]]) -; CHECK-NEXT: ret void -; - call void (...) @llvm.fake.use(i32 %arg) - ret void -} - -define void @use_donothing() { -; CHECK-LABEL: define void @use_donothing( -; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: call void @llvm.donothing() -; CHECK-NEXT: ret void -; - call void @llvm.donothing() - ret void -} - -define void @use_assume(i1 %arg) { -; CHECK-LABEL: define void @use_assume( -; CHECK-SAME: i1 [[ARG:%.*]]) #[[ATTR0]] { -; CHECK-NEXT: call void @llvm.assume(i1 [[ARG]]) -; CHECK-NEXT: ret void -; - call void @llvm.assume(i1 %arg) - ret void -} - -define void @use_trap() { -; CHECK-LABEL: define void @use_trap( -; CHECK-SAME: ) #[[ATTR1:[0-9]+]] { -; CHECK-NEXT: call void @llvm.trap() -; CHECK-NEXT: ret void -; - call void @llvm.trap() - ret void -} - -define void @use_debugtrap() { -; CHECK-LABEL: define void @use_debugtrap( -; CHECK-SAME: ) #[[ATTR1]] { -; CHECK-NEXT: call void @llvm.debugtrap() -; CHECK-NEXT: ret void -; - call void @llvm.debugtrap() - ret void -} - -define void @use_ubsantrap() { -; CHECK-LABEL: define void @use_ubsantrap( -; CHECK-SAME: ) #[[ATTR1]] { -; CHECK-NEXT: call void @llvm.ubsantrap(i8 0) -; CHECK-NEXT: ret void -; - call void @llvm.ubsantrap(i8 0) - ret void -} - -;. -; CHECK: attributes #[[ATTR0]] = { "amdgpu-agpr-alloc"="0" "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx90a" "uniform-work-group-size"="false" } -; CHECK: attributes #[[ATTR1]] = { "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx90a" "uniform-work-group-size"="false" } -; CHECK: attributes #[[ATTR2:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) "target-cpu"="gfx90a" } -; CHECK: attributes #[[ATTR3:[0-9]+]] = { nounwind "target-cpu"="gfx90a" } -; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(none) "target-cpu"="gfx90a" } -; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) "target-cpu"="gfx90a" } -; CHECK: attributes #[[ATTR6:[0-9]+]] = { cold noreturn nounwind memory(inaccessiblemem: write) "target-cpu"="gfx90a" } -;. _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
