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

Reply via email to