re PR rtl-optimization/60030 (ICE in simplify_subreg, at simplify-rtx.c:5903)
authorJakub Jelinek <jakub@redhat.com>
Thu, 6 Feb 2014 21:54:21 +0000 (22:54 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 6 Feb 2014 21:54:21 +0000 (22:54 +0100)
PR rtl-optimization/60030
* internal-fn.c (ubsan_expand_si_overflow_mul_check): Surround
lopart with paradoxical subreg before shifting it up by hprec.

From-SVN: r207582

gcc/ChangeLog
gcc/internal-fn.c

index e489b6283d8c4860e8bc4666d377dea8152019af..33f1ccf53449af7a37275c0c6a61277ac604678a 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/60030
+       * internal-fn.c (ubsan_expand_si_overflow_mul_check): Surround
+       lopart with paradoxical subreg before shifting it up by hprec.
+
 2014-02-06  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/aarch-cost-tables.h (cortexa57_extra_costs): New table.
index 3efd2b119340c6ea0cb88d1e4f3fda5bd229aae5..568a96b94b130700f03f6b7f2d661493304497fa 100644 (file)
@@ -646,7 +646,8 @@ ubsan_expand_si_overflow_mul_check (gimple stmt)
            emit_cmp_and_jump_insns (hipart, const0_rtx, GE, NULL_RTX, hmode,
                                     false, after_hipart_neg, PROB_EVEN);
 
-         tem = expand_shift (LSHIFT_EXPR, mode, lopart, hprec, NULL_RTX, 1);
+         tem = convert_modes (mode, hmode, lopart, 1);
+         tem = expand_shift (LSHIFT_EXPR, mode, tem, hprec, NULL_RTX, 1);
          tem = expand_simple_binop (mode, MINUS, loxhi, tem, NULL_RTX,
                                     1, OPTAB_DIRECT);
          emit_move_insn (loxhi, tem);