The following patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79058
The patch was successfully bootstrapped and tested on x86-64. Committed as rev. 244535.
Index: ChangeLog =================================================================== --- ChangeLog (revision 244534) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2017-01-17 Vladimir Makarov <vmaka...@redhat.com> + + PR target/79058 + * ira-conflicts.c (ira_build_conflicts): Update total conflict + hard regs for inner regno. + 2017-01-17 Martin Liska <mli...@suse.cz> PR ipa/71207 Index: ira-conflicts.c =================================================================== --- ira-conflicts.c (revision 244500) +++ ira-conflicts.c (working copy) @@ -787,8 +787,12 @@ ira_build_conflicts (void) if (outer_regno < 0 || !in_hard_reg_set_p (reg_class_contents[aclass], outer_mode, outer_regno)) - SET_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), - inner_regno); + { + SET_HARD_REG_BIT (OBJECT_TOTAL_CONFLICT_HARD_REGS (obj), + inner_regno); + SET_HARD_REG_BIT (OBJECT_CONFLICT_HARD_REGS (obj), + inner_regno); + } } } Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 244534) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2017-01-17 Vladimir Makarov <vmaka...@redhat.com> + + PR target/79058 + * gcc.target/arm/pr79058.c: New. + 2017-01-17 Jakub Jelinek <ja...@redhat.com> PR tree-optimization/71854 Index: testsuite/gcc.target/arm/pr79058.c =================================================================== --- testsuite/gcc.target/arm/pr79058.c (revision 0) +++ testsuite/gcc.target/arm/pr79058.c (working copy) @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-skip-if "do not override -mcpu" { *-*-* } { "-mcpu=*" } { "-mcpu=arm7tdmi" } } */ +/* { dg-options "-Os -mbig-endian -mcpu=arm7tdmi" } */ + +enum { NILFS_SEGMENT_USAGE_ACTIVE, NILFS_SEGMENT_USAGE_DIRTY } a; + +void fn2 (long long); + +void fn1() { + int b = a & 1 << NILFS_SEGMENT_USAGE_DIRTY; + fn2 (b ? (long long) -1 : 0); +}