compiling code like:
int foo(int a, int b)
{
if (a > b)
return a;
else
return b;
}
with:
or1k-elf-gcc -O2 -mcmov -c -S cmov.c -o -
caused an internal compiler error
due to the fact that or1k_compare_op0 and or1k_compare_op1
never get assigned with anything
---
Note!
I'm not at all confident about this...
Feedback or better suggestions are appreciated.
---
gcc/config/or1k/or1k.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/gcc/config/or1k/or1k.c b/gcc/config/or1k/or1k.c
index 16238fe..2a6bb96 100644
--- a/gcc/config/or1k/or1k.c
+++ b/gcc/config/or1k/or1k.c
@@ -381,18 +381,19 @@ or1k_emit_int_cmove (rtx dest,
rtx false_cond)
{
rtx condition_rtx, cr;
+ rtx op0 = XEXP (op, 0);
+ rtx op1 = XEXP (op, 1);
- if ((GET_MODE (or1k_compare_op0) != SImode) &&
- (GET_MODE (or1k_compare_op0) != HImode) &&
- (GET_MODE (or1k_compare_op0) != QImode))
+ if ((GET_MODE (op0) != SImode) &&
+ (GET_MODE (op0) != HImode) &&
+ (GET_MODE (op0) != QImode))
{
return 0;
}
/* We still have to do the compare, because cmov doesn't do a compare, it
just looks at the FLAG bit set by a previous compare instruction. */
- condition_rtx = or1k_expand_compare (GET_CODE (op),
- or1k_compare_op0, or1k_compare_op1);
+ condition_rtx = or1k_expand_compare (GET_CODE (op), op0, op1);
cr = XEXP (condition_rtx, 0);
--
1.7.9.5
_______________________________________________
OpenRISC mailing list
[email protected]
http://lists.openrisc.net/listinfo/openrisc