The code in ipa_analyze_call_uses tries to wade through the gimple to identify uses of pointers to member functions that are invariant after inlining (due to parameter passing). However, the code only looks for the vbit test on the pointer part of the pmf not on the delta. On targets such as ARM all bits in the pointer are meaningful and the vbit is stored in the delta and the code scrubbing fails to match.
Testcase is g++.dg/ipa/iinline-1.C On arm the relevant gimple looks like: f$__pfn_4 = f.__pfn; f$__delta_24 = f.__delta; __comp_ctor (&S, &"muhehehe"[0]); D.1787_3 = f$__delta_24 & 1; if (D.1787_3 != 0) goto <bb 3>; else goto <bb 4>; <bb 3>: D.1789_6 = f$__delta_24 >> 1; D.1790_7 = (unsigned int) D.1789_6; D.1791_8 = &S + D.1790_7; D.1792_9 = (int (*__vtbl_ptr_type) (void) * *) D.1791_8; D.1793_10 = *D.1792_9; D.1795_12 = (unsigned int) f$__pfn_4; D.1796_13 = D.1793_10 + D.1795_12; D.1797_14 = *D.1796_13; iftmp.0_15 = (String:: *) D.1797_14; <bb 4>: # iftmp.0_1 = PHI <iftmp.0_15(3), f$__pfn_4(2)> D.1789_18 = f$__delta_24 >> 1; D.1790_19 = (unsigned int) D.1789_18; D.1798_20 = &S + D.1790_19; D.1784_21 = iftmp.0_1 (D.1798_20, 4); -- Summary: ipa_analyze_call_uses fails to handle ptrmemfunc_vbit_in_delta Product: gcc Version: 4.4.2 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rearnsha at gcc dot gnu dot org GCC target triplet: arm-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40914