diff options
author | Josh Conner <jconner@apple.com> | 2007-01-18 16:44:03 +0000 |
---|---|---|
committer | Josh Conner <jconner@gcc.gnu.org> | 2007-01-18 16:44:03 +0000 |
commit | 370df7db150b3cebad6c88751dcd215bb6d93456 (patch) | |
tree | c320ff436eb619c92c0c99371431b1fa7abcb567 /gcc | |
parent | 1b4aced688f1f445a48871a2fe1f426c5470b823 (diff) | |
download | gcc-370df7db150b3cebad6c88751dcd215bb6d93456.zip gcc-370df7db150b3cebad6c88751dcd215bb6d93456.tar.gz gcc-370df7db150b3cebad6c88751dcd215bb6d93456.tar.bz2 |
re PR target/30485 (ICE in rs6000_emit_vector_compare when building with -fno-trapping-math)
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.
From-SVN: r120902
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4fae499..af089fe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ce17814..592cfdd 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -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; |