http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59660
--- Comment #6 from Jan Hubicka <hubicka at ucw dot cz> --- > That's only optimizable after the 'mergephi' pass. Before the > temporary setting is shared by the n==m code. Thus maybe > 'mergephi' itself can handle this ... Yep, mergephi seems like resonable place (at least it shares a lot of letters in the pass name as phiopt). I still think gimplifier itself could produce instead of: m_is_less_than_n (int n, int m) { _Bool D.2089; int D.2088; int iftmp.0; _Bool D.2082; if (n == m) goto <D.2084>; else goto <D.2087>; <D.2087>: D.2088 = n + -1; D.2089 = m_is_less_than_n (D.2088, m); if (D.2089 != 0) goto <D.2084>; else goto <D.2085>; <D.2084>: iftmp.0 = 1; goto <D.2086>; <D.2085>: iftmp.0 = 0; <D.2086>: D.2082 = (_Bool) iftmp.0; goto <D.2090>; <D.2090>: return D.2082; } simplified version m_is_less_than_n (int n, int m) { _Bool D.2089; int D.2088; int iftmp.0; _Bool D.2082; if (n == m) goto <D.2084>; else goto <D.2087>; <D.2084> D.2082 = 0; goto D.2090 <D.2087>: D.2088 = n + -1; D.2082 = m_is_less_than_n (D.2088, m); goto <D.2090>; <D.2090>: return D.2082; } Since this is pretty common pattern it should show as compile time improvement even at -O0. Honza