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