summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/gallivm
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2016-07-12 18:49:57 +0200
committerMarek Olšák <marek.olsak@amd.com>2016-07-13 19:46:16 +0200
commit6596ecf8c50b6400b02a018a438a8de98de48761 (patch)
treece6b970c6e5df88aa1dfe8b1a60918235e948cb7 /src/gallium/auxiliary/gallivm
parentbccf9de4df93a53cad7a3a6ffdcea1ebc956487d (diff)
downloadexternal_mesa3d-6596ecf8c50b6400b02a018a438a8de98de48761.zip
external_mesa3d-6596ecf8c50b6400b02a018a438a8de98de48761.tar.gz
external_mesa3d-6596ecf8c50b6400b02a018a438a8de98de48761.tar.bz2
gallivm: add helper lp_add_attr_dereferenceable
Not sure if this is the right way to do it, but it seems to work. v2: make it a no-op on LLVM <= 3.5 Reviewed-by: Roland Scheidegger <sroland@vmware.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Diffstat (limited to 'src/gallium/auxiliary/gallivm')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_misc.cpp11
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_misc.h3
2 files changed, 14 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
index 23ef3ed..791a470 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
@@ -697,3 +697,14 @@ lp_free_memory_manager(LLVMMCJITMemoryManagerRef memorymgr)
{
delete reinterpret_cast<BaseMemoryManager*>(memorymgr);
}
+
+extern "C" void
+lp_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
+{
+#if HAVE_LLVM >= 0x0306
+ llvm::Argument *A = llvm::unwrap<llvm::Argument>(val);
+ llvm::AttrBuilder B;
+ B.addDereferenceableAttr(bytes);
+ A->addAttr(llvm::AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
+#endif
+}
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.h b/src/gallium/auxiliary/gallivm/lp_bld_misc.h
index d038e3b..c127c48 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.h
@@ -73,6 +73,9 @@ lp_get_default_memory_manager();
extern void
lp_free_memory_manager(LLVMMCJITMemoryManagerRef memorymgr);
+extern void
+lp_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes);
+
#ifdef __cplusplus
}
#endif