<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/112627>112627</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [Regression] LICM not duplicating instruction exposes code size regressions at -Oz
        </td>
    </tr>

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

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

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

<pre>
    Reduced testcase:
```
int f(int* a, int b, int c, int size) {
  union {
    int value;
    struct {
 int flag : 1;
      int data : 31;
    } parts;
  } u;

  for (int i = 0; i < size; i++) {
    if (a[i] > 0 && b < 10) {
      if (c > 5 && a[i] % 3 == 0) {
        c += a[i];
        a[i] = 0;
 u.value = c;
        if (u.parts.flag) {
          b += 2;
 }
        if (c > 10) {
          u.parts.flag = -1;
        }
 if (b > 5 && (c % 4 == 0 || c % 7 == 0)) {
          a[i] = c - b;
          if ((c - b) % 2 == 0 && (c - b) > 5) {
            a[i + 1] = (c - b) * 3;
          }
          if (a[i] > 10) {
 a[i] = a[i] / 2;
          }
        }
        // Additional union code usage
        u.parts.data = a[i] * 2;
        a[i] = u.value;
 if (u.parts.flag) {
          a[i] += 1;
        }
 }
      return 0;
    }
  }
  return (c % 2 == 0) ? 0 : 1;
}
```

Size after/before:

```
[davidino@alcor]$ size /tmp/with 
   text    data     bss     dec     hex filename
    287 0       0     287     11f /tmp/with

[davidino@alcor]$ size /tmp/without 
   text    data     bss     dec     hex filename
    264 0       0     264     108 /tmp/without
```

This bisects to:

```
commit 0659000ff79decc1173aac140d4b0325fe696c57 (HEAD)
Author: Nikita Popov <npopov@redhat.com>
Date:   Wed Apr 26 10:00:42 2023 +0200

    [LICM] Don't duplicate instructions just because they're free
```

Unclear to me if this is the real regression or it's exposing something else, but I wanted to report anyway.

@nikic 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVkuP4zYM_jXKhZhAlvyIDzkkkw26QF_YtuhZlulEu44VSPLMzv76gnIedpIZtGgQ2DLNx8ePFC3lvdl1iEuWrVm2mak-7K1b1lqbWWXrt-UXrHuNNQT0QSuPTK4Y3zC-Yjk__eOj6QI0TCxMF5hYgWLiGUhWnRf6vPDmBzJRAivWgylA3xnbjQUQNV9U2yOTI6kPrtdhpBnDtmoHTK4gmegOPmoVVHwpp29ZsYGjcsGPpCTrL89naWMdDImBASY3wJlcx-XzkAs9MbGO__Imi4ZMFcvWhmUbYPITcGAiZyKHKnpI-J3R2UxH_eysf_UiMpCEZABzbw6ggdDIzcXohhkYeTtldHrdzyPrUazvrAZg_TwyNyfiH4YHSm4AIK4-WLF55G1I8yEP9BsHi6iebssMI8-Dy2rK3BBEZJBeWANWPLPiGQZ5MWbzHRwTwjQ8QXUH45xRjEcK5ElkIEZhR4jOGgT1naCnsEQmJOfgU_crkA-A3HH9sBdvSZ_kOOq37biM78e4F4gtGa_q2gRjO9Wedrq2NULv1Q6n-udanzbtBMPqAYYJ3lPnXpX-dbOOosSe_ajBbnJ0GHrXjTfQlIfR8qR6aUYx3cJyS-0xmWIX45tZO1z_MD8QVBPQMbGtsLFuNJwfmmXrWr2Y2nSWpVy12jqaDCKNY4yKFQ5HJravJuzhkk3A74GSijWJW9v7eK9Rx_sev0NjWuzUYVROsSiAn9gb7iShX5I001gTyP8Bo-3D_4eZp7cw83SAyRd34T6oxp9746EyHnXwEOzHldD2cDABeJ6VnPOmKcoatU6SQiqlk5TXacWlyBrMy1xnBfXMT59WGxpO0X4Vv9LULL-abyYo-N0e7Qt9T7ojrVjKHdZ7FebaHpj8NFhtVKAOAYC_sYbV0YHIaQTIFadLKkBwIWkTcMH59CMIwLL1z5-ff6FtsrEdE0WAuj-2RquAYLrhy2xs5-Fr7wNUqFXvEcIe35goHELjED8g8K9Ot6gcBAsHpL0biFHjyQM4VC043Dn0ngaIdWACE4UH_H603nQ78PaAYU8rbD3SYaPqA3yGV9UFOr9YcHi0LoDq3l7V23xSnpR35pvRMKuXsi5lqWa4TApRJkkpF3K2X1blIilqVWiR8kyWTVoXi1wlTaJkiUmmZ2YpuEgTnuRCZLmQ80XDa1lJrcumWfC0ZinHgzLtvG1fDnPrdjPjfY_LJBG5KGatqrD18RgmRIevEN8yIehU5pZk9FT1O89S3hof_NVNMKGN57cvF36oSFQs6Oy1SkTNqE4Dc-iHYRx315VgDyrA028_Zr1rl_sQjp4aOk7znQn7voqNJbYE4nR7Ojr7FXVgYhuheya2p9xeluKfAAAA___V0qz7">