[llvm] 8a677a7 - AMDGPU: Partially respect nobuiltin in libcall simplifier

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 31 08:00:30 PDT 2023


Author: Matt Arsenault
Date: 2023-07-31T10:56:46-04:00
New Revision: 8a677a7ff0c6f59b392a03108f2dba86d1606183

URL: https://github.com/llvm/llvm-project/commit/8a677a7ff0c6f59b392a03108f2dba86d1606183
DIFF: https://github.com/llvm/llvm-project/commit/8a677a7ff0c6f59b392a03108f2dba86d1606183.diff

LOG: AMDGPU: Partially respect nobuiltin in libcall simplifier

There are more contexts where it's not handled correctly but this is
the simplest one.

https://reviews.llvm.org/D156682

Added: 
    

Modified: 
    llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
    llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
index c6cd196c2579f7..1a1bdb7831300c 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
@@ -500,7 +500,7 @@ bool AMDGPULibCalls::sincosUseNative(CallInst *aCI, const FuncInfo &FInfo) {
 bool AMDGPULibCalls::useNative(CallInst *aCI) {
   CI = aCI;
   Function *Callee = aCI->getCalledFunction();
-  if (!Callee)
+  if (!Callee || aCI->isNoBuiltin())
     return false;
 
   FuncInfo FInfo;
@@ -593,7 +593,7 @@ bool AMDGPULibCalls::fold(CallInst *CI, AliasAnalysis *AA) {
   this->CI = CI;
   Function *Callee = CI->getCalledFunction();
   // Ignore indirect calls.
-  if (!Callee)
+  if (!Callee || CI->isNoBuiltin())
     return false;
 
   IRBuilder<> B(CI);

diff  --git a/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll b/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll
index 3c75d3487aa0a4..fa22244ecb621c 100644
--- a/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll
+++ b/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll
@@ -630,6 +630,18 @@ entry:
   ret void
 }
 
+; GCN-LABEL: {{^}}define amdgpu_kernel void @test_use_native_powr_nobuiltin
+; GCN: %call = tail call fast float @_Z4powrff(float %tmp, float %tmp1)
+define amdgpu_kernel void @test_use_native_powr_nobuiltin(ptr addrspace(1) nocapture %a) {
+entry:
+  %tmp = load float, ptr addrspace(1) %a, align 4
+  %arrayidx1 = getelementptr inbounds float, ptr addrspace(1) %a, i64 1
+  %tmp1 = load float, ptr addrspace(1) %arrayidx1, align 4
+  %call = call fast float @_Z4powrff(float %tmp, float %tmp1) nobuiltin
+  store float %call, ptr addrspace(1) %a, align 4
+  ret void
+}
+
 ; GCN-LABEL: {{^}}define amdgpu_kernel void @test_use_native_sqrt
 ; GCN-NATIVE: call fast float @_Z11native_sqrtf(float %tmp)
 define amdgpu_kernel void @test_use_native_sqrt(ptr addrspace(1) nocapture %a) {


        


More information about the llvm-commits mailing list