summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
* Since ObjCARC has been refactored into its own library with its own ↵Michael Gottesman2013-01-281-0/+1
| | | | | | declaration header, we need to include the declaration header alongside Scalar.h in BackendUtil. llvm-svn: 173648
* Use the AttributeSet instead of AttributeWithIndex.Bill Wendling2013-01-273-36/+23
| | | | | | | In the future, AttributeWithIndex won't be used anymore. Besides, it exposes the internals of the AttributeSet to outside users, which isn't goodness. llvm-svn: 173605
* PR14566: Debug Info: avoid top level lexical blocks in functionsDavid Blaikie2013-01-264-8/+21
| | | | | | | | | | | | | | | One of the gotchas (see changes to CodeGenFunction) was due to the fix in r139416 (for PR10829). This only worked previously because the top level lexical block would set the location to the end of the function, the debug location would be updated (as per r139416), the location would be set to the end of the function again (but that would no-op, since it was the same as the previous location), then the return instruction would be emitted using the debug location. Once the top level lexical block was no longer emitted, the end-of-function location change was causing the debug loc to be updated, regressing that bug. llvm-svn: 173593
* patch for PR9027 and // rdar://11861085Fariborz Jahanian2013-01-253-3/+22
| | | | | | | | | | | Title: [PR9027] volatile struct bug: member is not loaded at -O; This is caused by last flag passed to @llvm.memcpy being false, not honoring that aggregate has at least one 'volatile' data member (even though aggregate itself has not been qualified as 'volatile'. As a result, optimization optimizes away the memcpy altogether. Patch review by John MaCall (I still need to fix up a test though). llvm-svn: 173535
* ARM says that the array cookie should always be eight bytes.John McCall2013-01-251-25/+21
| | | | | | | ARM is not thinking about over-aligned structures. Overrule ARM in both our generic-ARM and iOS ABI implementations. llvm-svn: 173531
* Move the decision about the kind of CGCXXABI to make insideJohn McCall2013-01-253-13/+25
| | | | | | the family-specific files. llvm-svn: 173530
* The standard ARM C++ ABI dictates that inline functions areJohn McCall2013-01-258-147/+214
| | | | | | | | never key functions. We did not implement that rule for the iOS ABI, which was driven by what was implemented in gcc-4.2. However, implement it now for other ARM-based platforms. llvm-svn: 173515
* First pass at abstracting out a class for the target C++ ABI.John McCall2013-01-253-7/+11
| | | | llvm-svn: 173514
* [mips] Do not emit i32 padding if target ABI is O32. This was causing backendAkira Hatanaka2013-01-241-1/+2
| | | | | | to pass floating point arguments to be passed in integer registers. llvm-svn: 173375
* Add a new LangOpt NativeHalfType. This option allows for native half/fp16Joey Gouly2013-01-233-17/+21
| | | | | | | | operations (as opposed to storage only half/fp16). Also add some semantic checks for OpenCL half types. llvm-svn: 173254
* Remove the last of uses that use the Attribute object as a collection of ↵Bill Wendling2013-01-232-7/+12
| | | | | | | | | attributes. Collections of attributes are handled via the AttributeSet class now. This finally frees us up to make significant changes to how attributes are structured. llvm-svn: 173229
* Use the AttributeSet when adding multiple attributes and an Attribute::AttrKindBill Wendling2013-01-232-4/+11
| | | | | | when adding a single attribute to the function. llvm-svn: 173211
* Use the correct field to copy/dispose a __block variable.John McCall2013-01-221-14/+41
| | | | | | | | | | | | | | | We were previously hard-coding a particular field index. This was fine before (because we were obviously guaranteed the presence of a copy/dispose member) except for (1) alignment padding and (2) future extensions adding extra members to the header, such as the extended-layout pointer. Note that we only introduce the extended-layout pointer in the presence of structs. (We also seem to be introducing it even in the presence of an all-non-object layout, but that's a different potential issue.) llvm-svn: 173122
* Have AttributeSet::getRetAttributes() return an AttributeSet instead of ↵Bill Wendling2013-01-211-3/+4
| | | | | | | | | Attribute. This further restricts the use of the Attribute class to the Attribute family of classes. llvm-svn: 173099
* Make AttributeSet::getFnAttributes() return an AttributeSet instead of an ↵Bill Wendling2013-01-211-6/+6
| | | | | | | | | Attribute. This is more code to isolate the use of the Attribute class to that of just holding one attribute instead of a collection of attributes. llvm-svn: 173095
* First step towards vftable generation with -cxx-abi microsoft PR13231Timur Iskhodzhanov2013-01-211-1/+1
| | | | llvm-svn: 173035
* CGDebugInfo.cpp: Fix a warning. [-Wunused-variable]NAKAMURA Takumi2013-01-211-0/+1
| | | | llvm-svn: 173022
* PR14472: Preserve qualifiers while unwrapping types for debug infoDavid Blaikie2013-01-211-14/+9
| | | | | | | | | | Looks like r161368 fixed this for one case but not all. This change generalizes the solution over all the unwrapping cases. Now that preserving the qualifiers is done independent of the particular type being unwrapped I won't bother adding test cases for each one but at least demonstrate that this change was necessary & sufficient to fix the bug. llvm-svn: 173002
* Add top-level Clang flag -f(no-)sanitize-address-zero-base-shadow that makes ↵Alexey Samsonov2013-01-201-7/+11
| | | | | | AddressSanitizer use bottom of the address space for the shadow memory. On Linux it can be used with -fPIE/-pie to improve performance. llvm-svn: 172974
* Implement OpenCL event_t as Clang builtin type, including event_t related ↵Guy Benyei2013-01-2010-0/+19
| | | | | | OpenCL restrictions (OpenCL 1.2 spec 6.9) llvm-svn: 172973
* The last of PR14471: Debug info support for inline in-class initializer for ↵David Blaikie2013-01-201-4/+8
| | | | | | float static members llvm-svn: 172942
* Emit the function type of member function pointer types the same as member ↵David Blaikie2013-01-191-2/+9
| | | | | | | | | | | | functions. Adding the pseudo first parameter to a member function pointer's function type and mark it as artificial. Combined with a fix to GDB ( http://sourceware.org/bugzilla/show_bug.cgi?id=14998 ) this fixes gdb.cp/member-ptr.exp with Clang. llvm-svn: 172911
* Re-sort all the headers. Lots of regressions have crept in here.Chandler Carruth2013-01-191-1/+1
| | | | | | | | | | Manually fix the order of UnwrappedLineParser.cpp as that one didn't have its associated header as the first header. This also uncovered a subtle inclusion order dependency as CLog.h didn't include LLVM.h to pick up using declarations it relied upon. llvm-svn: 172892
* Use the AttributeSet query method instead of the Attribute method.Bill Wendling2013-01-181-1/+1
| | | | llvm-svn: 172849
* [ubsan] Add support for -fsanitize-blacklistWill Dietz2013-01-189-57/+78
| | | | llvm-svn: 172808
* [IRgen] Update modules autolink metadata to use module flags (as now specifiedDaniel Dunbar2013-01-171-10/+6
| | | | | | in the LangRef). llvm-svn: 172692
* Implement C++11 semantics for [[noreturn]] attribute. This required splittingRichard Smith2013-01-171-1/+2
| | | | | | | | it apart from [[gnu::noreturn]] / __attribute__((noreturn)), since their semantics are not equivalent (for instance, we treat [[gnu::noreturn]] as affecting the function type, whereas [[noreturn]] does not). llvm-svn: 172691
* objC block layout: Patch reorders block layout to Fariborz Jahanian2013-01-171-7/+42
| | | | | | produce more inline layout metadata. // rdar://12752901 llvm-svn: 172683
* Correct order of operands forwarding NEON vfma to LLVM fmaTim Northover2013-01-161-1/+3
| | | | llvm-svn: 172650
* First step in implementation of mips16 and nomips16 attributes.Reed Kotler2013-01-161-0/+7
| | | | | | Waiting for new llvm attribute code for the next step. llvm-svn: 172626
* Add -fmodules-autolink/-fno-modules-autolink (defaults to on) so thatDouglas Gregor2013-01-161-1/+4
| | | | | | users can explicitly enable/disable modules autolinking. llvm-svn: 172592
* Collect both normal and static data members of a class in sourceEric Christopher2013-01-162-106/+173
| | | | | | | | | | order. Describe static data members to metadata using new interfaces. Part of PR14471. Patch by Paul Robinson! llvm-svn: 172591
* Fix signed/unsigned CompareDavid Greene2013-01-151-1/+2
| | | | | | Do some casting to avoid a signed/unsigned compare. llvm-svn: 172571
* Avoid unsigned Compare to intDavid Greene2013-01-151-1/+1
| | | | | | Cast arithmetic results to avoid comparison of an unsigned to an int. llvm-svn: 172570
* Fix Const CastDavid Greene2013-01-151-1/+2
| | | | | | Do proper casting to avoid a cast-away-const error. llvm-svn: 172559
* Multiprecision subtraction builtins.Michael Gottesman2013-01-141-2/+22
| | | | | | We lower these into 2x chained usub.with.overflow intrinsics. llvm-svn: 172476
* Topologically sort the link options generated for modules based onDouglas Gregor2013-01-142-67/+115
| | | | | | | module-import dependencies, so we'll get the link order correct for those silly linkers that need it. llvm-svn: 172459
* When forming the link options for an imported module, also include theDouglas Gregor2013-01-141-2/+7
| | | | | | link options for the modules it imports. llvm-svn: 172448
* Switch autolinking metadata format over to actual linker options, e.g.,Douglas Gregor2013-01-142-30/+33
| | | | | | | | | | | | | | | | | | | !0 = metadata !{metadata !"-lautolink"} !1 = metadata !{metadata !"-framework", metadata !"autolink_framework"} referenced from llvm.module.linkoptions, e.g., !llvm.module.linkoptions = !{!0, !1, !2, !3} This conceptually moves the logic for figuring out the syntax the linker will accept from LLVM into Clang. Moreover, it makes it easier to support MSVC's #pragma comment(linker, "some option") in the future, should anyone care to do so. llvm-svn: 172441
* This patch addresses varargs processing for small complex types underBill Schmidt2013-01-141-1/+39
| | | | | | | | | | | | | | | | | | | the 64-bit PowerPC ELF ABI. The ABI requires that the real and imaginary parts of a complex argument each occupy their own doubleword. Arguments smaller than 8 bytes are right-adjusted within the doubleword. Clang expects EmitVAARG() to return a pointer to a structure in which the real and imaginary parts are packed adjacently in memory. To accomplish this, we generate code to load the code appropriately from the varargs location and pack the values into a temporary variable in the form Clang expects, returning a pointer to that structure. The test case demonstrates correct code generation for all "small" complex types on PPC64: int, short, char, and float. llvm-svn: 172438
* Implement parsing, AST, (de-)serialization, and placeholder globalDouglas Gregor2013-01-142-2/+80
| | | | | | | | | | | | | | | | | | | | | | | | | metadata for linking against the libraries/frameworks for imported modules. The module map language is extended with a new "link" directive that specifies what library or framework to link against when a module is imported, e.g., link "clangAST" or link framework "MyFramework" Importing the corresponding module (or any of its submodules) will eventually link against the named library/framework. For now, I've added some placeholder global metadata that encodes the imported libraries/frameworks, so that we can test that this information gets through to the IR. The format of the data is still under discussion. llvm-svn: 172437
* CGBuiltin.cpp: Fix abuse of ArrayRef in EmitOverflowIntrinsic().NAKAMURA Takumi2013-01-131-2/+1
| | | | | | | | | | | | | | | | | | | | In ArrayRef<T>(X), X should not be temporary value. It could be rewritten more redundantly; llvm::Type *XTy = X->getType(); ArrayRef<llvm::Type *> Ty(XTy); llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, Ty); Since it is safe if both XTy and Ty are temporary value in one statement, it could be shorten; llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, ArrayRef<llvm::Type*>(X->getType())); ArrayRef<T> has an implicit constructor to create uni-entry of T; llvm::Value *Callee = CGF.CGM.getIntrinsic(IntrinsicID, X->getType()); MSVC-generated clang.exe crashed. llvm-svn: 172352
* Added builtins for multiprecision adds.Michael Gottesman2013-01-131-0/+70
| | | | | | | We lower all of these intrinsics into a 2x chained usage of uadd.with.overflow. llvm-svn: 172341
* Remove useless 'llvm::' qualifier from names like StringRef and others that areDmitri Gribenko2013-01-1216-47/+45
| | | | | | brought into 'clang' namespace by clang/Basic/LLVM.h llvm-svn: 172323
* Enable the new (more C++-like, less broken) EH model when targeting the GNUstepDavid Chisnall2013-01-112-0/+17
| | | | | | Objective-C runtime 1.7 or greater. llvm-svn: 172207
* c++ IRGen. In trivial cases that object is going into staticFariborz Jahanian2013-01-101-0/+17
| | | | | | | | | | storage and thus is implicitly zero-initialized, no need to do C++11 memory model. This patch unconditionally detects such condition and zeroinitializer's the variable. Patch has been commented on and OKed by Doug off-line. // rdar://12897704 llvm-svn: 172144
* objectiveC++: When throwing c++ exception of Fariborz Jahanian2013-01-104-10/+32
| | | | | | | an objectiveC object, use objc_exception_throw to raise the exception. // rdar://12605907 llvm-svn: 172091
* Testing with a full OpenCL compiler (based on clang) reveals r71734 missedDavid Tweed2013-01-101-2/+6
| | | | | | | difference between type widths of a vector and the width of one of its elements in the case of vector shifts. Use correct witdth in the vector case. llvm-svn: 172047
* Don't assert in codegen on static data members which have NoLinkage. FixesNick Lewycky2013-01-101-4/+2
| | | | | | PR14825! llvm-svn: 172031
* [ubsan] Make static check data non-const so it can be used for deduplication.Will Dietz2013-01-091-1/+1
| | | | llvm-svn: 171947
OpenPOWER on IntegriCloud