Skip to content

Commit 53a21df

Browse files
committed
dot2add working for dxil without sema check
1 parent 7288f1b commit 53a21df

File tree

7 files changed

+426
-0
lines changed

7 files changed

+426
-0
lines changed

clang/include/clang/Basic/Builtins.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4891,6 +4891,12 @@ def HLSLDotProduct : LangBuiltin<"HLSL_LANG"> {
48914891
let Prototype = "void(...)";
48924892
}
48934893

4894+
def HLSLDot2Add : LangBuiltin<"HLSL_LANG"> {
4895+
let Spellings = ["__builtin_hlsl_dot2add"];
4896+
let Attributes = [NoThrow, Const];
4897+
let Prototype = "void(...)";
4898+
}
4899+
48944900
def HLSLDot4AddI8Packed : LangBuiltin<"HLSL_LANG"> {
48954901
let Spellings = ["__builtin_hlsl_dot4add_i8packed"];
48964902
let Attributes = [NoThrow, Const];

clang/lib/CodeGen/CGHLSLRuntime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class CGHLSLRuntime {
101101
GENERATE_HLSL_INTRINSIC_FUNCTION(FDot, fdot)
102102
GENERATE_HLSL_INTRINSIC_FUNCTION(SDot, sdot)
103103
GENERATE_HLSL_INTRINSIC_FUNCTION(UDot, udot)
104+
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot2Add, dot2add)
104105
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot4AddI8Packed, dot4add_i8packed)
105106
GENERATE_HLSL_INTRINSIC_FUNCTION(Dot4AddU8Packed, dot4add_u8packed)
106107
GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveAllTrue, wave_all)

clang/lib/Headers/hlsl/hlsl_intrinsics.h

Lines changed: 366 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,372 @@ const inline float distance(__detail::HLSL_FIXED_VECTOR<float, N> X,
176176
}
177177

178178
//===----------------------------------------------------------------------===//
179+
<<<<<<< Updated upstream
180+
=======
181+
// dot product builtins
182+
//===----------------------------------------------------------------------===//
183+
184+
/// \fn K dot(T X, T Y)
185+
/// \brief Return the dot product (a scalar value) of \a X and \a Y.
186+
/// \param X The X input value.
187+
/// \param Y The Y input value.
188+
189+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
190+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
191+
half dot(half, half);
192+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
193+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
194+
half dot(half2, half2);
195+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
196+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
197+
half dot(half3, half3);
198+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
199+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
200+
half dot(half4, half4);
201+
202+
#ifdef __HLSL_ENABLE_16_BIT
203+
_HLSL_AVAILABILITY(shadermodel, 6.2)
204+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
205+
int16_t dot(int16_t, int16_t);
206+
_HLSL_AVAILABILITY(shadermodel, 6.2)
207+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
208+
int16_t dot(int16_t2, int16_t2);
209+
_HLSL_AVAILABILITY(shadermodel, 6.2)
210+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
211+
int16_t dot(int16_t3, int16_t3);
212+
_HLSL_AVAILABILITY(shadermodel, 6.2)
213+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
214+
int16_t dot(int16_t4, int16_t4);
215+
216+
_HLSL_AVAILABILITY(shadermodel, 6.2)
217+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
218+
uint16_t dot(uint16_t, uint16_t);
219+
_HLSL_AVAILABILITY(shadermodel, 6.2)
220+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
221+
uint16_t dot(uint16_t2, uint16_t2);
222+
_HLSL_AVAILABILITY(shadermodel, 6.2)
223+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
224+
uint16_t dot(uint16_t3, uint16_t3);
225+
_HLSL_AVAILABILITY(shadermodel, 6.2)
226+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
227+
uint16_t dot(uint16_t4, uint16_t4);
228+
#endif
229+
230+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
231+
float dot(float, float);
232+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
233+
float dot(float2, float2);
234+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
235+
float dot(float3, float3);
236+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
237+
float dot(float4, float4);
238+
239+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
240+
double dot(double, double);
241+
242+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
243+
int dot(int, int);
244+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
245+
int dot(int2, int2);
246+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
247+
int dot(int3, int3);
248+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
249+
int dot(int4, int4);
250+
251+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
252+
uint dot(uint, uint);
253+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
254+
uint dot(uint2, uint2);
255+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
256+
uint dot(uint3, uint3);
257+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
258+
uint dot(uint4, uint4);
259+
260+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
261+
int64_t dot(int64_t, int64_t);
262+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
263+
int64_t dot(int64_t2, int64_t2);
264+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
265+
int64_t dot(int64_t3, int64_t3);
266+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
267+
int64_t dot(int64_t4, int64_t4);
268+
269+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
270+
uint64_t dot(uint64_t, uint64_t);
271+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
272+
uint64_t dot(uint64_t2, uint64_t2);
273+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
274+
uint64_t dot(uint64_t3, uint64_t3);
275+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
276+
uint64_t dot(uint64_t4, uint64_t4);
277+
278+
//===----------------------------------------------------------------------===//
279+
// dot4add builtins
280+
//===----------------------------------------------------------------------===//
281+
282+
/// \fn int dot4add_i8packed(uint A, uint B, int C)
283+
284+
_HLSL_AVAILABILITY(shadermodel, 6.4)
285+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_i8packed)
286+
int dot4add_i8packed(uint, uint, int);
287+
288+
/// \fn uint dot4add_u8packed(uint A, uint B, uint C)
289+
290+
_HLSL_AVAILABILITY(shadermodel, 6.4)
291+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_u8packed)
292+
uint dot4add_u8packed(uint, uint, uint);
293+
294+
//===----------------------------------------------------------------------===//
295+
// dot2add builtins
296+
//===----------------------------------------------------------------------===//
297+
298+
/// \fn float dot2add(half2 a, half2 b, float c)
299+
300+
_HLSL_AVAILABILITY(shadermodel, 6.4)
301+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot2add)
302+
float dot2add(half2, half2, float);
303+
304+
//===----------------------------------------------------------------------===//
305+
// exp builtins
306+
//===----------------------------------------------------------------------===//
307+
308+
/// \fn T exp(T x)
309+
/// \brief Returns the base-e exponential, or \a e**x, of the specified value.
310+
/// \param x The specified input value.
311+
///
312+
/// The return value is the base-e exponential of the \a x parameter.
313+
314+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
315+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
316+
half exp(half);
317+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
318+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
319+
half2 exp(half2);
320+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
321+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
322+
half3 exp(half3);
323+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
324+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
325+
half4 exp(half4);
326+
327+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
328+
float exp(float);
329+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
330+
float2 exp(float2);
331+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
332+
float3 exp(float3);
333+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
334+
float4 exp(float4);
335+
336+
//===----------------------------------------------------------------------===//
337+
// exp2 builtins
338+
//===----------------------------------------------------------------------===//
339+
340+
/// \fn T exp2(T x)
341+
/// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
342+
/// \param x The specified input value.
343+
///
344+
/// The base 2 exponential of the \a x parameter.
345+
346+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
347+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
348+
half exp2(half);
349+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
350+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
351+
half2 exp2(half2);
352+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
353+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
354+
half3 exp2(half3);
355+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
356+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
357+
half4 exp2(half4);
358+
359+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
360+
float exp2(float);
361+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
362+
float2 exp2(float2);
363+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
364+
float3 exp2(float3);
365+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
366+
float4 exp2(float4);
367+
368+
//===----------------------------------------------------------------------===//
369+
// firstbithigh builtins
370+
//===----------------------------------------------------------------------===//
371+
372+
/// \fn T firstbithigh(T Val)
373+
/// \brief Returns the location of the first set bit starting from the highest
374+
/// order bit and working downward, per component.
375+
/// \param Val the input value.
376+
377+
#ifdef __HLSL_ENABLE_16_BIT
378+
_HLSL_AVAILABILITY(shadermodel, 6.2)
379+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
380+
uint firstbithigh(int16_t);
381+
_HLSL_AVAILABILITY(shadermodel, 6.2)
382+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
383+
uint2 firstbithigh(int16_t2);
384+
_HLSL_AVAILABILITY(shadermodel, 6.2)
385+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
386+
uint3 firstbithigh(int16_t3);
387+
_HLSL_AVAILABILITY(shadermodel, 6.2)
388+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
389+
uint4 firstbithigh(int16_t4);
390+
_HLSL_AVAILABILITY(shadermodel, 6.2)
391+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
392+
uint firstbithigh(uint16_t);
393+
_HLSL_AVAILABILITY(shadermodel, 6.2)
394+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
395+
uint2 firstbithigh(uint16_t2);
396+
_HLSL_AVAILABILITY(shadermodel, 6.2)
397+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
398+
uint3 firstbithigh(uint16_t3);
399+
_HLSL_AVAILABILITY(shadermodel, 6.2)
400+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
401+
uint4 firstbithigh(uint16_t4);
402+
#endif
403+
404+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
405+
uint firstbithigh(int);
406+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
407+
uint2 firstbithigh(int2);
408+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
409+
uint3 firstbithigh(int3);
410+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
411+
uint4 firstbithigh(int4);
412+
413+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
414+
uint firstbithigh(uint);
415+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
416+
uint2 firstbithigh(uint2);
417+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
418+
uint3 firstbithigh(uint3);
419+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
420+
uint4 firstbithigh(uint4);
421+
422+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
423+
uint firstbithigh(int64_t);
424+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
425+
uint2 firstbithigh(int64_t2);
426+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
427+
uint3 firstbithigh(int64_t3);
428+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
429+
uint4 firstbithigh(int64_t4);
430+
431+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
432+
uint firstbithigh(uint64_t);
433+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
434+
uint2 firstbithigh(uint64_t2);
435+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
436+
uint3 firstbithigh(uint64_t3);
437+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
438+
uint4 firstbithigh(uint64_t4);
439+
440+
//===----------------------------------------------------------------------===//
441+
// firstbitlow builtins
442+
//===----------------------------------------------------------------------===//
443+
444+
/// \fn T firstbitlow(T Val)
445+
/// \brief Returns the location of the first set bit starting from the lowest
446+
/// order bit and working upward, per component.
447+
/// \param Val the input value.
448+
449+
#ifdef __HLSL_ENABLE_16_BIT
450+
_HLSL_AVAILABILITY(shadermodel, 6.2)
451+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
452+
uint firstbitlow(int16_t);
453+
_HLSL_AVAILABILITY(shadermodel, 6.2)
454+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
455+
uint2 firstbitlow(int16_t2);
456+
_HLSL_AVAILABILITY(shadermodel, 6.2)
457+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
458+
uint3 firstbitlow(int16_t3);
459+
_HLSL_AVAILABILITY(shadermodel, 6.2)
460+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
461+
uint4 firstbitlow(int16_t4);
462+
_HLSL_AVAILABILITY(shadermodel, 6.2)
463+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
464+
uint firstbitlow(uint16_t);
465+
_HLSL_AVAILABILITY(shadermodel, 6.2)
466+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
467+
uint2 firstbitlow(uint16_t2);
468+
_HLSL_AVAILABILITY(shadermodel, 6.2)
469+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
470+
uint3 firstbitlow(uint16_t3);
471+
_HLSL_AVAILABILITY(shadermodel, 6.2)
472+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
473+
uint4 firstbitlow(uint16_t4);
474+
#endif
475+
476+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
477+
uint firstbitlow(int);
478+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
479+
uint2 firstbitlow(int2);
480+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
481+
uint3 firstbitlow(int3);
482+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
483+
uint4 firstbitlow(int4);
484+
485+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
486+
uint firstbitlow(uint);
487+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
488+
uint2 firstbitlow(uint2);
489+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
490+
uint3 firstbitlow(uint3);
491+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
492+
uint4 firstbitlow(uint4);
493+
494+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
495+
uint firstbitlow(int64_t);
496+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
497+
uint2 firstbitlow(int64_t2);
498+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
499+
uint3 firstbitlow(int64_t3);
500+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
501+
uint4 firstbitlow(int64_t4);
502+
503+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
504+
uint firstbitlow(uint64_t);
505+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
506+
uint2 firstbitlow(uint64_t2);
507+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
508+
uint3 firstbitlow(uint64_t3);
509+
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
510+
uint4 firstbitlow(uint64_t4);
511+
512+
//===----------------------------------------------------------------------===//
513+
// floor builtins
514+
//===----------------------------------------------------------------------===//
515+
516+
/// \fn T floor(T Val)
517+
/// \brief Returns the largest integer that is less than or equal to the input
518+
/// value, \a Val.
519+
/// \param Val The input value.
520+
521+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
522+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
523+
half floor(half);
524+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
525+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
526+
half2 floor(half2);
527+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
528+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
529+
half3 floor(half3);
530+
_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
531+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
532+
half4 floor(half4);
533+
534+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
535+
float floor(float);
536+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
537+
float2 floor(float2);
538+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
539+
float3 floor(float3);
540+
_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
541+
float4 floor(float4);
542+
543+
//===----------------------------------------------------------------------===//
544+
>>>>>>> Stashed changes
179545
// fmod builtins
180546
//===----------------------------------------------------------------------===//
181547

0 commit comments

Comments
 (0)