mesa: Detect and provide macros for function attributes pure and const.
These are really useful hints to the compiler in the absence of link-time optimization, and I'm going to use them in VC4. I've made the const attribute be ATTRIBUTE_CONST unlike other function attributes, because we have other things in the tree #defining CONST for their own unrelated purposes. v2: Alphabetize. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
This commit is contained in:
@@ -205,10 +205,12 @@ AX_GCC_BUILTIN([__builtin_popcount])
|
|||||||
AX_GCC_BUILTIN([__builtin_popcountll])
|
AX_GCC_BUILTIN([__builtin_popcountll])
|
||||||
AX_GCC_BUILTIN([__builtin_unreachable])
|
AX_GCC_BUILTIN([__builtin_unreachable])
|
||||||
|
|
||||||
|
AX_GCC_FUNC_ATTRIBUTE([const])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([flatten])
|
AX_GCC_FUNC_ATTRIBUTE([flatten])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([format])
|
AX_GCC_FUNC_ATTRIBUTE([format])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([malloc])
|
AX_GCC_FUNC_ATTRIBUTE([malloc])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([packed])
|
AX_GCC_FUNC_ATTRIBUTE([packed])
|
||||||
|
AX_GCC_FUNC_ATTRIBUTE([pure])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([unused])
|
AX_GCC_FUNC_ATTRIBUTE([unused])
|
||||||
AX_GCC_FUNC_ATTRIBUTE([warn_unused_result])
|
AX_GCC_FUNC_ATTRIBUTE([warn_unused_result])
|
||||||
|
|
||||||
|
@@ -103,6 +103,17 @@ do { \
|
|||||||
#define assume(expr) assert(expr)
|
#define assume(expr) assert(expr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Attribute const is used for functions that have no effects other than their
|
||||||
|
* return value, and only rely on the argument values to compute the return
|
||||||
|
* value. As a result, calls to it can be CSEed. Note that using memory
|
||||||
|
* pointed to by the arguments is not allowed for const functions.
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_FUNC_ATTRIBUTE_CONST
|
||||||
|
#define ATTRIBUTE_CONST __attribute__((__const__))
|
||||||
|
#else
|
||||||
|
#define ATTRIBUTE_CONST
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_FUNC_ATTRIBUTE_FLATTEN
|
#ifdef HAVE_FUNC_ATTRIBUTE_FLATTEN
|
||||||
#define FLATTEN __attribute__((__flatten__))
|
#define FLATTEN __attribute__((__flatten__))
|
||||||
#else
|
#else
|
||||||
@@ -130,6 +141,15 @@ do { \
|
|||||||
#define PACKED
|
#define PACKED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Attribute pure is used for functions that have no effects other than their
|
||||||
|
* return value. As a result, calls to it can be dead code eliminated.
|
||||||
|
*/
|
||||||
|
#ifdef HAVE_FUNC_ATTRIBUTE_PURE
|
||||||
|
#define PURE __attribute__((__pure__))
|
||||||
|
#else
|
||||||
|
#define PURE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
/**
|
/**
|
||||||
* Macro function that evaluates to true if T is a trivially
|
* Macro function that evaluates to true if T is a trivially
|
||||||
|
Reference in New Issue
Block a user