| // RUN: %clang_cc1 -O2 -emit-llvm %s -o - | not grep alloca |
| // RUN: %clang_cc1 -m32 -O2 -emit-llvm %s -o - | not grep {store } |
| |
| enum { |
| PP_C, |
| PP_D, |
| PP_R, |
| PP_2D, |
| PP_1D, |
| PP_SR, |
| PP_S2D, |
| PP_S1D, |
| PP_SC |
| }; |
| |
| enum { |
| G_VP, |
| G_FP, |
| G_VS, |
| G_GS, |
| G_FS |
| }; |
| |
| enum { |
| G_NONE, |
| G_B, |
| G_R |
| }; |
| |
| typedef union _Key { |
| struct { |
| unsigned int count : 2; |
| unsigned int Aconst : 1; |
| unsigned int Bconst : 1; |
| unsigned int Cconst : 1; |
| unsigned int Xused : 1; |
| unsigned int Yused : 1; |
| unsigned int Zused : 1; |
| unsigned int Wused : 1; |
| unsigned int ttype : 3; |
| unsigned int scalar : 1; |
| unsigned int AType : 4; |
| unsigned int BType : 4; |
| unsigned int CType : 4; |
| unsigned int RType : 4; |
| unsigned int Size : 2; |
| unsigned int prec : 1; |
| |
| unsigned int ASize : 2; |
| unsigned int BSize : 2; |
| unsigned int CSize : 2; |
| unsigned int tTex : 4; |
| unsigned int proj : 1; |
| unsigned int lod : 2; |
| unsigned int dvts : 1; |
| unsigned int uipad : 18; |
| } key_io; |
| struct { |
| unsigned int key0; |
| unsigned int key1; |
| } key; |
| unsigned long long lkey; |
| } Key; |
| |
| static void foo(const Key iospec, int* ret) |
| { |
| *ret=0; |
| if(((iospec.key_io.lod == G_B) && |
| (iospec.key_io.ttype != G_VS) && |
| (iospec.key_io.ttype != G_GS) && |
| (iospec.key_io.ttype != G_FS)) || |
| |
| (((iospec.key_io.tTex == PP_C) || |
| (iospec.key_io.tTex == PP_SC)) && |
| ((iospec.key_io.tTex == PP_SR) || |
| (iospec.key_io.tTex == PP_S2D) || |
| (iospec.key_io.tTex == PP_S1D) || |
| (iospec.key_io.tTex == PP_SC)))) |
| *ret=1; |
| } |
| |
| |
| extern int bar(unsigned long long key_token2) |
| { |
| int ret; |
| __attribute__ ((unused)) Key iospec = (Key) key_token2; |
| foo(iospec, &ret); |
| return ret; |
| } |