From: Segher Boessenkool Date: Tue, 16 Jan 2018 16:30:43 +0000 (+0100) Subject: rtlanal: dead_or_set_regno_p should handle CLOBBER (PR83424) X-Git-Tag: releases/gcc-6.5.0~581 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d363713df0450d5bdd36dc506f991642eb47764;p=thirdparty%2Fgcc.git rtlanal: dead_or_set_regno_p should handle CLOBBER (PR83424) In PR83424 combine's move_deaths puts a REG_DEAD note in the wrong place because dead_or_set_regno_p does not account for CLOBBER insns. This fixes it. PR rtl-optimization/83424 * rtlanal.c (dead_or_set_regno_p): Handle CLOBBER just like SET. gcc/testsuite/ PR rtl-optimization/83424 * gcc.dg/pr83424.c: New testsuite. From-SVN: r256752 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b17b12ae7de8..bdd50afb226c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-01-16 Segher Boessenkool + + Backport from mainline + 2017-12-18 Segher Boessenkool + + PR rtl-optimization/83424 + * rtlanal.c (dead_or_set_regno_p): Handle CLOBBER just like SET. + 2018-01-14 Bill Schmidt Backport from mainline @@ -100,7 +108,7 @@ * config/i386/i386.h: (host_detect_local_cpu): New define. (TARGET_EMIT_VZEROUPPER): New. * config/i386/x86-tune.def: Add X86_TUNE_EMIT_VZEROUPPER - + 2017-12-01 Segher Boessenkool Backport from mainline diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index 876b90febbb9..6d9d314eb187 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -2064,7 +2064,7 @@ dead_or_set_regno_p (const_rtx insn, unsigned int test_regno) if (GET_CODE (pattern) == COND_EXEC) return 0; - if (GET_CODE (pattern) == SET) + if (GET_CODE (pattern) == SET || GET_CODE (pattern) == CLOBBER) return covers_regno_p (SET_DEST (pattern), test_regno); else if (GET_CODE (pattern) == PARALLEL) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 48b2a18f813e..0a489731028c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2018-01-16 Segher Boessenkool + + Backport from mainline + 2017-12-18 Segher Boessenkool + + PR rtl-optimization/83424 + * gcc.dg/pr83424.c: New testsuite. + 2018-01-14 Bill Schmidt Backport from mainline diff --git a/gcc/testsuite/gcc.dg/pr83424.c b/gcc/testsuite/gcc.dg/pr83424.c new file mode 100644 index 000000000000..5a304f502923 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr83424.c @@ -0,0 +1,30 @@ +/* PR rtl-optimization/83424 */ +/* { dg-do run { target int128 } } */ +/* { dg-options "-O -fno-tree-ccp -fno-tree-coalesce-vars" } */ + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned __int128 u128; + +u32 a, c; +u8 b; + +static u128 __attribute__ ((noinline, noclone)) +foo (u128 p) +{ + u8 x = ~b; + p &= c; + x *= -p; + x &= a == 0; + x >>= 1; + return p + x; +} + +int +main (void) +{ + u128 x = foo (0); + if (x != 0) + __builtin_abort (); + return 0; +}