Blame SOURCES/gcc48-pr78378.patch

5ed81e
2017-05-30  Jakub Jelinek  <jakub@redhat.com>
5ed81e
 
5ed81e
 	Backported from mainline
5ed81e
	2016-11-16  Jakub Jelinek  <jakub@redhat.com>
5ed81e
5ed81e
	PR rtl-optimization/78378
5ed81e
	* combine.c (make_extraction): Use force_to_mode for non-{REG,MEM}
5ed81e
	inner only if pos is 0.
5ed81e
5ed81e
	* gcc.c-torture/execute/pr78378.c: New test.
5ed81e
5ed81e
--- gcc/combine.c
5ed81e
+++ gcc/combine.c
5ed81e
@@ -7342,6 +7342,7 @@ make_extraction (machine_mode mode, rtx inner, HOST_WIDE_INT pos,
5ed81e
   if (tmode != BLKmode
5ed81e
       && ((pos_rtx == 0 && (pos % BITS_PER_WORD) == 0
5ed81e
 	   && !MEM_P (inner)
5ed81e
+	   && (pos == 0 || REG_P (inner))
5ed81e
 	   && (inner_mode == tmode
5ed81e
 	       || !REG_P (inner)
5ed81e
 	       || TRULY_NOOP_TRUNCATION_MODES_P (tmode, inner_mode)
5ed81e
--- /dev/null
5ed81e
+++ gcc/testsuite/gcc.c-torture/execute/pr78378.c
5ed81e
@@ -0,0 +1,18 @@
5ed81e
+/* PR rtl-optimization/78378 */
5ed81e
+
5ed81e
+unsigned long long __attribute__ ((noinline, noclone))
5ed81e
+foo (unsigned long long x)
5ed81e
+{
5ed81e
+  x <<= 41;
5ed81e
+  x /= 232;
5ed81e
+  return 1 + (unsigned short) x;
5ed81e
+}
5ed81e
+
5ed81e
+int
5ed81e
+main ()
5ed81e
+{
5ed81e
+  unsigned long long x = foo (1);
5ed81e
+  if (x != 0x2c24)
5ed81e
+    __builtin_abort();
5ed81e
+  return 0;
5ed81e
+}
5ed81e