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