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

    <tr>
        <th>Summary</th>
        <td>
            [CodeGen][OOM] Switch statements without default branching result in long compile times or OOM
        </td>
    </tr>

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

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

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

<pre>
    The original question is as follows (I've abbreviated it a bit)

```
int src();
int f1(unsigned int *b) {
#define SWITCH(in1, out1) \
  unsigned int out1;\
  switch (in1) {           \
    case 0: out1 = b[0] >> 0; break; \
...
    case 126: out1 = b[2] >> 30; break; \
    default:  out1 = b[2] >> 31; break; \
  }
  unsigned int r = src();
  SWITCH(r >> 1 & 0x7fU, v1);
...
  SWITCH(r >> 15 & 0x7fu, v26);
  return (v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | v9 | v10 | v11 | v12 | v13 |
          v14 | v15 | v16 | v17 | v18 | v19 | v20 | v21 | v22 | v23 | v24 | v25 | v26);
}
```
```
OLD=`/usr/bin/time -f '%M' clang_before -cc1 -O1 -emit-obj  oom_manual.cc -o /dev/null 2>&1`
NEW=`/usr/bin/time -f '%M' clang_after -cc1 -O1  -emit-obj  oom_manual.cc -o /dev/null 2>&1`
echo $OLD
echo $NEW
expr $OLD "*" 10 "<" $NEW > /dev/null
```
```
$ ./test_manual.sh
119816
1248148
$ echo $?
0
```
[oom_manual.cc.txt](https://github.com/llvm/llvm-project/files/13956612/oom_manual.cc.txt)

_Originally posted by @dwblaikie in https://github.com/llvm/llvm-project/issues/76669#issuecomment-1894679825_
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklU1v2zgTgH_N-DKwIQ5FfRx8iOPqfYvdrrFoFz0GlETZbGkyK1JO8u8XlOQ4TprFFhUMjziceeZLoqT3em-VWoPYgNgu5BAOrl9vtbR__raoXfu0_nJQ6Hq911Ya_HtQPmhnUXuUHjtnjHvwCFR8BMpPCmVd9-qkZVAt6oASax2ASki2kNzM_1ky_8altgF93wAV0Y5vLtqOARWDHTNsMWqAbmqgEiGfzYB4qzptFX7--vHL7f-BCm0Z0C26IbDRVNxOpohXqHGfb15s-wcdmgOeEWMUvFwvLBEb6RUmwG9GDgLfYg1ik4DYIvAPwD_E3Q3WvZLf482z92q1eoVhlL0B0QsQf4cUAa3q5GBC9P8XAHsPAPn2h83pR87bqeClzf2ZzhAow-Qx7_6KfT-xlw4vqv2Bp3h2HUZXyq6D9SoMvY0TOTGEPFpMgk8inYSYRDaJfBLFJMpJsGSWM4fNIDaSLv2crhObyWxGs5nNZjib6WzG04ync5oznuZEaebRzLsu9HkKr96MV8vd71vg27ikavA9UFVrC1QFfVS47BAoBxKfgHJsjLT7u1p1rle4bBqGyx3DpTrqsHT1N0TnjndHaQdpVk2DS4dAVatOQJUdjEGKE6KMPcf-48PXn4stu6D6S-hfia2aQ7RJY_1XipjUpHi872cLBCKgGyDCOHMi4LdxMZnHJ-863H9pPFCKq1is8uGcuT9Me4yVBcvme0oLlhYXp3OiwKtJ-Q5fbK56sgqPAcQWqDiEcO-B3wBVQNVeh8NQrxp3BKqMOZ3F8r5331QTgKpOG-WBKsZLkWWMgKq36Ovj-G43H-7mCe-djwd3_YSQJu1DbaT-rhVqiz-difZ-GFPJsywrgfioaNzxqGxYsqJMs7wsSNwt2jVvS17KhVqzPBGiEDnji8Na5IkSea3ShjhlpeJN1xSyKERJrGZls9BrSihNGCsYTwvOV13BRNeR6iRJkbUK0kQdpTarmNvK9fvFmMQ6L0ReLIyslfHjl4_IqgccN-MjI7aLfj3WUw97D2litA_-Qgk6mPGTeeta9T9l47DEZrf7FA_dz9NnxAcZVKzV44MOBzeE82GNdS9tc9B2j73yUaEtGmf32LjjvTYK41vl0fW4231aDL1Z_0L3Y6n_BAAA__9tfymk">