diff options
author | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-23 17:58:48 +0000 |
---|---|---|
committer | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-02-23 17:58:48 +0000 |
commit | 3d72a1b5ff364096199c1f9ebce2bb4fde8dfab7 (patch) | |
tree | ee2a5464a8fd46288917b5f1ea33c72955e8af86 /gcc/simplify-rtx.c | |
parent | c12ee0c6f87eba261d98bca334f8ea8026d0dd7c (diff) | |
download | gcc-3d72a1b5ff364096199c1f9ebce2bb4fde8dfab7.tar.gz |
2008-02-23 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR rtl-opt/33512
* simplify-rtx.c (simplify_binary_operation_1): Add simplification
of (and X (ior (not X) Y) and (and (ior (not X) Y) X).
2008-02-23 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR rtl-opt/33512
* gcc.dg/and-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132575 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r-- | gcc/simplify-rtx.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index f8756040ce0..03fbc750dcf 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -2428,6 +2428,19 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode, return simplify_gen_binary (code, mode, tem, op1); } } + + /* (and X (ior (not X) Y) -> (and X Y) */ + if (GET_CODE (op1) == IOR + && GET_CODE (XEXP (op1, 0)) == NOT + && op0 == XEXP (XEXP (op1, 0), 0)) + return simplify_gen_binary (AND, mode, op0, XEXP (op1, 1)); + + /* (and (ior (not X) Y) X) -> (and X Y) */ + if (GET_CODE (op0) == IOR + && GET_CODE (XEXP (op0, 0)) == NOT + && op1 == XEXP (XEXP (op0, 0), 0)) + return simplify_gen_binary (AND, mode, op1, XEXP (op0, 1)); + tem = simplify_associative_operation (code, mode, op0, op1); if (tem) return tem; |