On Aug 24, 2020, Richard Biener <rguent...@suse.de> wrote: > since the option is quite elaborate on what (sub-)set of regs is > supposed to be cleared I'm not sure an implementation not involving > any target hook is possible?
I don't think this follows. Machine-independent code has a pretty good notion of what registers are call-saved or call-clobbered, which ones could be changed in this regard for function-specific calling conventions, which ones may be used by a function to hold its return value, which ones are used within a function... It *should* be possible to introduce this in machine-independent code, emitting insns to set registers to zero and regarding them as holding values to be returned from the function. Machine-specific code could use more efficient insns to get the same result, but I can't see good reason to not have a generic fallback implementation with at least a best-effort attempt to offer the desired feature. Now, this is for the regular return path. Is zeroing registers in exception-propagation paths not relevant? I thought it is, and I think we could have generic code that identifies the registers that ought to be zeroed, issues CFI notes to get them zeroed in the exception path, and requests a target hook to emit the insns to zero them in the regular return path. -- Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ Free Software Activist GNU Toolchain Engineer