diff options
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp | 9 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/global-smrd-unknown.ll | 20 |
2 files changed, 25 insertions, 4 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp index 6f002860044..ed537082664 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAnnotateUniformValues.cpp @@ -108,10 +108,11 @@ bool AMDGPUAnnotateUniformValues::isClobberedInFunction(LoadInst * Load) { DFS(Start, Checklist); for (auto &BB : Checklist) { BasicBlock::iterator StartIt = (!L && (BB == Load->getParent())) ? - BasicBlock::iterator(Load) : BB->end(); - if (MDR->getPointerDependencyFrom(MemoryLocation(Ptr), - true, StartIt, BB, Load).isClobber()) - return true; + BasicBlock::iterator(Load) : BB->end(); + auto Q = MDR->getPointerDependencyFrom(MemoryLocation(Ptr), true, + StartIt, BB, Load); + if (Q.isClobber() || Q.isUnknown()) + return true; } return false; } diff --git a/llvm/test/CodeGen/AMDGPU/global-smrd-unknown.ll b/llvm/test/CodeGen/AMDGPU/global-smrd-unknown.ll new file mode 100644 index 00000000000..8a576e6480a --- /dev/null +++ b/llvm/test/CodeGen/AMDGPU/global-smrd-unknown.ll @@ -0,0 +1,20 @@ +; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=fiji -memdep-block-scan-limit=1 -amdgpu-scalarize-global-loads -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GCN %s + +; GCN-LABEL: {{^}}unknown_memdep_analysis: +; GCN: flat_load_dword +; GCN: flat_load_dword +; GCN: flat_store_dword +define amdgpu_kernel void @unknown_memdep_analysis(float addrspace(1)* nocapture readonly %arg) #0 { +bb: + %tmp53 = load float, float addrspace(1)* undef, align 4 + %tmp54 = getelementptr inbounds float, float addrspace(1)* %arg, i32 31 + %tmp55 = load float, float addrspace(1)* %tmp54, align 4 + %tmp56 = tail call float @llvm.fmuladd.f32(float undef, float %tmp53, float %tmp55) + store float %tmp56, float addrspace(1)* undef, align 4 + ret void +} + +declare float @llvm.fmuladd.f32(float, float, float) #1 + +attributes #0 = { nounwind } +attributes #1 = { nounwind readnone speculatable } |