diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp index 57cb2a6a921..ff89ce7b96f 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp @@ -1170,6 +1170,8 @@ bool AMDGPULibCalls::fold_fma_mad(CallInst *CI, IRBuilder<> &B, // Get a scalar native builtin signle argument FP function Constant* AMDGPULibCalls::getNativeFunction(Module* M, const FuncInfo& FInfo) { + if (getArgType(FInfo) == AMDGPULibFunc::F64 || !HasNative(FInfo.getId())) + return nullptr; FuncInfo nf = FInfo; nf.setPrefix(AMDGPULibFunc::NATIVE); return getFunction(M, nf); @@ -1178,9 +1180,7 @@ Constant* AMDGPULibCalls::getNativeFunction(Module* M, const FuncInfo& FInfo) { // fold sqrt -> native_sqrt (x) bool AMDGPULibCalls::fold_sqrt(CallInst *CI, IRBuilder<> &B, const FuncInfo &FInfo) { - if ((getArgType(FInfo) == AMDGPULibFunc::F32 || - getArgType(FInfo) == AMDGPULibFunc::F64) && - (getVecSize(FInfo) == 1) && + if (getArgType(FInfo) == AMDGPULibFunc::F32 && (getVecSize(FInfo) == 1) && (FInfo.getPrefix() != AMDGPULibFunc::NATIVE)) { if (Constant *FPExpr = getNativeFunction( CI->getModule(), AMDGPULibFunc(AMDGPULibFunc::EI_SQRT, FInfo))) { diff --git a/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll b/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll index e487f3c417e..eab1fe4c70f 100644 --- a/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll +++ b/llvm/test/CodeGen/AMDGPU/simplify-libcalls.ll @@ -641,7 +641,18 @@ entry: ret void } +; GCN-LABEL: {{^}}define amdgpu_kernel void @test_dont_use_native_sqrt_fast_f64 +; GCN: tail call fast double @_Z4sqrtd(double %tmp) +define amdgpu_kernel void @test_dont_use_native_sqrt_fast_f64(double addrspace(1)* nocapture %a) { +entry: + %tmp = load double, double addrspace(1)* %a, align 8 + %call = tail call fast double @_Z4sqrtd(double %tmp) + store double %call, double addrspace(1)* %a, align 8 + ret void +} + declare float @_Z4sqrtf(float) +declare double @_Z4sqrtd(double) ; GCN-LABEL: {{^}}define amdgpu_kernel void @test_use_native_rsqrt ; GCN-NATIVE: tail call fast float @_Z12native_rsqrtf(float %tmp) |

