Kewen Lin <li...@linux.ibm.com> writes:
> Hi all,
>
> define_insn_and_split should avoid to use empty split condition
> if the condition for define_insn isn't empty, otherwise it can
> sometimes result in unexpected consequence, since the split
> will always be done even if the insn condition doesn't hold.
>
> To avoid forgetting to add "&& 1" onto split condition, as
> Segher suggested in thread[1], this series is to add the check
> and raise an error if it catches the unexpected cases.  With
> this new check, we have to fix up some existing
> define_insn_and_split which are detected as error.  I hope all
> these places are not intentional to be kept as blank.

I wonder whether we should instead redefine the semantics of
define_insn_and_split so that the split condition is always applied
on top of the insn condition.  It's rare for a define_insn_and_split
to have independent insn and split conditions, so at the moment,
we're making the common case hard.

Thanks,
Richard

> Any comments are highly appreciated.
>
> BR,
> Kewen
>
> [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566970.html
>
> Kewen Lin (11):
>   gen: Emit error msg for empty split condition
>   arc: Update unexpected empty split condition
>   arm: Update unexpected empty split condition
>   cris: Update unexpected empty split condition
>   h8300: Update unexpected empty split condition
>   i386: Update unexpected empty split condition
>   m68k: Update unexpected empty split condition
>   mips: Update unexpected empty split condition
>   or1k: Update unexpected empty split condition
>   sh: Update unexpected empty split condition
>   sparc: Update unexpected empty split condition
>
>  gcc/config/arc/arc.md        |  2 +-
>  gcc/config/arm/vfp.md        |  4 ++--
>  gcc/config/cris/cris.md      |  2 +-
>  gcc/config/h8300/combiner.md |  2 +-
>  gcc/config/i386/i386.md      |  6 +++---
>  gcc/config/i386/sse.md       |  8 ++++----
>  gcc/config/m68k/m68k.md      |  6 +++---
>  gcc/config/mips/mips.md      |  6 +++---
>  gcc/config/or1k/or1k.md      |  2 +-
>  gcc/config/sh/sh.md          |  2 +-
>  gcc/config/sparc/sparc.md    | 12 ++++++------
>  gcc/gensupport.c             |  3 +++
>  12 files changed, 29 insertions(+), 26 deletions(-)

Reply via email to