PR79584, ICE in base_to_reg
authorAlan Modra <amodra@gmail.com>
Sat, 25 Feb 2017 22:44:41 +0000 (09:14 +1030)
committerAlan Modra <amodra@gcc.gnu.org>
Sat, 25 Feb 2017 22:44:41 +0000 (09:14 +1030)
PR rtl-optimization/79584
* lra-constraints.c (base_to_reg): Reload ad->base, the entire
base, not ad->base_term, the reg within base.  Remove assertion
that ad->base == ad->base_term.  Replace gen_int_mode using
bogus mode with const0_rtx.

From-SVN: r245741

gcc/ChangeLog
gcc/lra-constraints.c

index 18410bc65a6f9472d8b185bb56535e93db9281a9..fd75430d5cfdbc76aed7f67747171b7e121cc81e 100644 (file)
@@ -1,3 +1,11 @@
+2017-02-25  Alan Modra  <amodra@gmail.com>
+
+       PR rtl-optimization/79584
+       * lra-constraints.c (base_to_reg): Reload ad->base, the entire
+       base, not ad->base_term, the reg within base.  Remove assertion
+       that ad->base == ad->base_term.  Replace gen_int_mode using
+       bogus mode with const0_rtx.
+
 2017-02-25  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/79396
index 224a9560c5650dad29a65eda99a013fbbb28c84c..c67bd0633f377d7e74ff4e27a7b70340ab17990c 100644 (file)
@@ -2927,18 +2927,18 @@ base_to_reg (struct address_info *ad)
   rtx_insn *insn;
   rtx_insn *last_insn = get_last_insn();
 
-  lra_assert (ad->base == ad->base_term && ad->disp == ad->disp_term);
+  lra_assert (ad->disp == ad->disp_term);
   cl = base_reg_class (ad->mode, ad->as, ad->base_outer_code,
                        get_index_code (ad));
-  new_reg = lra_create_new_reg (GET_MODE (*ad->base_term), NULL_RTX,
+  new_reg = lra_create_new_reg (GET_MODE (*ad->base), NULL_RTX,
                                 cl, "base");
   new_inner = simplify_gen_binary (PLUS, GET_MODE (new_reg), new_reg,
                                    ad->disp_term == NULL
-                                   ? gen_int_mode (0, ad->mode)
+                                   ? const0_rtx
                                    : *ad->disp_term);
   if (!valid_address_p (ad->mode, new_inner, ad->as))
     return NULL_RTX;
-  insn = emit_insn (gen_rtx_SET (new_reg, *ad->base_term));
+  insn = emit_insn (gen_rtx_SET (new_reg, *ad->base));
   code = recog_memoized (insn);
   if (code < 0)
     {