alpha.c (alpha_emit_conditional_move): Do not swap comparison operands when that...
authorRichard Henderson <rth@redhat.com>
Thu, 14 Dec 2000 08:18:57 +0000 (00:18 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 14 Dec 2000 08:18:57 +0000 (00:18 -0800)
        * config/alpha/alpha.c (alpha_emit_conditional_move): Do not swap
        comparison operands when that would create non-canonical rtl.

From-SVN: r38247

gcc/ChangeLog
gcc/config/alpha/alpha.c

index d02842dc049ed8be015ea63558dfcb814a29f7be..4f61099435f135c8b481e99aaf18bac130bb9afd 100644 (file)
@@ -1,5 +1,8 @@
 2000-12-14  Richard Henderson  <rth@redhat.com>
 
+       * config/alpha/alpha.c (alpha_emit_conditional_move): Do not swap
+       comparison operands when that would create non-canonical rtl.
+
        * config/i386/i386.md (umulsi3_highpart): Remove * from name.
        (smulsi3_highpart): Likewise.
 
index d16c58c6042ec273b2ba1c10301f1b372fb8c227..a363be83067ca38f26f17d7d13cb465345b314ce 100644 (file)
@@ -1908,9 +1908,14 @@ alpha_emit_conditional_move (cmp, mode)
 
        case GE: case GT: case GEU: case GTU:
          /* These must be swapped.  */
-         cmp_code = swap_condition (code);
-         code = NE;
-         tem = op0, op0 = op1, op1 = tem;
+         if (op1 == CONST0_RTX (cmp_mode))
+           cmp_code = code, code = NE;
+         else
+           {
+             cmp_code = swap_condition (code);
+             code = NE;
+             tem = op0, op0 = op1, op1 = tem;
+           }
          break;
 
        default:
@@ -1958,8 +1963,11 @@ alpha_emit_conditional_move (cmp, mode)
 
     case GE:  case GT:  case GEU:  case GTU:
       /* These must be swapped.  */
-      code = swap_condition (code);
-      tem = op0, op0 = op1, op1 = tem;
+      if (op1 != CONST0_RTX (cmp_mode))
+       {
+         code = swap_condition (code);
+         tem = op0, op0 = op1, op1 = tem;
+       }
       break;
 
     default: