@@ -41,15 +41,12 @@ typedef float EmptyArrayTypedef[10][0];
41
41
cbuffer CB {
42
42
// CHECK: VarDecl {{.*}} col:9 used a1 'float'
43
43
float a1;
44
-
45
44
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB definition
46
45
// CHECK: FieldDecl {{.*}} a1 'float'
47
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
48
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB)]]'
49
46
}
50
47
51
48
// Check that buffer layout struct does not include resources or empty types
52
- // CHECK: HLSLBufferDecl {{.*}} line:55 :9 cbuffer CB
49
+ // CHECK: HLSLBufferDecl {{.*}} line:52 :9 cbuffer CB
53
50
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
54
51
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
55
52
cbuffer CB {
@@ -63,16 +60,13 @@ cbuffer CB {
63
60
float d2[0 ];
64
61
// CHECK: VarDecl {{.*}} col:9 e2 'float'
65
62
float e2;
66
-
67
63
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.1 definition
68
64
// CHECK: FieldDecl {{.*}} a2 'float'
69
65
// CHECK-NEXT: FieldDecl {{.*}} e2 'float'
70
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
71
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.1)]]'
72
66
}
73
67
74
68
// Check that layout struct is created for B and the empty struct C is removed
75
- // CHECK: HLSLBufferDecl {{.*}} line:78 :9 cbuffer CB
69
+ // CHECK: HLSLBufferDecl {{.*}} line:72 :9 cbuffer CB
76
70
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
77
71
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
78
72
cbuffer CB {
@@ -82,60 +76,47 @@ cbuffer CB {
82
76
B s2;
83
77
// CHECK: VarDecl {{.*}} col:12 s3 'CTypedef':'C
84
78
CTypedef s3;
85
-
86
79
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.B definition
87
80
// CHECK: FieldDecl {{.*}} a 'float'
88
-
89
81
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.2 definition
90
82
// CHECK: FieldDecl {{.*}} s1 'A'
91
83
// CHECK: FieldDecl {{.*}} s2 '__hostlayout.struct.B'
92
- // CHECK-NEXT: VarDecl {{.*}} __handle '__hlsl_resource_t
93
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.2)]]'
94
84
}
95
85
96
86
// check that layout struct is created for D because of its base struct
97
- // CHECK: HLSLBufferDecl {{.*}} line:100 :9 cbuffer CB
87
+ // CHECK: HLSLBufferDecl {{.*}} line:90 :9 cbuffer CB
98
88
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
99
89
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
100
90
cbuffer CB {
101
91
// CHECK: VarDecl {{.*}} s4 'D'
102
92
D s4;
103
-
104
93
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.D definition
105
94
// CHECK: FieldDecl {{.*}} b 'float'
106
-
107
95
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.3 definition
108
96
// CHECK: FieldDecl {{.*}} s4 '__hostlayout.struct.D'
109
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
110
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.3)]]'
111
97
}
112
98
113
99
// check that layout struct is created for E because because its base struct
114
100
// is empty and should be eliminated, and BTypedef should reuse the previously
115
101
// defined '__hostlayout.struct.B'
116
- // CHECK: HLSLBufferDecl {{.*}} line:119 :9 cbuffer CB
102
+ // CHECK: HLSLBufferDecl {{.*}} line:105 :9 cbuffer CB
117
103
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
118
104
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
119
105
cbuffer CB {
120
106
// CHECK: VarDecl {{.*}} s5 'E'
121
107
E s5;
122
108
// CHECK: VarDecl {{.*}} s6 'BTypedef':'B'
123
109
BTypedef s6;
124
-
125
110
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.E definition
126
111
// CHECK: FieldDecl {{.*}} c 'float'
127
-
128
112
// CHECK-NOT: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.B definition
129
-
130
113
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.4 definition
131
114
// CHECK: FieldDecl {{.*}} s5 '__hostlayout.struct.E'
132
115
// CHECK: FieldDecl {{.*}} s6 '__hostlayout.struct.B'
133
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
134
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.4)]]'
135
116
}
136
117
137
118
// check that this produces empty layout struct
138
- // CHECK: HLSLBufferDecl {{.*}} line:141 :9 cbuffer CB
119
+ // CHECK: HLSLBufferDecl {{.*}} line:122 :9 cbuffer CB
139
120
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
140
121
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
141
122
cbuffer CB {
@@ -149,32 +130,25 @@ cbuffer CB {
149
130
RWBuffer <float > Buf;
150
131
// CHECK: VarDecl {{.*}} ea 'EmptyArrayTypedef':'float[10][0]'
151
132
EmptyArrayTypedef ea;
152
-
153
133
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.5 definition
154
134
// CHECK-NOT: FieldDecl
155
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
156
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.5)]]'
157
135
}
158
136
159
137
// check host layout struct with compatible base struct
160
- // CHECK: HLSLBufferDecl {{.*}} line:163 :9 cbuffer CB
138
+ // CHECK: HLSLBufferDecl {{.*}} line:141 :9 cbuffer CB
161
139
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
162
140
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
163
141
cbuffer CB {
164
142
// CHECK: VarDecl {{.*}} s8 'F'
165
143
F s8;
166
-
167
144
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.F definition
168
145
// CHECK: public 'A'
169
-
170
146
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.6 definition
171
147
// CHECK: FieldDecl {{.*}} s8 '__hostlayout.struct.F'
172
- // CHECK: VarDecl {{.*}} __handle '__hlsl_resource_t
173
- // CHECK-SAME{LITERAL}: [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.6)]]'
174
148
}
175
149
176
150
// anonymous structs
177
- // CHECK: HLSLBufferDecl {{.*}} line:180 :9 cbuffer CB
151
+ // CHECK: HLSLBufferDecl {{.*}} line:154 :9 cbuffer CB
178
152
// CHECK: HLSLResourceClassAttr {{.*}} Implicit CBuffer
179
153
// CHECK: HLSLResourceAttr {{.*}} Implicit CBuffer
180
154
cbuffer CB {
@@ -187,31 +161,25 @@ cbuffer CB {
187
161
// CHECK: FieldDecl {{.*}} f 'RWBuffer<float>':'hlsl::RWBuffer<float>'
188
162
RWBuffer <float > f;
189
163
} s9;
190
- // CHECK: VarDecl {{.*}} s9 'struct (unnamed struct at {{.*}}cbuffer.hlsl:182:3
191
-
164
+ // CHECK: VarDecl {{.*}} s9 'struct (unnamed struct at {{.*}}cbuffer.hlsl:156:3
192
165
// CHECK: CXXRecordDecl {{.*}} struct definition
193
166
struct {
194
167
// CHECK: FieldDecl {{.*}} g 'int'
195
168
int g;
196
169
// CHECK: FieldDecl {{.*}} f 'RWBuffer<float>':'hlsl::RWBuffer<float>'
197
170
RWBuffer <float > f;
198
171
} s10;
199
- // CHECK: VarDecl {{.*}} s10 'struct (unnamed struct at {{.*}}cbuffer.hlsl:193:3
200
-
172
+ // CHECK: VarDecl {{.*}} s10 'struct (unnamed struct at {{.*}}cbuffer.hlsl:166:3
201
173
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.anon definition
202
174
// CHECK: FieldDecl {{.*}} e 'float'
203
-
204
175
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.anon.1 definition
205
176
// CHECK: FieldDecl {{.*}} g 'int'
206
-
207
177
// CHECK: CXXRecordDecl {{.*}} implicit class __hostlayout.struct.CB.7 definition
208
178
// CHECK: FieldDecl {{.*}} s9 '__hostlayout.struct.anon'
209
179
// CHECK: FieldDecl {{.*}} s10 '__hostlayout.struct.anon.1'
210
- // CHECK-NEXT: VarDecl {{.*}} __handle '__hlsl_resource_t
211
- // CHECK-SAME{LITERAL} [[hlsl::resource_class(CBuffer)]] [[hlsl::contained_type(__hostlayout.struct.CB.7)]]'
212
180
}
213
181
214
- // Add uses for the constant buffer declarations so they are not optimized awayexport
182
+ // Add uses for the constant buffer declarations so they are not optimized away
215
183
export float foo () {
216
184
return a1 + a2 + s1.a + s4.b + s5.c + s8.a + s9.e;
217
185
}
0 commit comments