https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92305

--- Comment #11 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Optimized dump is:

  void * c_bptr;
  void * c_aptr;
  real(kind=8) * bptr;
  real(kind=8) bb;
  real(kind=8) * aptr;
  real(kind=8) aa;
  real(kind=8) aa.1_1;
  real(kind=8) bb.2_2;
<bb 2> :
  aa.1_1 = aa;
  bb.2_2 = bb;
  test_dummy_opt_val_callee_2 (aa.1_1, bb.2_2, c_aptr_4(D), c_bptr_5(D), &aptr,
&bptr, 1, 1, 1, 1);

And assembler:

        .cfi_startproc
.LCF1:
0:      addis 2,12,.TOC.-.LCF1@ha
        addi 2,2,.TOC.-.LCF1@l
        .localentry    
__test_dummies_opt_value_MOD_test_dummy_opt_val_call_2,.-__test_dummies_opt_value_MOD_test_dummy_opt_val_call_2
        mflr 0           #,
        std 0,16(1)      #,
        std 31,-8(1)     #,
        stdu 1,-112(1)   #,,
        .cfi_def_cfa_offset 112
        .cfi_offset 65, 16
        .cfi_offset 31, -8
        mr 31,1          #,
        .cfi_def_cfa_register 31
 # foo.f90:8:      call test_dummy_opt_val_callee_2(aa, bb, c_aptr, c_bptr,
aptr, bptr)
        lfd 0,64(31)     # aa, aa.1_1
        lfd 12,80(31)    # bb, bb.2_2
        addi 8,31,88     # tmp119,,
        addi 7,31,72     # tmp120,,
        li 9,1           # tmp121,
        std 9,40(1)      #, tmp121
        li 9,1           # tmp122,
        std 9,32(1)      #, tmp122
        li 10,1          #,
        li 9,1           #,
        ld 6,56(31)      # c_bptr,
        ld 5,48(31)      # c_aptr,
        fmr 2,12         #, bb.2_2
        fmr 1,0  #, aa.1_1
        bl __test_dummies_opt_value_MOD_test_dummy_opt_val_callee_2

And on the callee side:

test_dummy_opt_val_callee_2 (real(kind=8) aa, real(kind=8) bb, void * c_aptr,
void * c_bptr, real(kind=8) * * aptr, real(kind=8) * * bptr, logical(kind=1)
_aa, logical(kind=1) _bb, logical(kind=1) _c_aptr, logical(kind=1) _c_bptr)
{
  logical(kind=1) _1;
  logical(kind=4) _2;
  logical(kind=1) _3;
  logical(kind=4) _4;
  logical(kind=4) _5;
  <bb 2> :
  _1 = ~_c_aptr_6(D);
  _2 = (logical(kind=4)) _1;
  _3 = ~_c_bptr_7(D);
  _4 = (logical(kind=4)) _3;
  _5 = _2 | _4;
  if (_5 != 0)
    goto <bb 3>; [INV]
  else
    goto <bb 4>; [INV]
  <bb 3> :
  _gfortran_stop_numeric (150, 0);

Which in assembler is:

        .cfi_startproc
.LCF0:
0:      addis 2,12,.TOC.-.LCF0@ha
        addi 2,2,.TOC.-.LCF0@l
        .localentry    
__test_dummies_opt_value_MOD_test_dummy_opt_val_callee_2,.-__test_dummies_opt_value_MOD_test_dummy_opt_val_callee_2
        mflr 0           #,
        std 0,16(1)      #,
        std 31,-8(1)     #,
        stdu 1,-48(1)    #,,
        .cfi_def_cfa_offset 48
        .cfi_offset 65, 16
        .cfi_offset 31, -8
        mr 31,1          #,
        .cfi_def_cfa_register 31
        stfd 1,80(31)    # aa, aa
        stfd 2,88(31)    # bb, bb
        std 5,96(31)     # c_aptr, c_aptr
        std 6,104(31)    # c_bptr, c_bptr
        std 7,112(31)    # aptr, aptr
        std 8,120(31)    # bptr, bptr
        stb 9,128(31)    # _aa, tmp123
        mr 9,10          # tmp125, tmp124
        stb 9,136(31)    # _bb, tmp125
 # foo.f90:16:      if (.not.present(c_aptr) .or. .not.present(c_bptr)) stop
150
        lbz 9,144(31)    # _c_aptr, tmp126
        xori 9,9,0x1     #,, tmp127, tmp126
        rlwinm 9,9,0,0xff        # _1, tmp127
        rlwinm 9,9,0,31,31       # tmp128, _1,,
        rldicl 10,9,0,32         # _2, tmp128
        lbz 9,152(31)    # _c_bptr, tmp129
        xori 9,9,0x1     #,, tmp130, tmp129
        rlwinm 9,9,0,0xff        # _3, tmp130
        rlwinm 9,9,0,31,31       # tmp131, _3,,
        rldicl 9,9,0,32  # _4, tmp131
        or 9,10,9        #, tmp132, _2, _4
        rldicl 9,9,0,32  # _5, tmp132
        cmpdi 0,9,0      #, tmp133, _5
        beq 0,.L3        #
 # foo.f90:16:      if (.not.present(c_aptr) .or. .not.present(c_bptr)) stop
150
        li 4,0           #,
        li 3,150                 #,
        bl _gfortran_stop_numeric        #
        nop

Reply via email to