https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63718
vries at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |vries at gcc dot gnu.org
--- Comment #5 from vries at gcc dot gnu.org ---
Created attachment 33874
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33874&action=edit
tentative patch, adds missing clobbers
Joey,
thanks for doing the analysis and the clear bug report. I cannot formally
confirm at this point since I don't have an arm bootstrap setup, but I agree,
those missing clobbers (while not causing problems otherwise) will cause
problems with fuse-caller-save.
I'd say the fix is to add the missing clobbers. Attached tentative patch
implements that fix.
Using the patch, I build a c-only arm compiler, compiled an example with
-mthumb and -march=armv4t and observed the new clobbers on the return in the
final dump:
...
(jump_insn 19 18 20 (parallel [
(unspec_volatile [
(return)
] VUNSPEC_EPILOGUE)
(clobber (reg:SI 0 r0))
(clobber (reg:SI 1 r1))
(clobber (reg:SI 2 r2))
(clobber (reg:SI 3 r3))
]) test.c:9 773 {*epilogue_insns}
(expr_list:REG_UNUSED (reg:SI 3 r3)
(expr_list:REG_UNUSED (reg:SI 2 r2)
(expr_list:REG_UNUSED (reg:SI 1 r1)
(nil))))
-> return)
...
Could you try out the patch and see if it fixes things for you?
Thanks,
- Tom