Richard Henderson - alpha bootstrap fix (original) (raw)
This is the mail archive of the gcc-patches@gcc.gnu.orgmailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
- To: jh at suse dot cz, gcc-patches at gcc dot gnu dot org
- Subject: alpha bootstrap fix
- From: Richard Henderson
- Date: Sun, 20 May 2001 18:32:19 -0700
Thu May 17 23:19:46 CEST 2001 Jan Hubicka jh@suse.cz
* combine.c (combine_simplify_rtx): Use swap_commutative_operands_p.
(gen_binary): Likewise.
* optabs.c (emit_cmp_and_jump_insns, emit_conditional_move): Likewise.
* simplify-rtx.c (simplify_gen_binary,
simplify_gen_relational): Likewise.
The change to emit_cmp_and_jump_insns, at minimum, is incorrect. This is used e.g. by compare_from_rtx from emit_store_flag to generate setcc instructions. We have no way of mentioning this change of comparison code to upper layers, resulting in bad code.
A reduced test case is
static unsigned int expr_hash_table_size = 1;
int main () { int del = 1; unsigned int i = 0;
if (i < expr_hash_table_size && del) exit (0); abort (); }
Fixed thus.
r~
* optabs.c (emit_cmp_and_jump_insns): Don't swap commutative
operands unless the operation is commutative.
Index: optabs.c
RCS file: /cvs/gcc/gcc/gcc/optabs.c,v
retrieving revision 1.97
diff -c -p -d -r1.97 optabs.c
*** optabs.c 2001/05/17 21:21:21 1.97
--- optabs.c 2001/05/21 01:22:23
*************** emit_cmp_and_jump_insns (x, y, compariso
*** 3289,3301 ****
{
rtx op0;
rtx op1;
!
! if (swap_commutative_operands_p (x, y))
{
/* Swap operands and condition to ensure canonical RTL. */
op0 = y;
op1 = x;
else {comparison = swap_condition (comparison); }
--- 3289,3304 ---- { rtx op0; rtx op1; ! ! /* We may not swap in the general case, since this is called from ! compare_from_rtx, and we have no way of reporting the changed ! comparison code. / ! if (comparison == swap_condition (comparison) ! && swap_commutative_operands_p (x, y)) { / Swap operands and condition to ensure canonical RTL. */ op0 = y; op1 = x; } else {
- Follow-Ups:
- Re: alpha bootstrap fix
* From: Jan Hubicka - Re: alpha bootstrap fix
* From: Jan Hubicka
- Re: alpha bootstrap fix
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |