summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/TargetInfo.cpp
diff options
context:
space:
mode:
authorPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>2013-12-18 18:15:03 +0000
committerPekka Jaaskelainen <pekka.jaaskelainen@tut.fi>2013-12-18 18:15:03 +0000
commit43c39d5f1fb079c4c077674a23777672071d3db9 (patch)
treebf248bf856c4b15f39540134b26e7383a905c7ad /clang/lib/Basic/TargetInfo.cpp
parent1c9ff122b6e9cbf54bf90889ddf814d4f001e0e4 (diff)
downloadbcm5719-llvm-43c39d5f1fb079c4c077674a23777672071d3db9.tar.gz
bcm5719-llvm-43c39d5f1fb079c4c077674a23777672071d3db9.zip
OpenCL: Do not force 64 bit floats for (embedded) targets with only 32bit floats.
llvm-svn: 197592
Diffstat (limited to 'clang/lib/Basic/TargetInfo.cpp')
-rw-r--r--clang/lib/Basic/TargetInfo.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp
index d0ed6e6b161..7ee2706d3e1 100644
--- a/clang/lib/Basic/TargetInfo.cpp
+++ b/clang/lib/Basic/TargetInfo.cpp
@@ -244,7 +244,14 @@ void TargetInfo::setForcedLangOptions(LangOptions &Opts) {
LongLongWidth = LongLongAlign = 128;
HalfWidth = HalfAlign = 16;
FloatWidth = FloatAlign = 32;
- DoubleWidth = DoubleAlign = 64;
+
+ // Embedded 32-bit targets (OpenCL EP) might have double C type
+ // defined as float. Let's not override this as it might lead
+ // to generating illegal code that uses 64bit doubles.
+ if (DoubleWidth != FloatWidth) {
+ DoubleWidth = DoubleAlign = 64;
+ DoubleFormat = &llvm::APFloat::IEEEdouble;
+ }
LongDoubleWidth = LongDoubleAlign = 128;
assert(PointerWidth == 32 || PointerWidth == 64);
@@ -259,7 +266,6 @@ void TargetInfo::setForcedLangOptions(LangOptions &Opts) {
HalfFormat = &llvm::APFloat::IEEEhalf;
FloatFormat = &llvm::APFloat::IEEEsingle;
- DoubleFormat = &llvm::APFloat::IEEEdouble;
LongDoubleFormat = &llvm::APFloat::IEEEquad;
}
}
OpenPOWER on IntegriCloud