diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-20 15:48:26 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-12-20 15:48:26 +0000 |
commit | c9784e7e0fdcd44fb9c273c241b76f487767e5b6 (patch) | |
tree | 06b44258aaab2ec5d04fbc2c19b015ca5d48e523 /gcc/flow.c | |
parent | 258e50004645ebf29ba2893c623141e60f56bef3 (diff) | |
download | gcc-c9784e7e0fdcd44fb9c273c241b76f487767e5b6.tar.gz |
Fix ARM bootstrap problems introduced by last change
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38399 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 67 |
1 files changed, 36 insertions, 31 deletions
diff --git a/gcc/flow.c b/gcc/flow.c index 725f63fc821..ae98448f44c 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -5010,6 +5010,20 @@ ior_reg_cond (old, x, add) { rtx op0, op1; + if (GET_RTX_CLASS (GET_CODE (old)) == '<') + { + if (GET_RTX_CLASS (GET_CODE (x)) == '<' + && GET_CODE (x) == reverse_condition (GET_CODE (old)) + && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) + return const1_rtx; + if (GET_CODE (x) == GET_CODE (old) + && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) + return old; + if (! add) + return old; + return gen_rtx_IOR (0, old, x); + } + switch (GET_CODE (old)) { case IOR: @@ -5062,19 +5076,6 @@ ior_reg_cond (old, x, add) return old; return gen_rtx_IOR (0, old, x); - case EQ: - case NE: - if ((GET_CODE (x) == EQ || GET_CODE (x) == NE) - && GET_CODE (x) != GET_CODE (old) - && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) - return const1_rtx; - if (GET_CODE (x) == GET_CODE (old) - && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) - return old; - if (! add) - return old; - return gen_rtx_IOR (0, old, x); - default: abort (); } @@ -5112,6 +5113,20 @@ and_reg_cond (old, x, add) { rtx op0, op1; + if (GET_RTX_CLASS (GET_CODE (old)) == '<') + { + if (GET_RTX_CLASS (GET_CODE (x)) == '<' + && GET_CODE (x) == reverse_condition (GET_CODE (old)) + && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) + return const0_rtx; + if (GET_CODE (x) == GET_CODE (old) + && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) + return old; + if (! add) + return old; + return gen_rtx_AND (0, old, x); + } + switch (GET_CODE (old)) { case IOR: @@ -5164,19 +5179,6 @@ and_reg_cond (old, x, add) return old; return gen_rtx_AND (0, old, x); - case EQ: - case NE: - if ((GET_CODE (x) == EQ || GET_CODE (x) == NE) - && GET_CODE (x) != GET_CODE (old) - && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) - return const0_rtx; - if (GET_CODE (x) == GET_CODE (old) - && REGNO (XEXP (x, 0)) == REGNO (XEXP (old, 0))) - return old; - if (! add) - return old; - return gen_rtx_AND (0, old, x); - default: abort (); } @@ -5193,6 +5195,14 @@ elim_reg_cond (x, regno) unsigned int regno; { rtx op0, op1; + + if (GET_RTX_CLASS (GET_CODE (x)) == '<') + { + if (REGNO (XEXP (x, 0)) == regno) + return const0_rtx; + return x; + } + switch (GET_CODE (x)) { case AND: @@ -5231,11 +5241,6 @@ elim_reg_cond (x, regno) return not_reg_cond (op0); return x; - case EQ: - case NE: - if (REGNO (XEXP (x, 0)) == regno) - return const0_rtx; - return x; default: abort (); } |