<div dir="ltr">On Mon, Sep 9, 2013 at 2:17 AM, David Tweed <span dir="ltr"><<a href="mailto:david.tweed@arm.com" target="_blank">david.tweed@arm.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davidtweed<br>
Date: Mon Sep 9 04:17:24 2013<br>
New Revision: 190296<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=190296&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=190296&view=rev</a><br>
Log:<br>
The OpenCL standard specifies the sizes and alignments of various types than other C-family<br>
languages, as well as specifying errno is not set by the math functions. Make the<br>
clang front-end set those appropriately when the OpenCL language option is set.<br>
<br>
Patch by Erik Schnetter!<br>
<br>
<br>
Modified:<br>
cfe/trunk/include/clang/Basic/TargetInfo.h<br>
cfe/trunk/lib/Basic/TargetInfo.cpp<br>
cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Basic/TargetInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=190296&r1=190295&r2=190296&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=190296&r1=190295&r2=190296&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Basic/TargetInfo.h (original)<br>
+++ cfe/trunk/include/clang/Basic/TargetInfo.h Mon Sep 9 04:17:24 2013<br>
@@ -354,11 +354,11 @@ public:<br>
unsigned getUnwindWordWidth() const { return getPointerWidth(0); }<br>
<br>
/// \brief Return the "preferred" register width on this target.<br>
- uint64_t getRegisterWidth() const {<br>
+ unsigned getRegisterWidth() const {<br>
// Currently we assume the register width on the target matches the pointer<br>
// width, we can introduce a new variable for this if/when some target wants<br>
// it.<br>
- return LongWidth;<br>
+ return PointerWidth;<br>
}<br>
<br>
/// \brief Returns the default value of the __USER_LABEL_PREFIX__ macro,<br>
<br>
Modified: cfe/trunk/lib/Basic/TargetInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/TargetInfo.cpp?rev=190296&r1=190295&r2=190296&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/TargetInfo.cpp?rev=190296&r1=190295&r2=190296&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Basic/TargetInfo.cpp (original)<br>
+++ cfe/trunk/lib/Basic/TargetInfo.cpp Mon Sep 9 04:17:24 2013<br>
@@ -233,6 +233,35 @@ void TargetInfo::setForcedLangOptions(La<br>
UseBitFieldTypeAlignment = false;<br>
if (Opts.ShortWChar)<br>
WCharType = UnsignedShort;<br>
+<br>
+ if (Opts.OpenCL) {<br>
+ // OpenCL C requires specific widths for types, irrespective of<br>
+ // what these normally are for the target.<br>
+ // We also define long long and long double here, although the<br>
+ // OpenCL standard only mentions these as "reserved".<br>
+ IntWidth = IntAlign = 32;<br>
+ LongWidth = LongAlign = 64;<br>
+ LongLongWidth = LongLongAlign = 128;<br>
+ HalfWidth = HalfAlign = 16;<br>
+ FloatWidth = FloatAlign = 32;<br>
+ DoubleWidth = DoubleAlign = 64;<br>
+ LongDoubleWidth = LongDoubleAlign = 128;<br>
+<br>
+ assert(PointerWidth == 32 || PointerWidth == 64);<br>
+ bool is32BitArch = PointerWidth == 32;<br></blockquote><div><br></div><div>s/is32BitArch/Is32BitArch/g, please, per the coding style.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+ SizeType = is32BitArch ? UnsignedInt : UnsignedLong;<br>
+ PtrDiffType = is32BitArch ? SignedInt : SignedLong;<br>
+ IntPtrType = is32BitArch ? SignedInt : SignedLong;<br>
+<br>
+ IntMaxType = SignedLongLong;<br>
+ UIntMaxType = UnsignedLongLong;<br>
+ Int64Type = SignedLong;<br>
+<br>
+ HalfFormat = &llvm::APFloat::IEEEhalf;<br>
+ FloatFormat = &llvm::APFloat::IEEEsingle;<br>
+ DoubleFormat = &llvm::APFloat::IEEEdouble;<br>
+ LongDoubleFormat = &llvm::APFloat::IEEEquad;<br>
+ }<br>
}<br>
<br>
//===----------------------------------------------------------------------===//<br>
<br>
Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=190296&r1=190295&r2=190296&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=190296&r1=190295&r2=190296&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Sep 9 04:17:24 2013<br>
@@ -1274,7 +1274,7 @@ static void ParseLangArgs(LangOptions &O<br>
Opts.Blocks = Args.hasArg(OPT_fblocks);<br>
Opts.BlocksRuntimeOptional = Args.hasArg(OPT_fblocks_runtime_optional);<br>
Opts.Modules = Args.hasArg(OPT_fmodules);<br>
- Opts.CharIsSigned = !Args.hasArg(OPT_fno_signed_char);<br>
+ Opts.CharIsSigned = Opts.OpenCL || !Args.hasArg(OPT_fno_signed_char);<br>
Opts.WChar = Opts.CPlusPlus && !Args.hasArg(OPT_fno_wchar);<br>
Opts.ShortWChar = Args.hasArg(OPT_fshort_wchar);<br>
Opts.ShortEnums = Args.hasArg(OPT_fshort_enums);<br>
@@ -1285,7 +1285,7 @@ static void ParseLangArgs(LangOptions &O<br>
Opts.HeinousExtensions = Args.hasArg(OPT_fheinous_gnu_extensions);<br>
Opts.AccessControl = !Args.hasArg(OPT_fno_access_control);<br>
Opts.ElideConstructors = !Args.hasArg(OPT_fno_elide_constructors);<br>
- Opts.MathErrno = Args.hasArg(OPT_fmath_errno);<br>
+ Opts.MathErrno = !Opts.OpenCL && Args.hasArg(OPT_fmath_errno);<br>
Opts.InstantiationDepth =<br>
getLastArgIntValue(Args, OPT_ftemplate_depth, 256, Diags);<br>
Opts.ConstexprCallDepth =<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>