diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15dfb25db7f2269a46a5ef424647dccdfea36f94..76793fb896f0ff29d76a76c7ab763ae4961a848f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Mon Sep 30 14:57:18 CEST 2002 Jan Hubicka <jh@suse.cz> + + * i386.h (TARGET_CPP_CPU_BUILTINS): Define __SSE_MATH__. + + * gcse.c (cprop_jump): Check that the register has not + been modified + (cprop_jump): Likewise. + 2002-09-30 Richard Earnshaw <rearnsha@arm.com> * arm.h (BASE_REG_CLASS): Always return LO_REGS for Thumb. diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 68fa7409b7ea44b4995a1c64da466f63a4c903cd..af9c37fc131776369171bcaf648b75e7d3180386 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -529,6 +529,10 @@ extern int x86_prefetch_sse; builtin_define ("__SSE__"); \ if (TARGET_SSE2) \ builtin_define ("__SSE2__"); \ + if (TARGET_SSE_MATH && TARGET_SSE) \ + builtin_define ("__SSE_MATH__"); \ + if (TARGET_SSE_MATH && TARGET_SSE2) \ + builtin_define ("__SSE2_MATH__"); \ \ /* Built-ins based on -march=. */ \ if (ix86_arch == PROCESSOR_I486) \ diff --git a/gcc/gcse.c b/gcc/gcse.c index fbe3fcb1200782106c2f5d31ef0a3eac9be84f2e..081275a0c7de1e87728c2d40c6094f28c991455b 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -4054,7 +4054,9 @@ cprop_jump (bb, setcc, jump, from, src) /* First substitute in the INSN condition as the SET_SRC of the JUMP, then substitute that given values in this expanded JUMP. */ - if (setcc != NULL) + if (setcc != NULL + && !modified_between_p (from, setcc, jump) + && !modified_between_p (src, setcc, jump)) { rtx setcc_set = single_set (setcc); new_set = simplify_replace_rtx (SET_SRC (set), @@ -4068,7 +4070,7 @@ cprop_jump (bb, setcc, jump, from, src) /* If no simplification can be made, then try the next register. */ - if (rtx_equal_p (new, new_set)) + if (rtx_equal_p (new, new_set) || rtx_equal_p (new, SET_SRC (set))) return 0; /* If this is now a no-op delete it, otherwise this must be a valid insn. */ @@ -4076,6 +4078,11 @@ cprop_jump (bb, setcc, jump, from, src) delete_insn (jump); else { + /* Ensure the value computed inside the jump insn to be equivalent + to one computed by setcc. */ + if (setcc + && modified_in_p (new, setcc)) + return 0; if (! validate_change (jump, &SET_SRC (set), new, 0)) return 0;