aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGenOpenCL/builtin-store-half-rounding-constrained.cl
blob: ba3b3165e325aae1c010ed3bea061c729cc69950 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// RUN: %clang_cc1 %s -cl-std=cl3.0 -triple x86_64-unknown-unknown -disable-llvm-passes -emit-llvm -o - | FileCheck %s

// CHECK-LABEL: @test_store_float(
// CHECK:         [[TMP0:%.*]] = call half @llvm.experimental.constrained.fptrunc.f16.f32(float {{.*}}, metadata !"round.upward", metadata !"fpexcept.ignore")
// CHECK-NEXT:    store half [[TMP0]], ptr {{.*}}, align 2
// CHECK-NEXT:    ret void
//
__kernel void test_store_float(float foo, __global half* bar) {
  #pragma STDC FENV_ROUND FE_UPWARD
  __builtin_store_halff(foo, bar);
}

// CHECK-LABEL: @test_store_double(
// CHECK:         [[TMP0:%.*]] = call half @llvm.experimental.constrained.fptrunc.f16.f64(double {{.*}}, metadata !"round.downward", metadata !"fpexcept.ignore")
// CHECK-NEXT:    store half [[TMP0]], ptr {{.*}}, align 2
// CHECK-NEXT:    ret void
//
__kernel void test_store_double(double foo, __global half* bar) {
  #pragma STDC FENV_ROUND FE_DOWNWARD
  __builtin_store_half(foo, bar);
}