Hi, this patch series adds IPA support for outlined IFN_ASSUME bodies, primarily focusing on ipa-cp and ipa-sra. It introduces internal callback edges and a lot of logic to work with them.
Instead of one large patch, I decided to split the feature into this series. I am aware that 19 patches is a little much, but most of the patches are (hopefully) easy changes. The first 17 patches prepare the logic for the new edges, which are added in patch 18. I tried to keep the patches as inert as possible, i.e. they shouldn't have an effect until patch 18 is committed. I did an incremental bootstrap (apply in order, bootstrap after each patch), bootstrapped and LTO-bootstrapped the series as a whole and regtested both of those without any new regressions on x86_64-linux. Josef Melcr (19): cgraph: Add assume_function field to cgraph_node Add vector streaming functions to callback_info Add inverted_mapping field to callback_info Add supporting functions for IFN_ASSUME IPA support cgraph: Move printing logic to include callback edges cgraph: Add callback_with_carrying_edge_p method cgraph: Replace callback redirection logic with a function middle-end: Don't disable optimizations for assume bodies cgraph: Add functions for internal callback edge creation ipa: Adjust jump function computations for callback edges ipa: Adjust fnsummary for internal callback edges ipa: Adjust ipa-sra for IFN_ASSUME bodies cgraph: Adjust callback edge sanity checks ipa: Copy over assume_function when cloning cgraph, ipa: Internal callback edge redirection logic and call adjustments ipa: Don't merge assume bodies with non-assume functions ipa: Help passes make decisions about assume bodies ipa: Create a callback edge when encountering an internal .ASSUME call testsuite: Add testcases for IPA for IFN_ASSUME changes gcc/attr-callback.cc | 13 ++ gcc/attr-callback.h | 4 + gcc/callback-info.cc | 142 +++++++++++++++++--- gcc/callback-info.h | 29 +++- gcc/cgraph.cc | 112 +++++++++++---- gcc/cgraph.h | 18 ++- gcc/cgraphclones.cc | 1 + gcc/gimple-low.cc | 15 +-- gcc/ipa-cp.cc | 10 ++ gcc/ipa-fnsummary.cc | 22 ++- gcc/ipa-icf.cc | 11 +- gcc/ipa-param-manipulation.cc | 54 +++++++- gcc/ipa-polymorphic-call.cc | 7 + gcc/ipa-prop.cc | 27 +++- gcc/ipa-sra.cc | 119 +++++++++++++--- gcc/lto-cgraph.cc | 2 + gcc/testsuite/g++.dg/ipa/ipa-cp-assume-2.C | 40 ++++++ gcc/testsuite/g++.dg/ipa/ipa-cp-assume-3.C | 51 +++++++ gcc/testsuite/g++.dg/ipa/ipa-cp-assume.C | 26 ++++ gcc/testsuite/g++.dg/ipa/ipa-sra-assume-2.C | 33 +++++ gcc/testsuite/g++.dg/ipa/ipa-sra-assume-3.C | 34 +++++ gcc/testsuite/g++.dg/ipa/ipa-sra-assume.C | 37 +++++ gcc/testsuite/g++.dg/lto/ipa-cp-assume_0.C | 27 ++++ gcc/testsuite/g++.dg/lto/ipa-cp-assume_1.C | 13 ++ gcc/testsuite/g++.dg/lto/ipa-sra-assume_0.C | 28 ++++ gcc/testsuite/g++.dg/lto/ipa-sra-assume_1.C | 11 ++ gcc/tree-inline.cc | 1 + gcc/tree-sra.cc | 4 +- 28 files changed, 803 insertions(+), 88 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-cp-assume-2.C create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-cp-assume-3.C create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-cp-assume.C create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-sra-assume-2.C create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-sra-assume-3.C create mode 100644 gcc/testsuite/g++.dg/ipa/ipa-sra-assume.C create mode 100644 gcc/testsuite/g++.dg/lto/ipa-cp-assume_0.C create mode 100644 gcc/testsuite/g++.dg/lto/ipa-cp-assume_1.C create mode 100644 gcc/testsuite/g++.dg/lto/ipa-sra-assume_0.C create mode 100644 gcc/testsuite/g++.dg/lto/ipa-sra-assume_1.C -- 2.55.0
