diff options
-rw-r--r-- | gcc/ChangeLog | 119 | ||||
-rw-r--r-- | gcc/fold-const.c | 27 |
2 files changed, 89 insertions, 57 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7b966f9..5cafb33 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,8 +1,15 @@ +2002-01-22 Roger Sayle <roger@eyesopen.com> + Richard Henderson <rth@redhat.com> + + PR opt/3640 + * fold-const.c (fold): Optimize unsigned comparisons against + UINT_MAX (and similar unsigned constants). + 2002-01-22 Janis Johnson <janis187@us.ibm.com> - * Makefile.in (loop.o): Depend on OPTABS_H. - * loop.c (expand_builtin_prefetch): Check the prefetch operand - against the predicate. + * Makefile.in (loop.o): Depend on OPTABS_H. + * loop.c (expand_builtin_prefetch): Check the prefetch operand + against the predicate. PR target/5379 * config/i386/i386.md (prefetch_sse): Specify "p" as a constraint @@ -25,18 +32,18 @@ 2002-01-22 Aldy Hernandez <aldyh@redhat.com> - * regrename.c (kill_value): Fix typo. + * regrename.c (kill_value): Fix typo. 2002-01-22 Aldy Hernandez <aldyh@redhat.com> - * doc/tm.texi: Remove STARTING_FRAME_PHASE. + * doc/tm.texi: Remove STARTING_FRAME_PHASE. - * config/rs6000/rs6000.h: Same. + * config/rs6000/rs6000.h: Same. - * function.c (instantiate_virtual_regs): Remove - STARTING_FRAME_PHASE. - (assign_stack_local_1): Same. - Calculate frame phase. + * function.c (instantiate_virtual_regs): Remove + STARTING_FRAME_PHASE. + (assign_stack_local_1): Same. + Calculate frame phase. 2002-01-22 Nick Clifton <nickc@redhat.com> @@ -276,15 +283,15 @@ Sun Jan 20 18:40:14 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> 2002-01-18 Aldy Hernandez <aldyh@redhat.com> - * doc/tm.texi (STARTING_FRAME_PHASE): Document. + * doc/tm.texi (STARTING_FRAME_PHASE): Document. - * function.c (assign_stack_local_1): Adjust x_frame_offset with - STARTING_FRAME_PHASE. - (STARTING_FRAME_PHASE): New. - (instantiate_virtual_regs): Check saneness of - STARTING_FRAME_PHASE. + * function.c (assign_stack_local_1): Adjust x_frame_offset with + STARTING_FRAME_PHASE. + (STARTING_FRAME_PHASE): New. + (instantiate_virtual_regs): Check saneness of + STARTING_FRAME_PHASE. - * config/rs6000/rs6000.h (STARTING_FRAME_PHASE): New. + * config/rs6000/rs6000.h (STARTING_FRAME_PHASE): New. 2002-01-19 Alexandre Oliva <aoliva@redhat.com> @@ -327,11 +334,11 @@ Thu Jan 17 15:28:26 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> 2002-01-17 Aldy Hernandez <aldyh@redhat.com> - * config.gcc (cpu_type): Include altivec.h in powerpc - extra_headers. - Same for darwin. + * config.gcc (cpu_type): Include altivec.h in powerpc + extra_headers. + Same for darwin. - * config/rs6000/altivec.h: New. + * config/rs6000/altivec.h: New. 2002-01-17 David Edelsohn <edelsohn@gnu.org> @@ -409,7 +416,7 @@ Thu Jan 17 15:28:26 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> 2002-01-16 Jakub Jelinek <jakub@redhat.com> PR target/5309: - * config/sparc/sparc.c (ultrasparc_adjust_cost): Handle TYPE_IDIV the + * config/sparc/sparc.c (ultrasparc_adjust_cost): Handle TYPE_IDIV the same way as TYPE_IMUL. (ultrasparc_sched_reorder): Likewise. * config/sparc/sparc.md (type): Add comment to update @@ -505,27 +512,27 @@ Wed Jan 16 17:54:22 CET 2002 Jan Hubicka <jh@suse.cz> 2002-01-15 Aldy Hernandez <aldyh@redhat.com> - * config/rs6000/rs6000.md (altivec_stvx): Add parallels to stvx. - (altivec_lvsl): Change constraint to b. - (altivec_lvsr): Same. - (altivec_lvebx): Same. - (altivec_lvehx): Same. - (altivec_lvewx): Same. - (altivec_lvxl): Same. - (altivec_lvx): Same. - (altivec_stvx): Add parallel. - (altivec_stvxl): Same. - (altivec_stvehx): Same. - (altivec_stvebx): Same. - (altivec_stvebx): Same. + * config/rs6000/rs6000.md (altivec_stvx): Add parallels to stvx. + (altivec_lvsl): Change constraint to b. + (altivec_lvsr): Same. + (altivec_lvebx): Same. + (altivec_lvehx): Same. + (altivec_lvewx): Same. + (altivec_lvxl): Same. + (altivec_lvx): Same. + (altivec_stvx): Add parallel. + (altivec_stvxl): Same. + (altivec_stvehx): Same. + (altivec_stvebx): Same. + (altivec_stvebx): Same. 2002-01-15 Aldy Hernandez <aldyh@redhat.com> - * config.gcc: Change altivec.h to altivec-defs.h. + * config.gcc: Change altivec.h to altivec-defs.h. - * config/rs6000/altivec.h: Delete. + * config/rs6000/altivec.h: Delete. - * config/rs6000/altivec-defs.h: Add. + * config/rs6000/altivec-defs.h: Add. 2002-01-15 John David Anglin <dave@hiauly1.hia.nrc.ca> @@ -903,24 +910,24 @@ Fri Jan 11 09:25:05 2002 Nicola Pero <n.pero@mi.flashnet.it> 2002-01-10 Aldy Hernandez <aldyh@redhat.com> - * config/rs6000/rs6000.c (altivec_init_builtins): Add support for - lvebx, lvehx, lvewx, lvxl, lvx, stvx, stvebx, stvehx, stvewx, - stvxl. - (altivec_expand_builtin): Same. - (altivec_expand_stv_builtin): New. - - * config/rs6000/rs6000.h (rs6000_builtins): Same. - - * config/rs6000/rs6000.md ("altivec_lvebx"): New. - ("altivec_lvehx"): New. - ("altivec_lvewx"): New. - ("altivec_lvxl"): New. - ("altivec_lvx"): New. - ("altivec_stvx"): New. - ("altivec_stvebx"): New. - ("altivec_stvehx"): New. - ("altivec_stvewx"): New. - ("altivec_stvxl"): New. + * config/rs6000/rs6000.c (altivec_init_builtins): Add support for + lvebx, lvehx, lvewx, lvxl, lvx, stvx, stvebx, stvehx, stvewx, + stvxl. + (altivec_expand_builtin): Same. + (altivec_expand_stv_builtin): New. + + * config/rs6000/rs6000.h (rs6000_builtins): Same. + + * config/rs6000/rs6000.md ("altivec_lvebx"): New. + ("altivec_lvehx"): New. + ("altivec_lvewx"): New. + ("altivec_lvxl"): New. + ("altivec_lvx"): New. + ("altivec_stvx"): New. + ("altivec_stvebx"): New. + ("altivec_stvehx"): New. + ("altivec_stvewx"): New. + ("altivec_stvxl"): New. 2002-01-10 Richard Henderson <rth@redhat.com> diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ce93a03..dec382d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1,6 +1,6 @@ /* Fold a constant sub-tree into a single node for C-compiler Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GCC. @@ -6753,6 +6753,31 @@ fold (expr) default: break; } + + else if (TREE_UNSIGNED (TREE_TYPE (arg1)) + && tree_int_cst_equal (TYPE_MAX_VALUE (TREE_TYPE (arg1)), + arg1)) + switch (TREE_CODE (t)) + { + case GT_EXPR: + return omit_one_operand (type, + convert (type, integer_zero_node), + arg0); + case GE_EXPR: + TREE_SET_CODE (t, EQ_EXPR); + break; + + case LE_EXPR: + return omit_one_operand (type, + convert (type, integer_one_node), + arg0); + case LT_EXPR: + TREE_SET_CODE (t, NE_EXPR); + break; + + default: + break; + } } } |