https://gcc.gnu.org/g:c726a6643125a59e2ba6f992924a2d0098104578

commit r15-3558-gc726a6643125a59e2ba6f992924a2d0098104578
Author: liuhongt <hongtao....@intel.com>
Date:   Fri Sep 6 15:03:16 2024 +0800

    Don't force_reg operands[3] when it's not const0_rtx.
    
    It fix the regression by
    
    a51f2fc0d80869ab079a93cc3858f24a1fd28237 is the first bad commit
    commit a51f2fc0d80869ab079a93cc3858f24a1fd28237
    Author: liuhongt <hongtao....@intel.com>
    Date:   Wed Sep 4 15:39:17 2024 +0800
    
        Handle const0_operand for *avx2_pcmp<mode>3_1.
    
    caused
    
    FAIL: gcc.target/i386/pr59539-1.c scan-assembler-times vmovdqu|vmovups 1
    
    To reproduce:
    
    $ cd {build_dir}/gcc && make check 
RUNTESTFLAGS="i386.exp=gcc.target/i386/pr59539-1.c --target_board='unix{-m32\ 
-march=cascadelake}'"
    $ cd {build_dir}/gcc && make check 
RUNTESTFLAGS="i386.exp=gcc.target/i386/pr59539-1.c --target_board='unix{-m64\ 
-march=cascadelake}'"
    
    gcc/ChangeLog:
    
            * config/i386/sse.md (*avx2_pcmp<mode>3_1): Don't force_reg
            operands[3] when it's not const0_rtx.

Diff:
---
 gcc/config/i386/sse.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 1946d3513be1..1ae61182d0cc 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -17929,7 +17929,8 @@
   if (INTVAL (operands[5]) == 1)
     std::swap (operands[3], operands[4]);
 
-  operands[3] = force_reg (<MODE>mode, operands[3]);
+  if (operands[3] == CONST0_RTX (<MODE>mode))
+    operands[3] = force_reg (<MODE>mode, operands[3]);
   if (operands[4] == CONST0_RTX (<MODE>mode))
     operands[4] = force_reg (<MODE>mode, operands[4]);

Reply via email to