|  | // RUN: %llvmgcc -S --emit-llvm %s -o - | not grep "\{ i8, .7 x i8. \}" | 
|  | // RUN: %llvmgcc -O2 -S %s -o - | not grep alloca | 
|  | 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 inline __attribute__ ((always_inline)) 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; | 
|  | } |