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