Hi, This patch corrects the match pattern in pr56605.c. The former pattern is wrong and test case fails with GCC11. It should match following insn on each subtarget after mode promotion is disabled. The patch need to be backported to GCC11.
//gimple _17 = (unsigned int) _20; prolog_loop_niters.4_23 = _17 & 3; //rtl (insn 19 18 20 2 (parallel [ (set (reg:CC 208) (compare:CC (and:SI (subreg:SI (reg:DI 207) 0) (const_int 3 [0x3])) (const_int 0 [0]))) (set (reg:SI 129 [ prolog_loop_niters.5 ]) (and:SI (subreg:SI (reg:DI 207) 0) (const_int 3 [0x3]))) ]) 197 {*andsi3_imm_mask_dot2} Bootstrapped and tested on powerpc64-linux BE/LE and AIX with no regressions. Is this okay for trunk and GCC11? Any recommendations? Thanks a lot. ChangeLog 2022-02-28 Haochen Gui <guih...@linux.ibm.com> gcc/testsuite/ PR target/102146 * gcc.target/powerpc/pr56605.c: Correct match pattern in combine pass. patch.diff diff --git a/gcc/testsuite/gcc.target/powerpc/pr56605.c b/gcc/testsuite/gcc.target/powerpc/pr56605.c index fdedbfc573d..231d808aa99 100644 --- a/gcc/testsuite/gcc.target/powerpc/pr56605.c +++ b/gcc/testsuite/gcc.target/powerpc/pr56605.c @@ -11,5 +11,5 @@ void foo (short* __restrict sb, int* __restrict ia) ia[i] = (int) sb[i]; } -/* { dg-final { scan-rtl-dump-times {\(compare:CC \((?:and|zero_extend):(?:DI) \((?:sub)?reg:[SD]I} 1 "combine" } } */ +/* { dg-final { scan-rtl-dump-times {\(compare:CC \(and:SI \(subreg:SI \(reg:DI} 1 "combine" } } */