On Fri, Oct 24, 2025 at 12:21 PM Andrew Pinski
<[email protected]> wrote:
>
> diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
> index a1f1b26f78a..3196d4b600b 100644
> --- a/gcc/config/i386/i386-expand.cc
> +++ b/gcc/config/i386/i386-expand.cc
> @@ -26377,18 +26377,17 @@ ix86_gen_ccmp_next (rtx_insn **prep_seq, rtx_insn
> **gen_seq, rtx prev,
> struct expand_operand ops[5];
> int dfv;
>
> - push_to_sequence (*prep_seq);
> - expand_operands (treeop0, treeop1, NULL_RTX, &op0, &op1, EXPAND_NORMAL);
> -
> - cmp_mode = op_mode = GET_MODE (op0);
> + /* Exit early for non integer modes to avoid O(n^2) part of
> expand_operands. */
> + op_mode = TYPE_MODE (TREE_TYPE (treeop0));
cmp_mode = op_mode = TYPE_MODE (TREE_TYPE (treeop0));?
And the below assignment can be removed?
>
> + cmp_mode = op_mode = GET_MODE (op0);
Since GET_MODE (op0) must be equal to TYPE_MODE (TREE_TYPE (treeop0)).
other x86 part LGTM.
> icode = code_for_ccmp (op_mode);
>
> op0 = prepare_operand (icode, op0, 2, op_mode, cmp_mode, unsignedp);
> diff --git a/gcc/testsuite/gcc.dg/torture/pr99782-1.c
> b/gcc/testsuite/gcc.dg/torture/pr99782-1.c
> new file mode 100644
> index 00000000000..76aab18f361
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/torture/pr99782-1.c
> @@ -0,0 +1,17 @@
> +/* { dg-compile } */
> +/* { dg-additional-options "-mapxf" { target { { i?86-*-* x86_64-*-* } && {
> ! ia32 } } } } */
> +/* PR middle-end/99782 */
> +
> +int hb;
> +
> +void
> +w4 (__int128 uv, int ng)
> +{
> + int vh;
> +
> + for (vh = 0; vh < 14; ++vh)
> + {
> + ++ng;
> + hb = (hb == uv) && ng;
> + }
> +}
> --
> 2.43.0
>
--
BR,
Hongtao