Commit e006ced2 by Falk Hueffner Committed by Falk Hueffner

re PR target/12654 (Incorrect comparison code generated for Alpha)

	PR target/12654
	* config/alpha/alpha.c (alpha_emit_conditional_branch): Don't do
	comparison against constant by adjusting the argument except for
	EQ and NE.

From-SVN: r72696
parent 8b7ebc31
2003-10-20 Falk Hueffner <falk@debian.org>
PR target/12654
* config/alpha/alpha.c (alpha_emit_conditional_branch): Don't do
comparison against constant by adjusting the argument except for
EQ and NE.
2003-10-19 Mark Mitchell <mark@codesourcery.com>
* config.gcc: Add support for arm926ejs, arm1026ejs, arm1136js,
......
......@@ -3160,10 +3160,10 @@ alpha_emit_conditional_branch (enum rtx_code code)
if (op1 == const0_rtx)
cmp_code = NIL, branch_code = code;
/* We want to use cmpcc/bcc when we can, since there is a zero delay
bypass between logicals and br/cmov on EV5. But we don't want to
force valid immediate constants into registers needlessly. */
else if (GET_CODE (op1) == CONST_INT)
/* If the constants doesn't fit into an immediate, but can
be generated by lda/ldah, we adjust the argument and
compare against zero, so we can use beq/bne directly. */
else if (GET_CODE (op1) == CONST_INT && (code == EQ || code == NE))
{
HOST_WIDE_INT v = INTVAL (op1), n = -v;
......
/* PR target/12654
The Alpha backend tried to do a >= 1024 as (a - 1024) >= 0, which fails
for very large negative values. */
/* Origin: tg@swox.com */
#include <limits.h>
extern void abort (void);
void __attribute__((noinline))
foo (long x)
{
if (x >= 1024)
abort ();
}
int
main ()
{
foo (LONG_MIN);
foo (LONG_MIN + 10000);
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment