Submitter | Paolo Carlini |
---|---|

Date | Aug. 1, 2011, 11:35 p.m. |

Message ID | <4E37384B.9010207@oracle.com> |

Download | mbox | patch |

Permalink | /patch/107830/ |

State | New |

Headers | show |

## Comments

On Tue, 2 Aug 2011, Paolo Carlini wrote: > ... oops, due to a missing space I missed an occurrence of abs in > gimple_expand_builtin_pow. I'm restarting bootstrap and test with the below. Ok once abs_hwi materialized. Thanks, Richard.

```
Hi,
> Ok once abs_hwi materialized.
Thanks Richard. 'Unfortunately' it materialized already, in the sense that I wanted to see progress on this issue (also for the sake of a library issue) and took care of committing the patch adding abs_hwi as-is, being already approved by Rth, sorry. Do you want me to tweak it to remove the assert and return the minimum instead, as you suggested in the audit trail? I can do it in a few hours.
Thanks,
Paolo
```

On Tue, 2 Aug 2011, Paolo Carlini wrote: > Hi, > > > Ok once abs_hwi materialized. > > Thanks Richard. 'Unfortunately' it materialized already, in the sense that I wanted to see progress on this issue (also for the sake of a library issue) and took care of committing the patch adding abs_hwi as-is, being already approved by Rth, sorry. Do you want me to tweak it to remove the assert and return the minimum instead, as you suggested in the audit trail? I can do it in a few hours. Well, I was really waiting on a followup from rth or somebody else. I guess rths approval and my comments crossed. I don't care either way - I suppose the approver or the original submitter will have to deal with eventual fallout. It's just that I didn't want to be connected to that ;) Richard.

## Patch

Index: fold-const.c =================================================================== --- fold-const.c (revision 177075) +++ fold-const.c (working copy) @@ -7037,8 +7037,7 @@ fold_plusminus_mult_expr (location_t loc, enum tre int11 = TREE_INT_CST_LOW (arg11); /* Move min of absolute values to int11. */ - if ((int01 >= 0 ? int01 : -int01) - < (int11 >= 0 ? int11 : -int11)) + if (abs_hwi (int01) < abs_hwi (int11)) { tmp = int01, int01 = int11, int11 = tmp; alt0 = arg00, arg00 = arg10, arg10 = alt0; @@ -7048,7 +7047,7 @@ fold_plusminus_mult_expr (location_t loc, enum tre else maybe_same = arg11; - if (exact_log2 (abs (int11)) > 0 && int01 % int11 == 0 + if (exact_log2 (abs_hwi (int11)) > 0 && int01 % int11 == 0 /* The remainder should not be a constant, otherwise we end up folding i * 4 + 2 to (i * 2 + 1) * 2 which has increased the number of multiplications necessary. */ Index: tree-ssa-math-opts.c =================================================================== --- tree-ssa-math-opts.c (revision 177075) +++ tree-ssa-math-opts.c (working copy) @@ -1231,9 +1231,10 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *g /* Attempt to fold powi(arg0, abs(n/2)) into multiplies. If not possible or profitable, give up. Skip the degenerate case when n is 1 or -1, where the result is always 1. */ - if (abs (n) != 1) + if (abs_hwi (n) != 1) { - powi_x_ndiv2 = gimple_expand_builtin_powi (gsi, loc, arg0, abs(n/2)); + powi_x_ndiv2 = gimple_expand_builtin_powi (gsi, loc, arg0, + abs_hwi (n / 2)); if (!powi_x_ndiv2) return NULL_TREE; } @@ -1242,7 +1243,7 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *g result of the optimal multiply sequence just calculated. */ sqrt_arg0 = build_and_insert_call (gsi, loc, &target, sqrtfn, arg0); - if (abs (n) == 1) + if (abs_hwi (n) == 1) result = sqrt_arg0; else result = build_and_insert_binop (gsi, loc, target, MULT_EXPR, @@ -1284,10 +1285,10 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *g /* Attempt to fold powi(arg0, abs(n/3)) into multiplies. If not possible or profitable, give up. Skip the degenerate case when abs(n) < 3, where the result is always 1. */ - if (abs (n) >= 3) + if (abs_hwi (n) >= 3) { powi_x_ndiv3 = gimple_expand_builtin_powi (gsi, loc, arg0, - abs (n / 3)); + abs_hwi (n / 3)); if (!powi_x_ndiv3) return NULL_TREE; } @@ -1297,14 +1298,14 @@ gimple_expand_builtin_pow (gimple_stmt_iterator *g either cbrt(x) or cbrt(x) * cbrt(x). */ cbrt_x = build_and_insert_call (gsi, loc, &target, cbrtfn, arg0); - if (abs (n) % 3 == 1) + if (abs_hwi (n) % 3 == 1) powi_cbrt_x = cbrt_x; else powi_cbrt_x = build_and_insert_binop (gsi, loc, target, MULT_EXPR, cbrt_x, cbrt_x); /* Multiply the two subexpressions, unless powi(x,abs(n)/3) = 1. */ - if (abs (n) < 3) + if (abs_hwi (n) < 3) result = powi_cbrt_x; else result = build_and_insert_binop (gsi, loc, target, MULT_EXPR, Index: tree-ssa-loop-prefetch.c =================================================================== --- tree-ssa-loop-prefetch.c (revision 177075) +++ tree-ssa-loop-prefetch.c (working copy) @@ -1,5 +1,6 @@ /* Array prefetching. - Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. This file is part of GCC. @@ -794,7 +795,7 @@ prune_ref_by_group_reuse (struct mem_ref *ref, str prefetch_before = (hit_from - delta_r + step - 1) / step; /* Do not reduce prefetch_before if we meet beyond cache size. */ - if (prefetch_before > (unsigned) abs (L2_CACHE_SIZE_BYTES / step)) + if (prefetch_before > (unsigned) abs_hwi (L2_CACHE_SIZE_BYTES / step)) prefetch_before = PREFETCH_ALL; if (prefetch_before < ref->prefetch_before) ref->prefetch_before = prefetch_before;