re PR tree-optimization/26830 (Repeated SSA update during loop header copying)
[gcc.git] / gcc / builtins.def
index 7788719d2597df85e8762d7fd62fef4ae02044c4..b0d54a085d0aa44870eb797757e1c744bff8712c 100644 (file)
@@ -23,7 +23,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 /* Before including this file, you should define a macro:
 
      DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
-                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
 
    This macro will be called once for each builtin function.  The
    ENUM will be of type `enum built_in_function', and will indicate
@@ -61,8 +61,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
    define it's meaning.  When user uses floorf we may assume that the
    floorf has the meaning we expect, but we can't produce floorf by
    simplifying floor((double)float) since the runtime need not implement
-   it.  */
-   
+   it.
+
+   The builtins is registered only if COND is true.  */
+
 /* A GCC builtin (like __builtin_saveregs) is provided by the
    compiler, but does not correspond to a function in the standard
    library.  */
@@ -133,6 +135,13 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, 0, 0, false, false, \
               false, 0, false, false)
 
+/* Builtin used by the implementation of GNU OpenMP.  None of these are
+   actually implemented in the compiler; they're all in libgomp.  */
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, true, true, ATTRS, false, flag_openmp)
+
 /* Define an attribute list for math functions that are normally
    "impure" because some of them may write into global memory for
    `errno'.  If !flag_errno_math they are instead "const".  */
@@ -709,195 +718,8 @@ DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", BT_FN_INT_INT_CON
 DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter")
 DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit")
 
-/* Synchronization Primitives.  The "_N" version is the one that the user
-   is supposed to be using.  It's overloaded, and is resolved to one of the
-   "_1" through "_8" versions, plus some extra casts.  */
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_N, "__sync_fetch_and_add",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_N, "__sync_fetch_and_or",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_N, "__sync_fetch_and_and",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_N, "__sync_add_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_N, "__sync_or_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_N, "__sync_and_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_N,
-                 "__sync_bool_compare_and_swap",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_1,
-                 "__sync_bool_compare_and_swap_1",
-                 BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_2,
-                 "__sync_bool_compare_and_swap_2",
-                 BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_4,
-                 "__sync_bool_compare_and_swap_4",
-                 BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_8,
-                 "__sync_bool_compare_and_swap_8",
-                 BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_N,
-                 "__sync_val_compare_and_swap",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_1,
-                 "__sync_val_compare_and_swap_1",
-                 BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_2,
-                 "__sync_val_compare_and_swap_2",
-                 BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_4,
-                 "__sync_val_compare_and_swap_4",
-                 BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_8,
-                 "__sync_val_compare_and_swap_8",
-                 BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_N, "__sync_lock_test_and_set",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1",
-                 BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2",
-                 BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4",
-                 BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8",
-                 BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_N, "__sync_lock_release",
-                 BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_1, "__sync_lock_release_1",
-                 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_2, "__sync_lock_release_2",
-                 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_4, "__sync_lock_release_4",
-                 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_8, "__sync_lock_release_8",
-                 BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize",
-                 BT_FN_VOID, ATTR_NOTHROW_LIST)
+/* Synchronization Primitives.  */
+#include "sync-builtins.def"
+
+/* OpenMP builtins.  */
+#include "omp-builtins.def"