PING^3 Re: [i386 PATCH] A minor code clean-up: Use NULL_RTX instead of nullptr
On Wed, 14 Jun 2023 21:14:02 +0200 Bernhard Reutner-Fischer wrote: > plonk. ping^3 patch at https://inbox.sourceware.org/gcc-patches/20230526103151.3a7f6...@nbbrfq.loc/ I would regenerate it for rtx and/or tree, though, whatever you deem desirable? thanks > > On 26 May 2023 10:31:51 CEST, Bernhard Reutner-Fischer > wrote: > >On Thu, 25 May 2023 18:58:04 +0200 > >Bernhard Reutner-Fischer wrote: > > > >> On Wed, 24 May 2023 18:54:06 +0100 > >> "Roger Sayle" wrote: > >> > >> > My understanding is that GCC's preferred null value for rtx is NULL_RTX > >> > (and for tree is NULL_TREE), and by being typed allows strict type > >> > checking, > >> > and use with function polymorphism and template instantiation. > >> > C++'s nullptr is preferred over NULL and 0 for pointer types that don't > >> > have a defined null of the correct type. > >> > > >> > This minor clean-up uses NULL_RTX consistently in i386-expand.cc. > >> > >> Oh. Well, i can't resist cleanups :) > > > >> (and handle nullptr too, and the same game for tree) > > > > so like the attached. And > > sed -e 's/RTX/TREE/g' -e 's/rtx/tree/g' \ > > < ~/coccinelle/gcc-rtx-null.0.cocci \ > > > ~/coccinelle/gcc-tree-null.0.cocci > > > > I do not know if we want to shorten explicit NULL comparisons. > > foo == NULL => !foo and foo != NULL => foo > > Left them alone in the form they were written. > > > > See the attached result of the rtx hunks, someone would have to build > > I've bootstrapped and regtested the hunks for rtx as cited up-thread without > regressions (as expected). > > I know everybody is busy, but I'd like to know if I should swap these out > completely, > or postpone this until start of stage3 or next stage 1 or something. > I can easily keep these local to my personal pre-configure stage for my own > amusement. > > thanks, > > >it and hack git-commit-mklog.py --changelog 'Use NULL_RTX.' > >to print("{}.".format(random.choice(['Ditto', 'Same', 'Likewise']))) ;) > > > >> > >> Just a thought.. > > > >cheers, >
Re: [i386 PATCH] A minor code clean-up: Use NULL_RTX instead of nullptr
plonk. On 26 May 2023 10:31:51 CEST, Bernhard Reutner-Fischer wrote: >On Thu, 25 May 2023 18:58:04 +0200 >Bernhard Reutner-Fischer wrote: > >> On Wed, 24 May 2023 18:54:06 +0100 >> "Roger Sayle" wrote: >> >> > My understanding is that GCC's preferred null value for rtx is NULL_RTX >> > (and for tree is NULL_TREE), and by being typed allows strict type >> > checking, >> > and use with function polymorphism and template instantiation. >> > C++'s nullptr is preferred over NULL and 0 for pointer types that don't >> > have a defined null of the correct type. >> > >> > This minor clean-up uses NULL_RTX consistently in i386-expand.cc. >> >> Oh. Well, i can't resist cleanups :) > >> (and handle nullptr too, and the same game for tree) > >so like the attached. And >sed -e 's/RTX/TREE/g' -e 's/rtx/tree/g' \ > < ~/coccinelle/gcc-rtx-null.0.cocci \ > > ~/coccinelle/gcc-tree-null.0.cocci > >I do not know if we want to shorten explicit NULL comparisons. > foo == NULL => !foo and foo != NULL => foo >Left them alone in the form they were written. > >See the attached result of the rtx hunks, someone would have to build I've bootstrapped and regtested the hunks for rtx as cited up-thread without regressions (as expected). I know everybody is busy, but I'd like to know if I should swap these out completely, or postpone this until start of stage3 or next stage 1 or something. I can easily keep these local to my personal pre-configure stage for my own amusement. thanks, >it and hack git-commit-mklog.py --changelog 'Use NULL_RTX.' >to print("{}.".format(random.choice(['Ditto', 'Same', 'Likewise']))) ;) > >> >> Just a thought.. > >cheers,
Re: [i386 PATCH] A minor code clean-up: Use NULL_RTX instead of nullptr
On Thu, 25 May 2023 18:58:04 +0200 Bernhard Reutner-Fischer wrote: > On Wed, 24 May 2023 18:54:06 +0100 > "Roger Sayle" wrote: > > > My understanding is that GCC's preferred null value for rtx is NULL_RTX > > (and for tree is NULL_TREE), and by being typed allows strict type checking, > > and use with function polymorphism and template instantiation. > > C++'s nullptr is preferred over NULL and 0 for pointer types that don't > > have a defined null of the correct type. > > > > This minor clean-up uses NULL_RTX consistently in i386-expand.cc. > > Oh. Well, i can't resist cleanups :) > (and handle nullptr too, and the same game for tree) so like the attached. And sed -e 's/RTX/TREE/g' -e 's/rtx/tree/g' \ < ~/coccinelle/gcc-rtx-null.0.cocci \ > ~/coccinelle/gcc-tree-null.0.cocci I do not know if we want to shorten explicit NULL comparisons. foo == NULL => !foo and foo != NULL => foo Left them alone in the form they were written. See the attached result of the rtx hunks, someone would have to build it and hack git-commit-mklog.py --changelog 'Use NULL_RTX.' to print("{}.".format(random.choice(['Ditto', 'Same', 'Likewise']))) ;) > > Just a thought.. cheers, gcc-rtx-null.0.cocci Description: Binary data diff --git a/gcc/alias.cc b/gcc/alias.cc index 7dc7e06de07..f1925ab3de2 100644 --- a/gcc/alias.cc +++ b/gcc/alias.cc @@ -1725,7 +1725,7 @@ get_reg_known_value (unsigned int regno) if (regno < vec_safe_length (reg_known_value)) return (*reg_known_value)[regno]; } - return NULL; + return NULL_RTX; } /* Set it. */ diff --git a/gcc/auto-inc-dec.cc b/gcc/auto-inc-dec.cc index 1486e8c679a..568fae7b906 100644 --- a/gcc/auto-inc-dec.cc +++ b/gcc/auto-inc-dec.cc @@ -428,7 +428,7 @@ move_dead_notes (rtx_insn *to_insn, rtx_insn *from_insn, rtx pattern) { rtx note; rtx next_note; - rtx prev_note = NULL; + rtx prev_note = NULL_RTX; for (note = REG_NOTES (from_insn); note; note = next_note) { diff --git a/gcc/bb-reorder.cc b/gcc/bb-reorder.cc index 615d5426a34..e42e4593a6a 100644 --- a/gcc/bb-reorder.cc +++ b/gcc/bb-reorder.cc @@ -1477,7 +1477,7 @@ sjlj_fix_up_crossing_landing_pad (basic_block old_bb) rtx_insn *insn = BB_END (e->src); rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); - gcc_assert (note != NULL); + gcc_assert (note != NULL_RTX); const unsigned old_index = INTVAL (XEXP (note, 0)); /* Generate the new landing-pad structure. */ @@ -1525,7 +1525,7 @@ dw2_fix_up_crossing_landing_pad (eh_landing_pad old_lp, basic_block old_bb) rtx_insn *insn = BB_END (e->src); rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); - gcc_assert (note != NULL); + gcc_assert (note != NULL_RTX); gcc_checking_assert (INTVAL (XEXP (note, 0)) == old_lp->index); XEXP (note, 0) = GEN_INT (new_lp->index); diff --git a/gcc/builtins.cc b/gcc/builtins.cc index 8400adaf5b4..48df3d4d193 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -985,7 +985,7 @@ expand_builtin_setjmp_receiver (rtx receiver_label) } } - if (receiver_label != NULL && targetm.have_builtin_setjmp_receiver ()) + if (receiver_label != NULL_RTX && targetm.have_builtin_setjmp_receiver ()) emit_insn (targetm.gen_builtin_setjmp_receiver (receiver_label)); else if (targetm.have_nonlocal_goto_receiver ()) emit_insn (targetm.gen_nonlocal_goto_receiver ()); @@ -4118,7 +4118,7 @@ expand_builtin_strncpy (tree exp, rtx target) static rtx gen_memset_value_from_prev (by_pieces_prev *prev, fixed_size_mode mode) { - rtx target = nullptr; + rtx target = NULL_RTX; if (prev != nullptr && prev->data != nullptr) { /* Use the previous data in the same mode. */ @@ -4179,7 +4179,7 @@ gen_memset_value_from_prev (by_pieces_prev *prev, fixed_size_mode mode) break; } } - if (target == nullptr) + if (target == NULL_RTX) prev_rtx = copy_to_reg (prev_rtx); } @@ -4203,7 +4203,7 @@ builtin_memset_read_str (void *data, void *prev, rtx target = gen_memset_value_from_prev ((by_pieces_prev *) prev, mode); - if (target != nullptr) + if (target != NULL_RTX) return target; rtx src = gen_int_mode (*c, QImode); @@ -4250,7 +4250,7 @@ builtin_memset_gen_str (void *data, void *prev, return (rtx) data; target = gen_memset_value_from_prev ((by_pieces_prev *) prev, mode); - if (target != nullptr) + if (target != NULL_RTX) return target; if (VECTOR_MODE_P (mode)) @@ -6278,11 +6278,11 @@ expand_builtin_atomic_compare_exchange (machine_mode mode, tree exp, is_weak = true; if (target == const0_rtx) -target = NULL; +target = NULL_RTX; /* Lest the rtl backend create a race condition with an imporoper store to memory, always create a new pseudo for OLDVAL. */ - oldval = NULL; + oldval = NULL_RTX; if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired, is_weak, success, failure)) @@ -6387,8 +6387,8 @@ expand_ifn_atomic_compare_exchange (gcal
Re: [i386 PATCH] A minor code clean-up: Use NULL_RTX instead of nullptr
On Wed, 24 May 2023 18:54:06 +0100 "Roger Sayle" wrote: > My understanding is that GCC's preferred null value for rtx is NULL_RTX > (and for tree is NULL_TREE), and by being typed allows strict type checking, > and use with function polymorphism and template instantiation. > C++'s nullptr is preferred over NULL and 0 for pointer types that don't > have a defined null of the correct type. > > This minor clean-up uses NULL_RTX consistently in i386-expand.cc. Oh. Well, i can't resist cleanups :) Given $ cat /tmp/inp0.c ; echo EOF rtx myfunc (int i, int j) { rtx ret; if (i) return NULL; if (j) ret = NULL; if (ret == NULL) { ret = NULL_RTX; } if (!ret) return (rtx)2; return NULL_RTX; } EOF $ spatch --c++=11 --smpl-spacing --in-place --sp-file ~/coccinelle/rtx-null.0.cocci /tmp/inp0.c init_defs_builtins: /usr/bin/../lib/coccinelle/standard.h --- /tmp/inp0.c +++ /tmp/cocci-output-76891-58af4a-inp0.c @@ -2,10 +2,10 @@ rtx myfunc (int i, int j) { rtx ret; if (i) -return NULL; +return NULL_RTX; if (j) - ret = NULL; - if (ret == NULL) { + ret = NULL_RTX; + if (ret == NULL_RTX) { ret = NULL_RTX; } if (!ret) HANDLING: /tmp/inp0.c diff = So you if you would feel like, someone could find ./ \( -name "testsuite" -o -name "contrib" -o -name "examples" -o -name ".git" -o -name "zlib" -o -name "intl" \) -prune -o \( -name "*.[chpx]*" -a -type f \) -exec spatch --c++=11 --smpl-spacing --in-place $opts --sp-file ~/coccinelle/rtx-null.0.cocci {} \; with the attached rtx-null coccinelle script. (and handle nullptr too, and the same game for tree) Just a thought.. rtx-null.0.cocci Description: Binary data
[i386 PATCH] A minor code clean-up: Use NULL_RTX instead of nullptr
My understanding is that GCC's preferred null value for rtx is NULL_RTX (and for tree is NULL_TREE), and by being typed allows strict type checking, and use with function polymorphism and template instantiation. C++'s nullptr is preferred over NULL and 0 for pointer types that don't have a defined null of the correct type. This minor clean-up uses NULL_RTX consistently in i386-expand.cc. This patch has been tested on x86_64-pc-linux-gnu with make bootstrap and make -k check, both with and without --target_board=unix{-m32} with no new failures. Ok for mainline? Is my understanding correct? 2023-05-24 Roger Sayle gcc/ChangeLog * config/i386/i386.cc (ix86_convert_wide_int_to_broadcast): Use NULL_RTX instead of nullptr. (ix86_convert_const_wide_int_to_broadcast): Likewise. (ix86_broadcast_from_constant): Likewise. (ix86_expand_vector_move): Likewise. (ix86_extract_perm_from_pool_constant): Likewise. Thanks, Roger -- diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 634fe61..a867288 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -296,7 +296,7 @@ ix86_convert_const_wide_int_to_broadcast (machine_mode mode, rtx op) /* Don't use integer vector broadcast if we can't move from GPR to SSE register directly. */ if (!TARGET_INTER_UNIT_MOVES_TO_VEC) -return nullptr; +return NULL_RTX; /* Convert CONST_WIDE_INT to a non-standard SSE constant integer broadcast only if vector broadcast is available. */ @@ -305,7 +305,7 @@ ix86_convert_const_wide_int_to_broadcast (machine_mode mode, rtx op) || standard_sse_constant_p (op, mode) || (CONST_WIDE_INT_NUNITS (op) * HOST_BITS_PER_WIDE_INT != GET_MODE_BITSIZE (mode))) -return nullptr; +return NULL_RTX; HOST_WIDE_INT val = CONST_WIDE_INT_ELT (op, 0); HOST_WIDE_INT val_broadcast; @@ -326,12 +326,12 @@ ix86_convert_const_wide_int_to_broadcast (machine_mode mode, rtx op) val_broadcast)) broadcast_mode = DImode; else -return nullptr; +return NULL_RTX; /* Check if OP can be broadcasted from VAL. */ for (int i = 1; i < CONST_WIDE_INT_NUNITS (op); i++) if (val != CONST_WIDE_INT_ELT (op, i)) - return nullptr; + return NULL_RTX; unsigned int nunits = (GET_MODE_SIZE (mode) / GET_MODE_SIZE (broadcast_mode)); @@ -525,7 +525,7 @@ ix86_expand_move (machine_mode mode, rtx operands[]) { rtx tmp = ix86_convert_const_wide_int_to_broadcast (GET_MODE (op0), op1); - if (tmp != nullptr) + if (tmp != NULL_RTX) op1 = tmp; } } @@ -541,13 +541,13 @@ ix86_broadcast_from_constant (machine_mode mode, rtx op) { int nunits = GET_MODE_NUNITS (mode); if (nunits < 2) -return nullptr; +return NULL_RTX; /* Don't use integer vector broadcast if we can't move from GPR to SSE register directly. */ if (!TARGET_INTER_UNIT_MOVES_TO_VEC && INTEGRAL_MODE_P (mode)) -return nullptr; +return NULL_RTX; /* Convert CONST_VECTOR to a non-standard SSE constant integer broadcast only if vector broadcast is available. */ @@ -557,7 +557,7 @@ ix86_broadcast_from_constant (machine_mode mode, rtx op) || GET_MODE_INNER (mode) == DImode)) || FLOAT_MODE_P (mode)) || standard_sse_constant_p (op, mode)) -return nullptr; +return NULL_RTX; /* Don't broadcast from a 64-bit integer constant in 32-bit mode. We can still put 64-bit integer constant in memory when @@ -565,14 +565,14 @@ ix86_broadcast_from_constant (machine_mode mode, rtx op) if (GET_MODE_INNER (mode) == DImode && !TARGET_64BIT && (!TARGET_AVX512F || (GET_MODE_SIZE (mode) < 64 && !TARGET_AVX512VL))) -return nullptr; +return NULL_RTX; if (GET_MODE_INNER (mode) == TImode) -return nullptr; +return NULL_RTX; rtx constant = get_pool_constant (XEXP (op, 0)); if (GET_CODE (constant) != CONST_VECTOR) -return nullptr; +return NULL_RTX; /* There could be some rtx like (mem/u/c:V16QI (symbol_ref/u:DI ("*.LC1"))) @@ -581,8 +581,8 @@ ix86_broadcast_from_constant (machine_mode mode, rtx op) { constant = simplify_subreg (mode, constant, GET_MODE (constant), 0); - if (constant == nullptr || GET_CODE (constant) != CONST_VECTOR) - return nullptr; + if (constant == NULL_RTX || GET_CODE (constant) != CONST_VECTOR) + return NULL_RTX; } rtx first = XVECEXP (constant, 0, 0); @@ -592,7 +592,7 @@ ix86_broadcast_from_constant (machine_mode mode, rtx op) rtx tmp = XVECEXP (constant, 0, i); /* Vector duplicate value. */ if (!rtx_equal_p (tmp, first)) - return nullptr; + return NULL_RTX; } return first; @@ -641,7 +641,7