public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/morello)] Add case macros for all overloaded forms of sync builtins
@ 2022-05-06 14:43 Matthew Malcomson
  0 siblings, 0 replies; only message in thread
From: Matthew Malcomson @ 2022-05-06 14:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:316d7ff4f0a679f0a9285a3573453e94327b6cd6

commit 316d7ff4f0a679f0a9285a3573453e94327b6cd6
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Fri Apr 22 07:31:05 2022 +0100

    Add case macros for all overloaded forms of sync builtins
    
    Adding _c support to the sync builtins would have meant
    doubling the number of case statements in such sequences as:
    
            case BUILT_IN_SYNC_FETCH_AND_NAND_1:
            case BUILT_IN_SYNC_FETCH_AND_NAND_2:
            case BUILT_IN_SYNC_FETCH_AND_NAND_4:
            case BUILT_IN_SYNC_FETCH_AND_NAND_8:
            case BUILT_IN_SYNC_FETCH_AND_NAND_16:
            case BUILT_IN_SYNC_FETCH_AND_NAND_CAPABILITY:
    
    This patch adds helper macros for generating all relevant case
    statements.
    
    The patch doesn't change tree-ssa-ccp.c, since adding _c support
    there seemed like too much of a distraction.  It also doesn't
    change the sanitisers, since the functions in those files are
    hand-picked to match libsanitizer.

Diff:
---
 gcc/builtins.c        | 237 ++++++++------------------------------------------
 gcc/predict.c         |  12 +--
 gcc/sync-builtins.def |  13 +++
 3 files changed, 49 insertions(+), 213 deletions(-)

diff --git a/gcc/builtins.c b/gcc/builtins.c
index 2f2b2414524..25987297529 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -6751,12 +6751,7 @@ expand_builtin_sync_operation (machine_mode mode, tree exp,
 
       switch (fcode)
 	{
-	case BUILT_IN_SYNC_FETCH_AND_NAND_1:
-	case BUILT_IN_SYNC_FETCH_AND_NAND_2:
-	case BUILT_IN_SYNC_FETCH_AND_NAND_4:
-	case BUILT_IN_SYNC_FETCH_AND_NAND_8:
-	case BUILT_IN_SYNC_FETCH_AND_NAND_16:
-	case BUILT_IN_SYNC_FETCH_AND_NAND_CAPABILITY:
+	CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_NAND):
 	  if (warned_f_a_n)
 	    break;
 
@@ -6765,12 +6760,7 @@ expand_builtin_sync_operation (machine_mode mode, tree exp,
 	  warned_f_a_n = true;
 	  break;
 
-	case BUILT_IN_SYNC_NAND_AND_FETCH_1:
-	case BUILT_IN_SYNC_NAND_AND_FETCH_2:
-	case BUILT_IN_SYNC_NAND_AND_FETCH_4:
-	case BUILT_IN_SYNC_NAND_AND_FETCH_8:
-	case BUILT_IN_SYNC_NAND_AND_FETCH_16:
-	case BUILT_IN_SYNC_NAND_AND_FETCH_CAPABILITY:
+	CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_NAND_AND_FETCH):
 	  if (warned_n_a_f)
 	    break;
 
@@ -8609,156 +8599,91 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_ADD_1:
-    case BUILT_IN_SYNC_FETCH_AND_ADD_2:
-    case BUILT_IN_SYNC_FETCH_AND_ADD_4:
-    case BUILT_IN_SYNC_FETCH_AND_ADD_8:
-    case BUILT_IN_SYNC_FETCH_AND_ADD_16:
-    case BUILT_IN_SYNC_FETCH_AND_ADD_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_ADD):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_ADD_1);
       target = expand_builtin_sync_operation (mode, exp, PLUS, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_SUB_1:
-    case BUILT_IN_SYNC_FETCH_AND_SUB_2:
-    case BUILT_IN_SYNC_FETCH_AND_SUB_4:
-    case BUILT_IN_SYNC_FETCH_AND_SUB_8:
-    case BUILT_IN_SYNC_FETCH_AND_SUB_16:
-    case BUILT_IN_SYNC_FETCH_AND_SUB_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_SUB):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_SUB_1);
       target = expand_builtin_sync_operation (mode, exp, MINUS, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_OR_1:
-    case BUILT_IN_SYNC_FETCH_AND_OR_2:
-    case BUILT_IN_SYNC_FETCH_AND_OR_4:
-    case BUILT_IN_SYNC_FETCH_AND_OR_8:
-    case BUILT_IN_SYNC_FETCH_AND_OR_16:
-    case BUILT_IN_SYNC_FETCH_AND_OR_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_OR):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_OR_1);
       target = expand_builtin_sync_operation (mode, exp, IOR, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_AND_1:
-    case BUILT_IN_SYNC_FETCH_AND_AND_2:
-    case BUILT_IN_SYNC_FETCH_AND_AND_4:
-    case BUILT_IN_SYNC_FETCH_AND_AND_8:
-    case BUILT_IN_SYNC_FETCH_AND_AND_16:
-    case BUILT_IN_SYNC_FETCH_AND_AND_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_AND):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_AND_1);
       target = expand_builtin_sync_operation (mode, exp, AND, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_XOR_1:
-    case BUILT_IN_SYNC_FETCH_AND_XOR_2:
-    case BUILT_IN_SYNC_FETCH_AND_XOR_4:
-    case BUILT_IN_SYNC_FETCH_AND_XOR_8:
-    case BUILT_IN_SYNC_FETCH_AND_XOR_16:
-    case BUILT_IN_SYNC_FETCH_AND_XOR_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_XOR):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_XOR_1);
       target = expand_builtin_sync_operation (mode, exp, XOR, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_FETCH_AND_NAND_1:
-    case BUILT_IN_SYNC_FETCH_AND_NAND_2:
-    case BUILT_IN_SYNC_FETCH_AND_NAND_4:
-    case BUILT_IN_SYNC_FETCH_AND_NAND_8:
-    case BUILT_IN_SYNC_FETCH_AND_NAND_16:
-    case BUILT_IN_SYNC_FETCH_AND_NAND_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_FETCH_AND_NAND):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_FETCH_AND_NAND_1);
       target = expand_builtin_sync_operation (mode, exp, NOT, false, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_ADD_AND_FETCH_1:
-    case BUILT_IN_SYNC_ADD_AND_FETCH_2:
-    case BUILT_IN_SYNC_ADD_AND_FETCH_4:
-    case BUILT_IN_SYNC_ADD_AND_FETCH_8:
-    case BUILT_IN_SYNC_ADD_AND_FETCH_16:
-    case BUILT_IN_SYNC_ADD_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_ADD_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_ADD_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, PLUS, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_SUB_AND_FETCH_1:
-    case BUILT_IN_SYNC_SUB_AND_FETCH_2:
-    case BUILT_IN_SYNC_SUB_AND_FETCH_4:
-    case BUILT_IN_SYNC_SUB_AND_FETCH_8:
-    case BUILT_IN_SYNC_SUB_AND_FETCH_16:
-    case BUILT_IN_SYNC_SUB_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_SUB_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_SUB_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, MINUS, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_OR_AND_FETCH_1:
-    case BUILT_IN_SYNC_OR_AND_FETCH_2:
-    case BUILT_IN_SYNC_OR_AND_FETCH_4:
-    case BUILT_IN_SYNC_OR_AND_FETCH_8:
-    case BUILT_IN_SYNC_OR_AND_FETCH_16:
-    case BUILT_IN_SYNC_OR_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_OR_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_OR_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, IOR, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_AND_AND_FETCH_1:
-    case BUILT_IN_SYNC_AND_AND_FETCH_2:
-    case BUILT_IN_SYNC_AND_AND_FETCH_4:
-    case BUILT_IN_SYNC_AND_AND_FETCH_8:
-    case BUILT_IN_SYNC_AND_AND_FETCH_16:
-    case BUILT_IN_SYNC_AND_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_AND_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_AND_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, AND, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_XOR_AND_FETCH_1:
-    case BUILT_IN_SYNC_XOR_AND_FETCH_2:
-    case BUILT_IN_SYNC_XOR_AND_FETCH_4:
-    case BUILT_IN_SYNC_XOR_AND_FETCH_8:
-    case BUILT_IN_SYNC_XOR_AND_FETCH_16:
-    case BUILT_IN_SYNC_XOR_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_XOR_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_XOR_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, XOR, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_NAND_AND_FETCH_1:
-    case BUILT_IN_SYNC_NAND_AND_FETCH_2:
-    case BUILT_IN_SYNC_NAND_AND_FETCH_4:
-    case BUILT_IN_SYNC_NAND_AND_FETCH_8:
-    case BUILT_IN_SYNC_NAND_AND_FETCH_16:
-    case BUILT_IN_SYNC_NAND_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_NAND_AND_FETCH):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_NAND_AND_FETCH_1);
       target = expand_builtin_sync_operation (mode, exp, NOT, true, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
-    case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP):
       if (mode == VOIDmode)
 	mode = TYPE_MODE (boolean_type_node);
       if (!target || !register_operand (target, mode))
@@ -8770,12 +8695,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
 
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1:
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2:
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4:
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8:
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16:
-    case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP):
       mode = get_builtin_sync_mode 
 				(fcode - BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1);
       target = expand_builtin_compare_and_swap (mode, exp, false, target);
@@ -8783,23 +8703,14 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
 
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1:
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2:
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4:
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8:
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16:
-    case BUILT_IN_SYNC_LOCK_TEST_AND_SET_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_LOCK_TEST_AND_SET):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_LOCK_TEST_AND_SET_1);
       target = expand_builtin_sync_lock_test_and_set (mode, exp, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_SYNC_LOCK_RELEASE_1:
-    case BUILT_IN_SYNC_LOCK_RELEASE_2:
-    case BUILT_IN_SYNC_LOCK_RELEASE_4:
-    case BUILT_IN_SYNC_LOCK_RELEASE_8:
-    case BUILT_IN_SYNC_LOCK_RELEASE_16:
+    CASE_SYNC_BUILTIN_NONCAP_N (BUILT_IN_SYNC_LOCK_RELEASE):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_SYNC_LOCK_RELEASE_1);
       expand_builtin_sync_lock_release (mode, exp);
       return const0_rtx;
@@ -8808,24 +8719,14 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
       expand_builtin_sync_synchronize ();
       return const0_rtx;
 
-    case BUILT_IN_ATOMIC_EXCHANGE_1:
-    case BUILT_IN_ATOMIC_EXCHANGE_2:
-    case BUILT_IN_ATOMIC_EXCHANGE_4:
-    case BUILT_IN_ATOMIC_EXCHANGE_8:
-    case BUILT_IN_ATOMIC_EXCHANGE_16:
-    case BUILT_IN_ATOMIC_EXCHANGE_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_EXCHANGE):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_EXCHANGE_1);
       target = expand_builtin_atomic_exchange (mode, exp, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
-    case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_COMPARE_EXCHANGE):
       {
 	unsigned int nargs, z;
 	vec<tree, va_gc> *vec;
@@ -8848,36 +8749,21 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	break;
       }
 
-    case BUILT_IN_ATOMIC_LOAD_1:
-    case BUILT_IN_ATOMIC_LOAD_2:
-    case BUILT_IN_ATOMIC_LOAD_4:
-    case BUILT_IN_ATOMIC_LOAD_8:
-    case BUILT_IN_ATOMIC_LOAD_16:
-    case BUILT_IN_ATOMIC_LOAD_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_LOAD):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_LOAD_1);
       target = expand_builtin_atomic_load (mode, exp, target);
       if (target)
 	return target;
       break;
 
-    case BUILT_IN_ATOMIC_STORE_1:
-    case BUILT_IN_ATOMIC_STORE_2:
-    case BUILT_IN_ATOMIC_STORE_4:
-    case BUILT_IN_ATOMIC_STORE_8:
-    case BUILT_IN_ATOMIC_STORE_16:
-    case BUILT_IN_ATOMIC_STORE_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_STORE):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_STORE_1);
       target = expand_builtin_atomic_store (mode, exp);
       if (target)
 	return const0_rtx;
       break;
 
-    case BUILT_IN_ATOMIC_ADD_FETCH_1:
-    case BUILT_IN_ATOMIC_ADD_FETCH_2:
-    case BUILT_IN_ATOMIC_ADD_FETCH_4:
-    case BUILT_IN_ATOMIC_ADD_FETCH_8:
-    case BUILT_IN_ATOMIC_ADD_FETCH_16:
-    case BUILT_IN_ATOMIC_ADD_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_ADD_FETCH):
       {
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_ADD_FETCH_1);
 	enum built_in_function lib;
@@ -8889,12 +8775,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_SUB_FETCH_1:
-    case BUILT_IN_ATOMIC_SUB_FETCH_2:
-    case BUILT_IN_ATOMIC_SUB_FETCH_4:
-    case BUILT_IN_ATOMIC_SUB_FETCH_8:
-    case BUILT_IN_ATOMIC_SUB_FETCH_16:
-    case BUILT_IN_ATOMIC_SUB_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_SUB_FETCH):
       {
 	enum built_in_function lib;
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_SUB_FETCH_1);
@@ -8906,12 +8787,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_AND_FETCH_1:
-    case BUILT_IN_ATOMIC_AND_FETCH_2:
-    case BUILT_IN_ATOMIC_AND_FETCH_4:
-    case BUILT_IN_ATOMIC_AND_FETCH_8:
-    case BUILT_IN_ATOMIC_AND_FETCH_16:
-    case BUILT_IN_ATOMIC_AND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_AND_FETCH):
       {
 	enum built_in_function lib;
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_AND_FETCH_1);
@@ -8923,12 +8799,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_NAND_FETCH_1:
-    case BUILT_IN_ATOMIC_NAND_FETCH_2:
-    case BUILT_IN_ATOMIC_NAND_FETCH_4:
-    case BUILT_IN_ATOMIC_NAND_FETCH_8:
-    case BUILT_IN_ATOMIC_NAND_FETCH_16:
-    case BUILT_IN_ATOMIC_NAND_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_NAND_FETCH):
       {
 	enum built_in_function lib;
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_NAND_FETCH_1);
@@ -8940,12 +8811,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_XOR_FETCH_1:
-    case BUILT_IN_ATOMIC_XOR_FETCH_2:
-    case BUILT_IN_ATOMIC_XOR_FETCH_4:
-    case BUILT_IN_ATOMIC_XOR_FETCH_8:
-    case BUILT_IN_ATOMIC_XOR_FETCH_16:
-    case BUILT_IN_ATOMIC_XOR_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_XOR_FETCH):
       {
 	enum built_in_function lib;
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_XOR_FETCH_1);
@@ -8957,12 +8823,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_OR_FETCH_1:
-    case BUILT_IN_ATOMIC_OR_FETCH_2:
-    case BUILT_IN_ATOMIC_OR_FETCH_4:
-    case BUILT_IN_ATOMIC_OR_FETCH_8:
-    case BUILT_IN_ATOMIC_OR_FETCH_16:
-    case BUILT_IN_ATOMIC_OR_FETCH_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_OR_FETCH):
       {
 	enum built_in_function lib;
 	mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_OR_FETCH_1);
@@ -8974,12 +8835,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	  return target;
 	break;
       }
-    case BUILT_IN_ATOMIC_FETCH_ADD_1:
-    case BUILT_IN_ATOMIC_FETCH_ADD_2:
-    case BUILT_IN_ATOMIC_FETCH_ADD_4:
-    case BUILT_IN_ATOMIC_FETCH_ADD_8:
-    case BUILT_IN_ATOMIC_FETCH_ADD_16:
-    case BUILT_IN_ATOMIC_FETCH_ADD_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_ADD):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_ADD_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, PLUS, false,
 					       ignore, BUILT_IN_NONE);
@@ -8987,12 +8843,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
 
-    case BUILT_IN_ATOMIC_FETCH_SUB_1:
-    case BUILT_IN_ATOMIC_FETCH_SUB_2:
-    case BUILT_IN_ATOMIC_FETCH_SUB_4:
-    case BUILT_IN_ATOMIC_FETCH_SUB_8:
-    case BUILT_IN_ATOMIC_FETCH_SUB_16:
-    case BUILT_IN_ATOMIC_FETCH_SUB_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_SUB):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_SUB_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, MINUS, false,
 					       ignore, BUILT_IN_NONE);
@@ -9000,12 +8851,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
 
-    case BUILT_IN_ATOMIC_FETCH_AND_1:
-    case BUILT_IN_ATOMIC_FETCH_AND_2:
-    case BUILT_IN_ATOMIC_FETCH_AND_4:
-    case BUILT_IN_ATOMIC_FETCH_AND_8:
-    case BUILT_IN_ATOMIC_FETCH_AND_16:
-    case BUILT_IN_ATOMIC_FETCH_AND_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_AND):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_AND_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, AND, false,
 					       ignore, BUILT_IN_NONE);
@@ -9013,12 +8859,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
   
-    case BUILT_IN_ATOMIC_FETCH_NAND_1:
-    case BUILT_IN_ATOMIC_FETCH_NAND_2:
-    case BUILT_IN_ATOMIC_FETCH_NAND_4:
-    case BUILT_IN_ATOMIC_FETCH_NAND_8:
-    case BUILT_IN_ATOMIC_FETCH_NAND_16:
-    case BUILT_IN_ATOMIC_FETCH_NAND_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_NAND):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_NAND_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, NOT, false,
 					       ignore, BUILT_IN_NONE);
@@ -9026,12 +8867,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
  
-    case BUILT_IN_ATOMIC_FETCH_XOR_1:
-    case BUILT_IN_ATOMIC_FETCH_XOR_2:
-    case BUILT_IN_ATOMIC_FETCH_XOR_4:
-    case BUILT_IN_ATOMIC_FETCH_XOR_8:
-    case BUILT_IN_ATOMIC_FETCH_XOR_16:
-    case BUILT_IN_ATOMIC_FETCH_XOR_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_XOR):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_XOR_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, XOR, false,
 					       ignore, BUILT_IN_NONE);
@@ -9039,12 +8875,7 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode,
 	return target;
       break;
  
-    case BUILT_IN_ATOMIC_FETCH_OR_1:
-    case BUILT_IN_ATOMIC_FETCH_OR_2:
-    case BUILT_IN_ATOMIC_FETCH_OR_4:
-    case BUILT_IN_ATOMIC_FETCH_OR_8:
-    case BUILT_IN_ATOMIC_FETCH_OR_16:
-    case BUILT_IN_ATOMIC_FETCH_OR_CAPABILITY:
+    CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_FETCH_OR):
       mode = get_builtin_sync_mode (fcode - BUILT_IN_ATOMIC_FETCH_OR_1);
       target = expand_builtin_atomic_fetch_op (mode, exp, target, IOR, false,
 					       ignore, BUILT_IN_NONE);
diff --git a/gcc/predict.c b/gcc/predict.c
index 9be34b1593c..f80402c8589 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -2509,18 +2509,10 @@ expr_expected_value_1 (tree type, tree op0, enum tree_code code,
 		}
 
 	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N:
-	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1:
-	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2:
-	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4:
-	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8:
-	      case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16:
+	      CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP):
 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE:
 	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N:
-	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1:
-	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2:
-	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4:
-	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8:
-	      case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16:
+	      CASE_SYNC_BUILTIN_ALL_N (BUILT_IN_ATOMIC_COMPARE_EXCHANGE):
 		/* Assume that any given atomic operation has low contention,
 		   and thus the compare-and-swap operation succeeds.  */
 		*predictor = PRED_COMPARE_AND_SWAP;
diff --git a/gcc/sync-builtins.def b/gcc/sync-builtins.def
index 3c2dba3389a..d23b344e291 100644
--- a/gcc/sync-builtins.def
+++ b/gcc/sync-builtins.def
@@ -52,6 +52,19 @@ along with GCC; see the file COPYING3.  If not see
   FOR_NONCAP_SYNC_N (ENUM, NAME, DEF) \
   DEF (ENUM##_CAPABILITY, NAME "_capability", ICAP)
 
+/* Case statements for everything defined by FOR_NONCAP_SYNC_N.  */
+#define CASE_SYNC_BUILTIN_NONCAP_N(ENUM) \
+  case ENUM##_1: \
+  case ENUM##_2: \
+  case ENUM##_4: \
+  case ENUM##_8: \
+  case ENUM##_16
+
+/* Case statements for everything defined by FOR_ALL_SYNC_N.  */
+#define CASE_SYNC_BUILTIN_ALL_N(ENUM) \
+  CASE_SYNC_BUILTIN_NONCAP_N (ENUM): \
+  case ENUM##_CAPABILITY
+
 /* The macros below operate in pairs.  The first macro defines functions
    for a particular DSIZE and the second macro defines the following:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-05-06 14:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-06 14:43 [gcc(refs/vendors/ARM/heads/morello)] Add case macros for all overloaded forms of sync builtins Matthew Malcomson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).