expr.c (check_max_integer_computation_mode): Allow conversions of constant integers...
authorJeffrey A Law <law@cygnus.com>
Thu, 23 Jul 1998 12:51:00 +0000 (12:51 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 23 Jul 1998 12:51:00 +0000 (06:51 -0600)
        * expr.c (check_max_integer_computation_mode): Allow conversions
        of constant integers to MAX_INTEGER_COMPUTATION_MODE.
        (expand_expr): Likewise.

From-SVN: r21349

gcc/ChangeLog
gcc/expr.c

index d225ce49514b6637d69b8f5b205c72394ffb8748..f3e1fcc07161eedb60a4fb82cb1ea36932f49460 100644 (file)
@@ -1,3 +1,9 @@
+Thu Jul 23 13:49:41 1998  Jeffrey A Law  (law@cygnus.com)
+
+       * expr.c (check_max_integer_computation_mode): Allow conversions
+       of constant integers to MAX_INTEGER_COMPUTATION_MODE.
+       (expand_expr): Likewise.
+
 Thu Jul 23 11:12:06 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
        * expr.c (expand_expr): Expand RETURN_EXPR.
index a32026e82eccd6b91f6d8f63827faea4379076bf..fd43689724be5547822955188ce59ee1410187fe 100644 (file)
@@ -5069,6 +5069,11 @@ check_max_integer_computation_mode (exp)
   enum tree_code code = TREE_CODE (exp);
   enum machine_mode mode;
 
+  /* We must allow conversions of constants to MAX_INTEGER_COMPUTATION_MODE.  */
+  if (code == NOP_EXPR
+      && TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST)
+    return;
+
   /* First check the type of the overall operation.   We need only look at
      unary, binary and relational operations.  */
   if (TREE_CODE_CLASS (code) == '1'
@@ -5229,7 +5234,7 @@ expand_expr (exp, target, tmode, modifier)
     }
 
 #ifdef MAX_INTEGER_COMPUTATION_MODE
-  if (target)
+  if (target && TREE_CODE (exp) != INTEGER_CST)
     {
       enum machine_mode mode = GET_MODE (target);
 
@@ -5238,7 +5243,8 @@ expand_expr (exp, target, tmode, modifier)
        fatal ("unsupported wide integer operation");
     }
 
-  if (GET_MODE_CLASS (tmode) == MODE_INT
+  if (TREE_CODE (exp) != INTEGER_CST
+      && GET_MODE_CLASS (tmode) == MODE_INT
       && tmode > MAX_INTEGER_COMPUTATION_MODE)
     fatal ("unsupported wide integer operation");