OSDN Git Service

2007-01-18 Josh Conner <jconner@apple.com>
authorjconner <jconner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 16:44:03 +0000 (16:44 +0000)
committerjconner <jconner@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 16:44:03 +0000 (16:44 +0000)
PR target/30485
* config/rs6000/rs6000.c (rs6000_emit_vector_compare): Add
support for UNLE, UNLT, UNGE, and UNGT.

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

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

index 4fae499..af089fe 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-18  Josh Conner  <jconner@apple.com>
+
+       PR target/30485
+       * config/rs6000/rs6000.c (rs6000_emit_vector_compare): Add
+       support for UNLE, UNLT, UNGE, and UNGT.
+
 2007-01-18  Jan Hubicka  <jh@suse.cz>
 
        * tree-vrp.c (finalize_jump_threads): Do not call cleanup_cfg by hand.
index ce17814..592cfdd 100644 (file)
@@ -11890,10 +11890,18 @@ rs6000_emit_vector_compare (enum rtx_code rcode,
          try_again = true;
          break;
        case NE:
-         /* Treat A != B as ~(A==B).  */
+       case UNLE:
+       case UNLT:
+       case UNGE:
+       case UNGT:
+         /* Invert condition and try again.
+            e.g., A != B becomes ~(A==B).  */
          {
+           enum rtx_code rev_code;
            enum insn_code nor_code;
-           rtx eq_rtx = rs6000_emit_vector_compare (EQ, op0, op1,
+
+           rev_code = reverse_condition_maybe_unordered (rcode);
+           rtx eq_rtx = rs6000_emit_vector_compare (rev_code, op0, op1,
                                                     dest_mode);
 
            nor_code = one_cmpl_optab->handlers[(int)dest_mode].insn_code;