aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-01-23 23:06:03 +0000
committerJeff Law <law@gcc.gnu.org>1998-01-23 16:06:03 -0700
commited1ecb19301902f8f245b301534820e8c9bf7a60 (patch)
treeed67b6a1f37230177099d0ed978173edd15252cb /gcc
parentb4b04bf97f57d04a47f6c86a68b15b4bf5d6d245 (diff)
downloadgcc-ed1ecb19301902f8f245b301534820e8c9bf7a60.zip
gcc-ed1ecb19301902f8f245b301534820e8c9bf7a60.tar.gz
gcc-ed1ecb19301902f8f245b301534820e8c9bf7a60.tar.bz2
cse.c (simplify_ternary_operation): Handle more IF_THEN_ELSE simplifications.
* cse.c (simplify_ternary_operation): Handle more IF_THEN_ELSE simplifications. From-SVN: r17465
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/cse.c11
2 files changed, 14 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0292071..1beac6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
Fri Jan 23 22:48:24 1998 Jeffrey A Law (law@cygnus.com)
+ * cse.c (simplify_ternary_operation): Handle more IF_THEN_ELSE
+ simplifications.
+
* crtstuff.c (init_dummy): Keep the epilogue in the init
section for non-ELF systems.
diff --git a/gcc/cse.c b/gcc/cse.c
index e001597..3c27387 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -4713,6 +4713,17 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
&& rtx_equal_p (XEXP (op0, 1), op1)
&& rtx_equal_p (XEXP (op0, 0), op2))
return op2;
+ else if (! side_effects_p (op0))
+ {
+ rtx temp;
+ temp = simplify_relational_operation (GET_CODE (op0), op0_mode,
+ XEXP (op0, 0), XEXP (op0, 1));
+ /* See if any simplifications were possible. */
+ if (temp == const0_rtx)
+ return op2;
+ else if (temp == const1_rtx)
+ return op1;
+ }
break;
default: