8
8
using sycl::ext::intel::experimental::bfloat16;
9
9
10
10
SYCL_EXTERNAL uint16_t some_bf16_intrinsic (uint16_t x, uint16_t y);
11
+ SYCL_EXTERNAL void foo (long x, sycl::half y);
11
12
12
13
__attribute__ ((noinline)) float op(float a, float b) {
13
14
// CHECK: define {{.*}} spir_func float @_Z2opff(float [[a:%.*]], float [[b:%.*]])
@@ -27,11 +28,22 @@ __attribute__((noinline)) float op(float a, float b) {
27
28
// CHECK-NOT: uitofp
28
29
// CHECK-NOT: fptoui
29
30
30
- bfloat16 D = bfloat16::from_bits (some_bf16_intrinsic (A, C));
31
+ bfloat16 D = bfloat16::from_bits (some_bf16_intrinsic (A. raw () , C. raw () ));
31
32
// CHECK: [[D:%.*]] = tail call spir_func zeroext i16 @_Z19some_bf16_intrinsictt(i16 zeroext [[A]], i16 zeroext [[C]])
32
33
// CHECK-NOT: uitofp
33
34
// CHECK-NOT: fptoui
34
35
36
+ long L = bfloat16 (3 .14f );
37
+ // CHECK: [[L_bfloat16:%.*]] = tail call spir_func zeroext i16 @_Z27__spirv_ConvertFToBF16INTELf(float 0x40091EB860000000)
38
+ // CHECK: [[L_float:%.*]] = tail call spir_func float @_Z27__spirv_ConvertBF16ToFINTELt(i16 zeroext [[L_bfloat16]])
39
+ // CHECK: [[L:%.*]] = fptosi float [[L_float]] to i{{32|64}}
40
+
41
+ sycl::half H = bfloat16 (2 .71f );
42
+ // CHECK: [[H_bfloat16:%.*]] = tail call spir_func zeroext i16 @_Z27__spirv_ConvertFToBF16INTELf(float 0x4005AE1480000000)
43
+ // CHECK: [[H_float:%.*]] = tail call spir_func float @_Z27__spirv_ConvertBF16ToFINTELt(i16 zeroext [[H_bfloat16]])
44
+ // CHECK: [[H:%.*]] = fptrunc float [[H_float]] to half
45
+ foo (L, H);
46
+
35
47
return D;
36
48
// CHECK: [[RetVal:%.*]] = tail call spir_func float @_Z27__spirv_ConvertBF16ToFINTELt(i16 zeroext [[D]])
37
49
// CHECK: ret float [[RetVal]]
0 commit comments