<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy1Vltv4ygU_jXJC7IFxteHPKRJZ1Wp2lmp253HCGOcsCXGBZw28-v3gJMmaTPV7I42IskBDufynQvUutnPFnrbMyO7NZrk-LEeOjcgrhjMd8JYqTtEaIxjEk2SGxgJThJMYBBcJSksFJmgtC0ITxoWkUlxK157_3dkTCjBmMRZCeLRi3SbH-tJQQ--0ANns6TMKCxgkldZXuclLslHPZSQIqkyEpM08YpA3EFHAjJTZDf6xSKGrJLrjUO9MK02W9ZxgYxYG2G9BfEELyd4Pv4-Wo8J67y50dcgtB6kapBu0ca53k7ofJJ8gbEGp4Y65noLk4Z1W2aA4H3PN4I_eVJvt9IBQVtcpbSucCVa3maEV1ULS3leEUrTCnOMK_Cv_rc60NA1yAxddwjj8u5hfnN_u_prfv94--X-67cJXRJUy-78TBSJjtVKwB5TCqay47rjarByJ1C0RKvVb78_LlYrFMf-nJLw20ollLROmBgEeVBkQIiDiDVkUeOXjmA77ZhCd8a7A-tZNkkWiQ_mokiIZ5wkZUiBiMBihXY2Dnw5cOAy9XxldskHi9VFmO6QM1I0qDFSKe--7JxG0kHkGsTZViDGjbbBnI1A7dBx55MNxEr74HziLzbM3EtwiSlQZF3jUafz1Yq_vhIyTmpmJV_ZwD-hC77x-C_QG7NfWDnDpLPHbXp7wQEAac6cNqd95L-AuYXc8D6jUWwVKmUj-eaIZOdBhJxFHuYDmgX9MYKkpFdgQ_daP4WkdgELL0wI6-W9wTIqDEhpMPgluDs_B_xN3bgGgcxu5JatxSRbgsLLtB2sMFHYtfGYwn4FXHaic4dsTlKo8AIIkiVJWuVpEeUJExSzJiqrqopSSnjE6pJGpKlYCn2GkCqNezANsPpoWvp_mQbZGNEyzUXbZFHDCxKlJQcjec2jthU0yxvR4LS9Yhqof9DG7AFWiKS2LqRq0A5txaG9hm7Iuk5DbzIaQq32kBn9PqRxz6DgkB6OhfTEGZTwW7l5ljvgHqA5eQGtXA_G8zsE0YQqRGsxRlx2rUY7OZaC70pwNIKqEfE7cx90KOojnr7MLchGSndrSEPZwSHvwceS-sOIVr7-58K6XhFnZfTzh6uQ_8cuTOdocFLZeOPFxXE81tlFL_kzoNJ4nNDzIGzwSkHRWKTkkwBvpT1VQ47H4ftgWAmoCDCVOclRrbVCn-ERLD05NnoBNudAHV1Hz4G6xgmMqD-FrbgZCQQf2XrXIf9F19hvkNsB_SD02Z84HkKHjxFuMB1qmbJwG1wR5E_HSnTrIGqE9gaRQADm_fu93Bt3OMbD-0LADHsD-tjK7-JSCqwG8nkUuISB8CeGOjNc2nnVgUmxPA_u1ej8SlyuIX-Q_k7ETvCx778PIWBnhxbyQ1gvJknCWICyZCjP6BP5eCLvPQk-ngPhu8tnLkDGQCG86fRwn5t_ivnnhXxMpcWYge_D9Fmo3qLyE3E7Vtjlfb9h8DzxfW7vuxpUKdz-rNsjDc0IOmTv5FZ-Z2Ptip1QNjRIUKGPR0FvM3A4Ztm2VyKeNjPaVLRiUza4jTazVhrxArzTwajZJw8xpXbHvwja9t8QZ5hKawcP7peMZlk23cwa2nLc5mmS12lR1wmtBKmatsGCtaKgZKpYDXbO4LqCmHbiBQURPr7ZcvrrFshZeCT7nyQtcBLXhX9xpinGrGpoWU1SLLZMqtjLibVZT80siKyHtYVN_-Kzp00Gr-V1J0QwGCx00ikxO94WP3hc-1cHvKNRMwh_JW3BxvG5Nl4l02DzLBj8DxxiyK0>53555</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang-14 performance regression at -O2 due to missing inlining
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          firewave
      </td>
    </tr>
</table>

<pre>
    Comparing `Ubuntu clang version 13.0.1-++20220120110924+75e33f71c2da-1~exp1~20220120231001.58` with `Ubuntu clang version 14.0.0-++20220131052853+016956b68081-1~exp1~20220131172951.142` on Ubuntu 20.04 shows a slight performance regression.

Using an `-O2` build of https://github.com/danmar/cppcheck/commit/3f0943b909efcf51c99ff09669133490c009808b of https://github.com/danmar/cppcheck und running `DISABLE_VALUEFLOW=1 bin/cppcheck --enable=all --inconclusive -D __GNUC__ ../cli/filelister.cpp` in `callgrind` shows a total Ir of `55,253,721` (clang-13) vs. `56,084,785` (clang-14).

I tried drilling into it and came across a the function `isStringCharLiteral(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char)` which shows an Ir per call of `73` (clang-13) vs. `183` (clang-14). Looking at the callees of function shows the following:

clang-13
![image](https://user-images.githubusercontent.com/242857/152249647-62ae30ad-8999-431c-ab83-1d9a42da1194.png)

clang-14
![image](https://user-images.githubusercontent.com/242857/152249785-3846efd5-dc71-48cd-8cbc-ffe356ded04f.png)

(Sorry for posting images but you cannot properly copy and paste our of `kcachegrind` and I could not figure out how to get the info via the command-line.)

So `clang-14` is no longer inlining the function `isPrefixStringCharLiteral(std::__cxx11::basic_string<> const&, char, std::__cxx11::basic_string<> const&) (cppcheck: utils.h, ...)`.

The code in question looks like this:
```cpp
inline static bool isPrefixStringCharLiteral(const std::string &str, char q, const std::string& p)
{
    if (!endsWith(str, q))
        return false;
    if ((str.length() + 1) > p.length() && (str.compare(0, p.size() + 1, p + q) == 0))
        return true;
    return false;
}

inline static bool isStringCharLiteral(const std::string &str, char q)
{
    static const std::vector<std::string> suffixes{"", "u8", "u", "U", "L"};
    for (const std::string & p: suffixes) {
        if (isPrefixStringCharLiteral(str, q, p))
            return true;
    }
    return false;
}
```

I have not yet tested any other optimization levels and also have no reduced sample.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1Vktv4zYQ_jXyhZBAinoefHDsbBEg6BZI0z0aFEXZbGhRISkn6a_vkLJjO-sNti1q0PZoOJzHNw-x0e3bfKl3AzOy36CowI_N2LsRccXgeS-MlbpHhCY4IXGU3sBKcZpiAovgOs2AUeaC0q4kPG1ZTKLyVrwO_u8omFKCMUnyCtSjF-m2P7aTgR18YQfO5mmVU2BgUtR50RQVrsj3dighZVrnJCFZ6g2BuoONFHRmyG71i0UMWSU3W4cGYTptdqznAhmxMcJ6D5IIryK8mH4frceE9d7d-GtQ2oxStUh3aOvcYCO6iNIvsDYQ1NgkXO_goWX9jhkg-DDwreBPntS7nXRA0A7XGW1qXIuOdznhdd0BqyhqQmlWY45xDfE1_9QGGvsWmbHvD2lc3T0sbu5v138s7h9vv9x__RbRFUGN7M_PxLHoWaME7DGl4FH2XPdcjVbuBYpXaL3-5dfH5XqNksSfUxJ-O6mEktYJk4AiD4oMCHFQsYEqaj3rCLbTjil0Z3w4wM_zKF2mPpnLMiVeMEqrUAIxAWaN9jYJcgVI4CrzclV-KQfM-iJNd8gZKVrUGqmUD1_2TiPpIHMt4mwnEONG2-DOVqBu7LnzxQZqpX1wvvCXW2buJYTEFBiyrvWo08V6zV9fCZkeGmYlX9sgH9El33r8l-hd2DPWzjDp7HGb3l5IAECaM6fNaR_5L2BuoTZ8zGhSW4dO2Uq-PSLZexChZpGH-YBmSX-MIKnoFdjQvdZPoahdwMIrE8J6fe-wTAYDUhocfgnhLs4Bfzc38SCR-Y3csY2I8hUYvCzb0QoTh12bTCXsORCyE707VHOaQYeXQJA8TbO6yMq4SJmgmLVxVdd1nFHCY9ZUNCZtzTKYM4TUWTKAa4DV965l_5drUI0xrbJCdG0et7wkcVZxcJI3PO46QfOiFS3OuiuugfkHbcwbwAqZ1NaFUg3WYaw49KZhGrK-1zCbjIZUqzeojOEtlPHAoOGQHo-N9MQZtPB7u3mRO5AeYTh5BZ3cjMbLOwTZhC5EGzFlXPadRns5tYKfSnA0hq4RyQd3H3Ro6iOevs0t6EZK9xsoQ9nDIR_B9y31mxGdfP3XjXW9I87a6OcP16H-j1OYLtDopLLJ1qtLkmTqs4tZ8ntApfU4oedR2BCVgqaxSMknAdFKe-qGAk_Lz8HACagIcJU5yVGjtUKf4RE8PQU2RQE-F0AdQ0fPgbomCYJoOKWtvJkIBB_Z-dCh_kXf2m9Q2wH9oPTZnzgeQoePEW40PeqYsvA2uKLIn06U6DdB1QTtDSKBAMyHj3uFd-5wjIf7hYAn7B0YEiv_EpdagBvI50nhChbCnzjqzHjp59UAonJ1ntyr2fkvebmG_EH7BxV7wae5_zGFgJ0dO6gPYb2aNA1rCcbSsTqjT-Tjibz3JMR4DoSfLp-FABUDjfBu08N97v4p55838rGUllMFfkzTZ6l6z8pP5O3YYZfv-y2D64mfc29-qkGXwtuf9W9IwzCCCTk4uZN_sal3xV4oGwYkmNDHo2C3HTkcs2w3KJHM2jlta1qzmZNOiflx7v3gmujfn3AjRO0o_HDdSWuni8c0FGejUfNPbm9K7Y9_Mcz6P6E44BGUjD4jX3Ka5_lsO-dFWjUUN3lB0rYr2rouKS7ytiUCN4SXM8UaCG4O7zgohF68oKDCF0W-msl5uBf7nzQrcZo0pb9kZhnGrG5pVUcZFjsmVeL9SLTZzMw8uNSMGwub_pJnT5sMYtz0QgRzoJ-NbqvNvJNGvACos2B7Hnz_G9OJsnU">