<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>