X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Famd%2Fcommon%2Fac_llvm_util.h;h=3cf385a33edeb5606155c6f8e9081d30ddbb6f08;hb=f4e85ba93f4323f62480658d006e3e34eb25df9b;hp=805db77178589367b1f47085bc63c5439a8e8ca7;hpb=6d600cf632f83d7ffdd844e0b3a049605ae858cc;p=mesa.git diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index 805db771785..3cf385a33ed 100644 --- a/src/amd/common/ac_llvm_util.h +++ b/src/amd/common/ac_llvm_util.h @@ -22,7 +22,9 @@ * of the Software. * */ -#pragma once + +#ifndef AC_LLVM_UTIL_H +#define AC_LLVM_UTIL_H #include #include @@ -35,12 +37,14 @@ extern "C" { enum ac_func_attr { AC_FUNC_ATTR_ALWAYSINLINE = (1 << 0), - AC_FUNC_ATTR_BYVAL = (1 << 1), AC_FUNC_ATTR_INREG = (1 << 2), AC_FUNC_ATTR_NOALIAS = (1 << 3), AC_FUNC_ATTR_NOUNWIND = (1 << 4), AC_FUNC_ATTR_READNONE = (1 << 5), AC_FUNC_ATTR_READONLY = (1 << 6), + AC_FUNC_ATTR_WRITEONLY = (1 << 7), + AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY = (1 << 8), + AC_FUNC_ATTR_CONVERGENT = (1 << 9), /* Legacy intrinsic that needs attributes on function declarations * and they must match the internal LLVM definition exactly, otherwise @@ -49,8 +53,24 @@ enum ac_func_attr { AC_FUNC_ATTR_LEGACY = (1u << 31), }; -LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, bool supports_spill); +enum ac_target_machine_options { + AC_TM_SUPPORTS_SPILL = (1 << 0), + AC_TM_SISCHED = (1 << 1), + AC_TM_FORCE_ENABLE_XNACK = (1 << 2), + AC_TM_FORCE_DISABLE_XNACK = (1 << 3), + AC_TM_PROMOTE_ALLOCA_TO_SCRATCH = (1 << 4), +}; + +enum ac_float_mode { + AC_FLOAT_MODE_DEFAULT, + AC_FLOAT_MODE_NO_SIGNED_ZEROS_FP_MATH, + AC_FLOAT_MODE_UNSAFE_FP_MATH, +}; +const char *ac_get_llvm_processor_name(enum radeon_family family); +LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options); + +LLVMTargetRef ac_get_llvm_target(const char *triple); void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes); bool ac_is_sgpr_param(LLVMValueRef param); void ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function, @@ -59,6 +79,34 @@ void ac_add_func_attributes(LLVMContextRef ctx, LLVMValueRef function, unsigned attrib_mask); void ac_dump_module(LLVMModuleRef module); +LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call); +bool ac_llvm_is_function(LLVMValueRef v); + +LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, + enum ac_float_mode float_mode); + +void +ac_llvm_add_target_dep_function_attr(LLVMValueRef F, + const char *name, int value); + +static inline unsigned +ac_get_load_intr_attribs(bool can_speculate) +{ + /* READNONE means writes can't affect it, while READONLY means that + * writes can affect it. */ + return can_speculate ? AC_FUNC_ATTR_READNONE : + AC_FUNC_ATTR_READONLY; +} + +static inline unsigned +ac_get_store_intr_attribs(bool writeonly_memory) +{ + return writeonly_memory ? AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY : + AC_FUNC_ATTR_WRITEONLY; +} + #ifdef __cplusplus } #endif + +#endif /* AC_LLVM_UTIL_H */