Fixes an ICE found when using odd options. Bootstrapped and regression tested both powerpc64-linux and powerpc64le-linux. OK to apply?
gcc/ PR target/70866 * config/rs6000/rs6000.c (rs6000_stack_info): Don't set cr_save_p when cr2,3,4 are all fixed regs. gcc/testsuite/ * gcc.target/powerpc/pr70866.c: New. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 812d3bc..e94aa66 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23702,9 +23702,9 @@ rs6000_stack_info (void) info->calls_p = (!crtl->is_leaf || cfun->machine->ra_needs_full_frame); /* Determine if we need to save the condition code registers. */ - if (df_regs_ever_live_p (CR2_REGNO) - || df_regs_ever_live_p (CR3_REGNO) - || df_regs_ever_live_p (CR4_REGNO)) + if (save_reg_p (CR2_REGNO) + || save_reg_p (CR3_REGNO) + || save_reg_p (CR4_REGNO)) { info->cr_save_p = 1; if (DEFAULT_ABI == ABI_V4) diff --git a/gcc/testsuite/gcc.target/powerpc/pr70866.c b/gcc/testsuite/gcc.target/powerpc/pr70866.c new file mode 100644 index 0000000..25fd05a --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr70866.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-ffixed-cr2 -ffixed-cr3 -ffixed-cr4" } */ + +#define SET_CR(R,V) __asm__ __volatile__ ("mtcrf %0,%1" : : "n" (1<<(7-R)), "r" (V<<(4*(7-R))) : "cr" #R) + +void foo (void) +{ + SET_CR (2, 7); + SET_CR (3, 8); + SET_CR (4, 9); +} -- Alan Modra Australia Development Lab, IBM