]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: [multiple changes]
authorRichard Guenther <rguenther@suse.de>
Wed, 20 Jun 2012 13:55:44 +0000 (13:55 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 20 Jun 2012 13:55:44 +0000 (13:55 +0000)
2012-06-20  Richard Guenther  <rguenther@suse.de>

Backport from mainline
2010-12-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/46985
* tree-scalar-evolution.c (instantiate_scev_r): If chrec is NULL,
return it immediately.

* gfortran.dg/pr46985.f90: New test.

2011-02-18  Jakub Jelinek  <jakub@redhat.com>

PR debug/47780
* cfgexpand.c (expand_debug_expr) <case SSA_NAME>: Call copy_rtx to
avoid invalid rtx sharing.

* gcc.target/i386/pr47780.c: New test.

2011-02-27  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/47903
* real.c (real_arithmetic) <case PLUS_EXPR, MINUS_EXPR,
MULT_EXPR, RDIV_EXPR>: Clear padding bits in *r first if
r isn't op0 nor op1.

From-SVN: r188834

gcc/ChangeLog
gcc/cfgexpand.c
gcc/real.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr47780.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr46985.f90 [new file with mode: 0644]
gcc/tree-scalar-evolution.c

index f2af76d84f1fb07aa97a89d08d011b42b821428d..4ea22dc71a02465207762bb79393219398f0eac5 100644 (file)
@@ -1,3 +1,25 @@
+2012-06-20  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2010-12-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/46985
+       * tree-scalar-evolution.c (instantiate_scev_r): If chrec is NULL,
+       return it immediately.
+
+       2011-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/47780
+       * cfgexpand.c (expand_debug_expr) <case SSA_NAME>: Call copy_rtx to
+       avoid invalid rtx sharing.
+
+       2011-02-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/47903
+       * real.c (real_arithmetic) <case PLUS_EXPR, MINUS_EXPR,
+       MULT_EXPR, RDIV_EXPR>: Clear padding bits in *r first if
+       r isn't op0 nor op1.
+
 2012-06-04  Edmar Wienskoski  <edmar@freescale.com>
 
        * config/rs6000/altivec.md (altivec_stvlx): Change machine mode of
index 9cc0432fd9be4c49eb4ed2ff11863f9defcc0551..a4c2e15e51ccec17b0ee62189c0909e3c9cd6e1d 100644 (file)
@@ -2974,7 +2974,7 @@ expand_debug_expr (tree exp)
 
            gcc_assert (part >= 0 && (unsigned)part < SA.map->num_partitions);
 
-           op0 = SA.partition_to_pseudo[part];
+           op0 = copy_rtx (SA.partition_to_pseudo[part]);
          }
        goto adjust_mode;
       }
index 25e599dfe352e4f2d57a0721c87f6d9702c9cc63..f9d138c519e434c6303c5f1d862a8e99711c22ce 100644 (file)
@@ -1008,15 +1008,25 @@ real_arithmetic (REAL_VALUE_TYPE *r, int icode, const REAL_VALUE_TYPE *op0,
   switch (code)
     {
     case PLUS_EXPR:
+      /* Clear any padding areas in *r if it isn't equal to one of the
+        operands so that we can later do bitwise comparisons later on.  */
+      if (r != op0 && r != op1)
+       memset (r, '\0', sizeof (*r));
       return do_add (r, op0, op1, 0);
 
     case MINUS_EXPR:
+      if (r != op0 && r != op1)
+       memset (r, '\0', sizeof (*r));
       return do_add (r, op0, op1, 1);
 
     case MULT_EXPR:
+      if (r != op0 && r != op1)
+       memset (r, '\0', sizeof (*r));
       return do_multiply (r, op0, op1);
 
     case RDIV_EXPR:
+      if (r != op0 && r != op1)
+       memset (r, '\0', sizeof (*r));
       return do_divide (r, op0, op1);
 
     case MIN_EXPR:
index 54defb66a3d9c9937205ee44a6d569c2e03f457e..d682c613034e1fa7a53852b084dcfadcb1d479c8 100644 (file)
@@ -1,3 +1,16 @@
+2012-06-20  Richard Guenther  <rguenther@suse.de>
+
+       Backport from mainline
+       2010-12-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/46985
+       * gfortran.dg/pr46985.f90: New test.
+
+       2011-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/47780
+       * gcc.target/i386/pr47780.c: New test.
+
 2012-06-04  Edmar Wienskoski  <edmar@freescale.com>
 
        * gcc.target/powerpc/cell_builtin_1.c: New test case.
diff --git a/gcc/testsuite/gcc.target/i386/pr47780.c b/gcc/testsuite/gcc.target/i386/pr47780.c
new file mode 100644 (file)
index 0000000..89fe409
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR debug/47780 */
+/* { dg-do compile } */
+/* { dg-options "-O -fgcse -fgcse-las -fstack-protector-all -fno-tree-ccp -fno-tree-dominator-opts -fcompare-debug -Wno-psabi" } */
+
+typedef int V2SF __attribute__ ((vector_size (128)));
+
+V2SF
+foo (int x, V2SF a)
+{
+  V2SF b = a + (V2SF) {};
+  while (x--)
+    a += b;
+  return a;
+}
diff --git a/gcc/testsuite/gfortran.dg/pr46985.f90 b/gcc/testsuite/gfortran.dg/pr46985.f90
new file mode 100644 (file)
index 0000000..141641d
--- /dev/null
@@ -0,0 +1,17 @@
+! PR tree-optimization/46985
+! { dg-do compile }
+! { dg-options "-O -ftree-pre -ftree-vrp -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre" }
+
+  type :: t
+    integer :: i
+  end type t
+  type(t), target :: tar(2) = (/t(2), t(4)/)
+  integer, pointer :: ptr(:)
+  ptr => tar%i
+  call foo (ptr)
+contains
+  subroutine foo (arg)
+    integer :: arg(:)
+    arg = arg - 1
+  end subroutine
+end
index 054c6435c00e22562fdcb72ee7f2de70e2a3200f..ca5f36a029c8e467ce094396f72e30b5b528954e 100644 (file)
@@ -2557,7 +2557,8 @@ instantiate_scev_r (basic_block instantiate_below,
   if (size_expr++ > PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE))
     return chrec_dont_know;
 
-  if (automatically_generated_chrec_p (chrec)
+  if (chrec == NULL_TREE
+      || automatically_generated_chrec_p (chrec)
       || is_gimple_min_invariant (chrec))
     return chrec;