On Mon, Sep 9, 2013 at 2:17 AM, David Tweed <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
