@@ -279,6 +279,11 @@ def Vec1 : IntList<"Vec1", [1]>;
279
279
def TLAll : TypeList<"TLAll", [Char, UChar, Short, UShort, Int, UInt, Long, ULong, Float, Double, Half]>;
280
280
def TLFloat : TypeList<"TLFloat", [Float, Double, Half]>;
281
281
282
+ // All unsigned integer types twice, to facilitate unsigned return types for e.g.
283
+ // uchar abs(char) and
284
+ // uchar abs(uchar).
285
+ def TLAllUIntsTwice : TypeList<"TLAllUIntsTwice", [UChar, UChar, UShort, UShort, UInt, UInt, ULong, ULong]>;
286
+
282
287
def TLAllInts : TypeList<"TLAllInts", [Char, UChar, Short, UShort, Int, UInt, Long, ULong]>;
283
288
284
289
// GenType definitions for multiple base types (e.g. all floating point types,
@@ -290,6 +295,8 @@ def AGenTypeNNoScalar : GenericType<"AGenTypeNNoScalar", TLAll, VecNoScalar
290
295
def AIGenType1 : GenericType<"AIGenType1", TLAllInts, Vec1>;
291
296
def AIGenTypeN : GenericType<"AIGenTypeN", TLAllInts, VecAndScalar>;
292
297
def AIGenTypeNNoScalar : GenericType<"AIGenTypeNNoScalar", TLAllInts, VecNoScalar>;
298
+ // All integer to unsigned
299
+ def AI2UGenTypeN : GenericType<"AI2UGenTypeN", TLAllUIntsTwice, VecAndScalar>;
293
300
// Float
294
301
def FGenTypeN : GenericType<"FGenTypeN", TLFloat, VecAndScalar>;
295
302
@@ -466,6 +473,61 @@ foreach name = ["half_divide", "half_powr",
466
473
def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar], Attr.Const>;
467
474
}
468
475
476
+ //--------------------------------------------------------------------
477
+ // OpenCL v1.1 s6.11.3, v1.2 s6.12.3, v2.0 s6.13.3 - Integer Functions
478
+ // --- Table 10 ---
479
+ // --- 1 argument ---
480
+ foreach name = ["abs"] in {
481
+ def : Builtin<name, [AI2UGenTypeN, AIGenTypeN], Attr.Const>;
482
+ }
483
+ foreach name = ["clz", "popcount"] in {
484
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN], Attr.Const>;
485
+ }
486
+ let MinVersion = CL20 in {
487
+ foreach name = ["ctz"] in {
488
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN]>;
489
+ }
490
+ }
491
+
492
+ // --- 2 arguments ---
493
+ foreach name = ["abs_diff"] in {
494
+ def : Builtin<name, [AI2UGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
495
+ }
496
+ foreach name = ["add_sat", "hadd", "rhadd", "mul_hi", "rotate", "sub_sat"] in {
497
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
498
+ }
499
+ foreach name = ["max", "min"] in {
500
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
501
+ def : Builtin<name, [AIGenTypeNNoScalar, AIGenTypeNNoScalar, AIGenType1], Attr.Const>;
502
+ }
503
+ foreach name = ["upsample"] in {
504
+ def : Builtin<name, [GenTypeShortVecAndScalar, GenTypeCharVecAndScalar, GenTypeUCharVecAndScalar], Attr.Const>;
505
+ def : Builtin<name, [GenTypeUShortVecAndScalar, GenTypeUCharVecAndScalar, GenTypeUCharVecAndScalar], Attr.Const>;
506
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeShortVecAndScalar, GenTypeUShortVecAndScalar], Attr.Const>;
507
+ def : Builtin<name, [GenTypeUIntVecAndScalar, GenTypeUShortVecAndScalar, GenTypeUShortVecAndScalar], Attr.Const>;
508
+ def : Builtin<name, [GenTypeLongVecAndScalar, GenTypeIntVecAndScalar, GenTypeUIntVecAndScalar], Attr.Const>;
509
+ def : Builtin<name, [GenTypeULongVecAndScalar, GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar], Attr.Const>;
510
+ }
511
+
512
+ // --- 3 arguments ---
513
+ foreach name = ["clamp"] in {
514
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
515
+ def : Builtin<name, [AIGenTypeNNoScalar, AIGenTypeNNoScalar, AIGenType1, AIGenType1], Attr.Const>;
516
+ }
517
+ foreach name = ["mad_hi", "mad_sat"] in {
518
+ def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
519
+ }
520
+
521
+ // --- Table 11 ---
522
+ foreach name = ["mad24"] in {
523
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeIntVecAndScalar, GenTypeIntVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
524
+ def : Builtin<name, [GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar], Attr.Const>;
525
+ }
526
+ foreach name = ["mul24"] in {
527
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeIntVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
528
+ def : Builtin<name, [GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar, GenTypeUIntVecAndScalar], Attr.Const>;
529
+ }
530
+
469
531
//--------------------------------------------------------------------
470
532
// OpenCL v1.1 s6.11.4, v1.2 s6.12.4, v2.0 s6.13.4 - Common Functions
471
533
// OpenCL Extension v2.0 s5.1.3 and s6.1.3 - Common Functions
@@ -655,12 +717,6 @@ foreach Type = [Int, UInt] in {
655
717
}
656
718
}
657
719
658
- // OpenCL v1.1 s6.11.3, v1.2 s6.12.3, v2.0 s6.13.3 - Integer Functions
659
- foreach name = ["max", "min"] in {
660
- def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
661
- def : Builtin<name, [AIGenTypeNNoScalar, AIGenTypeNNoScalar, AIGenType1], Attr.Const>;
662
- }
663
-
664
720
//--------------------------------------------------------------------
665
721
// OpenCL v1.1 s6.11.3, v1.2 s6.12.14, v2.0 s6.13.14: Image Read and Write Functions
666
722
// OpenCL Extension v2.0 s5.1.8 and s6.1.8: Image Read and Write Functions
0 commit comments