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