TOT opt does not terminate!

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.

//foo.c

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);

}

Please flle in bugzilla with a bitcode testcase; it would help to
reduce the testcase using bugpoint.

-Eli

I minimized and filed as http://llvm.org/bugs/show_bug.cgi?id=4908

- Daniel

The following code causes opt to not terminate!

This works for me now, please file bugs when you hit problems.

-Chris