https://gcc.gnu.org/g:04d11ded0132adb0054120fb5290154400991d13
commit r15-3319-g04d11ded0132adb0054120fb5290154400991d13 Author: Andrew Pinski <quic_apin...@quicinc.com> Date: Thu Aug 29 10:58:41 2024 -0700 expand: Small speed up expansion of __builtin_prefetch This is a small speed up of the expansion of __builtin_prefetch. Basically for the optional arguments, no reason to call expand_normal on a constant integer that we know the value, just replace it with GEN_INT/const0_rtx instead. Bootstrapped and tested on x86_64-linux. gcc/ChangeLog: * builtins.cc (expand_builtin_prefetch): Rewrite expansion of the optional arguments to not expand known constants. Diff: --- gcc/builtins.cc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/gcc/builtins.cc b/gcc/builtins.cc index b4d51eaeba5e..37c7c98e5c7d 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -1280,25 +1280,22 @@ expand_builtin_prefetch (tree exp) zero (read) and argument 2 (locality) defaults to 3 (high degree of locality). */ nargs = call_expr_nargs (exp); - if (nargs > 1) - arg1 = CALL_EXPR_ARG (exp, 1); - else - arg1 = integer_zero_node; - if (nargs > 2) - arg2 = CALL_EXPR_ARG (exp, 2); - else - arg2 = integer_three_node; + arg1 = nargs > 1 ? CALL_EXPR_ARG (exp, 1) : NULL_TREE; + arg2 = nargs > 2 ? CALL_EXPR_ARG (exp, 2) : NULL_TREE; /* Argument 0 is an address. */ op0 = expand_expr (arg0, NULL_RTX, Pmode, EXPAND_NORMAL); /* Argument 1 (read/write flag) must be a compile-time constant int. */ - if (TREE_CODE (arg1) != INTEGER_CST) + if (arg1 == NULL_TREE) + op1 = const0_rtx; + else if (TREE_CODE (arg1) != INTEGER_CST) { error ("second argument to %<__builtin_prefetch%> must be a constant"); - arg1 = integer_zero_node; + op1 = const0_rtx; } - op1 = expand_normal (arg1); + else + op1 = expand_normal (arg1); /* Argument 1 must be either zero or one. */ if (INTVAL (op1) != 0 && INTVAL (op1) != 1) { @@ -1308,12 +1305,15 @@ expand_builtin_prefetch (tree exp) } /* Argument 2 (locality) must be a compile-time constant int. */ - if (TREE_CODE (arg2) != INTEGER_CST) + if (arg2 == NULL_TREE) + op2 = GEN_INT (3); + else if (TREE_CODE (arg2) != INTEGER_CST) { error ("third argument to %<__builtin_prefetch%> must be a constant"); - arg2 = integer_zero_node; + op2 = const0_rtx; } - op2 = expand_normal (arg2); + else + op2 = expand_normal (arg2); /* Argument 2 must be 0, 1, 2, or 3. */ if (INTVAL (op2) < 0 || INTVAL (op2) > 3) {