On Wed, Sep 24, 2025 at 11:21 AM Andrew Pinski
<[email protected]> wrote:
>
> This is a small cleanup to make it easier to move this part of fab to
> somewhere else. And it makes it easier to understand which builtins are being
> used here and also less repeated code.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK

> gcc/ChangeLog:
>
>         * tree-ssa-ccp.cc (CASE_ATOMIC): New defined.
>         (CASE_ATOMIC_CMP0): New define.
>         (CASE_ATOMIC_BIT_TEST_AND): New defined.
>         (pass_fold_builtins::execute): Use CASE_ATOMIC, CASE_ATOMIC_CMP0,
>         and CASE_ATOMIC_BIT_TEST_AND.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/tree-ssa-ccp.cc | 171 +++++++++-----------------------------------
>  1 file changed, 35 insertions(+), 136 deletions(-)
>
> diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
> index 2d16395ac68..021eb22eadd 100644
> --- a/gcc/tree-ssa-ccp.cc
> +++ b/gcc/tree-ssa-ccp.cc
> @@ -4065,85 +4065,45 @@ pass_fold_builtins::execute (function *fun)
>               tree result = NULL_TREE;
>               switch (DECL_FUNCTION_CODE (callee))
>                 {
> -               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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_ADD_FETCH_CMP_0,
> -                                                 true);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_ADD_FETCH_CMP_0,
> -                                                 false);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_SUB_FETCH_CMP_0,
> -                                                 true);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_SUB_FETCH_CMP_0,
> -                                                 false);
> +#define CASE_ATOMIC(NAME)                      \
> +               case BUILT_IN_##NAME##_1:       \
> +               case BUILT_IN_##NAME##_2:       \
> +               case BUILT_IN_##NAME##_4:       \
> +               case BUILT_IN_##NAME##_8:       \
> +               case BUILT_IN_##NAME##_16
> +#define CASE_ATOMIC_CMP0(ATOMIC, SYNC)                                 \
> +               CASE_ATOMIC(ATOMIC_##ATOMIC):                   \
> +                 optimize_atomic_op_fetch_cmp_0 (&i,           \
> +                                                 
> IFN_ATOMIC_##ATOMIC##_CMP_0, \
> +                                                 true);        \
> +                 break;                                        \
> +               CASE_ATOMIC(SYNC_##SYNC):                       \
> +                 optimize_atomic_op_fetch_cmp_0 (&i,           \
> +                                                 
> IFN_ATOMIC_##ATOMIC##_CMP_0, \
> +                                                 false);       \
>                   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:
> -                 optimize_atomic_bit_test_and (&i,
> -                                               IFN_ATOMIC_BIT_TEST_AND_SET,
> -                                               true, false);
> -                 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:
> -                 optimize_atomic_bit_test_and (&i,
> -                                               IFN_ATOMIC_BIT_TEST_AND_SET,
> -                                               false, false);
> -                 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:
> -                 optimize_atomic_bit_test_and
> -                       (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, false);
> -                 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:
> -                 optimize_atomic_bit_test_and
> -                       (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, 
> false);
> +               CASE_ATOMIC_CMP0(ADD_FETCH, ADD_AND_FETCH)
> +               CASE_ATOMIC_CMP0(SUB_FETCH, SUB_AND_FETCH)
> +               CASE_ATOMIC_CMP0(AND_FETCH, AND_AND_FETCH)
> +               CASE_ATOMIC_CMP0(OR_FETCH, OR_AND_FETCH)
> +#define CASE_ATOMIC_BIT_TEST_AND(ATOMIC, SYNC, FN, AFTER)                    
>   \
> +               CASE_ATOMIC(ATOMIC_##ATOMIC):                                 
>   \
> +                 optimize_atomic_bit_test_and (&i,                           
>   \
> +                                               IFN_ATOMIC_BIT_TEST_AND_##FN, 
>   \
> +                                               true, AFTER);                 
>   \
> +                 break;                                                      
>   \
> +               CASE_ATOMIC(SYNC_##SYNC):                                     
>   \
> +                 optimize_atomic_bit_test_and (&i,                           
>   \
> +                                               IFN_ATOMIC_BIT_TEST_AND_##FN, 
>   \
> +                                               false, AFTER);                
>   \
>                   break;
> +               CASE_ATOMIC_BIT_TEST_AND(FETCH_OR,  FETCH_AND_OR,  SET, false)
> +               CASE_ATOMIC_BIT_TEST_AND(FETCH_XOR, FETCH_AND_XOR, 
> COMPLEMENT, false)
> +               CASE_ATOMIC_BIT_TEST_AND(FETCH_AND, FETCH_AND_AND, RESET, 
> false)
>
> -               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_ATOMIC(ATOMIC_XOR_FETCH):
>                   if (optimize_atomic_bit_test_and
>                         (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, true, true))
>                     break;
> @@ -4151,11 +4111,7 @@ pass_fold_builtins::execute (function *fun)
>                                                   IFN_ATOMIC_XOR_FETCH_CMP_0,
>                                                   true);
>                   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_ATOMIC(SYNC_XOR_AND_FETCH):
>                   if (optimize_atomic_bit_test_and
>                         (&i, IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT, false, true))
>                     break;
> @@ -4164,63 +4120,6 @@ pass_fold_builtins::execute (function *fun)
>                                                   false);
>                   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:
> -                 optimize_atomic_bit_test_and (&i,
> -                                               IFN_ATOMIC_BIT_TEST_AND_RESET,
> -                                               true, false);
> -                 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:
> -                 optimize_atomic_bit_test_and (&i,
> -                                               IFN_ATOMIC_BIT_TEST_AND_RESET,
> -                                               false, false);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_AND_FETCH_CMP_0,
> -                                                 true);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_AND_FETCH_CMP_0,
> -                                                 false);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_OR_FETCH_CMP_0,
> -                                                 true);
> -                 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:
> -                 optimize_atomic_op_fetch_cmp_0 (&i,
> -                                                 IFN_ATOMIC_OR_FETCH_CMP_0,
> -                                                 false);
> -                 break;
> -
>                 default:;
>                 }
>
> --
> 2.43.0
>

Reply via email to