xref: /aosp_15_r20/external/clang/test/CodeGen/2008-03-24-BitField-And-Alloca.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -O2 -emit-llvm %s -o - | not grep alloca
2*67e74705SXin Li // RUN: %clang_cc1 -triple i686-pc-linux-gnu -O2 -emit-llvm %s -o - | not grep store
3*67e74705SXin Li 
4*67e74705SXin Li enum {
5*67e74705SXin Li  PP_C,
6*67e74705SXin Li  PP_D,
7*67e74705SXin Li  PP_R,
8*67e74705SXin Li  PP_2D,
9*67e74705SXin Li  PP_1D,
10*67e74705SXin Li  PP_SR,
11*67e74705SXin Li  PP_S2D,
12*67e74705SXin Li  PP_S1D,
13*67e74705SXin Li  PP_SC
14*67e74705SXin Li };
15*67e74705SXin Li 
16*67e74705SXin Li enum {
17*67e74705SXin Li  G_VP,
18*67e74705SXin Li  G_FP,
19*67e74705SXin Li  G_VS,
20*67e74705SXin Li  G_GS,
21*67e74705SXin Li  G_FS
22*67e74705SXin Li };
23*67e74705SXin Li 
24*67e74705SXin Li enum {
25*67e74705SXin Li  G_NONE,
26*67e74705SXin Li  G_B,
27*67e74705SXin Li  G_R
28*67e74705SXin Li };
29*67e74705SXin Li 
30*67e74705SXin Li typedef union _Key {
31*67e74705SXin Li  struct {
32*67e74705SXin Li   unsigned int count : 2;
33*67e74705SXin Li   unsigned int Aconst : 1;
34*67e74705SXin Li   unsigned int Bconst : 1;
35*67e74705SXin Li   unsigned int Cconst : 1;
36*67e74705SXin Li   unsigned int Xused : 1;
37*67e74705SXin Li   unsigned int Yused : 1;
38*67e74705SXin Li   unsigned int Zused : 1;
39*67e74705SXin Li   unsigned int Wused : 1;
40*67e74705SXin Li   unsigned int ttype : 3;
41*67e74705SXin Li   unsigned int scalar : 1;
42*67e74705SXin Li   unsigned int AType : 4;
43*67e74705SXin Li   unsigned int BType : 4;
44*67e74705SXin Li   unsigned int CType : 4;
45*67e74705SXin Li   unsigned int RType : 4;
46*67e74705SXin Li   unsigned int Size : 2;
47*67e74705SXin Li   unsigned int prec : 1;
48*67e74705SXin Li 
49*67e74705SXin Li   unsigned int ASize : 2;
50*67e74705SXin Li   unsigned int BSize : 2;
51*67e74705SXin Li   unsigned int CSize : 2;
52*67e74705SXin Li   unsigned int tTex : 4;
53*67e74705SXin Li   unsigned int proj : 1;
54*67e74705SXin Li   unsigned int lod : 2;
55*67e74705SXin Li   unsigned int dvts : 1;
56*67e74705SXin Li   unsigned int uipad : 18;
57*67e74705SXin Li  } key_io;
58*67e74705SXin Li  struct {
59*67e74705SXin Li   unsigned int key0;
60*67e74705SXin Li   unsigned int key1;
61*67e74705SXin Li  } key;
62*67e74705SXin Li  unsigned long long lkey;
63*67e74705SXin Li } Key;
64*67e74705SXin Li 
foo(const Key iospec,int * ret)65*67e74705SXin Li static void foo(const Key iospec, int* ret)
66*67e74705SXin Li {
67*67e74705SXin Li   *ret=0;
68*67e74705SXin Li  if(((iospec.key_io.lod == G_B) &&
69*67e74705SXin Li   (iospec.key_io.ttype != G_VS) &&
70*67e74705SXin Li   (iospec.key_io.ttype != G_GS) &&
71*67e74705SXin Li   (iospec.key_io.ttype != G_FS)) ||
72*67e74705SXin Li 
73*67e74705SXin Li   (((iospec.key_io.tTex == PP_C) ||
74*67e74705SXin Li     (iospec.key_io.tTex == PP_SC)) &&
75*67e74705SXin Li    ((iospec.key_io.tTex == PP_SR) ||
76*67e74705SXin Li     (iospec.key_io.tTex == PP_S2D) ||
77*67e74705SXin Li     (iospec.key_io.tTex == PP_S1D) ||
78*67e74705SXin Li     (iospec.key_io.tTex == PP_SC))))
79*67e74705SXin Li   *ret=1;
80*67e74705SXin Li }
81*67e74705SXin Li 
82*67e74705SXin Li 
bar(unsigned long long key_token2)83*67e74705SXin Li extern int bar(unsigned long long key_token2)
84*67e74705SXin Li {
85*67e74705SXin Li  int ret;
86*67e74705SXin Li  __attribute__ ((unused)) Key iospec = (Key) key_token2;
87*67e74705SXin Li  foo(iospec, &ret);
88*67e74705SXin Li  return ret;
89*67e74705SXin Li }
90