@@ -350,7 +350,160 @@ let MinVersion = CL20 in {
350
350
}
351
351
}
352
352
353
+
354
+ //--------------------------------------------------------------------
355
+ // OpenCL v1.1 s6.11.2, v1.2 s6.12.2, v2.0 s6.13.2 - Math functions
356
+ // OpenCL Extension v2.0 s5.1.2 and s6.1.2 - Math Functions
357
+ // --- Table 8 ---
358
+ // --- 1 argument ---
359
+ foreach name = ["acos", "acosh", "acospi",
360
+ "asin", "asinh", "asinpi",
361
+ "atan", "atanh", "atanpi",
362
+ "cbrt", "ceil",
363
+ "cos", "cosh", "cospi",
364
+ "erfc", "erf",
365
+ "exp", "exp2", "exp10", "expm1",
366
+ "fabs", "floor",
367
+ "log", "log2", "log10", "log1p", "logb",
368
+ "rint", "round", "rsqrt",
369
+ "sin", "sinh", "sinpi",
370
+ "sqrt",
371
+ "tan", "tanh", "tanpi",
372
+ "tgamma", "trunc",
373
+ "lgamma"] in {
374
+ def : Builtin<name, [FGenTypeN, FGenTypeN], Attr.Const>;
375
+ }
376
+ foreach name = ["nan"] in {
377
+ def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeUIntVecAndScalar], Attr.Const>;
378
+ def : Builtin<name, [GenTypeDoubleVecAndScalar, GenTypeULongVecAndScalar], Attr.Const>;
379
+ def : Builtin<name, [GenTypeHalfVecAndScalar, GenTypeUShortVecAndScalar], Attr.Const>;
380
+ }
381
+
382
+ // --- 2 arguments ---
383
+ foreach name = ["atan2", "atan2pi", "copysign", "fdim", "fmod", "hypot",
384
+ "maxmag", "minmag", "nextafter", "pow", "powr",
385
+ "remainder"] in {
386
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
387
+ }
388
+ foreach name = ["fmax", "fmin"] in {
389
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
390
+ def : Builtin<name, [GenTypeFloatVecNoScalar, GenTypeFloatVecNoScalar, Float], Attr.Const>;
391
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, GenTypeDoubleVecNoScalar, Double], Attr.Const>;
392
+ def : Builtin<name, [GenTypeHalfVecNoScalar, GenTypeHalfVecNoScalar, Half], Attr.Const>;
393
+ }
394
+ foreach name = ["ilogb"] in {
395
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeFloatVecAndScalar], Attr.Const>;
396
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeDoubleVecAndScalar], Attr.Const>;
397
+ def : Builtin<name, [GenTypeIntVecAndScalar, GenTypeHalfVecAndScalar], Attr.Const>;
398
+ }
399
+ foreach name = ["ldexp"] in {
400
+ def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
401
+ def : Builtin<name, [GenTypeFloatVecNoScalar, GenTypeFloatVecNoScalar, Int], Attr.Const>;
402
+ def : Builtin<name, [GenTypeDoubleVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
403
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, GenTypeDoubleVecNoScalar, Int], Attr.Const>;
404
+ def : Builtin<name, [GenTypeHalfVecAndScalar, GenTypeHalfVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
405
+ def : Builtin<name, [GenTypeHalfVecNoScalar, GenTypeHalfVecNoScalar, Int], Attr.Const>;
406
+ }
407
+ foreach name = ["pown", "rootn"] in {
408
+ def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
409
+ def : Builtin<name, [GenTypeDoubleVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
410
+ def : Builtin<name, [GenTypeHalfVecAndScalar, GenTypeHalfVecAndScalar, GenTypeIntVecAndScalar], Attr.Const>;
411
+ }
412
+
413
+ // --- 3 arguments ---
414
+ foreach name = ["fma", "mad"] in {
415
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
416
+ }
417
+
418
+ // --- Version dependent ---
419
+ let MaxVersion = CL20 in {
420
+ foreach AS = [GlobalAS, LocalAS, PrivateAS] in {
421
+ foreach name = ["fract", "modf", "sincos"] in {
422
+ def : Builtin<name, [FGenTypeN, FGenTypeN, PointerType<FGenTypeN, AS>]>;
423
+ }
424
+ foreach name = ["frexp", "lgamma_r"] in {
425
+ foreach Type = [GenTypeFloatVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeHalfVecAndScalar] in {
426
+ def : Builtin<name, [Type, Type, PointerType<GenTypeIntVecAndScalar, AS>]>;
427
+ }
428
+ }
429
+ foreach name = ["remquo"] in {
430
+ foreach Type = [GenTypeFloatVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeHalfVecAndScalar] in {
431
+ def : Builtin<name, [Type, Type, Type, PointerType<GenTypeIntVecAndScalar, AS>]>;
432
+ }
433
+ }
434
+ }
435
+ }
436
+ let MinVersion = CL20 in {
437
+ foreach name = ["fract", "modf", "sincos"] in {
438
+ def : Builtin<name, [FGenTypeN, FGenTypeN, PointerType<FGenTypeN, GenericAS>]>;
439
+ }
440
+ foreach name = ["frexp", "lgamma_r"] in {
441
+ foreach Type = [GenTypeFloatVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeHalfVecAndScalar] in {
442
+ def : Builtin<name, [Type, Type, PointerType<GenTypeIntVecAndScalar, GenericAS>]>;
443
+ } }
444
+ foreach name = ["remquo"] in {
445
+ foreach Type = [GenTypeFloatVecAndScalar, GenTypeDoubleVecAndScalar, GenTypeHalfVecAndScalar] in {
446
+ def : Builtin<name, [Type, Type, Type, PointerType<GenTypeIntVecAndScalar, GenericAS>]>;
447
+ }
448
+ }
449
+ }
450
+
451
+ // --- Table 9 ---
452
+ foreach name = ["half_cos",
453
+ "half_exp", "half_exp2", "half_exp10",
454
+ "half_log", "half_log2", "half_log10",
455
+ "half_recip", "half_rsqrt",
456
+ "half_sin", "half_sqrt", "half_tan",
457
+ "native_cos",
458
+ "native_exp", "native_exp2", "native_exp10",
459
+ "native_log", "native_log2", "native_log10",
460
+ "native_recip", "native_rsqrt",
461
+ "native_sin", "native_sqrt", "native_tan"] in {
462
+ def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar], Attr.Const>;
463
+ }
464
+ foreach name = ["half_divide", "half_powr",
465
+ "native_divide", "native_powr"] in {
466
+ def : Builtin<name, [GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar, GenTypeFloatVecAndScalar], Attr.Const>;
467
+ }
468
+
353
469
//--------------------------------------------------------------------
470
+ // OpenCL v1.1 s6.11.4, v1.2 s6.12.4, v2.0 s6.13.4 - Common Functions
471
+ // OpenCL Extension v2.0 s5.1.3 and s6.1.3 - Common Functions
472
+ // --- Table 12 ---
473
+ // --- 1 argument ---
474
+ foreach name = ["degrees", "radians", "sign"] in {
475
+ def : Builtin<name, [FGenTypeN, FGenTypeN], Attr.Const>;
476
+ }
477
+
478
+ // --- 2 arguments ---
479
+ foreach name = ["max", "min"] in {
480
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
481
+ def : Builtin<name, [GenTypeFloatVecNoScalar, GenTypeFloatVecNoScalar, Float], Attr.Const>;
482
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, GenTypeDoubleVecNoScalar, Double], Attr.Const>;
483
+ def : Builtin<name, [GenTypeHalfVecNoScalar, GenTypeHalfVecNoScalar, Half], Attr.Const>;
484
+ }
485
+ foreach name = ["step"] in {
486
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
487
+ def : Builtin<name, [GenTypeFloatVecNoScalar, Float, GenTypeFloatVecNoScalar], Attr.Const>;
488
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, Double, GenTypeDoubleVecNoScalar], Attr.Const>;
489
+ def : Builtin<name, [GenTypeHalfVecNoScalar, Half, GenTypeHalfVecNoScalar], Attr.Const>;
490
+ }
491
+
492
+ // --- 3 arguments ---
493
+ foreach name = ["clamp", "mix"] in {
494
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
495
+ def : Builtin<name, [GenTypeFloatVecNoScalar, GenTypeFloatVecNoScalar, Float, Float], Attr.Const>;
496
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, GenTypeDoubleVecNoScalar, Double, Double], Attr.Const>;
497
+ def : Builtin<name, [GenTypeHalfVecNoScalar, GenTypeHalfVecNoScalar, Half, Half], Attr.Const>;
498
+ }
499
+ foreach name = ["smoothstep"] in {
500
+ def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN, FGenTypeN], Attr.Const>;
501
+ def : Builtin<name, [GenTypeFloatVecNoScalar, Float, Float, GenTypeFloatVecNoScalar], Attr.Const>;
502
+ def : Builtin<name, [GenTypeDoubleVecNoScalar, Double, Double, GenTypeDoubleVecNoScalar], Attr.Const>;
503
+ def : Builtin<name, [GenTypeHalfVecNoScalar, Half, Half, GenTypeHalfVecNoScalar], Attr.Const>;
504
+ }
505
+
506
+
354
507
// OpenCL v1.1 s6.11.7, v1.2 s6.12.7, v2.0 s6.13.7 - Vector Data Load and Store Functions
355
508
// OpenCL Extension v1.1 s9.3.6 and s9.6.6, v1.2 s9.5.6, v2.0 s9.4.6, v2.0 s5.1.6 and 6.1.6 - Vector Data Load and Store Functions
356
509
// --- Table 15 ---
@@ -502,24 +655,6 @@ foreach Type = [Int, UInt] in {
502
655
}
503
656
}
504
657
505
- // OpenCL v1.2 s6.12.2: Math Functions
506
- foreach name = ["acos", "acosh", "acospi",
507
- "asin", "asinh", "asinpi",
508
- "atan", "atanh", "atanpi"] in {
509
- def : Builtin<name, [FGenTypeN, FGenTypeN], Attr.Const>;
510
- }
511
-
512
- foreach name = ["atan2", "atan2pi"] in {
513
- def : Builtin<name, [FGenTypeN, FGenTypeN,FGenTypeN], Attr.Const>;
514
- }
515
-
516
- foreach name = ["fmax", "fmin"] in {
517
- def : Builtin<name, [FGenTypeN, FGenTypeN, FGenTypeN]>;
518
- def : Builtin<name, [GenTypeFloatVecNoScalar, GenTypeFloatVecNoScalar, Float], Attr.Const>;
519
- def : Builtin<name, [GenTypeDoubleVecNoScalar, GenTypeDoubleVecNoScalar, Double], Attr.Const>;
520
- def : Builtin<name, [GenTypeHalfVecNoScalar, GenTypeHalfVecNoScalar, Half], Attr.Const>;
521
- }
522
-
523
658
// OpenCL v1.1 s6.11.3, v1.2 s6.12.3, v2.0 s6.13.3 - Integer Functions
524
659
foreach name = ["max", "min"] in {
525
660
def : Builtin<name, [AIGenTypeN, AIGenTypeN, AIGenTypeN], Attr.Const>;
0 commit comments