diff options
author | pfg <pfg@FreeBSD.org> | 2013-12-17 20:53:22 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2013-12-17 20:53:22 +0000 |
commit | db68174f65886628379345d7b6aa545f085b6e1c (patch) | |
tree | 0efc0b4c39fb5f2b3171b1e63d6f9ea19c1f27bb /contrib/gcc | |
parent | 363d61415760aca8ff7dcdda3b87b9e227edf267 (diff) | |
download | FreeBSD-src-db68174f65886628379345d7b6aa545f085b6e1c.zip FreeBSD-src-db68174f65886628379345d7b6aa545f085b6e1c.tar.gz |
gcc: fix ICE in rs600 when using -fno-trapping-math.
Solves GCC-PR target/30485
Obtained from: gcc 4.3 (rev. 120902; GPLv2)
MFC after: 2 weeks
Diffstat (limited to 'contrib/gcc')
-rw-r--r-- | contrib/gcc/ChangeLog.gcc43 | 6 | ||||
-rw-r--r-- | contrib/gcc/config/rs6000/rs6000.c | 12 |
2 files changed, 16 insertions, 2 deletions
diff --git a/contrib/gcc/ChangeLog.gcc43 b/contrib/gcc/ChangeLog.gcc43 index 98b368d..3658d19 100644 --- a/contrib/gcc/ChangeLog.gcc43 +++ b/contrib/gcc/ChangeLog.gcc43 @@ -399,6 +399,12 @@ (override_options): Add PTA_CX16 flag. Set x86_cmpxchg16b for CPUs that have PTA_CX16 set. +2007-01-18 Josh Conner <jconner@apple.com> (r120902) + + PR target/30485 + * config/rs6000/rs6000.c (rs6000_emit_vector_compare): Add + support for UNLE, UNLT, UNGE, and UNGT. + 2007-01-17 Eric Christopher <echristo@apple.com> (r120846) * config.gcc: Support core2 processor. diff --git a/contrib/gcc/config/rs6000/rs6000.c b/contrib/gcc/config/rs6000/rs6000.c index 287902f..a4d2020 100644 --- a/contrib/gcc/config/rs6000/rs6000.c +++ b/contrib/gcc/config/rs6000/rs6000.c @@ -11738,10 +11738,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; |