On 05/17/2011 09:21 AM, Tom de Vries wrote: > On 05/17/2011 09:10 AM, Tom de Vries wrote: >> Hi Zdenek, >> >> I have a patch set for for PR45098. >> >> 01_object-size-target.patch >> 02_pr45098-rtx-cost-set.patch >> 03_pr45098-computation-cost.patch >> 04_pr45098-iv-init-cost.patch >> 05_pr45098-bound-cost.patch >> 06_pr45098-bound-cost.test.patch >> 07_pr45098-nowrap-limits-iterations.patch >> 08_pr45098-nowrap-limits-iterations.test.patch >> 09_pr45098-shift-add-cost.patch >> 10_pr45098-shift-add-cost.test.patch >> >> I will sent out the patches individually. >> > > OK for trunk? > > Thanks, > - Tom Resubmitting with comment. This patch introduces 3 new testcases, and modifies an existing test case. The 3 new testcases need the preceding patches to pass. The modified test case is ivopt_infer_2.c. #ifndef TYPE #define TYPE char* #endif extern int a[]; /* Can not infer loop iteration from array -- exit test can not be replaced. */ void foo (int i_width, TYPE dst, TYPE src1, TYPE src2) { TYPE dstn= dst + i_width; TYPE dst0 = dst; unsigned long long i = 0; for( ; dst <= dstn; ) { dst0[i] = ( src1[i] + src2[i] + 1 +a[i]) >> 1; dst++; i += 16; } } The estimates in set_max_iterations for this testcase are: (gdb) p /x max_niter $3 = {low = 0x0, high = 0x1} (gdb) p /x max_niter2 $4 = {low = 0x3ffffffffffffff, high = 0x0} The second estimate is based on a[i], which contains the non-wrapping pointer arithmetic a+i. Var i is incremented with 16 each iterations, an a is an int pointer, which explains the factor 64 difference between the 2. 2011-05-05 Tom de Vries PR target/45098 * gcc.target/arm/ivopts-3.c: New test. * gcc.target/arm/ivopts-4.c: New test. * gcc.target/arm/ivopts-5.c: New test. * gcc.dg/tree-ssa/ivopt_infer_2.c: Adapt test.