Menu

#3601 gte/20091229-1 fails for -ms08 --stack-auto

closed-fixed
None
Front-end
5
2025-01-13
2023-06-08
No

The regression test gte/20091229-1.c fails for test-s08-stack-auto when enabled in support/regression/MakeList.(for now the test-s08-stack-auto target is only in the next branch, after 4.3.0 in trunk).

Discussion

  • Gabriele Gorla

    Gabriele Gorla - 2023-12-03

    gte/20091229-1.c fails on multiple architectures.

    I believe this is due to incorrect icode generation.
    both:
    return v / -0x080000000LL;
    and
    return v / 0x080000000LL;
    generate the exact same icode stream.

    in this case:
    long long foo (long long v)
    {
    return v / -0x080000000LL;
    }

    pseudocode:
    iTemp0=_foo_PARM_1;
    iTemp1=(iTemp0<0);
    if(iTemp1) {
    iTemp0+=0x7fffffff;
    }
    iTemp3=iTemp0>>0x1f;
    return iTemp3;

    for the -0x080000000 the line:
    iTemp0+=0x7fffffff;
    should be:
    iTemp0=-iTemp0;
    for the 0x080000000 the entire if should not be in the stream.

    full details:
    cases/../gte/20091229-1.c: 4: return v / -0x080000000LL;
    ; [---] ic:2: iTemp0 [k3 lr3:8 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ] := _foo_PARM_1 [k2 lr0:0 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int xdata}
    ; [---] ic:3: iTemp1 [k4 lr4:5 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{unsigned-char fixed} = iTemp0 [k3 lr3:8 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ] < 0x0 {longlong-int literal}
    ; [---] ic:4: if iTemp1 [k4 lr4:5 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{unsigned-char fixed} == 0 goto iTempLbl0($3)
    ; [---] ic:5: iTemp0 [k3 lr3:8 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ] = iTemp0 [k3 lr3:8 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ] + 0x7fffffff {longlong-int literal}
    ; [---] ic:7: iTempLbl0($3) :
    00103$:
    ; [---] ic:12: __srslonglong_PARM_1 [k7 lr0:0 so:0]{ ia1 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed} := iTemp0 [k3 lr3:8 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ]
    ; [---] ic:13: __srslonglong_PARM_2 [k8 lr0:0 so:0]{ ia1 a2p0 re0 rm0 nos0 ru0 dp0}{char fixed} := 0x1f {char literal}
    ; [---] ic:14: iTemp3 [k6 lr10:11 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ] = call __srslonglong [k9 lr0:0 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int function ( longlong-int fixed, char fixed) fixed}
    ; [---] ic:9: ret iTemp3 [k6 lr10:11 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int fixed}{ sir@ _foo_sloc0_1_0}[_foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 _foo_sloc0_1_0 ]
    ; [---] ic:10: _return($1) :
    ; [---] ic:11: eproc _foo [k1 lr0:0 so:0]{ ia0 a2p0 re0 rm0 nos0 ru0 dp0}{longlong-int function ( longlong-int xdata) fixed}

     
  • Philipp Klaus Krause

    • assigned_to: Philipp Klaus Krause
    • Category: HC08 --> Front-end
     
  • Philipp Klaus Krause

    Looks like a bug in the front-end optimization of divisions by powers of two.

     
  • Philipp Klaus Krause

    • status: open --> pending-fixed
     
  • Philipp Klaus Krause

    Fixed in [r15213] in the next branch.

     

    Related

    Commit: [r15213]

  • Philipp Klaus Krause

    • status: pending-fixed --> closed-fixed
     
  • Philipp Klaus Krause

    Fix merged to trunk since.

     

Log in to post a comment.