summaryrefslogtreecommitdiff
path: root/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h')
-rw-r--r--lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h24
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h b/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h
index 7d80ac28f..0a929c519 100644
--- a/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h
+++ b/lib/mesa/src/gallium/auxiliary/gallivm/lp_bld_intr.h
@@ -46,6 +46,24 @@
*/
#define LP_MAX_FUNC_ARGS 32
+enum lp_func_attr {
+ LP_FUNC_ATTR_ALWAYSINLINE = (1 << 0),
+ LP_FUNC_ATTR_BYVAL = (1 << 1),
+ LP_FUNC_ATTR_INREG = (1 << 2),
+ LP_FUNC_ATTR_NOALIAS = (1 << 3),
+ LP_FUNC_ATTR_NOUNWIND = (1 << 4),
+ LP_FUNC_ATTR_READNONE = (1 << 5),
+ LP_FUNC_ATTR_READONLY = (1 << 6),
+ LP_FUNC_ATTR_WRITEONLY = HAVE_LLVM >= 0x0400 ? (1 << 7) : 0,
+ LP_FUNC_ATTR_INACCESSIBLE_MEM_ONLY = HAVE_LLVM >= 0x0400 ? (1 << 8) : 0,
+ LP_FUNC_ATTR_CONVERGENT = HAVE_LLVM >= 0x0400 ? (1 << 9) : 0,
+
+ /* Legacy intrinsic that needs attributes on function declarations
+ * and they must match the internal LLVM definition exactly, otherwise
+ * intrinsic selection fails.
+ */
+ LP_FUNC_ATTR_LEGACY = (1u << 31),
+};
void
lp_format_intrinsic(char *name,
@@ -60,13 +78,17 @@ lp_declare_intrinsic(LLVMModuleRef module,
LLVMTypeRef *arg_types,
unsigned num_args);
+void
+lp_add_function_attr(LLVMValueRef function_or_call,
+ int attr_idx, enum lp_func_attr attr);
+
LLVMValueRef
lp_build_intrinsic(LLVMBuilderRef builder,
const char *name,
LLVMTypeRef ret_type,
LLVMValueRef *args,
unsigned num_args,
- LLVMAttribute attr);
+ unsigned attr_mask);
LLVMValueRef