aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2000-12-20 15:48:26 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2000-12-20 15:48:26 +0000
commitfd7bcd6f0571ef7f5fb87c713b7a612252497056 (patch)
tree06b44258aaab2ec5d04fbc2c19b015ca5d48e523 /gcc/flow.c
parent99c8c61c83278e1c135b9d36c4cd8256e84944ac (diff)
downloadgcc-fd7bcd6f0571ef7f5fb87c713b7a612252497056.zip
gcc-fd7bcd6f0571ef7f5fb87c713b7a612252497056.tar.gz
gcc-fd7bcd6f0571ef7f5fb87c713b7a612252497056.tar.bz2
Fix ARM bootstrap problems introduced by last change
From-SVN: r38399
Diffstat (limited to 'gcc/flow.c')
-rw-r--r--gcc/flow.c67
1 files changed, 36 insertions, 31 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index 725f63f..ae98448 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 ();
}