diff options
author | Pekka Jaaskelainen <pekka.jaaskelainen@tut.fi> | 2013-12-18 18:15:03 +0000 |
---|---|---|
committer | Pekka Jaaskelainen <pekka.jaaskelainen@tut.fi> | 2013-12-18 18:15:03 +0000 |
commit | 43c39d5f1fb079c4c077674a23777672071d3db9 (patch) | |
tree | bf248bf856c4b15f39540134b26e7383a905c7ad /clang/lib/Basic/TargetInfo.cpp | |
parent | 1c9ff122b6e9cbf54bf90889ddf814d4f001e0e4 (diff) | |
download | bcm5719-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.cpp | 10 |
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; } } |