summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJingyue Wu <jingyue@google.com>2015-06-26 22:35:43 +0000
committerJingyue Wu <jingyue@google.com>2015-06-26 22:35:43 +0000
commit3203818bf7df5ff7b0b01b036cfeeb090ab9e596 (patch)
treee57f64b021ecb8d721262c2cde2ed3547b0baf42
parent6529ed40bc6657558e9c4ae606d6d57f6e37f836 (diff)
downloadbcm5719-llvm-3203818bf7df5ff7b0b01b036cfeeb090ab9e596.tar.gz
bcm5719-llvm-3203818bf7df5ff7b0b01b036cfeeb090ab9e596.zip
[NVPTX] noop when kernel pointers are already global
Summary: Some front ends make kernel pointers global already. In that case, handlePointerParams does nothing. Test Plan: more tests in lower-kernel-ptr-arg.ll Reviewers: grosser Subscribers: jholewinski, llvm-commits Differential Revision: http://reviews.llvm.org/D10779 llvm-svn: 240849
-rw-r--r--llvm/lib/Target/NVPTX/NVPTXLowerKernelArgs.cpp4
-rw-r--r--llvm/test/CodeGen/NVPTX/lower-kernel-ptr-arg.ll13
2 files changed, 16 insertions, 1 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXLowerKernelArgs.cpp b/llvm/lib/Target/NVPTX/NVPTXLowerKernelArgs.cpp
index 24dcb122b94..b533f316d8a 100644
--- a/llvm/lib/Target/NVPTX/NVPTXLowerKernelArgs.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXLowerKernelArgs.cpp
@@ -132,6 +132,10 @@ void NVPTXLowerKernelArgs::handlePointerParam(Argument *Arg) {
assert(!Arg->hasByValAttr() &&
"byval params should be handled by handleByValParam");
+ // Do nothing if the argument already points to the global address space.
+ if (Arg->getType()->getPointerAddressSpace() == ADDRESS_SPACE_GLOBAL)
+ return;
+
Instruction *FirstInst = Arg->getParent()->getEntryBlock().begin();
Instruction *ArgInGlobal = new AddrSpaceCastInst(
Arg, PointerType::get(Arg->getType()->getPointerElementType(),
diff --git a/llvm/test/CodeGen/NVPTX/lower-kernel-ptr-arg.ll b/llvm/test/CodeGen/NVPTX/lower-kernel-ptr-arg.ll
index 53220bd905b..0de72c4a1ae 100644
--- a/llvm/test/CodeGen/NVPTX/lower-kernel-ptr-arg.ll
+++ b/llvm/test/CodeGen/NVPTX/lower-kernel-ptr-arg.ll
@@ -16,5 +16,16 @@ define void @kernel(float* %input, float* %output) {
ret void
}
-!nvvm.annotations = !{!0}
+define void @kernel2(float addrspace(1)* %input, float addrspace(1)* %output) {
+; CHECK-LABEL: .visible .entry kernel2(
+; CHECK-NOT: cvta.to.global.u64
+ %1 = load float, float addrspace(1)* %input, align 4
+; CHECK: ld.global.f32
+ store float %1, float addrspace(1)* %output, align 4
+; CHECK: st.global.f32
+ ret void
+}
+
+!nvvm.annotations = !{!0, !1}
!0 = !{void (float*, float*)* @kernel, !"kernel", i32 1}
+!1 = !{void (float addrspace(1)*, float addrspace(1)*)* @kernel2, !"kernel", i32 1}
OpenPOWER on IntegriCloud