https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88311
Bug ID: 88311
Summary: mlongcall indirections are optimised away
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: iains at gcc dot gnu.org
Target Milestone: ---
For m32 PowerPC (at least for m32 on powerpc64-linux-gnu).
OK:
$ ./gcc/xgcc -Bgcc hello.c -mlongcall -dp -S -m32
[iains@gcc1-power7 bld-patched]$ more hello.s
.file "hello.c"
.machine power4
.section ".text"
.section .rodata
.align 2
.LC0:
.string "here we are"
.section ".text"
.align 2
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
stwu 1,-16(1) # 22 [c=4 l=4] movsi_update/1
.cfi_def_cfa_offset 16
mflr 0 # 23 [c=4 l=4] *movsi_internal1/20
stw 0,20(1) # 24 [c=4 l=4] *movsi_internal1/5
stw 31,12(1) # 25 [c=4 l=4] *movsi_internal1/5
.cfi_offset 65, 4
.cfi_offset 31, -4
mr 31,1 # 26 [c=4 l=4] *movsi_internal1/0
.cfi_def_cfa_register 31
lis 9,.LC0@ha # 5 [c=4 l=4] elf_high
la 3,.LC0@l(9) # 6 [c=4 l=4] elf_low
lis 9,puts@ha # 7 [c=4 l=4] elf_high
la 9,puts@l(9) # 8 [c=4 l=4] elf_low
mtctr 9 # 9 [c=4 l=4] *movsi_internal1/21
bctrl # 10 [c=4 l=4]
*call_value_indirect_nonlocal_sysvsi/0
li 9,0 # 11 [c=4 l=4] *movsi_internal1/8
mr 3,9 # 18 [c=4 l=4] *movsi_internal1/0
addi 11,31,16 # 29 [c=4 l=4] *addsi3/1
lwz 0,4(11) # 30 [c=8 l=4] *movsi_internal1/2
mtlr 0 # 31 [c=4 l=4] *movsi_internal1/21
lwz 31,-4(11) # 32 [c=8 l=4] *movsi_internal1/2
.cfi_def_cfa 11, 0
mr 1,11 # 33 [c=4 l=4] stack_restore_tie/0
.cfi_restore 31
.cfi_def_cfa_register 1
blr # 34 [c=4 l=4] simple_return
.cfi_endproc
.LFE0:
.size main,.-main
.ident "GCC: (GNU) 9.0.0 20181203 (experimental) [trunk revision
266733]"
.section .note.GNU-stack,"",@progbits
Not OK:
[iains@gcc1-power7 bld-patched]$ ./gcc/xgcc -Bgcc hello.c -mlongcall -dp -S
-m32 -O1
[iains@gcc1-power7 bld-patched]$ more hello.s
.file "hello.c"
.machine power4
.section ".text"
.align 2
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
stwu 1,-16(1) # 21 [c=4 l=4] movsi_update/1
.cfi_def_cfa_offset 16
mflr 0 # 22 [c=4 l=4] *movsi_internal1/20
stw 0,20(1) # 23 [c=4 l=4] *movsi_internal1/5
.cfi_offset 65, 4
lis 3,.LC0@ha # 19 [c=4 l=4] elf_high
la 3,.LC0@l(3) # 7 [c=4 l=4] elf_low
bl puts # 11 [c=4 l=4] *call_value_nonlocal_sysvsi/0
^^^^
li 3,0 # 16 [c=4 l=4] *movsi_internal1/8
lwz 0,20(1) # 26 [c=8 l=4] *movsi_internal1/2
mtlr 0 # 27 [c=4 l=4] *movsi_internal1/21
.cfi_restore 65
addi 1,1,16 # 28 [c=4 l=4] stack_restore_tie/1
.cfi_def_cfa_offset 0
blr # 29 [c=4 l=4] simple_return
.cfi_endproc
.LFE11:
.size main,.-main
.section .rodata.str1.4,"aMS",@progbits,1
.align 2
.LC0:
.string "here we are"
.ident "GCC: (GNU) 9.0.0 20181203 (experimental) [trunk revision
266733]"
.section .note.GNU-stack,"",@progbits