13883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher// RUN: %clang_cc1 -O2 -emit-llvm %s -o - | not grep alloca
28cf685e0a4b686da1f5cee2090ed62896f2b352cRafael Espindola// RUN: %clang_cc1 -triple i686-pc-linux-gnu -O2 -emit-llvm %s -o - | not grep store
33883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
43883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherenum {
53883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_C,
63883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_D,
73883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_R,
83883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_2D,
93883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_1D,
103883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_SR,
113883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_S2D,
123883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_S1D,
133883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher PP_SC
143883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
153883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
163883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherenum {
173883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_VP,
183883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_FP,
193883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_VS,
203883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_GS,
213883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_FS
223883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
233883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
243883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherenum {
253883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_NONE,
263883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_B,
273883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher G_R
283883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher};
293883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
303883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christophertypedef union _Key {
313883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher struct {
323883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int count : 2;
333883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Aconst : 1;
343883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Bconst : 1;
353883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Cconst : 1;
363883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Xused : 1;
373883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Yused : 1;
383883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Zused : 1;
393883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Wused : 1;
403883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int ttype : 3;
413883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int scalar : 1;
423883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int AType : 4;
433883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int BType : 4;
443883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int CType : 4;
453883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int RType : 4;
463883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int Size : 2;
473883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int prec : 1;
483883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
493883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int ASize : 2;
503883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int BSize : 2;
513883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int CSize : 2;
523883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int tTex : 4;
533883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int proj : 1;
543883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int lod : 2;
553883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int dvts : 1;
563883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int uipad : 18;
573883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher } key_io;
583883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher struct {
593883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int key0;
603883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  unsigned int key1;
613883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher } key;
623883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher unsigned long long lkey;
633883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher} Key;
643883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
653883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherstatic void foo(const Key iospec, int* ret)
663883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
673883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  *ret=0;
683883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher if(((iospec.key_io.lod == G_B) &&
693883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  (iospec.key_io.ttype != G_VS) &&
703883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  (iospec.key_io.ttype != G_GS) &&
713883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  (iospec.key_io.ttype != G_FS)) ||
723883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
733883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  (((iospec.key_io.tTex == PP_C) ||
743883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    (iospec.key_io.tTex == PP_SC)) &&
753883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher   ((iospec.key_io.tTex == PP_SR) ||
763883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    (iospec.key_io.tTex == PP_S2D) ||
773883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    (iospec.key_io.tTex == PP_S1D) ||
783883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher    (iospec.key_io.tTex == PP_SC))))
793883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher  *ret=1;
803883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
813883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
823883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher
833883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopherextern int bar(unsigned long long key_token2)
843883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher{
853883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher int ret;
863883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher __attribute__ ((unused)) Key iospec = (Key) key_token2;
873883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher foo(iospec, &ret);
883883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher return ret;
893883e66cfd55de70d89831cf26f9ae53931d11d3Eric Christopher}
90