The following code causes opt to not terminate!
With TOT this morning, and of a week ago:
clang foo.c and clang –O1 foo.c
work fine.
clang –O2 foo.c and clang –O3 foo.c
do not terminate. (At least after 10 minutes)
If I generate the bit code (clang-cc –emit-llvmbc) and then run:
opt –O3 foo.bc
it does not terminate.
int get_id(int);
typedef short short2 attribute ((vector_size (2)));
union _X {
short2 s;
int i;
};
typedef union _X X;
inline short2 as_short2(int x)
{
X result;
result.i = x;
return result.s;
}
inline int as_int(short2 x)
{
X result;
result.s = x;
return result.i;
}
void short2_int_swap(
short2* b,
int* c)
{
int gidx = get_id(0);
short2 bval = b[gidx];
int cval = c[gidx];
b[gidx] = as_short2(cval);
c[gidx] = as_int(bval);
}