https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89711
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org Assignee|marxin at gcc dot gnu.org |unassigned at gcc dot gnu.org --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- The mentioned patch is responsible for preserving of ifunc resolver: Bisecting latest revisions 0e35450b3c1d7164(30 Jun 2017 13:51): [took: 2.646s] result: OK ;; Function xd (xd.default.3, funcdef_no=0, decl_uid=1815, cgraph_uid=0, symbol_order=0) __attribute__((target ("default"), target_clones ("avx", "default"))) xd () { <bb 2> [100.00%] [count: INV]: return; } ;; Function tx (tx.default.2, funcdef_no=1, decl_uid=1818, cgraph_uid=1, symbol_order=1) __attribute__((target ("default"), target_clones ("avx", "default"))) tx () { <bb 2> [100.00%] [count: INV]: return; } ;; Function tx.avx.0 (tx.avx.0, funcdef_no=3, decl_uid=1832, cgraph_uid=3, symbol_order=3) __attribute__((target ("avx"), target_clones ("avx", "default"))) tx.avx.0 () { <bb 2> [100.00%] [count: INV]: return; } ;; Function xd.avx.1 (xd.avx.1, funcdef_no=4, decl_uid=2147, cgraph_uid=4, symbol_order=4) __attribute__((target ("avx"), target_clones ("avx", "default"))) xd.avx.1 () { <bb 2> [100.00%] [count: INV]: return; } ;; Function main (main, funcdef_no=2, decl_uid=1821, cgraph_uid=2, symbol_order=2) (executed once) main () { <bb 2> [100.00%] [count: INV]: return 0; } ;; Function tx.resolver (tx.resolver, funcdef_no=6, decl_uid=2151, cgraph_uid=6, symbol_order=6) tx.resolver () { int _3; <bb 2> [100.00%] [count: INV]: __builtin_cpu_init (); _3 = __builtin_cpu_supports (&"avx"[0]); if (_3 > 0) goto <bb 3>; [64.00%] [count: INV] else goto <bb 4>; [36.00%] [count: INV] <bb 3> [64.00%] [count: INV]: return tx.avx.0; <bb 4> [36.00%] [count: INV]: return tx; } ;; Function xd.resolver (xd.resolver, funcdef_no=8, decl_uid=2157, cgraph_uid=10, symbol_order=10) xd.resolver () { int _3; <bb 2> [100.00%] [count: INV]: __builtin_cpu_init (); _3 = __builtin_cpu_supports (&"avx"[0]); if (_3 > 0) goto <bb 3>; [64.00%] [count: INV] else goto <bb 4>; [36.00%] [count: INV] <bb 3> [64.00%] [count: INV]: return xd.avx.1; <bb 4> [36.00%] [count: INV]: return xd; } while before it was removed: ac45aefc028a5546(30 Jun 2017 13:19): [took: 2.623s] result: OK ;; Function main (main, funcdef_no=2, decl_uid=1821, cgraph_uid=2, symbol_order=2) (executed once) main () { <bb 2> [100.00%] [count: INV]: return 0; } ;; Function tx.avx.0 (tx.avx.0, funcdef_no=3, decl_uid=1832, cgraph_uid=3, symbol_order=3) __attribute__((target ("avx"), target_clones ("avx", "default"))) tx.avx.0 () { <bb 2> [100.00%] [count: INV]: return; } ;; Function xd.avx.1 (xd.avx.1, funcdef_no=4, decl_uid=2147, cgraph_uid=4, symbol_order=4) __attribute__((target ("avx"), target_clones ("avx", "default"))) xd.avx.1 () { <bb 2> [100.00%] [count: INV]: return; } Thus I'm leaving that to Richi, it's probably IPA PTA issue.