HasAVX512ER = true;
} else if (Feature == "+avx512fp16") {
HasAVX512FP16 = true;
+ HasFloat16 = true;
} else if (Feature == "+avx512pf") {
HasAVX512PF = true;
- HasLegalHalfType = true;
} else if (Feature == "+avx512dq") {
HasAVX512DQ = true;
} else if (Feature == "+avx512bitalg") {
.Default(NoXOP);
XOPLevel = std::max(XOPLevel, XLevel);
}
- // Turn on _float16 for x86 (feature sse2)
- HasFloat16 = SSELevel >= SSE2;
// LLVM doesn't have a separate switch for fpmath, so only accept it if it
// matches the selected sse level.
+++ /dev/null
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm \
-// RUN: < %s | FileCheck %s --check-prefixes=CHECK
-
-_Float16 add1(_Float16 a, _Float16 b) {
- // CHECK-LABEL: define{{.*}} half @add1
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: load half, half*
- // CHECK: load half, half* {{.*}}
- // CHECK: fadd half {{.*}}, {{.*}}
- // CHECK: ret half
- return a + b;
-}
-
-_Float16 add2(_Float16 a, _Float16 b, _Float16 c) {
- // CHECK-LABEL: define{{.*}} half @add2
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: load half, half* {{.*}}
- // CHECK: load half, half* {{.*}}
- // CHECK: fadd half {{.*}}, {{.*}}
- // CHECK: load half, half* {{.*}}
- // CHECK: fadd half {{.*}}, {{.*}}
- // CHECK: ret half
- return a + b + c;
-}
-
-_Float16 sub(_Float16 a, _Float16 b) {
- // CHECK-LABEL: define{{.*}} half @sub
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: load half, half*
- // CHECK: load half, half* {{.*}}
- // CHECK: fsub half {{.*}}, {{.*}}
- // CHECK: ret half
- return a - b;
-}
-
-_Float16 div(_Float16 a, _Float16 b) {
- // CHECK-LABEL: define{{.*}} half @div
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: load half, half* {{.*}}
- // CHECK: load half, half* {{.*}}
- // CHECK: fdiv half {{.*}}, {{.*}}
- // CHECK: ret half
- return a / b;
-}
-
-_Float16 mul(_Float16 a, _Float16 b) {
- // CHECK-LABEL: define{{.*}} half @mul
- // CHECK: alloca half
- // CHECK: alloca half
- // CHECK: store half {{.*}}, half*
- // CHECK: store half {{.*}}, half*
- // CHECK: load half, half* {{.*}}
- // CHECK: load half, half* {{.*}}
- // CHECK: fmul half {{.*}}, {{.*}}
- // CHECK: ret half
- return a * b;
-}
-
-