OSDN Git Service

* config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Apr 2006 14:24:44 +0000 (14:24 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Apr 2006 14:24:44 +0000 (14:24 +0000)
treat CONST_DOUBLE as INTVAL.  and64_2_operands require an extra
insn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112752 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 98d7ce0..486c018 100644 (file)
@@ -1,3 +1,8 @@
+2006-04-07  David Edelsohn  <edelsohn@gnu.org>
+
+       * config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not
+       treat CONST_DOUBLE as INTVAL.  and64_2_operands require an extra
+       insn.
 
 2006-04-07  Jan Hubicka  <jh@suse.cz>
 
index 085fa72..ec2cfde 100644 (file)
@@ -18642,28 +18642,25 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total)
       /* FALLTHRU */
 
     case CONST_DOUBLE:
-      if (mode == DImode
-         && ((outer_code == AND
-              && (satisfies_constraint_K (x)
-                  || satisfies_constraint_L (x)
-                  || mask_operand (x, DImode)
-                  || mask64_operand (x, DImode)))
-             || ((outer_code == IOR || outer_code == XOR)
-                 && CONST_DOUBLE_HIGH (x) == 0
-                 && (CONST_DOUBLE_LOW (x)
-                     & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0)))
+      if (mode == DImode && code == CONST_DOUBLE)
        {
-         *total = 0;
-         return true;
-       }
-      else if (mode == DImode
-              && (outer_code == SET
-                  || outer_code == IOR
-                  || outer_code == XOR)
-              && CONST_DOUBLE_HIGH (x) == 0)
-       {
-         *total = COSTS_N_INSNS (1);
-         return true;
+         if ((outer_code == IOR || outer_code == XOR)
+             && CONST_DOUBLE_HIGH (x) == 0
+             && (CONST_DOUBLE_LOW (x)
+                 & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0)
+           {
+             *total = 0;
+             return true;
+           }
+         else if ((outer_code == AND && and64_2_operand (x, DImode))
+                  || ((outer_code == SET
+                       || outer_code == IOR
+                       || outer_code == XOR)
+                      && CONST_DOUBLE_HIGH (x) == 0))
+           {
+             *total = COSTS_N_INSNS (1);
+             return true;
+           }
        }
       /* FALLTHRU */