<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">