From 9c3966379813c198129c57aa3ebecd68d6af1ebd Mon Sep 17 00:00:00 2001 From: Jim Lin Date: Tue, 10 Dec 2019 19:06:28 +0800 Subject: [PATCH] Only Remove implicit conversion for the target that support fp16 Remove implicit conversion that promotes half to double for the target that support fp16. If the target doesn't support fp16, fp16 will be converted to fp16 intrinsic. --- clang/lib/Sema/SemaChecking.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 2be9effffcec..aff63aef2934 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -5822,7 +5822,8 @@ bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) { "promotion from float to either float, double, or long double is " "the only expected cast here"); IgnoreCast = true; - } else if (CastArg->getType()->isSpecificBuiltinType(BuiltinType::Half)) { + } else if (CastArg->getType()->isSpecificBuiltinType(BuiltinType::Half) && + !Context.getTargetInfo().useFP16ConversionIntrinsics()) { assert( (Cast->getType()->isSpecificBuiltinType(BuiltinType::Double) || Cast->getType()->isSpecificBuiltinType(BuiltinType::Float) ||