]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: ira.c (update_equiv_regs): Only call set_paradoxical_subreg for non-debug...
authorUros Bizjak <uros@gcc.gnu.org>
Fri, 20 Feb 2015 07:07:00 +0000 (08:07 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Fri, 20 Feb 2015 07:07:00 +0000 (08:07 +0100)
Backport from mainline
2013-09-08  Richard Sandiford  <rdsandiford@googlemail.com>

* ira.c (update_equiv_regs): Only call set_paradoxical_subreg
for non-debug insns.
* lra.c (new_insn_reg): Take the containing insn as a parameter.
Only modify lra_reg_info[].biggest_mode if it's non-debug insn.
(collect_non_operand_hard_regs, add_regs_to_insn_regno_info): Update
accordingly.

testsuite/ChangeLog:

Backport from mainline
2013-09-08  Richard Sandiford  <rdsandiford@googlemail.com>

* g++.dg/debug/ra1.C: New test.

From-SVN: r220834

gcc/ChangeLog
gcc/ira.c
gcc/lra.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/ra1.C [new file with mode: 0644]

index 13ef8bc9ba356268c6c1033361d50622e8e4392b..21031e2e864c203f98c23d712b631e2cf49bdfd2 100644 (file)
@@ -1,3 +1,15 @@
+2015-02-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2013-09-08  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * ira.c (update_equiv_regs): Only call set_paradoxical_subreg
+       for non-debug insns.
+       * lra.c (new_insn_reg): Take the containing insn as a parameter.
+       Only modify lra_reg_info[].biggest_mode if it's non-debug insn.
+       (collect_non_operand_hard_regs, add_regs_to_insn_regno_info): Update
+       accordingly.
+
 2015-02-17  Ilya Tocar  <ilya.tocar@intel.com>
 
        Backported from mainline
@@ -35,7 +47,7 @@
        Backport from mainline
        2015-01-31  Uros Bizjak  <ubizjak@gmail.com>
 
-        PR target/64882
+       PR target/64882
        * config/i386/predicates.md (address_no_seg_operand): Reject
        non-CONST_INT_P operands in invalid mode.
 
 2014-12-10  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        Backport from mainline
-        2014-09-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+       2014-09-02  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/rs6000-builtin.def (XVCVSXDDP_SCALE):  New
        built-in definition.
        (vec_mul): Likewise.
 
        Backport from mainline
-        2014-08-28  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+       2014-08-28  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/altivec.h (vec_xl): New #define.
        (vec_xst): Likewise.
        (vsx_xxspltd_<mode>): New insn.
 
        Backport from mainline
-        2014-08-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+       2014-08-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/altivec.h (vec_cpsgn): New #define.
        (vec_mergee): Likewise.
        vec_any_ne, vec_mergee, vec_mergeo, vec_packsu, and vec_cntlz.
 
        Backport from mainline
-        2014-07-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+       2014-07-20  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        * config/rs6000/altivec.md (unspec enum):  Fix typo in UNSPEC_VSLDOI.
        (altivec_vsldoi_<mode>): Likewise.
        for immediate.
 
        2014-11-19  Felix Yang  <felix.yang@huawei.com>
-                   Shanyao Chen  <chenshanyao@huawei.com>
+                   Shanyao Chen  <chenshanyao@huawei.com>
 
        PR target/59593
        * config/arm/arm.md (define_attr "arch"): Add v6t2.
        Backport from mainline
 
        2014-06-20  Julian Brown  <julian@codesourcery.com>
-                   Chung-Lin Tang  <cltang@codesourcery.com>
+                   Chung-Lin Tang  <cltang@codesourcery.com>
 
        * config/arm/arm.c (arm_output_mi_thunk): Fix offset for
        TARGET_THUMB1_ONLY. Add comments.
index 87e72f067c8060cd01b78166309c645e76a70281..385441a4302c3e839b35278e6abdcd9a6a134657 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -2944,11 +2944,8 @@ update_equiv_regs (void)
      prevent access beyond allocated memory for paradoxical memory subreg.  */
   FOR_EACH_BB (bb)
     FOR_BB_INSNS (bb, insn)
-      {
-       if (! INSN_P (insn))
-         continue;
-       for_each_rtx (&insn, set_paradoxical_subreg, (void *)pdx_subregs);
-      }
+      if (NONDEBUG_INSN_P (insn))
+       for_each_rtx (&insn, set_paradoxical_subreg, (void *) pdx_subregs);
 
   /* Scan the insns and find which registers have equivalences.  Do this
      in a separate scan of the insns because (due to -fcse-follow-jumps)
index 17962eabe0253ce4c6428bd4c021fb7fc93ab1f5..797e388650acdc53f4b94627f47e2def032cf9c5 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -446,13 +446,13 @@ init_insn_regs (void)
     = create_alloc_pool ("insn regs", sizeof (struct lra_insn_reg), 100);
 }
 
-/* Create LRA insn related info about referenced REGNO with TYPE
-   (in/out/inout), biggest reference mode MODE, flag that it is
+/* Create LRA insn related info about a reference to REGNO in INSN with
+   TYPE (in/out/inout), biggest reference mode MODE, flag that it is
    reference through subreg (SUBREG_P), flag that is early clobbered
    in the insn (EARLY_CLOBBER), and reference to the next insn reg
    info (NEXT).         */
 static struct lra_insn_reg *
-new_insn_reg (int regno, enum op_type type, enum machine_mode mode,
+new_insn_reg (rtx insn, int regno, enum op_type type, enum machine_mode mode,
              bool subreg_p, bool early_clobber, struct lra_insn_reg *next)
 {
   struct lra_insn_reg *ir;
@@ -460,7 +460,8 @@ new_insn_reg (int regno, enum op_type type, enum machine_mode mode,
   ir = (struct lra_insn_reg *) pool_alloc (insn_reg_pool);
   ir->type = type;
   ir->biggest_mode = mode;
-  if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (lra_reg_info[regno].biggest_mode))
+  if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (lra_reg_info[regno].biggest_mode)
+      && NONDEBUG_INSN_P (insn))
     lra_reg_info[regno].biggest_mode = mode;
   ir->subreg_p = subreg_p;
   ir->early_clobber = early_clobber;
@@ -942,7 +943,7 @@ collect_non_operand_hard_regs (rtx *x, lra_insn_recog_data_t data,
                     && ! (FIRST_STACK_REG <= regno
                           && regno <= LAST_STACK_REG));
 #endif
-               list = new_insn_reg (regno, type, mode, subreg_p,
+               list = new_insn_reg (data->insn, regno, type, mode, subreg_p,
                                     early_clobber, list);
              }
          }
@@ -1540,7 +1541,7 @@ add_regs_to_insn_regno_info (lra_insn_recog_data_t data, rtx x, int uid,
       expand_reg_info ();
       if (bitmap_set_bit (&lra_reg_info[regno].insn_bitmap, uid))
        {
-         data->regs = new_insn_reg (regno, type, mode, subreg_p,
+         data->regs = new_insn_reg (data->insn, regno, type, mode, subreg_p,
                                     early_clobber, data->regs);
          return;
        }
@@ -1552,8 +1553,9 @@ add_regs_to_insn_regno_info (lra_insn_recog_data_t data, rtx x, int uid,
                if (curr->subreg_p != subreg_p || curr->biggest_mode != mode)
                  /* The info can not be integrated into the found
                     structure.  */
-                 data->regs = new_insn_reg (regno, type, mode, subreg_p,
-                                            early_clobber, data->regs);
+                 data->regs = new_insn_reg (data->insn, regno, type, mode,
+                                            subreg_p, early_clobber,
+                                            data->regs);
                else
                  {
                    if (curr->type != type)
index 0d78836368e2f4a2b962805bf0bf65fb4f02a62f..4b9ca6c939887ee1e7acb910df27835718390840 100644 (file)
@@ -1,3 +1,10 @@
+2015-02-20  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2013-09-08  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * g++.dg/debug/ra1.C: New test.
+
 2015-02-17  Sandra Loosemore  <sandra@codesourcery.com>
 
        Backported from mainline
@@ -43,7 +50,7 @@
        Backport from mainline
        2015-01-31  Uros Bizjak  <ubizjak@gmail.com>
 
-        PR target/64882
+       PR target/64882
        * gcc.dg/torture/pr64882.c: New test.
 
 2015-02-01  Jakub Jelinek  <jakub@redhat.com>
diff --git a/gcc/testsuite/g++.dg/debug/ra1.C b/gcc/testsuite/g++.dg/debug/ra1.C
new file mode 100644 (file)
index 0000000..b6f7bfc
--- /dev/null
@@ -0,0 +1,77 @@
+/* { dg-options "-fcompare-debug" } */
+
+enum signop { SIGNED, UNSIGNED };
+enum tree_code { FOO, BAR };
+enum tree_code_class { tcc_type, tcc_other };
+extern enum tree_code_class tree_code_type[];
+
+struct tree_base {
+  enum tree_code code : 16;
+  unsigned unsigned_flag : 1;
+};
+
+struct tree_def {
+  tree_base base;
+  struct {
+    int precision;
+  } type_common;
+};
+
+typedef tree_def *tree;
+
+struct storage_ref
+{
+  storage_ref (const long *, unsigned int, unsigned int);
+
+  const long *val;
+  unsigned int len;
+  unsigned int precision;
+};
+
+inline storage_ref::storage_ref (const long *val_in,
+                                unsigned int len_in,
+                                unsigned int precision_in)
+  : val (val_in), len (len_in), precision (precision_in)
+{
+}
+
+struct hwi_with_prec
+{
+  long val;
+  unsigned int precision;
+  signop sgn;
+};
+
+inline storage_ref
+decompose (long *scratch, unsigned int precision,
+          const hwi_with_prec &x)
+{
+  scratch[0] = x.val;
+  if (x.sgn == SIGNED || x.val >= 0 || precision <= sizeof (long) * 8)
+    return storage_ref (scratch, 1, precision);
+  scratch[1] = 0;
+  return storage_ref (scratch, 2, precision);
+}
+
+extern void tree_class_check_failed (int) __attribute__ ((__noreturn__));
+
+inline tree
+tree_class_check (tree t, const enum tree_code_class cls, int x)
+{
+  if (tree_code_type[t->base.code] != cls)
+    tree_class_check_failed (x);
+  return t;
+}
+
+tree wide_int_to_tree (tree, const storage_ref &);
+
+tree
+build_int_cstu (tree type, unsigned long val)
+{
+  hwi_with_prec x;
+  x.val = val;
+  x.precision = tree_class_check (type, tcc_type, 1)->type_common.precision;
+  x.sgn = (signop) tree_class_check (type, tcc_type, 2)->base.unsigned_flag;
+  long scratch[2];
+  return wide_int_to_tree (type, decompose (scratch, x.precision, x));
+}