diff mbox

[Ping] Two pending IVOPT patches

Message ID CAHFci28PpJU1LPStpRnoz1dpGQ0PVTMdvh7PJE6u4vYhWQsw4Q@mail.gmail.com
State New
Headers show

Commit Message

Bin.Cheng Jan. 11, 2014, 6:42 a.m. UTC
On Wed, Dec 11, 2013 at 4:18 AM, Jeff Law <law@redhat.com> wrote:
> On 12/10/13 00:01, bin.cheng wrote:
>>
>> Emm, some kind of.  See the cost of iv candidate set consists of several
>> parts, the representation cost in cost pair; the register pressure cost
>> falls in dependence on invariant expressions, etc..  Here iv_ca_has_deps
>> checks whether new cost pair depends on other invariant expression which
>> is
>> not involved before, if so, current algorithm considers the new cost pair
>> has higher cost and just skips.  In fact, the new cost pair may give us
>> lower overall cost even it introduces new dependence(similar to the case I
>> gave).  That's why I used the overall cost comparison for good.
>
> OK.  Thanks for the explanation.
>
>
>>
>> Is this new version patch looks good to you? I will re-test if it's ok.
>
> It does.  Please do some final testing and it should be good to go.
Hi Jeff, sorry for responding the message so late, I have being looked
into something else.
I retested the patch against the trunk, the patch boostrap and
reg-test fine on x86 and x86_64, only causing new failure of one
fortran case 'aliasing_dummy_4.f90' with below command and error
message:
$ x86_64-linux-gnu-gfortran -O2 ../aliasing_dummy_4.f90 -S -o
aliasing_dummy_4.S -fdump-tree-all -fdump-tree-ivopts-details
-fdump-rtl-all-slim -fno-inline
../aliasing_dummy_4.f90: in function ‘test_f90’:
../aliasing_dummy_4.f90:28:0: internal compiler error :Segmentation fault
     call test_sub(s(1, 1)%a(:, :), 1000)  ! Check "normal" references.
 ^
0x87f14be crash_signal
    ../../gcc/gcc/toplev.c:337
0x8786c8b reg_used_between_p(rtx_def const*, rtx_def const*, rtx_def const*)
    ../../gcc/gcc/rtlanal.c:753
0x8efcb66 combine_reaching_defs
    ../../gcc/gcc/ree.c:733
0x8efd4f4 find_and_remove_re
    ../../gcc/gcc/ree.c:973
0x8efd798 rest_of_handle_ree
    ../../gcc/gcc/ree.c:1035
0x8efd810 execute
    ../../gcc/gcc/ree.c:1074
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.

I reduced the case and attached ivopt dumps with/without the patch.
It seems the patch is doing right thing and choosing better
candidates, most likely it reveals an existing bug.
I am looking into this issue, in the meantime, I am wondering should I
apply the patch and file a PR for it, or apply the patch after root
causing it?

Thanks,
bin

> jeff

Comments

Bin.Cheng Jan. 11, 2014, 9:02 a.m. UTC | #1
On Sat, Jan 11, 2014 at 2:42 PM, Bin.Cheng <amker.cheng@gmail.com> wrote:
> On Wed, Dec 11, 2013 at 4:18 AM, Jeff Law <law@redhat.com> wrote:
>> On 12/10/13 00:01, bin.cheng wrote:
>>>
>>> Emm, some kind of.  See the cost of iv candidate set consists of several
>>> parts, the representation cost in cost pair; the register pressure cost
>>> falls in dependence on invariant expressions, etc..  Here iv_ca_has_deps
>>> checks whether new cost pair depends on other invariant expression which
>>> is
>>> not involved before, if so, current algorithm considers the new cost pair
>>> has higher cost and just skips.  In fact, the new cost pair may give us
>>> lower overall cost even it introduces new dependence(similar to the case I
>>> gave).  That's why I used the overall cost comparison for good.
>>
>> OK.  Thanks for the explanation.
>>
>>
>>>
>>> Is this new version patch looks good to you? I will re-test if it's ok.
>>
>> It does.  Please do some final testing and it should be good to go.
> Hi Jeff, sorry for responding the message so late, I have being looked
> into something else.
> I retested the patch against the trunk, the patch boostrap and
> reg-test fine on x86 and x86_64, only causing new failure of one
> fortran case 'aliasing_dummy_4.f90' with below command and error
> message:
> $ x86_64-linux-gnu-gfortran -O2 ../aliasing_dummy_4.f90 -S -o
> aliasing_dummy_4.S -fdump-tree-all -fdump-tree-ivopts-details
> -fdump-rtl-all-slim -fno-inline
> ../aliasing_dummy_4.f90: in function ‘test_f90’:
> ../aliasing_dummy_4.f90:28:0: internal compiler error :Segmentation fault
>      call test_sub(s(1, 1)%a(:, :), 1000)  ! Check "normal" references.
>  ^
> 0x87f14be crash_signal
>     ../../gcc/gcc/toplev.c:337
> 0x8786c8b reg_used_between_p(rtx_def const*, rtx_def const*, rtx_def const*)
>     ../../gcc/gcc/rtlanal.c:753
> 0x8efcb66 combine_reaching_defs
>     ../../gcc/gcc/ree.c:733
> 0x8efd4f4 find_and_remove_re
>     ../../gcc/gcc/ree.c:973
> 0x8efd798 rest_of_handle_ree
>     ../../gcc/gcc/ree.c:1035
> 0x8efd810 execute
>     ../../gcc/gcc/ree.c:1074
> Please submit a full bug report,
> with preprocessed source if appropriate.
> Please include the complete backtrace with any bug report.
> See <http://gcc.gnu.org/bugs.html> for instructions.
>
> I reduced the case and attached ivopt dumps with/without the patch.
> It seems the patch is doing right thing and choosing better
> candidates, most likely it reveals an existing bug.
> I am looking into this issue, in the meantime, I am wondering should I
> apply the patch and file a PR for it, or apply the patch after root
> causing it?
>
The issue happens for below dump before pass ree:
   82: NOTE_INSN_BASIC_BLOCK 4
   83: NOTE_INSN_DELETED
  259: dx:DI=bp:DI
   84: {dx:DI=dx:DI<<0x20;clobber flags:CC;}
   86: r9:DI=zero_extend(r12:SI)
   87: NOTE_INSN_DELETED
   88: {r9:DI=r9:DI|dx:DI;clobber flags:CC;}
  262: r12:DI=r9:DI
   89: NOTE_INSN_DELETED
   90: NOTE_INSN_DELETED
   93: NOTE_INSN_DELETED
   94: NOTE_INSN_DELETED
   ...
It calls reg_used_between_p (r9, insn_262, insn_86), only the problem
is def_insn (262) comes after cand_insn (86), the loop in
reg_used_between_p goes bad at the end of instruction list with
insn==NULL:

  for (insn = NEXT_INSN (from_insn); insn != to_insn; insn = NEXT_INSN (insn))
    if (NONDEBUG_INSN_P (insn)
    && (reg_overlap_mentioned_p (reg, PATTERN (insn))
       || (CALL_P (insn) && find_reg_fusage (insn, USE, reg))))
      return 1;

What I don't understand is how the define instruction comes after the
use?  It doesn't make sense even for a loop.  Any words?

FYI, I attached the whole dump file before ree.

Thanks,
bin
Jakub Jelinek Jan. 11, 2014, 9:07 a.m. UTC | #2
On Sat, Jan 11, 2014 at 05:02:26PM +0800, Bin.Cheng wrote:
> > I reduced the case and attached ivopt dumps with/without the patch.
> > It seems the patch is doing right thing and choosing better
> > candidates, most likely it reveals an existing bug.
> > I am looking into this issue, in the meantime, I am wondering should I
> > apply the patch and file a PR for it, or apply the patch after root
> > causing it?

Sounds like PR59743 which should be already fixed.

	Jakub
Bin.Cheng Jan. 11, 2014, 9:21 a.m. UTC | #3
On Sat, Jan 11, 2014 at 5:07 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Sat, Jan 11, 2014 at 05:02:26PM +0800, Bin.Cheng wrote:
>> > I reduced the case and attached ivopt dumps with/without the patch.
>> > It seems the patch is doing right thing and choosing better
>> > candidates, most likely it reveals an existing bug.
>> > I am looking into this issue, in the meantime, I am wondering should I
>> > apply the patch and file a PR for it, or apply the patch after root
>> > causing it?
>
> Sounds like PR59743 which should be already fixed.
Yes, it is.  I just did the test against trunk exactly before Jeff's fix.
Then I will apply the patch to trunk.

And an additional question: Are these uses before definition always
caused by uninitialized use in GCC?

Thanks,
bin

>
>         Jakub
Jeff Law Jan. 13, 2014, 6:23 a.m. UTC | #4
On 01/11/14 02:07, Jakub Jelinek wrote:
> On Sat, Jan 11, 2014 at 05:02:26PM +0800, Bin.Cheng wrote:
>>> I reduced the case and attached ivopt dumps with/without the patch.
>>> It seems the patch is doing right thing and choosing better
>>> candidates, most likely it reveals an existing bug.
>>> I am looking into this issue, in the meantime, I am wondering should I
>>> apply the patch and file a PR for it, or apply the patch after root
>>> causing it?
>
> Sounds like PR59743 which should be already fixed.
Certainly what it looks like to me as well.
jeff
Jeff Law Jan. 13, 2014, 6:29 a.m. UTC | #5
On 01/11/14 02:21, Bin.Cheng wrote:
> On Sat, Jan 11, 2014 at 5:07 PM, Jakub Jelinek <jakub@redhat.com> wrote:
>> On Sat, Jan 11, 2014 at 05:02:26PM +0800, Bin.Cheng wrote:
>>>> I reduced the case and attached ivopt dumps with/without the patch.
>>>> It seems the patch is doing right thing and choosing better
>>>> candidates, most likely it reveals an existing bug.
>>>> I am looking into this issue, in the meantime, I am wondering should I
>>>> apply the patch and file a PR for it, or apply the patch after root
>>>> causing it?
>>
>> Sounds like PR59743 which should be already fixed.
> Yes, it is.  I just did the test against trunk exactly before Jeff's fix.
> Then I will apply the patch to trunk.
>
> And an additional question: Are these uses before definition always
> caused by uninitialized use in GCC?
In general, no.

Consider a loop where an object's use is guarded (say it only gets used 
on the 2nd and later iterations) and the set is unguarded.  ISTM that 
the reaching def would be from a later insn in the loop.

jeff
Bin.Cheng Jan. 13, 2014, 6:53 a.m. UTC | #6
On Mon, Jan 13, 2014 at 2:29 PM, Jeff Law <law@redhat.com> wrote:
> On 01/11/14 02:21, Bin.Cheng wrote:
>>
>> On Sat, Jan 11, 2014 at 5:07 PM, Jakub Jelinek <jakub@redhat.com> wrote:
>>>
>>> On Sat, Jan 11, 2014 at 05:02:26PM +0800, Bin.Cheng wrote:
>>>>>
>>>>> I reduced the case and attached ivopt dumps with/without the patch.
>>>>> It seems the patch is doing right thing and choosing better
>>>>> candidates, most likely it reveals an existing bug.
>>>>> I am looking into this issue, in the meantime, I am wondering should I
>>>>> apply the patch and file a PR for it, or apply the patch after root
>>>>> causing it?
>>>
>>>
>>> Sounds like PR59743 which should be already fixed.
>>
>> Yes, it is.  I just did the test against trunk exactly before Jeff's fix.
>> Then I will apply the patch to trunk.
>>
>> And an additional question: Are these uses before definition always
>> caused by uninitialized use in GCC?
>
> In general, no.
>
> Consider a loop where an object's use is guarded (say it only gets used on
> the 2nd and later iterations) and the set is unguarded.  ISTM that the
> reaching def would be from a later insn in the loop.
I see, thanks for elaborating.
BTW, I applied the approved patch as revision 206552, and there should
be no case violated anymore.

Thanks,
bin

>
> jeff
>
diff mbox

Patch


;; Function test_sub.constprop (test_sub.2307.constprop.0, funcdef_no=3, decl_uid=2519, symbol_order=9) (executed once)

test_sub.constprop (struct array2_integer(kind=4) & restrict array, integer(kind=4) & restrict offset)
{
  integer(kind=4)[0:D.2525] * restrict array.0;
  integer(kind=4) & restrict offset;
  integer(kind=4) _18;
  integer(kind=4) _20;
  integer(kind=4) _53;
  integer(kind=4) _54;
  integer(kind=4) _56;
  integer(kind=4) _57;
  integer(kind=4) _63;
  integer(kind=4) _64;

  <bb 2>:
  array.0_3 = array_1(D)->data;
  _18 = MEM[(integer(kind=4)[0:D.2326] *)array.0_3][0];
  _20 = _18 + 1000;
  MEM[(integer(kind=4)[0:D.2326] *)array.0_3][0] = _20;
  _54 = MEM[(integer(kind=4)[0:D.2326] *)array.0_3][1];
  _53 = _54 + 1000;
  MEM[(integer(kind=4)[0:D.2326] *)array.0_3][1] = _53;
  _56 = MEM[(integer(kind=4)[0:D.2326] *)array.0_3][2];
  _57 = _56 + 1000;
  MEM[(integer(kind=4)[0:D.2326] *)array.0_3][2] = _57;
  _63 = MEM[(integer(kind=4)[0:D.2326] *)array.0_3][3];
  _64 = _63 + 1000;
  MEM[(integer(kind=4)[0:D.2326] *)array.0_3][3] = _64;
  return;

}



;; Function test_f90 (MAIN__, funcdef_no=0, decl_uid=2289, symbol_order=1) (executed once)

;;
;; Loop 9
;;  header 9, latch 8
;;  depth 1, outer 0
;;  nodes: 9 8
Processing loop 9
  single exit 9 -> 10, exit condition if (ivtmp_211 == 0)


Analyzing # of iterations of loop 9
  exit condition [1, + , 4294967295] != 0
  bounds on difference of bases: -1 ... -1
  result:
    # of iterations 1, bounded by 1
  number of iterations 1

Induction variables:

ssa name count1.12_36
  type integer(kind=8)
  base 9
  step 4
ssa name count1.12_76
  type integer(kind=8)
  base 11
  step 4
ssa name _92
  type integer(kind=8)
  base 1
  step 1
ssa name _93
  type integer(kind=8)
  base pretmp_173 + 1
  step 1
ssa name _94
  type integer(kind=8)
  base pretmp_173 + -2
  step 1
ssa name l.10_95
  type integer(kind=4)
  base 1
  step 1
  is a biv
ssa name count1.12_97
  type integer(kind=8)
  base 10
  step 4
ssa name count.44_102
  type integer(kind=4)
  base 2
  step -1
  is a biv
ssa name l.10_103
  type integer(kind=4)
  base 2
  step 1
  is a biv
ssa name count.44_104
  type integer(kind=4)
  base 1
  step -1
  is a biv
ssa name count1.12_131
  type integer(kind=8)
  base 8
  step 4
  is a biv
ssa name count1.12_136
  type integer(kind=8)
  base 12
  step 4
  is a biv
ssa name ivtmp_191
  type unsigned int
  base 2
  step 4294967295
  is a biv
ssa name ivtmp_211
  type unsigned int
  base 1
  step 4294967295
  is a biv
Uses:

use 0
  address
  in statement _147 = temp.25[count1.12_131];

  at position temp.25[count1.12_131]
  type integer(kind=4) *
  base (integer(kind=4) *) &temp.25 + 32
  step 16
  base object (void *) &temp.25
  related candidates 
use 1
  address
  in statement MEM[(integer(kind=4)[4] *)&s][_94].a[0] = _147;

  at position MEM[(integer(kind=4)[4] *)&s][_94].a[0]
  type integer(kind=4) *
  base (integer(kind=4) *) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551584))
  step 16
  base object (void *) &s
  related candidates 
use 2
  address
  in statement _130 = temp.25[count1.12_36];

  at position temp.25[count1.12_36]
  type integer(kind=4) *
  base (integer(kind=4) *) &temp.25 + 36
  step 16
  base object (void *) &temp.25
  related candidates 
use 3
  address
  in statement MEM[(integer(kind=4)[4] *)&s][_94].a[1] = _130;

  at position MEM[(integer(kind=4)[4] *)&s][_94].a[1]
  type integer(kind=4) *
  base (integer(kind=4) *) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551588))
  step 16
  base object (void *) &s
  related candidates 
use 4
  address
  in statement _74 = temp.25[count1.12_97];

  at position temp.25[count1.12_97]
  type integer(kind=4) *
  base (integer(kind=4) *) &temp.25 + 40
  step 16
  base object (void *) &temp.25
  related candidates 
use 5
  address
  in statement MEM[(integer(kind=4)[4] *)&s][_94].a[2] = _74;

  at position MEM[(integer(kind=4)[4] *)&s][_94].a[2]
  type integer(kind=4) *
  base (integer(kind=4) *) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551592))
  step 16
  base object (void *) &s
  related candidates 
use 6
  address
  in statement _78 = temp.25[count1.12_76];

  at position temp.25[count1.12_76]
  type integer(kind=4) *
  base (integer(kind=4) *) &temp.25 + 44
  step 16
  base object (void *) &temp.25
  related candidates 
use 7
  address
  in statement MEM[(integer(kind=4)[4] *)&s][_94].a[3] = _78;

  at position MEM[(integer(kind=4)[4] *)&s][_94].a[3]
  type integer(kind=4) *
  base (integer(kind=4) *) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551596))
  step 16
  base object (void *) &s
  related candidates 
use 8
  compare
  in statement if (ivtmp_211 == 0)

  at position 
  type unsigned int
  base 1
  step 4294967295
  is a biv
  related candidates 

  count1.12_161 is invariant (1), eliminable
  pretmp_173 is invariant (2), eliminable

candidate 0 (important)
  var_before ivtmp.58
  var_after ivtmp.58
  incremented before exit test
  type unsigned int
  base 0
  step 1
candidate 1 (important)
  var_before ivtmp.59
  var_after ivtmp.59
  incremented before exit test
  type unsigned long
  base 0
  step 1
candidate 2 (important)
  var_before ivtmp.60
  var_after ivtmp.60
  incremented before exit test
  type unsigned int
  base 1
  step 1
candidate 3 (important)
  original biv
  type integer(kind=4)
  base 1
  step 1
candidate 4 (important)
  var_before ivtmp.61
  var_after ivtmp.61
  incremented before exit test
  type unsigned int
  base 2
  step 4294967295
candidate 5 (important)
  var_before ivtmp.62
  var_after ivtmp.62
  incremented before exit test
  type unsigned int
  base 0
  step 4294967295
candidate 6 (important)
  original biv
  type integer(kind=4)
  base 2
  step -1
candidate 7 (important)
  var_before ivtmp.63
  var_after ivtmp.63
  incremented before exit test
  type unsigned int
  base 2
  step 1
candidate 8 (important)
  var_before ivtmp.64
  var_after ivtmp.64
  incremented before exit test
  type unsigned int
  base 1
  step 4294967295
candidate 9 (important)
  var_before ivtmp.65
  var_after ivtmp.65
  incremented before exit test
  type unsigned long
  base 8
  step 4
candidate 10 (important)
  var_before ivtmp.66
  var_after ivtmp.66
  incremented before exit test
  type unsigned long
  base 0
  step 4
candidate 11 (important)
  original biv
  type integer(kind=8)
  base 8
  step 4
candidate 12 (important)
  var_before ivtmp.67
  var_after ivtmp.67
  incremented before exit test
  type unsigned long
  base 12
  step 4
candidate 13 (important)
  original biv
  type unsigned int
  base 2
  step 4294967295
candidate 14
  var_before ivtmp.68
  var_after ivtmp.68
  incremented before exit test
  type unsigned long
  base (unsigned long) ((integer(kind=4) *) &temp.25 + 32)
  step 16
  base object (void *) &temp.25
Candidate 14 is related to use 0
candidate 15 (important)
  var_before ivtmp.69
  var_after ivtmp.69
  incremented before exit test
  type sizetype
  base 0
  step 16
Candidate 15 is related to use 0
candidate 16
  var_before ivtmp.70
  var_after ivtmp.70
  incremented before exit test
  type unsigned long
  base (unsigned long) &temp.25
  step 16
  base object (void *) &temp.25
Candidate 16 is related to use 0
candidate 17
  var_before ivtmp.71
  var_after ivtmp.71
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551584))
  step 16
  base object (void *) &s
Candidate 17 is related to use 1
Candidate 15 is related to use 1
candidate 18
  var_before ivtmp.72
  var_after ivtmp.72
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + (sizetype) pretmp_173 * 16)
  step 16
  base object (void *) &s
Candidate 18 is related to use 1
candidate 19
  var_before ivtmp.73
  var_after ivtmp.73
  incremented before exit test
  type unsigned long
  base (unsigned long) ((integer(kind=4) *) &temp.25 + 36)
  step 16
  base object (void *) &temp.25
Candidate 19 is related to use 2
Candidate 15 is related to use 2
Candidate 16 is related to use 2
candidate 20
  var_before ivtmp.74
  var_after ivtmp.74
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551588))
  step 16
  base object (void *) &s
Candidate 20 is related to use 3
Candidate 15 is related to use 3
Candidate 18 is related to use 3
candidate 21
  var_before ivtmp.75
  var_after ivtmp.75
  incremented before exit test
  type unsigned long
  base (unsigned long) ((integer(kind=4) *) &temp.25 + 40)
  step 16
  base object (void *) &temp.25
Candidate 21 is related to use 4
Candidate 15 is related to use 4
Candidate 16 is related to use 4
candidate 22
  var_before ivtmp.76
  var_after ivtmp.76
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551592))
  step 16
  base object (void *) &s
Candidate 22 is related to use 5
Candidate 15 is related to use 5
Candidate 18 is related to use 5
candidate 23
  var_before ivtmp.77
  var_after ivtmp.77
  incremented before exit test
  type unsigned long
  base (unsigned long) ((integer(kind=4) *) &temp.25 + 44)
  step 16
  base object (void *) &temp.25
Candidate 23 is related to use 6
Candidate 15 is related to use 6
Candidate 16 is related to use 6
candidate 24
  var_before ivtmp.78
  var_after ivtmp.78
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551596))
  step 16
  base object (void *) &s
Candidate 24 is related to use 7
Candidate 15 is related to use 7
Candidate 18 is related to use 7
Candidate 8 is related to use 8
Candidate 5 is related to use 8
Candidate 5 is related to use 8
force_expr_to_var_cost size costs:
  integer 0
  symbol 1
  address 1
  other 16

force_expr_to_var_cost speed costs:
  integer 0
  symbol 1
  address 1
  other 16

get_address_cost:
  min offset SI -2147483648
  max offset SI 2147483647
  allowed multipliers: 1 2 4 8

Address costs:
  index costs 2
  sym + index costs 2
  var + index costs 3
  sym + var + index costs 3
  cst + index costs 2
  sym + cst + index costs 4
  var + cst + index costs 3
  sym + var + cst + index costs 8
  rat * index costs 2
  sym + rat * index costs 2
  var + rat * index costs 3
  sym + var + rat * index costs 3
  cst + rat * index costs 2
  sym + cst + rat * index costs 4
  var + cst + rat * index costs 3
  sym + var + cst + rat * index costs 8

Candidate costs:
  cand	cost
  0	7
  1	7
  2	7
  3	7
  4	7
  5	7
  6	7
  7	7
  8	7
  9	7
  10	7
  11	7
  12	7
  13	7
  14	7
  15	7
  16	5
  17	13
  18	15
  19	7
  20	13
  21	7
  22	13
  23	7
  24	13

Use-candidate costs:
Use 0:
  cand	cost	compl.	depends on
  1	7	2	 inv_expr:0
  9	3	2	 inv_expr:1
  10	3	3	 inv_expr:0
  11	3	2	 inv_expr:1
  12	3	3	 inv_expr:2
  14	2	0	
  15	3	2	 inv_expr:0
  16	2	1	
  19	2	1	
  21	2	1	
  23	2	1	

Use 1:
  cand	cost	compl.	depends on
  1	17	2	 inv_expr:3
  9	13	3	 inv_expr:4
  10	13	3	 inv_expr:3
  11	13	3	 inv_expr:4
  12	13	3	 inv_expr:5
  15	13	2	 inv_expr:3
  17	2	0	
  18	2	1	
  20	2	1	
  22	2	1	
  24	2	1	

Use 2:
  cand	cost	compl.	depends on
  1	7	2	 inv_expr:6
  9	3	3	 inv_expr:7
  10	3	3	 inv_expr:6
  11	3	3	 inv_expr:7
  12	3	3	 inv_expr:8
  14	2	1	
  15	3	2	 inv_expr:6
  16	2	1	
  19	2	0	
  21	2	1	
  23	2	1	

Use 3:
  cand	cost	compl.	depends on
  1	17	2	 inv_expr:9
  9	13	3	 inv_expr:10
  10	13	3	 inv_expr:9
  11	13	3	 inv_expr:10
  12	13	3	 inv_expr:11
  15	13	2	 inv_expr:9
  17	2	1	
  18	2	1	
  20	2	0	
  22	2	1	
  24	2	1	

Use 4:
  cand	cost	compl.	depends on
  1	7	2	 inv_expr:12
  9	3	3	 inv_expr:13
  10	3	3	 inv_expr:12
  11	3	3	 inv_expr:13
  12	3	3	 inv_expr:14
  14	2	1	
  15	3	2	 inv_expr:12
  16	2	1	
  19	2	1	
  21	2	0	
  23	2	1	

Use 5:
  cand	cost	compl.	depends on
  1	17	2	 inv_expr:15
  9	13	3	 inv_expr:16
  10	13	3	 inv_expr:15
  11	13	3	 inv_expr:16
  12	13	3	 inv_expr:17
  15	13	2	 inv_expr:15
  17	2	1	
  18	2	1	
  20	2	1	
  22	2	0	
  24	2	1	

Use 6:
  cand	cost	compl.	depends on
  1	7	2	 inv_expr:18
  9	3	3	 inv_expr:19
  10	3	3	 inv_expr:18
  11	3	3	 inv_expr:19
  12	3	3	 inv_expr:20
  14	2	1	
  15	3	2	 inv_expr:18
  16	2	1	
  19	2	1	
  21	2	1	
  23	2	0	

Use 7:
  cand	cost	compl.	depends on
  1	17	2	 inv_expr:21
  9	13	3	 inv_expr:22
  10	13	3	 inv_expr:21
  11	13	3	 inv_expr:22
  12	13	3	 inv_expr:23
  15	13	2	 inv_expr:21
  17	2	1	
  18	2	1	
  20	2	1	
  22	2	1	
  24	2	0	

Use 8:
  cand	cost	compl.	depends on
  0	0	0	
  1	0	0	
  2	0	0	
  3	0	0	
  4	0	0	
  5	0	0	
  6	0	0	
  7	0	0	
  8	0	0	
  9	0	0	
  10	0	0	
  11	0	0	
  12	0	0	
  13	-1	0	
  14	2	0	
  15	0	0	
  16	2	0	
  17	10	0	2
  18	12	0	2
  19	2	0	
  20	8	0	2
  21	2	0	
  22	8	0	2
  23	2	0	
  24	8	0	2


Global costs:
  target_avail_regs 15
  target_clobbered_regs 9
  target_reg_cost 4
  target_spill_cost 16
  regs_used 0
  cost for size:
  ivs	cost
  0	0
  1	1
  2	2
  3	3
  4	4
  5	5
  6	6
  7	7
  8	8
  9	9
  10	10
  11	11
  12	12
  13	39
  14	42
  15	45
  16	144
  17	153
  18	162
  19	171
  20	180
  21	189
  22	198
  23	207
  24	216
  25	225
  26	234
  27	243
  28	252
  29	261
  30	270

Initial set of candidates:
  cost: 80 (complexity 23)
  cand_cost: 7
  cand_use_cost: 64 (complexity 23)
  candidates: 9
   use:0 --> iv_cand:9, cost=(3,2)
   use:1 --> iv_cand:9, cost=(13,3)
   use:2 --> iv_cand:9, cost=(3,3)
   use:3 --> iv_cand:9, cost=(13,3)
   use:4 --> iv_cand:9, cost=(3,3)
   use:5 --> iv_cand:9, cost=(13,3)
   use:6 --> iv_cand:9, cost=(3,3)
   use:7 --> iv_cand:9, cost=(13,3)
   use:8 --> iv_cand:9, cost=(0,0)


Improved to:
  cost: 46 (complexity 14)
  cand_cost: 20
  cand_use_cost: 20 (complexity 14)
  candidates: 9, 17
   use:0 --> iv_cand:9, cost=(3,2)
   use:1 --> iv_cand:17, cost=(2,0)
   use:2 --> iv_cand:9, cost=(3,3)
   use:3 --> iv_cand:17, cost=(2,1)
   use:4 --> iv_cand:9, cost=(3,3)
   use:5 --> iv_cand:17, cost=(2,1)
   use:6 --> iv_cand:9, cost=(3,3)
   use:7 --> iv_cand:17, cost=(2,1)
   use:8 --> iv_cand:9, cost=(0,0)


Improved to:
  cost: 38 (complexity 7)
  cand_cost: 18
  cand_use_cost: 18 (complexity 7)
  candidates: 16, 17
   use:0 --> iv_cand:16, cost=(2,1)
   use:1 --> iv_cand:17, cost=(2,0)
   use:2 --> iv_cand:16, cost=(2,1)
   use:3 --> iv_cand:17, cost=(2,1)
   use:4 --> iv_cand:16, cost=(2,1)
   use:5 --> iv_cand:17, cost=(2,1)
   use:6 --> iv_cand:16, cost=(2,1)
   use:7 --> iv_cand:17, cost=(2,1)
   use:8 --> iv_cand:16, cost=(2,0)


Initial set of candidates:
  cost: 80 (complexity 16)
  cand_cost: 7
  cand_use_cost: 64 (complexity 16)
  candidates: 15
   use:0 --> iv_cand:15, cost=(3,2)
   use:1 --> iv_cand:15, cost=(13,2)
   use:2 --> iv_cand:15, cost=(3,2)
   use:3 --> iv_cand:15, cost=(13,2)
   use:4 --> iv_cand:15, cost=(3,2)
   use:5 --> iv_cand:15, cost=(13,2)
   use:6 --> iv_cand:15, cost=(3,2)
   use:7 --> iv_cand:15, cost=(13,2)
   use:8 --> iv_cand:15, cost=(0,0)


Improved to:
  cost: 46 (complexity 11)
  cand_cost: 20
  cand_use_cost: 20 (complexity 11)
  candidates: 15, 17
   use:0 --> iv_cand:15, cost=(3,2)
   use:1 --> iv_cand:17, cost=(2,0)
   use:2 --> iv_cand:15, cost=(3,2)
   use:3 --> iv_cand:17, cost=(2,1)
   use:4 --> iv_cand:15, cost=(3,2)
   use:5 --> iv_cand:17, cost=(2,1)
   use:6 --> iv_cand:15, cost=(3,2)
   use:7 --> iv_cand:17, cost=(2,1)
   use:8 --> iv_cand:15, cost=(0,0)


Improved to:
  cost: 38 (complexity 7)
  cand_cost: 18
  cand_use_cost: 18 (complexity 7)
  candidates: 16, 17
   use:0 --> iv_cand:16, cost=(2,1)
   use:1 --> iv_cand:17, cost=(2,0)
   use:2 --> iv_cand:16, cost=(2,1)
   use:3 --> iv_cand:17, cost=(2,1)
   use:4 --> iv_cand:16, cost=(2,1)
   use:5 --> iv_cand:17, cost=(2,1)
   use:6 --> iv_cand:16, cost=(2,1)
   use:7 --> iv_cand:17, cost=(2,1)
   use:8 --> iv_cand:16, cost=(2,0)


Original cost 38 (complexity 7)

Final cost 38 (complexity 7)


Selected IV set: 
candidate 16
  var_before ivtmp.70_17
  var_after ivtmp.70_20
  incremented before exit test
  type unsigned long
  base (unsigned long) &temp.25
  step 16
  base object (void *) &temp.25
candidate 17
  var_before ivtmp.71_24
  var_after ivtmp.71_25
  incremented before exit test
  type unsigned long
  base (unsigned long) (&s + ((sizetype) pretmp_173 * 16 + 18446744073709551584))
  step 16
  base object (void *) &s

Replacing exit test: if (ivtmp_211 == 0)
;;
;; Loop 2
;;  header 6, latch 5
;;  depth 2, outer 1
;;  nodes: 6 5
Processing loop 2
  single exit 6 -> 7, exit condition if (ivtmp_198 == 0)


Analyzing # of iterations of loop 2
  exit condition [1, + , 4294967295] != 0
  bounds on difference of bases: -1 ... -1
  result:
    # of iterations 1, bounded by 1
  number of iterations 1

Induction variables:

ssa name l.10_86
  type integer(kind=4)
  base 2
  step 1
  is a biv
ssa name count.40_87
  type integer(kind=4)
  base 1
  step -1
  is a biv
ssa name count1.12_125
  type integer(kind=8)
  base count1.12_124
  step 4
  is a biv
ssa name count.40_133
  type integer(kind=4)
  base 2
  step -1
  is a biv
ssa name count1.12_153
  type integer(kind=8)
  base count1.12_124 + 2
  step 4
ssa name count1.12_175
  type integer(kind=8)
  base count1.12_124 + 1
  step 4
ssa name count1.12_177
  type integer(kind=8)
  base count1.12_124 + 3
  step 4
ssa name count1.12_182
  type integer(kind=8)
  base count1.12_124 + 4
  step 4
  is a biv
ssa name l.10_186
  type integer(kind=4)
  base 1
  step 1
  is a biv
ssa name _192
  type integer(kind=4)
  base pretmp_79 + 1
  step 1
ssa name _193
  type integer(kind=4)
  base pretmp_79 + 101
  step 1
ssa name _196
  type integer(kind=4)
  base 2
  step 2
ssa name ivtmp_198
  type unsigned int
  base 1
  step 4294967295
  is a biv
ssa name _199
  type integer(kind=4)
  base pretmp_79 + 2
  step 2
ssa name _200
  type integer(kind=4)
  base pretmp_79 + 102
  step 2
ssa name ivtmp_208
  type unsigned int
  base 2
  step 4294967295
  is a biv
ssa name _212
  type integer(kind=4)
  base pretmp_39 + 1
  step 1
ssa name _213
  type integer(kind=4)
  base pretmp_39 + 101
  step 1
ssa name _219
  type integer(kind=4)
  base pretmp_39 + 2
  step 2
ssa name _220
  type integer(kind=4)
  base pretmp_39 + 102
  step 2
Uses:

use 0
  generic
  in statement _193 = _192 + 100;

  at position 
  type integer(kind=4)
  base pretmp_79 + 101
  step 1
  related candidates 
use 1
  generic
  in statement _200 = _199 + 100;

  at position 
  type integer(kind=4)
  base pretmp_79 + 102
  step 2
  related candidates 
use 2
  generic
  in statement _213 = _212 + 100;

  at position 
  type integer(kind=4)
  base pretmp_39 + 101
  step 1
  related candidates 
use 3
  generic
  in statement _220 = _219 + 100;

  at position 
  type integer(kind=4)
  base pretmp_39 + 102
  step 2
  related candidates 
use 4
  address
  in statement temp.25[count1.12_125] = _45;

  at position temp.25[count1.12_125]
  type integer(kind=4) *
  base (integer(kind=4) *) (&temp.25 + (sizetype) count1.12_124 * 4)
  step 16
  base object (void *) &temp.25
  related candidates 
use 5
  address
  in statement temp.25[count1.12_175] = _155;

  at position temp.25[count1.12_175]
  type integer(kind=4) *
  base (integer(kind=4) *) (&temp.25 + ((sizetype) count1.12_124 + 1) * 4)
  step 16
  base object (void *) &temp.25
  related candidates 
use 6
  address
  in statement temp.25[count1.12_153] = _121;

  at position temp.25[count1.12_153]
  type integer(kind=4) *
  base (integer(kind=4) *) (&temp.25 + ((sizetype) count1.12_124 + 2) * 4)
  step 16
  base object (void *) &temp.25
  related candidates 
use 7
  address
  in statement temp.25[count1.12_177] = _180;

  at position temp.25[count1.12_177]
  type integer(kind=4) *
  base (integer(kind=4) *) (&temp.25 + ((sizetype) count1.12_124 + 3) * 4)
  step 16
  base object (void *) &temp.25
  related candidates 
use 8
  compare
  in statement if (ivtmp_198 == 0)

  at position 
  type unsigned int
  base 1
  step 4294967295
  is a biv
  related candidates 

  pretmp_39 is invariant (3), eliminable
  pretmp_79 is invariant (2), eliminable
  count1.12_124 is invariant (1), eliminable

candidate 0 (important)
  var_before ivtmp.80
  var_after ivtmp.80
  incremented before exit test
  type unsigned int
  base 0
  step 1
candidate 1 (important)
  var_before ivtmp.81
  var_after ivtmp.81
  incremented before exit test
  type unsigned long
  base 0
  step 1
candidate 2 (important)
  var_before ivtmp.82
  var_after ivtmp.82
  incremented before exit test
  type unsigned int
  base 2
  step 1
candidate 3 (important)
  var_before ivtmp.83
  var_after ivtmp.83
  incremented before exit test
  type unsigned int
  base 1
  step 4294967295
candidate 4 (important)
  var_before ivtmp.84
  var_after ivtmp.84
  incremented before exit test
  type unsigned int
  base 0
  step 4294967295
candidate 5 (important)
  var_before ivtmp.85
  var_after ivtmp.85
  incremented before exit test
  type unsigned long
  base (unsigned long) count1.12_124
  step 4
candidate 6 (important)
  var_before ivtmp.86
  var_after ivtmp.86
  incremented before exit test
  type unsigned long
  base 0
  step 4
candidate 7 (important)
  original biv
  type integer(kind=8)
  base count1.12_124
  step 4
candidate 8 (important)
  var_before ivtmp.87
  var_after ivtmp.87
  incremented before exit test
  type unsigned int
  base 2
  step 4294967295
candidate 9 (important)
  original biv
  type integer(kind=4)
  base 2
  step -1
candidate 10 (important)
  var_before ivtmp.88
  var_after ivtmp.88
  incremented before exit test
  type unsigned long
  base (unsigned long) (count1.12_124 + 4)
  step 4
candidate 11 (important)
  var_before ivtmp.89
  var_after ivtmp.89
  incremented before exit test
  type unsigned int
  base 1
  step 1
candidate 12 (important)
  original biv
  type integer(kind=4)
  base 1
  step 1
candidate 13 (important)
  original biv
  type unsigned int
  base 2
  step 4294967295
candidate 14
  var_before ivtmp.90
  var_after ivtmp.90
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_79 + 101)
  step 1
Candidate 14 is related to use 0
Candidate 0 is related to use 0
candidate 15
  var_before ivtmp.91
  var_after ivtmp.91
  incremented before exit test
  type unsigned int
  base (unsigned int) pretmp_79
  step 1
Candidate 15 is related to use 0
candidate 16
  var_before ivtmp.92
  var_after ivtmp.92
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_79 + 102)
  step 2
Candidate 16 is related to use 1
candidate 17 (important)
  var_before ivtmp.93
  var_after ivtmp.93
  incremented before exit test
  type unsigned int
  base 0
  step 2
Candidate 17 is related to use 1
candidate 18
  var_before ivtmp.94
  var_after ivtmp.94
  incremented before exit test
  type unsigned int
  base (unsigned int) pretmp_79
  step 2
Candidate 18 is related to use 1
candidate 19
  var_before ivtmp.95
  var_after ivtmp.95
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_39 + 101)
  step 1
Candidate 19 is related to use 2
Candidate 0 is related to use 2
candidate 20
  var_before ivtmp.96
  var_after ivtmp.96
  incremented before exit test
  type unsigned int
  base (unsigned int) pretmp_39
  step 1
Candidate 20 is related to use 2
candidate 21
  var_before ivtmp.97
  var_after ivtmp.97
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_39 + 102)
  step 2
Candidate 21 is related to use 3
Candidate 17 is related to use 3
candidate 22
  var_before ivtmp.98
  var_after ivtmp.98
  incremented before exit test
  type unsigned int
  base (unsigned int) pretmp_39
  step 2
Candidate 22 is related to use 3
candidate 23
  var_before ivtmp.99
  var_after ivtmp.99
  incremented before exit test
  type unsigned long
  base (unsigned long) (&temp.25 + (sizetype) count1.12_124 * 4)
  step 16
  base object (void *) &temp.25
Candidate 23 is related to use 4
candidate 24 (important)
  var_before ivtmp.100
  var_after ivtmp.100
  incremented before exit test
  type sizetype
  base 0
  step 16
Candidate 24 is related to use 4
candidate 25
  var_before ivtmp.101
  var_after ivtmp.101
  incremented before exit test
  type unsigned long
  base (unsigned long) (&temp.25 + ((sizetype) count1.12_124 + 1) * 4)
  step 16
  base object (void *) &temp.25
Candidate 25 is related to use 5
Candidate 24 is related to use 5
Candidate 23 is related to use 5
candidate 26
  var_before ivtmp.102
  var_after ivtmp.102
  incremented before exit test
  type unsigned long
  base (unsigned long) (&temp.25 + ((sizetype) count1.12_124 + 2) * 4)
  step 16
  base object (void *) &temp.25
Candidate 26 is related to use 6
Candidate 24 is related to use 6
Candidate 23 is related to use 6
candidate 27
  var_before ivtmp.103
  var_after ivtmp.103
  incremented before exit test
  type unsigned long
  base (unsigned long) (&temp.25 + ((sizetype) count1.12_124 + 3) * 4)
  step 16
  base object (void *) &temp.25
Candidate 27 is related to use 7
Candidate 24 is related to use 7
Candidate 23 is related to use 7
Candidate 3 is related to use 8
Candidate 4 is related to use 8
Candidate 4 is related to use 8
Candidate costs:
  cand	cost
  0	7
  1	7
  2	7
  3	7
  4	7
  5	7
  6	7
  7	7
  8	7
  9	7
  10	7
  11	7
  12	7
  13	7
  14	7
  15	7
  16	7
  17	7
  18	7
  19	7
  20	7
  21	7
  22	7
  23	8
  24	7
  25	10
  26	10
  27	10

Use-candidate costs:
Use 0:
  cand	cost	compl.	depends on
  0	6	1	 inv_expr:0
  1	8	0	
  2	6	1	 inv_expr:1
  3	6	1	 inv_expr:2
  4	6	1	 inv_expr:0
  8	6	1	 inv_expr:3
  9	6	1	 inv_expr:3
  11	6	1	 inv_expr:4
  12	6	1	 inv_expr:4
  13	6	1	 inv_expr:3
  14	0	0	
  15	4	1	
  19	6	0	 inv_expr:5
  20	8	1	 inv_expr:6

Use 1:
  cand	cost	compl.	depends on
  0	10	1	 inv_expr:2
  1	12	0	
  2	10	1	 inv_expr:7
  3	10	1	 inv_expr:8
  4	10	1	 inv_expr:2
  8	10	1	 inv_expr:9
  9	10	1	 inv_expr:9
  11	10	1	 inv_expr:4
  12	10	1	 inv_expr:4
  13	10	1	 inv_expr:9
  14	16	1	 inv_expr:10
  15	14	1	 inv_expr:11
  16	0	0	
  17	6	1	 inv_expr:2
  18	4	1	
  19	16	1	 inv_expr:12
  20	14	1	 inv_expr:13
  21	6	0	 inv_expr:5
  22	8	1	 inv_expr:14

Use 2:
  cand	cost	compl.	depends on
  0	6	1	 inv_expr:15
  1	8	0	
  2	6	1	 inv_expr:16
  3	6	1	 inv_expr:17
  4	6	1	 inv_expr:15
  8	6	1	 inv_expr:18
  9	6	1	 inv_expr:18
  11	6	1	 inv_expr:19
  12	6	1	 inv_expr:19
  13	6	1	 inv_expr:18
  14	6	0	 inv_expr:20
  15	8	1	 inv_expr:21
  19	0	0	
  20	4	1	

Use 3:
  cand	cost	compl.	depends on
  0	10	1	 inv_expr:17
  1	12	0	
  2	10	1	 inv_expr:22
  3	10	1	 inv_expr:23
  4	10	1	 inv_expr:17
  8	10	1	 inv_expr:24
  9	10	1	 inv_expr:24
  11	10	1	 inv_expr:19
  12	10	1	 inv_expr:19
  13	10	1	 inv_expr:24
  14	16	1	 inv_expr:25
  15	14	1	 inv_expr:26
  16	6	0	 inv_expr:20
  17	6	1	 inv_expr:17
  18	8	1	 inv_expr:27
  19	16	1	 inv_expr:28
  20	14	1	 inv_expr:29
  21	0	0	
  22	4	1	

Use 4:
  cand	cost	compl.	depends on
  1	10	1	 inv_expr:30
  5	3	2	 inv_expr:31
  6	6	2	 inv_expr:30
  7	3	2	 inv_expr:31
  10	3	3	 inv_expr:32
  23	2	0	
  24	6	1	 inv_expr:30
  25	2	1	
  26	2	1	
  27	2	1	

Use 5:
  cand	cost	compl.	depends on
  1	10	2	 inv_expr:33
  5	3	3	 inv_expr:34
  6	6	3	 inv_expr:33
  7	3	3	 inv_expr:34
  10	3	3	 inv_expr:35
  23	2	1	
  24	6	2	 inv_expr:33
  25	2	0	
  26	2	1	
  27	2	1	

Use 6:
  cand	cost	compl.	depends on
  1	10	2	 inv_expr:36
  5	3	3	 inv_expr:37
  6	6	3	 inv_expr:36
  7	3	3	 inv_expr:37
  10	3	3	 inv_expr:38
  23	2	1	
  24	6	2	 inv_expr:36
  25	2	1	
  26	2	0	
  27	2	1	

Use 7:
  cand	cost	compl.	depends on
  1	10	2	 inv_expr:39
  5	3	3	 inv_expr:40
  6	6	3	 inv_expr:39
  7	3	3	 inv_expr:40
  10	3	3	 inv_expr:41
  23	2	1	
  24	6	2	 inv_expr:39
  25	2	1	
  26	2	1	
  27	2	0	

Use 8:
  cand	cost	compl.	depends on
  0	0	0	
  1	0	0	
  2	0	0	
  3	0	0	
  4	0	0	
  5	2	0	1
  6	0	0	
  7	2	0	1
  8	0	0	
  9	0	0	
  10	2	0	1
  11	0	0	
  12	0	0	
  13	-1	0	
  14	2	0	2
  15	2	0	2
  16	2	0	2
  17	0	0	
  18	2	0	2
  19	2	0	3
  20	2	0	3
  21	2	0	3
  22	2	0	3
  23	5	0	1
  24	0	0	
  25	5	0	1
  26	5	0	1
  27	5	0	1


Global costs:
  target_avail_regs 15
  target_clobbered_regs 9
  target_reg_cost 4
  target_spill_cost 16
  regs_used 0
  cost for size:
  ivs	cost
  0	0
  1	1
  2	2
  3	3
  4	12
  5	15
  6	18
  7	63
  8	72
  9	81
  10	90
  11	99
  12	108
  13	117
  14	126
  15	135
  16	144
  17	153
  18	162
  19	171
  20	180
  21	189
  22	198
  23	207
  24	216
  25	225
  26	234
  27	243
  28	252
  29	261
  30	270

Initial set of candidates:
  cost: 130 (complexity 15)
  cand_cost: 14
  cand_use_cost: 44 (complexity 15)
  candidates: 5, 12
   use:0 --> iv_cand:12, cost=(6,1)
   use:1 --> iv_cand:12, cost=(10,1)
   use:2 --> iv_cand:12, cost=(6,1)
   use:3 --> iv_cand:12, cost=(10,1)
   use:4 --> iv_cand:5, cost=(3,2)
   use:5 --> iv_cand:5, cost=(3,3)
   use:6 --> iv_cand:5, cost=(3,3)
   use:7 --> iv_cand:5, cost=(3,3)
   use:8 --> iv_cand:12, cost=(0,0)


Improved to:
  cost: 67 (complexity 7)
  cand_cost: 15
  cand_use_cost: 40 (complexity 7)
  candidates: 12, 23
   use:0 --> iv_cand:12, cost=(6,1)
   use:1 --> iv_cand:12, cost=(10,1)
   use:2 --> iv_cand:12, cost=(6,1)
   use:3 --> iv_cand:12, cost=(10,1)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:12, cost=(0,0)


Improved to:
  cost: 66 (complexity 5)
  cand_cost: 22
  cand_use_cost: 26 (complexity 5)
  candidates: 12, 16, 23
   use:0 --> iv_cand:12, cost=(6,1)
   use:1 --> iv_cand:16, cost=(0,0)
   use:2 --> iv_cand:12, cost=(6,1)
   use:3 --> iv_cand:16, cost=(6,0)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:12, cost=(0,0)


Improved to:
  cost: 59 (complexity 3)
  cand_cost: 22
  cand_use_cost: 22 (complexity 3)
  candidates: 14, 16, 23
   use:0 --> iv_cand:14, cost=(0,0)
   use:1 --> iv_cand:16, cost=(0,0)
   use:2 --> iv_cand:14, cost=(6,0)
   use:3 --> iv_cand:16, cost=(6,0)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:16, cost=(2,0)
  invariants 2

Initial set of candidates:
  cost: 84 (complexity 11)
  cand_cost: 14
  cand_use_cost: 52 (complexity 11)
  candidates: 1, 5
   use:0 --> iv_cand:1, cost=(8,0)
   use:1 --> iv_cand:1, cost=(12,0)
   use:2 --> iv_cand:1, cost=(8,0)
   use:3 --> iv_cand:1, cost=(12,0)
   use:4 --> iv_cand:5, cost=(3,2)
   use:5 --> iv_cand:5, cost=(3,3)
   use:6 --> iv_cand:5, cost=(3,3)
   use:7 --> iv_cand:5, cost=(3,3)
   use:8 --> iv_cand:1, cost=(0,0)


Improved to:
  cost: 65 (complexity 3)
  cand_cost: 15
  cand_use_cost: 48 (complexity 3)
  candidates: 1, 23
   use:0 --> iv_cand:1, cost=(8,0)
   use:1 --> iv_cand:1, cost=(12,0)
   use:2 --> iv_cand:1, cost=(8,0)
   use:3 --> iv_cand:1, cost=(12,0)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:1, cost=(0,0)


Improved to:
  cost: 64 (complexity 3)
  cand_cost: 22
  cand_use_cost: 30 (complexity 3)
  candidates: 1, 16, 23
   use:0 --> iv_cand:1, cost=(8,0)
   use:1 --> iv_cand:16, cost=(0,0)
   use:2 --> iv_cand:1, cost=(8,0)
   use:3 --> iv_cand:16, cost=(6,0)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:1, cost=(0,0)


Improved to:
  cost: 59 (complexity 3)
  cand_cost: 22
  cand_use_cost: 22 (complexity 3)
  candidates: 14, 16, 23
   use:0 --> iv_cand:14, cost=(0,0)
   use:1 --> iv_cand:16, cost=(0,0)
   use:2 --> iv_cand:14, cost=(6,0)
   use:3 --> iv_cand:16, cost=(6,0)
   use:4 --> iv_cand:23, cost=(2,0)
   use:5 --> iv_cand:23, cost=(2,1)
   use:6 --> iv_cand:23, cost=(2,1)
   use:7 --> iv_cand:23, cost=(2,1)
   use:8 --> iv_cand:16, cost=(2,0)
  invariants 2

Original cost 59 (complexity 3)

Final cost 59 (complexity 3)


Selected IV set: 
candidate 14
  var_before ivtmp.90_95
  var_after ivtmp.90_92
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_79 + 101)
  step 1
candidate 16
  var_before ivtmp.92_102
  var_after ivtmp.92_93
  incremented before exit test
  type unsigned int
  base (unsigned int) (pretmp_79 + 102)
  step 2
candidate 23
  var_before ivtmp.99_104
  var_after ivtmp.99_103
  incremented before exit test
  type unsigned long
  base (unsigned long) (&temp.25 + (sizetype) count1.12_124 * 4)
  step 16
  base object (void *) &temp.25

Replacing exit test: if (ivtmp_198 == 0)
;;
;; Loop 1
;;  header 4, latch 3
;;  depth 1, outer 0
;;  nodes: 4 3 7 6 5
Processing loop 1
  single exit 7 -> 11, exit condition if (ivtmp_166 == 0)


Analyzing # of iterations of loop 1
  exit condition [1, + , 4294967295] != 0
  bounds on difference of bases: -1 ... -1
  result:
    # of iterations 1, bounded by 1
  number of iterations 1

Induction variables:

ssa name _36
  type integer(kind=4)[16] *
  base &temp.25
  step 32
  base object (void *) &temp.25
ssa name pretmp_39
  type integer(kind=4)
  base 20
  step 20
ssa name _40
  type unsigned int
  base 10
  step 10
ssa name _42
  type unsigned int
  base 10
  step 10
ssa name _44
  type unsigned int
  base 20
  step 20
ssa name _76
  type sizetype
  base 0
  step 32
ssa name pretmp_79
  type integer(kind=4)
  base 10
  step 10
ssa name m.11_88
  type integer(kind=4)
  base 2
  step 1
  is a biv
ssa name count.41_89
  type integer(kind=4)
  base 1
  step -1
  is a biv
ssa name _94
  type sizetype
  base 0
  step 8
ssa name m.11_96
  type integer(kind=4)
  base 1
  step 1
  is a biv
ssa name ivtmp.99_97
  type unsigned long
  base (unsigned long) &temp.25
  step 32
  base object (void *) &temp.25
ssa name count1.12_124
  type integer(kind=8)
  base 0
  step 8
  is a biv
ssa name _131
  type integer(kind=4)
  base 111
  step 10
ssa name count.41_134
  type integer(kind=4)
  base 2
  step -1
  is a biv
ssa name _136
  type integer(kind=4)
  base 112
  step 10
ssa name ivtmp_166
  type unsigned int
  base 1
  step 4294967295
  is a biv
ssa name ivtmp_189
  type unsigned int
  base 2
  step 4294967295
  is a biv
ssa name ivtmp.90_191
  type unsigned int
  base 111
  step 10
ssa name _197
  type unsigned int
  base 116
  step 10
ssa name _202
  type unsigned int
  base 10
  step 10
ssa name ivtmp.92_211
  type unsigned int
  base 112
  step 10
ssa name count1.12_216
  type integer(kind=8)
  base 8
  step 8
  is a biv
ssa name _217
  type unsigned int
  base 10
  step 10
ssa name _222
  type unsigned int
  base 10
  step 10
ssa name _223
  type unsigned int
  base 20
  step 20
Uses:

use 0
  compare
  in statement if (ivtmp_166 == 0)

  at position 
  type unsigned int
  base 1
  step 4294967295
  is a biv
  related candidates 
use 1
  generic
  in statement ivtmp.90_191 = (unsigned int) _131;

  at position 
  type unsigned int
  base 111
  step 10
  related candidates 
use 2
  generic
  in statement ivtmp.92_211 = (unsigned int) _136;

  at position 
  type unsigned int
  base 112
  step 10
  related candidates 
use 3
  generic
  in statement ivtmp.99_97 = (unsigned long) _36;

  at position 
  type unsigned long
  base (unsigned long) &temp.25
  step 32
  base object (void *) &temp.25
  related candidates 
use 4
  generic
  in statement _40 = _44 - _42;

  at position 
  type unsigned int
  base 10
  step 10
  related candidates 
use 5
  generic
  in statement _217 = _223 - _222;

  at position 
  type unsigned int
  base 10
  step 10
  related candidates 
use 6
  generic
  in statement _197 = _202 + 106;

  at position 
  type unsigned int
  base 116
  step 10
  related candidates 


candidate 0 (important)
  var_before ivtmp.104
  var_after ivtmp.104
  incremented before exit test
  type unsigned int
  base 0
  step 1
candidate 1 (important)
  var_before ivtmp.105
  var_after ivtmp.105
  incremented before exit test
  type unsigned long
  base 0
  step 1
candidate 2 (important)
  var_before ivtmp.106
  var_after ivtmp.106
  incremented before exit test
  type unsigned int
  base 2
  step 1
candidate 3 (important)
  var_before ivtmp.107
  var_after ivtmp.107
  incremented before exit test
  type unsigned int
  base 1
  step 4294967295
candidate 4 (important)
  var_before ivtmp.108
  var_after ivtmp.108
  incremented before exit test
  type unsigned int
  base 0
  step 4294967295
candidate 5 (important)
  var_before ivtmp.109
  var_after ivtmp.109
  incremented before exit test
  type unsigned int
  base 1
  step 1
candidate 6 (important)
  original biv
  type integer(kind=4)
  base 1
  step 1
candidate 7 (important)
  var_before ivtmp.110
  var_after ivtmp.110
  incremented before exit test
  type unsigned long
  base 0
  step 8
candidate 8 (important)
  original biv
  type integer(kind=8)
  base 0
  step 8
candidate 9 (important)
  var_before ivtmp.111
  var_after ivtmp.111
  incremented before exit test
  type unsigned int
  base 2
  step 4294967295
candidate 10 (important)
  original biv
  type integer(kind=4)
  base 2
  step -1
candidate 11 (important)
  original biv
  type unsigned int
  base 2
  step 4294967295
candidate 12 (important)
  var_before ivtmp.112
  var_after ivtmp.112
  incremented before exit test
  type unsigned long
  base 8
  step 8
Candidate 3 is related to use 0
Candidate 4 is related to use 0
Candidate 4 is related to use 0
candidate 13
  var_before ivtmp.113
  var_after ivtmp.113
  incremented before exit test
  type unsigned int
  base 111
  step 10
Candidate 13 is related to use 1
candidate 14 (important)
  var_before ivtmp.114
  var_after ivtmp.114
  incremented before exit test
  type unsigned int
  base 0
  step 10
Candidate 14 is related to use 1
Candidate 14 is related to use 1
candidate 15
  var_before ivtmp.115
  var_after ivtmp.115
  incremented before exit test
  type unsigned int
  base 112
  step 10
Candidate 15 is related to use 2
Candidate 14 is related to use 2
Candidate 14 is related to use 2
candidate 16
  var_before ivtmp.116
  var_after ivtmp.116
  incremented before exit test
  type unsigned long
  base (unsigned long) &temp.25
  step 32
  base object (void *) &temp.25
Candidate 16 is related to use 3
candidate 17 (important)
  var_before ivtmp.117
  var_after ivtmp.117
  incremented before exit test
  type unsigned long
  base 0
  step 32
Candidate 17 is related to use 3
candidate 18
  var_before ivtmp.118
  var_after ivtmp.118
  incremented before exit test
  type unsigned int
  base 10
  step 10
Candidate 18 is related to use 4
Candidate 14 is related to use 4
Candidate 14 is related to use 4
Candidate 18 is related to use 5
Candidate 14 is related to use 5
Candidate 14 is related to use 5
candidate 19
  var_before ivtmp.119
  var_after ivtmp.119
  incremented before exit test
  type unsigned int
  base 116
  step 10
Candidate 19 is related to use 6
Candidate 14 is related to use 6
Candidate 14 is related to use 6
Candidate costs:
  cand	cost
  0	7
  1	7
  2	7
  3	7
  4	7
  5	7
  6	7
  7	7
  8	7
  9	7
  10	7
  11	7
  12	7
  13	7
  14	7
  15	7
  16	5
  17	7
  18	7
  19	7

Use-candidate costs:
Use 0:
  cand	cost	compl.	depends on
  0	0	0	
  1	0	0	
  2	0	0	
  3	0	0	
  4	0	0	
  5	0	0	
  6	0	0	
  7	0	0	
  8	0	0	
  9	0	0	
  10	0	0	
  11	-1	0	
  12	0	0	
  13	0	0	
  14	0	0	
  15	0	0	
  16	2	0	
  17	0	0	
  18	0	0	
  19	0	0	

Use 1:
  cand	cost	compl.	depends on
  0	13	1	
  1	16	0	
  2	13	1	
  3	13	1	
  4	13	1	
  5	13	1	
  6	13	1	
  9	13	1	
  10	13	1	
  11	13	1	
  13	0	0	
  14	4	1	
  15	4	1	
  18	4	1	
  19	4	1	

Use 2:
  cand	cost	compl.	depends on
  0	13	1	
  1	16	0	
  2	13	1	
  3	13	1	
  4	13	1	
  5	13	1	
  6	13	1	
  9	13	1	
  10	13	1	
  11	13	1	
  13	4	1	
  14	4	1	
  15	0	0	
  18	4	1	
  19	4	1	

Use 3:
  cand	cost	compl.	depends on
  1	8	0	 inv_expr:0
  7	8	0	 inv_expr:0
  8	8	0	 inv_expr:0
  12	10	1	 inv_expr:1
  16	0	0	
  17	4	0	 inv_expr:0

Use 4:
  cand	cost	compl.	depends on
  0	13	1	
  1	16	0	
  2	13	1	
  3	13	1	
  4	13	1	
  5	9	0	
  6	9	0	
  9	13	1	
  10	13	1	
  11	13	1	
  13	4	1	
  14	4	1	
  15	4	1	
  18	0	0	
  19	4	1	

Use 5:
  cand	cost	compl.	depends on
  0	13	1	
  1	16	0	
  2	13	1	
  3	13	1	
  4	13	1	
  5	9	0	
  6	9	0	
  9	13	1	
  10	13	1	
  11	13	1	
  13	4	1	
  14	4	1	
  15	4	1	
  18	0	0	
  19	4	1	

Use 6:
  cand	cost	compl.	depends on
  0	13	1	
  1	16	0	
  2	13	1	
  3	13	1	
  4	13	1	
  5	13	1	
  6	13	1	
  9	13	1	
  10	13	1	
  11	13	1	
  13	4	1	
  14	4	1	
  15	4	1	
  18	4	1	
  19	0	0	


Global costs:
  target_avail_regs 15
  target_clobbered_regs 9
  target_reg_cost 4
  target_spill_cost 16
  regs_used 0
  cost for size:
  ivs	cost
  0	0
  1	1
  2	2
  3	3
  4	12
  5	15
  6	18
  7	63
  8	72
  9	81
  10	90
  11	99
  12	108
  13	117
  14	126
  15	135
  16	144
  17	153
  18	162
  19	171
  20	180
  21	189
  22	198
  23	207
  24	216
  25	225
  26	234
  27	243
  28	252
  29	261
  30	270

Initial set of candidates:
  cost: 78 (complexity 3)
  cand_cost: 14
  cand_use_cost: 61 (complexity 3)
  candidates: 6, 17
   use:0 --> iv_cand:6, cost=(0,0)
   use:1 --> iv_cand:6, cost=(13,1)
   use:2 --> iv_cand:6, cost=(13,1)
   use:3 --> iv_cand:17, cost=(4,0)
   use:4 --> iv_cand:6, cost=(9,0)
   use:5 --> iv_cand:6, cost=(9,0)
   use:6 --> iv_cand:6, cost=(13,1)


Improved to:
  cost: 33 (complexity 3)
  cand_cost: 14
  cand_use_cost: 16 (complexity 3)
  candidates: 17, 18
   use:0 --> iv_cand:17, cost=(0,0)
   use:1 --> iv_cand:18, cost=(4,1)
   use:2 --> iv_cand:18, cost=(4,1)
   use:3 --> iv_cand:17, cost=(4,0)
   use:4 --> iv_cand:18, cost=(0,0)
   use:5 --> iv_cand:18, cost=(0,0)
   use:6 --> iv_cand:18, cost=(4,1)


Improved to:
  cost: 26 (complexity 3)
  cand_cost: 12
  cand_use_cost: 12 (complexity 3)
  candidates: 16, 18
   use:0 --> iv_cand:18, cost=(0,0)
   use:1 --> iv_cand:18, cost=(4,1)
   use:2 --> iv_cand:18, cost=(4,1)
   use:3 --> iv_cand:16, cost=(0,0)
   use:4 --> iv_cand:18, cost=(0,0)
   use:5 --> iv_cand:18, cost=(0,0)
   use:6 --> iv_cand:18, cost=(4,1)


Initial set of candidates:
  cost: 41 (complexity 5)
  cand_cost: 14
  cand_use_cost: 24 (complexity 5)
  candidates: 14, 17
   use:0 --> iv_cand:14, cost=(0,0)
   use:1 --> iv_cand:14, cost=(4,1)
   use:2 --> iv_cand:14, cost=(4,1)
   use:3 --> iv_cand:17, cost=(4,0)
   use:4 --> iv_cand:14, cost=(4,1)
   use:5 --> iv_cand:14, cost=(4,1)
   use:6 --> iv_cand:14, cost=(4,1)


Improved to:
  cost: 33 (complexity 3)
  cand_cost: 14
  cand_use_cost: 16 (complexity 3)
  candidates: 17, 18
   use:0 --> iv_cand:18, cost=(0,0)
   use:1 --> iv_cand:18, cost=(4,1)
   use:2 --> iv_cand:18, cost=(4,1)
   use:3 --> iv_cand:17, cost=(4,0)
   use:4 --> iv_cand:18, cost=(0,0)
   use:5 --> iv_cand:18, cost=(0,0)
   use:6 --> iv_cand:18, cost=(4,1)


Improved to:
  cost: 26 (complexity 3)
  cand_cost: 12
  cand_use_cost: 12 (complexity 3)
  candidates: 16, 18
   use:0 --> iv_cand:18, cost=(0,0)
   use:1 --> iv_cand:18, cost=(4,1)
   use:2 --> iv_cand:18, cost=(4,1)
   use:3 --> iv_cand:16, cost=(0,0)
   use:4 --> iv_cand:18, cost=(0,0)
   use:5 --> iv_cand:18, cost=(0,0)
   use:6 --> iv_cand:18, cost=(4,1)


Original cost 26 (complexity 3)

Final cost 26 (complexity 3)


Selected IV set: 
candidate 16
  var_before ivtmp.116_186
  var_after ivtmp.116_196
  incremented before exit test
  type unsigned long
  base (unsigned long) &temp.25
  step 32
  base object (void *) &temp.25
candidate 18
  var_before ivtmp.118_219
  var_after ivtmp.118_212
  incremented before exit test
  type unsigned int
  base 10
  step 10

Replacing exit test: if (ivtmp_166 == 0)
test_f90 ()
{
  unsigned int ivtmp.118;
  unsigned long ivtmp.116;
  unsigned long ivtmp.99;
  unsigned int ivtmp.92;
  unsigned int ivtmp.90;
  unsigned long ivtmp.71;
  unsigned long ivtmp.70;
  struct array2_integer(kind=4) parm.46;
  integer(kind=4) A.27[4];
  struct array1_integer(kind=4) atmp.31;
  integer(kind=4) A.32[4];
  static integer(kind=8) A.34[2] = {2, 2};
  struct array1_integer(kind=8) parm.35;
  struct array2_integer(kind=4) atmp.36;
  integer(kind=4) A.37[4];
  integer(kind=4) temp.25[16];
  struct test_type s[4];
  integer(kind=4) _2;
  integer(kind=8) count1.12_3;
  integer(kind=4) _5;
  integer(kind=8) _6;
  integer(kind=8) _7;
  integer(kind=8) _9;
  integer(kind=8) _10;
  integer(kind=4) _11;
  integer(kind=4) _13;
  unsigned int _15;
  unsigned int ivtmp_18;
  integer(kind=4) pretmp_23;
  void * _26;
  void * _27;
  integer(kind=8) pretmp_28;
  integer(kind=8) pretmp_31;
  void * _33;
  unsigned int ivtmp_35;
  unsigned int _40;
  integer(kind=8) count1.12_41;
  void * _43;
  integer(kind=4) _45;
  void * _46;
  struct test_type[4] * _53;
  integer(kind=8) count1.12_55;
  integer(kind=4) _74;
  integer(kind=4) _78;
  unsigned int ivtmp_90;
  integer(kind=4) _91;
  integer(kind=4) count.45_101;
  integer(kind=4) m.11_105;
  integer(kind=4) count.45_106;
  integer(kind=4) _121;
  sizetype _126;
  integer(kind=4) l.10_127;
  integer(kind=8) count1.12_129;
  integer(kind=4) _130;
  integer(kind=8) count1.12_135;
  integer(kind=4) pretmp_137;
  integer(kind=8) _139;
  sizetype _140;
  integer(kind=4) pretmp_142;
  void * _143;
  integer(kind=4) m.11_144;
  integer(kind=4) _146;
  integer(kind=4) _147;
  void * _148;
  void * _150;
  integer(kind=8) count1.12_151;
  integer(kind=4) _152;
  integer(kind=8) _154;
  integer(kind=4) _155;
  void * _157;
  unsigned int ivtmp_158;
  integer(kind=4) count.45_159;
  integer(kind=4) m.11_160;
  integer(kind=8) count1.12_161;
  unsigned int ivtmp_162;
  integer(kind=4) count.44_163;
  unsigned long _164;
  sizetype _167;
  integer(kind=4) l.10_168;
  integer(kind=8) count1.12_169;
  integer(kind=4) _171;
  integer(kind=8) pretmp_172;
  integer(kind=8) pretmp_173;
  integer(kind=8) count1.12_174;
  integer(kind=4) _180;
  integer(kind=4) count.44_183;
  integer(kind=4) _188;
  integer(kind=4) _193;
  unsigned int _197;
  unsigned int _199;
  integer(kind=4) _200;
  void * _203;
  void * _204;
  void * _205;
  integer(kind=8) count1.12_206;
  void * _207;
  unsigned int _208;
  integer(kind=4) _210;
  integer(kind=4) _213;
  unsigned int _215;
  unsigned int _217;
  integer(kind=8) count1.12_218;
  integer(kind=4) _220;

  <bb 2>:
  ivtmp.116_125 = (unsigned long) &temp.25;
  goto <bb 4>;

  <bb 3>:

  <bb 4>:
  # ivtmp.116_186 = PHI <ivtmp.116_196(3), ivtmp.116_125(2)>
  # ivtmp.118_219 = PHI <ivtmp.118_212(3), 10(2)>
  _208 = ivtmp.118_219 + 101;
  ivtmp.90_191 = _208;
  _199 = ivtmp.118_219 + 102;
  ivtmp.92_211 = _199;
  ivtmp.99_97 = ivtmp.116_186;
  _197 = ivtmp.118_219 + 106;
  goto <bb 6>;

  <bb 5>:

  <bb 6>:
  # ivtmp.90_95 = PHI <ivtmp.90_92(5), ivtmp.90_191(4)>
  # ivtmp.92_102 = PHI <ivtmp.92_93(5), ivtmp.92_211(4)>
  # ivtmp.99_104 = PHI <ivtmp.99_103(5), ivtmp.99_97(4)>
  _193 = (integer(kind=4)) ivtmp.90_95;
  A.27[0] = _193;
  _200 = (integer(kind=4)) ivtmp.92_102;
  A.27[1] = _200;
  _40 = ivtmp.118_219;
  _15 = _40 + ivtmp.90_95;
  _13 = (integer(kind=4)) _15;
  _213 = _13;
  A.27[2] = _213;
  _217 = ivtmp.118_219;
  _215 = ivtmp.92_102 + _217;
  _210 = (integer(kind=4)) _215;
  _220 = _210;
  A.27[3] = _220;
  atmp.31.dtype = 265;
  atmp.31.dim[0].stride = 1;
  atmp.31.dim[0].lbound = 0;
  atmp.31.dim[0].ubound = 3;
  atmp.31.data = &A.32;
  atmp.31.offset = 0;
  A.32[0] = _193;
  pretmp_142 = A.27[1];
  A.32[1] = pretmp_142;
  pretmp_23 = A.27[2];
  A.32[2] = pretmp_23;
  pretmp_137 = A.27[3];
  A.32[3] = pretmp_137;
  parm.35.dtype = 521;
  parm.35.dim[0].lbound = 1;
  parm.35.dim[0].ubound = 2;
  parm.35.dim[0].stride = 1;
  parm.35.data = &A.34[0];
  parm.35.offset = 0;
  atmp.36.dtype = 266;
  atmp.36.dim[0].stride = 1;
  atmp.36.dim[0].lbound = 0;
  atmp.36.dim[0].ubound = 1;
  atmp.36.dim[1].stride = 2;
  atmp.36.dim[1].lbound = 0;
  atmp.36.dim[1].ubound = 1;
  atmp.36.data = &A.37;
  atmp.36.offset = 0;
  _gfortran_reshape_4 (&atmp.36, &atmp.31, &parm.35, 0B, 0B);
  _43 = atmp.36.data;
  _45 = MEM[(integer(kind=4)[4] *)_43][0];
  _207 = (void *) ivtmp.99_104;
  MEM[base: _207, offset: 0B] = _45;
  _155 = MEM[(integer(kind=4)[4] *)_43][1];
  _205 = (void *) ivtmp.99_104;
  MEM[base: _205, offset: 4B] = _155;
  _121 = MEM[(integer(kind=4)[4] *)_43][2];
  _204 = (void *) ivtmp.99_104;
  MEM[base: _204, offset: 8B] = _121;
  _180 = MEM[(integer(kind=4)[4] *)_43][3];
  _203 = (void *) ivtmp.99_104;
  MEM[base: _203, offset: 12B] = _180;
  A.37 ={v} {CLOBBER};
  atmp.36 ={v} {CLOBBER};
  parm.35 ={v} {CLOBBER};
  A.32 ={v} {CLOBBER};
  atmp.31 ={v} {CLOBBER};
  A.27 ={v} {CLOBBER};
  ivtmp.90_92 = ivtmp.90_95 + 1;
  ivtmp.92_93 = ivtmp.92_102 + 2;
  ivtmp.99_103 = ivtmp.99_104 + 16;
  if (ivtmp.92_93 == _197)
    goto <bb 7>;
  else
    goto <bb 5>;

  <bb 7>:
  ivtmp.116_196 = ivtmp.116_186 + 32;
  ivtmp.118_212 = ivtmp.118_219 + 10;
  if (ivtmp.118_212 == 30)
    goto <bb 11>;
  else
    goto <bb 3>;

  <bb 8>:

  <bb 9>:
  # ivtmp.70_17 = PHI <ivtmp.70_20(8), ivtmp.70_21(11)>
  # ivtmp.71_24 = PHI <ivtmp.71_25(8), ivtmp.71_123(11)>
  _26 = (void *) ivtmp.70_17;
  _147 = MEM[base: _26, offset: 32B];
  _27 = (void *) ivtmp.71_24;
  MEM[base: _27, offset: 0B] = _147;
  _33 = (void *) ivtmp.70_17;
  _130 = MEM[base: _33, offset: 36B];
  _46 = (void *) ivtmp.71_24;
  MEM[base: _46, offset: 4B] = _130;
  _143 = (void *) ivtmp.70_17;
  _74 = MEM[base: _143, offset: 40B];
  _148 = (void *) ivtmp.71_24;
  MEM[base: _148, offset: 8B] = _74;
  _150 = (void *) ivtmp.70_17;
  _78 = MEM[base: _150, offset: 44B];
  _157 = (void *) ivtmp.71_24;
  MEM[base: _157, offset: 12B] = _78;
  ivtmp.70_20 = ivtmp.70_17 + 16;
  ivtmp.71_25 = ivtmp.71_24 + 16;
  if (ivtmp.70_20 == _164)
    goto <bb 10>;
  else
    goto <bb 8>;

  <bb 10>:
  count1.12_218 = count1.12_161 + 8;
  m.11_105 = m.11_160 + 1;
  count.45_106 = count.45_159 + -1;
  ivtmp_90 = ivtmp_158 + 4294967295;
  temp.25 ={v} {CLOBBER};
  parm.46.dtype = 266;
  parm.46.dim[0].lbound = 1;
  parm.46.dim[0].ubound = 2;
  parm.46.dim[0].stride = 1;
  parm.46.dim[1].lbound = 1;
  parm.46.dim[1].ubound = 2;
  parm.46.dim[1].stride = 2;
  parm.46.data = &s[0].a[0];
  parm.46.offset = -3;
  test_sub.constprop (&parm.46, &C.2433);
  parm.46 ={v} {CLOBBER};
  s ={v} {CLOBBER};
  return;

  <bb 11>:
  # m.11_144 = PHI <1(7)>
  # count1.12_129 = PHI <0(7)>
  # count.45_101 = PHI <2(7)>
  # ivtmp_35 = PHI <2(7)>
  pretmp_31 = (integer(kind=8)) m.11_144;
  pretmp_28 = pretmp_31 * 2;
  _154 = 1;
  _139 = _154 + pretmp_28;
  _7 = _139 + -3;
  _11 = temp.25[count1.12_129];
  MEM[(integer(kind=4)[4] *)&s][_7].a[0] = _11;
  count1.12_41 = count1.12_129 + 1;
  _146 = temp.25[count1.12_41];
  MEM[(integer(kind=4)[4] *)&s][_7].a[1] = _146;
  count1.12_151 = count1.12_129 + 2;
  _152 = temp.25[count1.12_151];
  MEM[(integer(kind=4)[4] *)&s][_7].a[2] = _152;
  count1.12_55 = count1.12_129 + 3;
  _91 = temp.25[count1.12_55];
  MEM[(integer(kind=4)[4] *)&s][_7].a[3] = _91;
  count1.12_135 = count1.12_129 + 4;
  l.10_127 = 2;
  count.44_183 = 1;
  ivtmp_18 = 1;
  _10 = (integer(kind=8)) l.10_127;
  _9 = _10 + pretmp_28;
  _6 = _9 + -3;
  _5 = temp.25[count1.12_135];
  MEM[(integer(kind=4)[4] *)&s][_6].a[0] = _5;
  count1.12_3 = count1.12_135 + 1;
  _2 = temp.25[count1.12_3];
  MEM[(integer(kind=4)[4] *)&s][_6].a[1] = _2;
  count1.12_206 = count1.12_135 + 2;
  _188 = temp.25[count1.12_206];
  MEM[(integer(kind=4)[4] *)&s][_6].a[2] = _188;
  count1.12_174 = count1.12_135 + 3;
  _171 = temp.25[count1.12_174];
  MEM[(integer(kind=4)[4] *)&s][_6].a[3] = _171;
  count1.12_169 = count1.12_135 + 4;
  l.10_168 = l.10_127 + 1;
  count.44_163 = count.44_183 + -1;
  ivtmp_162 = ivtmp_18 + 4294967295;
  count1.12_161 = count1.12_129 + 8;
  m.11_160 = m.11_144 + 1;
  count.45_159 = count.45_101 + -1;
  ivtmp_158 = ivtmp_35 - 1;
  pretmp_172 = (integer(kind=8)) m.11_160;
  pretmp_173 = pretmp_172 * 2;
  ivtmp.70_21 = (unsigned long) &temp.25;
  _126 = (sizetype) pretmp_173;
  _167 = _126 * 16;
  _140 = _167 + 18446744073709551584;
  _53 = &s + _140;
  ivtmp.71_123 = (unsigned long) _53;
  _164 = (unsigned long) &MEM[(void *)&temp.25 + 32B];
  goto <bb 9>;

}