diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 282d1c90d590bed7ecd888823488d009ddc7ddb7..cc05d2c9c2c55e59ff9a7aecd8de59563658870d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-01-17  Vladimir Makarov  <vmakarov@redhat.com>
+
+	PR target/79058
+	* ira-conflicts.c (ira_build_conflicts): Update total conflict
+	hard regs for inner regno.
+
 2017-01-17  Martin Liska  <mliska@suse.cz>
 
 	PR ipa/71207
diff --git a/gcc/ira-conflicts.c b/gcc/ira-conflicts.c
index 1a8c08caaa4266721369312aeb35d7f21a7a2dce..57dba151d8d9beec38166bda6b139c4983596483 100644
--- a/gcc/ira-conflicts.c
+++ b/gcc/ira-conflicts.c
@@ -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);
+		     }
 		}
 	    }
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e211eb8c3192732a7f59730ab097d638687fdfc5..0eda15b930b0d7fa67ad63fa8b85f5ad27d26753 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-17  Vladimir Makarov  <vmakarov@redhat.com>
+
+	PR target/79058
+	* gcc.target/arm/pr79058.c: New.
+
 2017-01-17  Jakub Jelinek  <jakub@redhat.com>
 
 	PR tree-optimization/71854
diff --git a/gcc/testsuite/gcc.target/arm/pr79058.c b/gcc/testsuite/gcc.target/arm/pr79058.c
new file mode 100644
index 0000000000000000000000000000000000000000..f2841f514df36c2f56f23cb690d56a9a13fb9184
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr79058.c
@@ -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);
+}