Hi,

I'm implementing a loop peeling function used in
tree-ssa-loop-prefetch.c according to the following comment,

/* Step 5: unroll the loop.  TODO -- peeling of first and last few
     iterations so that we do not issue superfluous prefetches.  */

I take the functions slpeel_* in tree-vercterizer.c as a reference.
Firstly generate a loop copy and then reset the niters of the first
loop.
But, a bug occurs during the out-of-ssa pass.  For now I just know it
is caused by reseting the niters (actually, I use the
slpeel_make_loop_iterate_ntimes),
but can't see the deep reason. Who can give me some suggestions?

The original loop looks like this,

loop_9 (header = 51, latch = 52, niter = D.1620_125 + 4294967295,
upper_bound = 4294967295)
{
  bb_51 (preds = {bb_52 bb_50 }, succs = {bb_52 bb_53 })
  {
  <bb 51>:
    # i_298 = PHI <i_163(52), 0(50)>
    # SMT.23_307 = PHI <SMT.23_270(52), SMT.23_263(50)>
    # SMT.24_305 = PHI <SMT.24_266(52), SMT.24_247(50)>
    # SMT.26_303 = PHI <SMT.26_268(52), SMT.26_249(50)>
    # SMT.27_300 = PHI <SMT.27_271(52), SMT.27_264(50)>
    # prephitmp.192_538 = PHI <D.1634_162(52), 0(50)>
    # SMT.244_531 = PHI <SMT.244_606(52), SMT.244_605(50)>
    D.1629_157 = ImageOutPtr_127 + i_298;
    # VUSE <SMT.23_307, SMT.24_305, SMT.26_303, SMT.27_300,
SMT.244_531> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
    D.1630_158 = *D.1629_157;
    D.1631_159 = (int) D.1630_158;
    D.1633_161 = (int) prephitmp.192_538;
    # SMT.23_265 = VDEF <SMT.23_307>
    # SMT.24_266 = VDEF <SMT.24_305>
    # SMT.26_268 = VDEF <SMT.26_303>
    # SMT.27_269 = VDEF <SMT.27_300>
    # SMT.244_606 = VDEF <SMT.244_531> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
    D.1634_162 = Calc_crc16 (D.1631_159, D.1633_161);
    # SMT.23_270 = VDEF <SMT.23_265>
    # SMT.27_271 = VDEF <SMT.27_269> { SMT.23 SMT.27 }
    tcdef_129(D)->CRC = D.1634_162;
    i_163 = i_298 + 1;
    if (D.1620_125 > i_163)
      goto <bb 52>;
    else
      goto <bb 53>;

  }
  bb_52 (preds = {bb_51 }, succs = {bb_51 })
  {
  <bb 52>:
    goto <bb 51>;

  }
}

After loop copying and niters reseting,

  loop_10 (header = 56, latch = 57, niter = )
  {
    bb_56 (preds = {bb_57 bb_51 }, succs = {bb_57 bb_53 })
    {
    <bb 56>:
      # i_302 = PHI <i_620(57), i_163(51)>
      # SMT.23_304 = PHI <SMT.23_622(57), SMT.23_270(51)>
      # SMT.24_295 = PHI <SMT.24_506(57), SMT.24_266(51)>
      # SMT.26_109 = PHI <SMT.26_505(57), SMT.26_268(51)>
      # SMT.27_323 = PHI <SMT.27_621(57), SMT.27_271(51)>
      # prephitmp.192_322 = PHI <D.1634_508(57), D.1634_162(51)>
      # SMT.244_174 = PHI <SMT.244_623(57), SMT.244_606(51)>
      D.1629_524 = ImageOutPtr_127 + i_302;
      # VUSE <SMT.23_304, SMT.24_295, SMT.26_109, SMT.27_323,
SMT.244_174> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
      D.1630_516 = *D.1629_524;
      D.1631_629 = (int) D.1630_516;
      D.1633_509 = (int) prephitmp.192_322;
      # SMT.23_507 = VDEF <SMT.23_304>
      # SMT.24_506 = VDEF <SMT.24_295>
      # SMT.26_505 = VDEF <SMT.26_109>
      # SMT.27_624 = VDEF <SMT.27_323>
      # SMT.244_623 = VDEF <SMT.244_174> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
      D.1634_508 = Calc_crc16 (D.1631_629, D.1633_509);
      # SMT.23_622 = VDEF <SMT.23_507>
      # SMT.27_621 = VDEF <SMT.27_624> { SMT.23 SMT.27 }
      tcdef_129(D)->CRC = D.1634_508;
      i_620 = i_302 + 1;
      if (D.1620_125 > i_620)
        goto <bb 57>;
      else
        goto <bb 53>;

    }
    bb_57 (preds = {bb_56 }, succs = {bb_56 })
    {
    <bb 57>:
      goto <bb 56>;

    }
  }
  loop_9 (header = 51, latch = 52, niter = , upper_bound = 4294967295)
  {
    bb_51 (preds = {bb_52 bb_50 }, succs = {bb_52 bb_56 })
    {
    <bb 51>:
      # i_298 = PHI <i_163(52), 0(50)>
      # SMT.23_307 = PHI <SMT.23_270(52), SMT.23_263(50)>
      # SMT.24_305 = PHI <SMT.24_266(52), SMT.24_247(50)>
      # SMT.26_303 = PHI <SMT.26_268(52), SMT.26_249(50)>
      # SMT.27_300 = PHI <SMT.27_271(52), SMT.27_264(50)>
      # prephitmp.192_538 = PHI <D.1634_162(52), 0(50)>
      # SMT.244_531 = PHI <SMT.244_606(52), SMT.244_605(50)>
      # ivtmp.245_615 = PHI <ivtmp.245_614(52), 0(50)>
      D.1629_157 = ImageOutPtr_127 + i_298;
      # VUSE <SMT.23_307, SMT.24_305, SMT.26_303, SMT.27_300,
SMT.244_531> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
      D.1630_158 = *D.1629_157;
      D.1631_159 = (int) D.1630_158;
      D.1633_161 = (int) prephitmp.192_538;
      # SMT.23_265 = VDEF <SMT.23_307>
      # SMT.24_266 = VDEF <SMT.24_305>
      # SMT.26_268 = VDEF <SMT.26_303>
      # SMT.27_269 = VDEF <SMT.27_300>
      # SMT.244_606 = VDEF <SMT.244_531> { SMT.23 SMT.24 SMT.26 SMT.27 SMT.244 }
      D.1634_162 = Calc_crc16 (D.1631_159, D.1633_161);
      # SMT.23_270 = VDEF <SMT.23_265>
      # SMT.27_271 = VDEF <SMT.27_269> { SMT.23 SMT.27 }
      tcdef_129(D)->CRC = D.1634_162;
      i_163 = i_298 + 1;
      ivtmp.245_614 = ivtmp.245_615 + 1;
      if (ivtmp.245_614 < 10)
        goto <bb 52>;
      else
        goto <bb 56>;

    }
    bb_52 (preds = {bb_51 }, succs = {bb_51 })
    {
    <bb 52>:
      goto <bb 51>;

    }
  }

The error is reported in build2_stat, by

gcc_assert (POINTER_TYPE_P (tt) && POINTER_TYPE_P (TREE_TYPE (arg0))
                && INTEGRAL_TYPE_P (TREE_TYPE (arg1))
                && useless_type_conversion_p (sizetype, TREE_TYPE (arg1)));

(gdb) bt
#0  fancy_abort (file=0x8747f60 "../../gcc-4.4.0/gcc/tree.c", line=3303,
    function=0x874953d "build2_stat") at ../../gcc-4.4.0/gcc/diagnostic.c:712
#1  0x0849ed4d in build2_stat (code=POINTER_PLUS_EXPR, tt=0xb7d11478,
    arg0=0xb7d10aa8, arg1=0xb7b59840) at ../../gcc-4.4.0/gcc/tree.c:3301
#2  0x0860179f in gimple_assign_rhs_to_tree (stmt=0xb7b60780)
    at ../../gcc-4.4.0/gcc/cfgexpand.c:59
#3  0x083a02b8 in replace_use_variable (map=0x89ba758, p=0xb7b484d4,
    expr=0x89ed7b0) at ../../gcc-4.4.0/gcc/tree-outof-ssa.c:567
#4  0x083a06cb in rewrite_trees (map=0x89ba758, values=0x89ed7b0)
    at ../../gcc-4.4.0/gcc/tree-outof-ssa.c:774
#5  0x083a19d4 in remove_ssa_form (perform_ter=1 '\001')
    at ../../gcc-4.4.0/gcc/tree-outof-ssa.c:1381
#6  0x083a1d9b in rewrite_out_of_ssa ()
    at ../../gcc-4.4.0/gcc/tree-outof-ssa.c:1506

Thanks,
Eric

Reply via email to