summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAhmed Bougacha <ahmed.bougacha@gmail.com>2015-03-24 23:44:42 +0000
committerAhmed Bougacha <ahmed.bougacha@gmail.com>2015-03-24 23:44:42 +0000
commit6ba3831ebeb147823e7ef0b62a42b558cbafc3da (patch)
tree6673cb14c359846293ea35ffa2e8c99a29d39318 /clang/lib
parent96966c7bf554e693fae804932e1e3ab431d4ea2d (diff)
downloadbcm5719-llvm-6ba3831ebeb147823e7ef0b62a42b558cbafc3da.tar.gz
bcm5719-llvm-6ba3831ebeb147823e7ef0b62a42b558cbafc3da.zip
[CodeGen] Support native half inc/dec amounts.
We previously defaulted to long double, but it's also possible to have a half inc/dec amount, when LangOpts NativeHalfType is set. Currently, that's only true for OpenCL. llvm-svn: 233135
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CGExprScalar.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp
index 11d10d27c39..16ce69d7999 100644
--- a/clang/lib/CodeGen/CGExprScalar.cpp
+++ b/clang/lib/CodeGen/CGExprScalar.cpp
@@ -1800,9 +1800,14 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
amt = llvm::ConstantFP::get(VMContext,
llvm::APFloat(static_cast<double>(amount)));
else {
+ // Remaining types are either Half or LongDouble. Convert from float.
llvm::APFloat F(static_cast<float>(amount));
bool ignored;
- F.convert(CGF.getTarget().getLongDoubleFormat(),
+ // Don't use getFloatTypeSemantics because Half isn't
+ // necessarily represented using the "half" LLVM type.
+ F.convert(value->getType()->isHalfTy()
+ ? CGF.getTarget().getHalfFormat()
+ : CGF.getTarget().getLongDoubleFormat(),
llvm::APFloat::rmTowardZero, &ignored);
amt = llvm::ConstantFP::get(VMContext, F);
}
OpenPOWER on IntegriCloud