// RUN: %clang_cc1 -O2 -emit-llvm %s -o - | not grep alloca | |
// RUN: %clang_cc1 -triple i686-pc-linux-gnu -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; | |
} |