[llvm] [SimplifyCFG] When only one case value is missing, replace default with that case (PR #76669)
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 16 15:24:47 PST 2024
dwblaikie wrote:
I did finally get something a bit smaller (exact file attached)
```
int src();
int f1(unsigned int *b) {
#define SWITCH(in1, out1) \
unsigned int out1;\
switch (in1) { \
case 0: out1 = b[0] >> 0; break; \
... \
case 31: out1 = b[0] >> 31; break; \
case 32: out1 = b[1] >> 0; break; \
... \
case 63: out1 = b[1] >> 31; break; \
...
case 95: out1 = b[2] >> 31; break; \
case 96: out1 = b[2] >> 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 >> 27 | (r << 5 & 0x60U), v2);
SWITCH(r >> 2 & 0x7fu, v3);
SWITCH(r >> 9 & 0x7fu, v4);
SWITCH(r >> 16 & 0x7fu, v5);
SWITCH(r >> 23 & 0x7fu, v6);
SWITCH(r >> 30 | (r << 2 & 0x7fu), v7);
SWITCH(r >> 7 & 0x7fu, v8);
SWITCH(r >> 12 & 0x7fu, v9);
SWITCH(r << 4 & 0x7fu, v10);
SWITCH(r >> 10 & 0x7fu, v11);
SWITCH(r >> 24 & 0x7fu, v12);
SWITCH(r >> 31 | (r << 1 & 0x7eu), v13);
SWITCH(r >> 6 & 0x7fu, v14);
SWITCH(r >> 13 & 0x7fu, v15);
SWITCH(r >> 20 & 0x7fu, v16);
SWITCH(r >> 27 | (r << 5 & 0x60u), v17);
SWITCH(r >> 3 & 0x7fu, v18);
SWITCH(r >> 9 & 0x7fu, v19);
SWITCH(r >> 16 & 0x7fu, v20);
SWITCH(r >> 23 & 0x7fu, v21);
SWITCH(r >> 30 | (r << 2 & 0x7cu), v22);
SWITCH(r >> 7 & 0x7fu, v23);
SWITCH(r >> 12 & 0x7fu, v24);
SWITCH(r >> 14 & 0x7fu, v25);
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)
https://github.com/llvm/llvm-project/pull/76669
More information about the llvm-commits
mailing list