This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, committed] Fix PR81162
Thomas, thanks for the heads-up! I didn't realize we had this dependency. I'll move the test case shortly.
-- Bill
> On Jul 17, 2017, at 5:47 AM, Thomas Preudhomme <thomas.preudhomme@foss.arm.com> wrote:
>
> Hi Bill,
>
> Is there a reason the new test is in gcc.dg rather than in gcc.dg/ubsan? The test FAILs when there is no ubsan runtime support and fsanitize_undefined effective target is not available in gcc.dg (one needs to load ubsan-dg for this effective target to be defined).
>
> Best regards,
>
> Thomas
>
> On 14/07/17 19:05, Bill Schmidt wrote:
>> Hi,
>> PR81162 identifies a bug in SLSR involving overflow that occurs when
>> replacing a NEGATE_EXPR with a PLUS_EXPR. This is another example
>> of an unprofitable transformation that should be skipped anyway,
>> hence this simple patch. Bootstrapped and tested on
>> powerpc64le-unknown-linux-gnu, committed. Test case provided from
>> the bug report.
>> Thanks,
>> Bill
>> [gcc]
>> 2016-07-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
>> PR tree-optimization/81162
>> * gimple-ssa-strength-reduction.c (replace_mult_candidate): Don't
>> replace a negate with an add.
>> [gcc/testsuite]
>> 2016-07-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
>> PR tree-optimization/81162
>> * gcc.dg/pr81162.c: New file.
>> Index: gcc/gimple-ssa-strength-reduction.c
>> ===================================================================
>> --- gcc/gimple-ssa-strength-reduction.c (revision 250189)
>> +++ gcc/gimple-ssa-strength-reduction.c (working copy)
>> @@ -2082,13 +2082,14 @@ replace_mult_candidate (slsr_cand_t c, tree basis_
>> types but allows for safe negation without twisted logic. */
>> if (wi::fits_shwi_p (bump)
>> && bump.to_shwi () != HOST_WIDE_INT_MIN
>> - /* It is not useful to replace casts, copies, or adds of
>> + /* It is not useful to replace casts, copies, negates, or adds of
>> an SSA name and a constant. */
>> && cand_code != SSA_NAME
>> && !CONVERT_EXPR_CODE_P (cand_code)
>> && cand_code != PLUS_EXPR
>> && cand_code != POINTER_PLUS_EXPR
>> - && cand_code != MINUS_EXPR)
>> + && cand_code != MINUS_EXPR
>> + && cand_code != NEGATE_EXPR)
>> {
>> enum tree_code code = PLUS_EXPR;
>> tree bump_tree;
>> Index: gcc/testsuite/gcc.dg/pr81162.c
>> ===================================================================
>> --- gcc/testsuite/gcc.dg/pr81162.c (nonexistent)
>> +++ gcc/testsuite/gcc.dg/pr81162.c (working copy)
>> @@ -0,0 +1,17 @@
>> +/* PR tree-optimization/81162 */
>> +/* { dg-do run } */
>> +/* { dg-options "-fsanitize=undefined -O2" } */
>> +
>> +short s;
>> +int i1 = 1;
>> +int i2 = 1;
>> +unsigned char uc = 147;
>> +
>> +int main() {
>> + s = (-uc + 2147483647) << 0;
>> + if (9031239389974324562ULL >= (-((i1 && i2) + uc) ^ -21096) ) {
>> + return 0;
>> + } else {
>> + return -1;
>> + }
>> +}
>