Unfortunately even after the previous patch there are still a few cases where regrename creates invalid code when used together with separate shrink-wrapping. I haven't found the cause of those. This patch disables regrename for functions that were separately shrink-wrapped.
2016-06-07 Segher Boessenkool <seg...@kernel.crashing.org> * regrename.c (gate): Disable regrename if shrink_wrapped_separate is set in crtl. --- gcc/regrename.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/regrename.c b/gcc/regrename.c index 00a5d02..5740b1a 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -1956,7 +1956,11 @@ public: /* opt_pass methods: */ virtual bool gate (function *) { - return (optimize > 0 && (flag_rename_registers)); + /* regrename creates wrong code for exception handling, if used together + with separate shrink-wrapping. Disable for now, until we have + figured out what exactly is going on. */ + return (optimize > 0 && flag_rename_registers + && !crtl->shrink_wrapped_separate); } virtual unsigned int execute (function *) { return regrename_optimize (); } -- 1.9.3