From: Paolo Bonzini Date: Thu, 8 May 2008 16:35:56 +0000 (+0000) Subject: re PR target/36090 (ppc64 cacoshl miscompilation) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=627ab8616cc19a4bed7ca2d4273e3dc85aab39b4;p=gcc.git re PR target/36090 (ppc64 cacoshl miscompilation) 2008-05-08 Paolo Bonzini PR target/36090 * simplify-rtx.c (simplify_plus_minus): Create CONST of similar RTX_CONST_OBJ before CONST_INT. From-SVN: r135086 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f87e063d216..7ac7cd27fe3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-05-08 Paolo Bonzini + + PR target/36090 + * simplify-rtx.c (simplify_plus_minus): Create CONST of + similar RTX_CONST_OBJ before CONST_INT. + 2008-05-08 Steve Ellcey * stmt.c (expand_stack_restore): Change sa mode if needed. diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 44f3ef57473..15e4c2a3424 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -3674,6 +3674,24 @@ simplify_plus_minus (enum rtx_code code, enum machine_mode mode, rtx op0, one CONST_INT, and the sort will have ensured that it is last in the array and that any other constant will be next-to-last. */ + if (GET_CODE (ops[n_ops - 1].op) == CONST_INT) + i = n_ops - 2; + else + i = n_ops - 1; + + if (i >= 1 + && ops[i].neg + && !ops[i - 1].neg + && CONSTANT_P (ops[i].op) + && GET_CODE (ops[i].op) == GET_CODE (ops[i - 1].op)) + { + ops[i - 1].op = gen_rtx_MINUS (mode, ops[i - 1].op, ops[i].op); + ops[i - 1].op = gen_rtx_CONST (mode, ops[i - 1].op); + if (i < n_ops - 1) + ops[i] = ops[i + 1]; + n_ops--; + } + if (n_ops > 1 && GET_CODE (ops[n_ops - 1].op) == CONST_INT && CONSTANT_P (ops[n_ops - 2].op))