https://github.com/mariusz-sikora-at-amd updated https://github.com/llvm/llvm-project/pull/68744
>From 3dc3a43193247015933392b7da76c4ef77268231 Mon Sep 17 00:00:00 2001 From: Mariusz Sikora <mariusz.sik...@amd.com> Date: Tue, 10 Oct 2023 21:50:48 +0200 Subject: [PATCH 1/2] [AMDGPU] Bail if assume-like intrinsic is used in PromoteAllocaToVector Attached test will cause crash without this change. --- llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp | 2 ++ .../test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp index 3707a960211eb4..8ec7d29e00c939 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -772,6 +772,8 @@ bool AMDGPUPromoteAllocaImpl::tryPromoteAllocaToVector(AllocaInst &Alloca) { // Ignore assume-like intrinsics and comparisons used in assumes. if (isAssumeLikeIntrinsic(Inst)) { + if (!Inst->use_empty()) + return RejectUser(Inst, "assume-like intrinsic cannot have any users"); UsersToRemove.push_back(Inst); continue; } diff --git a/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll b/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll index 0bba1bdce95655..5616bc0f5ef3c1 100644 --- a/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll +++ b/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll @@ -53,6 +53,15 @@ define amdgpu_kernel void @promote_with_objectsize(ptr addrspace(1) %out) #0 { ret void } +; CHECK-LABEL: @promote_with_objectsize_8( +; CHECK: [[PTR:%[0-9]+]] = getelementptr inbounds [64 x [8 x i32]], ptr addrspace(3) @promote_with_objectsize_8.alloca, i32 0, i32 %{{[0-9]+}} +; CHECK: call i32 @llvm.objectsize.i32.p3(ptr addrspace(3) [[PTR]], i1 false, i1 false, i1 false) +define amdgpu_kernel void @promote_with_objectsize_8(ptr addrspace(1) %out) #0 { + %alloca = alloca [8 x i32], align 4, addrspace(5) + %size = call i32 @llvm.objectsize.i32.p5(ptr addrspace(5) %alloca, i1 false, i1 false, i1 false) + store i32 %size, ptr addrspace(1) %out + ret void +} ; CHECK-LABEL: @promote_alloca_used_twice_in_memcpy( ; CHECK: call void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) align 8 dereferenceable(16) %arrayidx1, ptr addrspace(3) align 8 dereferenceable(16) %arrayidx2, i64 16, i1 false) define amdgpu_kernel void @promote_alloca_used_twice_in_memcpy(i32 %c) { >From a85ab29fe8f338ff740456ea6b8890dd1212ca6c Mon Sep 17 00:00:00 2001 From: Mariusz Sikora <mariusz.sik...@amd.com> Date: Tue, 21 Nov 2023 09:18:45 +0100 Subject: [PATCH 2/2] Fixup - handle objectsize in PromoteAlloca --- llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp | 16 ++++++++++++++++ .../AMDGPU/promote-alloca-mem-intrinsics.ll | 3 +-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp index 8ec7d29e00c939..90d0dc96898758 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp @@ -528,6 +528,15 @@ static Value *promoteAllocaUserToVector( return Builder.CreateVectorSplat(VectorTy->getElementCount(), Elt); } + if (auto *Intr = dyn_cast<IntrinsicInst>(Inst)) { + if (Intr->getIntrinsicID() == Intrinsic::objectsize) { + Intr->replaceAllUsesWith( + Builder.getIntN(Intr->getType()->getIntegerBitWidth(), + DL.getTypeAllocSize(VectorTy))); + return nullptr; + } + } + llvm_unreachable("Unsupported call when promoting alloca to vector"); } @@ -770,6 +779,13 @@ bool AMDGPUPromoteAllocaImpl::tryPromoteAllocaToVector(AllocaInst &Alloca) { continue; } + if (auto *Intr = dyn_cast<IntrinsicInst>(Inst)) { + if (Intr->getIntrinsicID() == Intrinsic::objectsize) { + WorkList.push_back(Inst); + continue; + } + } + // Ignore assume-like intrinsics and comparisons used in assumes. if (isAssumeLikeIntrinsic(Inst)) { if (!Inst->use_empty()) diff --git a/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll b/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll index 5616bc0f5ef3c1..aabd5df9568370 100644 --- a/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll +++ b/llvm/test/CodeGen/AMDGPU/promote-alloca-mem-intrinsics.ll @@ -54,8 +54,7 @@ define amdgpu_kernel void @promote_with_objectsize(ptr addrspace(1) %out) #0 { } ; CHECK-LABEL: @promote_with_objectsize_8( -; CHECK: [[PTR:%[0-9]+]] = getelementptr inbounds [64 x [8 x i32]], ptr addrspace(3) @promote_with_objectsize_8.alloca, i32 0, i32 %{{[0-9]+}} -; CHECK: call i32 @llvm.objectsize.i32.p3(ptr addrspace(3) [[PTR]], i1 false, i1 false, i1 false) +; CHECK: store i32 32, ptr addrspace(1) %out, align 4 define amdgpu_kernel void @promote_with_objectsize_8(ptr addrspace(1) %out) #0 { %alloca = alloca [8 x i32], align 4, addrspace(5) %size = call i32 @llvm.objectsize.i32.p5(ptr addrspace(5) %alloca, i1 false, i1 false, i1 false) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits