summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
AgeCommit message (Collapse)Author
2014-04-18CodeGen: Use LLVM's InstrProfReader in -fprofile-instr-use=Justin Bogner
Update clang to use the InstrProfReader from LLVM to read instrumentation based profile data. This also switches us from the naive text format to the binary format, since that's what's implemented in the reader. llvm-svn: 206658
2014-04-15CodeGen: Emit warnings for out of date profile data during PGOJustin Bogner
This adds a warning that triggers when profile data doesn't match for the source that's being compiled with -fprofile-instr-use=. This fires only once per translation unit, as warning on every mismatched function would be quite noisy. llvm-svn: 206322
2014-04-10CodeGen: Move PGO initialization into Release()Justin Bogner
Emitting the PGO initialization in EmitGlobalFunctionDefinition is inefficient, since this only has an effect once per module. We move this to Release() with the rest of the once-per-module logic. llvm-svn: 205977
2014-04-10CodeGen: Clean up CommonLinkage calculationDavid Majnemer
No functionality change. llvm-svn: 205972
2014-04-02CodeGen: Emit some functions as weak_odr under -fms-compatibilityDavid Majnemer
Summary: MSVC always emits inline functions marked with the extern storage class specifier. The result is something similar to the opposite of __attribute__((gnu_inline)). This extension is also available in C. This fixes PR19264. Reviewers: rnk, rsmith CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D3207 llvm-svn: 205485
2014-04-01Disable this-return optimizations when targeting iOS 5 and earlier.Bob Wilson
Clang implements the part of the ARM ABI saying that certain functions (e.g., constructors and destructors) return "this", but Apple's version of gcc and llvm-gcc did not. The libstdc++ dylib on iOS 5 was built with llvm-gcc, which means that clang cannot safely assume that code from the C++ runtime will correctly follow the ABI. It is also possible to run into this problem when linking with other libraries built with gcc or llvm-gcc. Even though there is no way to reliably detect that situation, it is most likely to come up when targeting older versions of iOS. Disabling the optimization for any code targeting iOS 5 solves the libstdc++ problem and has a reasonably good chance of fixing the issue for other older libraries as well. <rdar://problem/16377159> llvm-svn: 205272
2014-03-31Implement the 'optnone' attribute, which suppresses most optimizationsPaul Robinson
on a function. llvm-svn: 205255
2014-03-29ARM64: initial clang support commit.Tim Northover
This adds Clang support for the ARM64 backend. There are definitely still some rough edges, so please bring up any issues you see with this patch. As with the LLVM commit though, we think it'll be more useful for merging with AArch64 from within the tree. llvm-svn: 205100
2014-03-29CodeGen: Don't crash when replacing functionsDavid Majnemer
The peculiarities of C99 create scenario where an LLVM IR function declaration may need to be replaced with a definition baring a different type because the prototype and definition are not required to agree. However, we were not properly deferring this when it occurred. This fixes PR19280. llvm-svn: 205099
2014-03-27Handle and warn on aliases to weak aliases.Rafael Espindola
This produces valid IR now that llvm rejects aliases to weak aliases and warns the user that the resolution is not changed if the weak alias is overridden. llvm-svn: 204935
2014-03-26Revert "Update for llvm api change."Rafael Espindola
This reverts commit r204783. llvm-svn: 204785
2014-03-26Update for llvm api change.Rafael Espindola
llvm-svn: 204783
2014-03-24MS ABI: Eliminate Duplicate StringsDavid Majnemer
COFF doesn't have mergeable sections so LLVM/clang's normal tactics for string deduplication will not have any effect. To remedy this we place each string inside it's own section and mark the section as IMAGE_COMDAT_SELECT_ANY. However, we can only do this if the string has an external name that we can generate from it's contents. To be compatible with MSVC, we must use their scheme. Otherwise identical strings in translation units from clang may not be deduplicated with translation units in MSVC. This fixes PR18248. N.B. We will not attempt to do anything with a string literal which is not of type 'char' or 'wchar_t' because their compiler does not support unicode string literals as of this date. Further, we avoid doing this if either -fwritable-strings or -fsanitize=address are present. This reverts commit r204596. llvm-svn: 204675
2014-03-24Revert r204562,204566,204586,204587 as they broke ASan on WindowsTimur Iskhodzhanov
llvm-svn: 204596
2014-03-24MS ABI: Add tests, other cleanups for r204562David Majnemer
This commit cleans up a few accidents: - Do not rely on the order in which StringLiteral lays out bytes. - Use a more efficient mechanism for handling so-called "special-mappings" when mangling string literals. - There is no need to allocate a copy of the mangled name. - Add the test written for r204562. Thanks to Richard Smith for pointing these out! llvm-svn: 204586
2014-03-23MS ABI: Eliminate Duplicate StringsDavid Majnemer
COFF doesn't have mergeable sections so LLVM/clang's normal tactics for string deduplication will not have any effect. To remedy this we place each string inside it's own section and mark the section as IMAGE_COMDAT_SELECT_ANY. However, we can only do this if the string has an external name that we can generate from it's contents. To be compatible with MSVC, we must use their scheme. Otherwise identical strings in translation units from clang may not be deduplicated with translation units in MSVC. This fixes PR18248. N.B. We will not attempt to do anything with a string literal which is not of type 'char' or 'wchar_t' because their compiler does not support unicode string literals as of this date. llvm-svn: 204562
2014-03-14[C++11] Replacing ObjCCategoryDecl iterators propimpl_begin() and ↵Aaron Ballman
propimpl_end() with iterator_range property_impls(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203930
2014-03-13[C++11] Replacing ObjCContainerDecl iterators meth_begin() and meth_end() ↵Aaron Ballman
with iterator_range methods(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203832
2014-03-13Simplify code. No functionality change.Rafael Espindola
llvm-svn: 203804
2014-03-12Revert "CodeGen: Use a binary format for instrumentation based profiling"Justin Bogner
I've clearly done something wrong with how to get this to link correctly. Reverting for now. This reverts commit r203711. llvm-svn: 203712
2014-03-12CodeGen: Use a binary format for instrumentation based profilingJustin Bogner
This updates CodeGenPGO to use the ProfileDataReader introduced to llvm in r203703 and the new API for writing out the profile introduced to compiler-rt in r203710. llvm-svn: 203711
2014-03-10[C++11] Replacing DeclBase iterators specific_attr_begin() and ↵Aaron Ballman
specific_attr_end() with iterator_range specific_attrs(). Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203474
2014-03-09[C++11] Update Clang for the change to LLVM's Use-Def chain iterators inChandler Carruth
r203364: what was use_iterator is now user_iterator, and there is a use_iterator for directly iterating over the uses. This also switches to use the range-based APIs where appropriate. llvm-svn: 203365
2014-03-07[C++11] Replacing DeclBase iterators decls_begin() and decls_end() with ↵Aaron Ballman
iterator_range decls(). The same is true for the noload versions of these APIs. Updating all of the usages of the iterators with range-based for loops. llvm-svn: 203278
2014-03-06Use llvm.compiler.used instead of llvm.used for objc symbols.Rafael Espindola
LLVM currently has a hack (shouldEmitUsedDirectiveFor) that causes it to not print no_dead_strip for symbols starting with 'l' or 'L'. These are exactly the ones that the clang's objc codegen is producing. The net result, is that it is equivalent to llvm.compiler.used. The need for putting the private symbol in llvm.compiler.used should be clear (the objc runtime uses them). The reason for also putting the weak symbols in it is for LTO: ld64 will not ask us to preserve the it. llvm-svn: 203172
2014-03-04[Modules] Update to reflect the move of CallSite into the IR library inChandler Carruth
LLVM r202816. llvm-svn: 202817
2014-03-03DebugInfo: Emit only the declaration of a class template that has an ↵David Blaikie
explicit instantiation declaration (& always emit such a type when there's an explicit instantiation definition) We should only have this optimization fire when the explicit instantiation definition would cause at least one member function to be emitted, thus ensuring that even a compiler not performing this optimization would still emit the full type information elsewhere. But we should also pessimize output still by always emitting the definition when the explicit instantiation definition appears so that at some point in the future we can depend on that information even when no code had to be emitted in that TU. (this shouldn't happen very often, since people mostly use explicit spec decl/defs to reduce code size - but perhaps one day they could use it to explicitly reduce debug info size too) This was worth about 2% for Clang and LLVM - so not a huge win, but a win. It looks really great for simple STL programs (include <string> and just declare a string - 14k -> 1.4k of .dwo) llvm-svn: 202769
2014-02-25Attr: Remove ForceInlineDavid Majnemer
The __forceinline keyword's semantics are now recast as AlwaysInline and the kw___forceinline token has its language mode set for KEYMS. This preserves the semantics of the previous implementation but with less duplication of code. llvm-svn: 202131
2014-02-22Exposing the noduplicate attribute within Clang, which marks functions so ↵Aaron Ballman
that the optimizer does not duplicate code. Patch thanks to Marcello Maggioni! llvm-svn: 201941
2014-02-15DebugInfo: imported_decl/using declarations at namespace scopeDavid Blaikie
llvm-svn: 201470
2014-02-11XCore target: add section information.Robert Lytton
Xcore target ABI requires const data that is externally visible to be handled differently if it has C-language linkage rather than C++ language linkage. llvm-svn: 201142
2014-02-11[stackprotector] Add command line option -fstack-protector-strongJosh Magee
This option has the following effects: * It adds the sspstrong IR attribute to each function within the CU. * It defines the macro __SSP_STRONG__ with the value of 2. Differential Revision: http://llvm-reviews.chandlerc.com/D2717 llvm-svn: 201120
2014-02-08Remove the -fhidden-weak-vtables -cc1 option. It was dead,John McCall
gross, and increasingly replaced through other mechanisms. llvm-svn: 201011
2014-02-03[ms-cxxabi] Fix cast when structor replacement is an aliasReid Kleckner
llvm-svn: 200711
2014-01-26Enforce safe usage of DiagnosticsEngine::getCustomDiagID()Alp Toker
Replace the last incorrect uses and templatize the function to require a compile-time constant string preventing further misuse. The diagnostic formatter expects well-formed input and has undefined behaviour with arbitrary input or crafted user strings in source files. Accepting user input would also have caused unbounded generation of new diagnostic IDs which can be problematic in long-running sessions or language bindings. This completes the work to fix several incorrect callers that passed user input or raw messages to the diagnostics engine where a constant format string was expected. llvm-svn: 200132
2014-01-21Use private linkage for utf-16 objc strings too.Rafael Espindola
llvm-svn: 199709
2014-01-21Now that r199688 avoids the real issue, use private linkage for objc strings.Rafael Espindola
llvm-svn: 199705
2014-01-20Give explicit sections for string constants used in NSStrings.Rafael Espindola
Without them they can be merged with non unnamed_addr constants during LTO. The resulting constant is not unnamed_addr and goes in a different section, which causes ld64 to crash. A testcase that would crash before: * file1.mm: void g(id notification) { [notification valueForKey:@"name"]; } * file2.cpp: extern const char js_name_str[] = "name"; * file3.cpp extern bool JS_GetProperty(const char *name); extern const char js_name_str[]; bool js_ReportUncaughtException() { JS_GetProperty(js_name_str); } run clang file1.mm -o file1.o -c -w -emit-llvm clang file2.cpp -o file2.o -c -w -emit-llvm clang file3.cpp -o file3.o -c -w ld -dylib -o XUL file1.o file2.o file3.o -undefined dynamic_lookup. llvm-svn: 199688
2014-01-20Simplify further.Rafael Espindola
Thanks to David Blaikie for the push. llvm-svn: 199685
2014-01-20Remove virtual methods that were added in 2009 and still had 1 implementation.Rafael Espindola
llvm-svn: 199665
2014-01-14Update CodeGen to use DLL storage class for dllimport/dllexportNico Rieck
With the old linkage types removed, set the linkage to external for both dllimport and dllexport to reflect what's currently supported. llvm-svn: 199220
2014-01-07Remove unused include.Rafael Espindola
llvm-svn: 198692
2014-01-07Sort all the #include lines with LLVM's utils/sort_includes.py whichChandler Carruth
encodes the canonical rules for LLVM's style. I noticed this had drifted quite a bit when cleaning up LLVM, so wanted to clean up Clang as well. llvm-svn: 198686
2014-01-06CodeGen: Initial instrumentation based PGO implementationJustin Bogner
llvm-svn: 198640
2013-12-28Tidy up CGCXXABI creationAlp Toker
'create' functions conventionally return a pointer, not a reference. Also use an OwningPtr to get replace the delete of a reference member. No functional change. llvm-svn: 198126
2013-12-19Switched code from using hasAttr followed by getAttr to simply call getAttr ↵Aaron Ballman
directly and check the resulting value. No functional changes intended. llvm-svn: 197652
2013-12-19Replacing calls to getAttr with calls to hasAttr for clarity. No functional ↵Aaron Ballman
change intended -- this only replaces Boolean uses of getAttr. llvm-svn: 197648
2013-12-17ASTContext: Refactor implicit record creationAlp Toker
Tidy up built-in record creation to reduce code duplication. Continuation of r197336. llvm-svn: 197452
2013-12-11[ms-cxxabi] Fix linkage of dtor thunks for anonymous classesReid Kleckner
We were mistakengly giving linkonce_odr linkage instead of internal linkage to the deleting and complete destructor thunks for classes in anonymous namespaces. Fixes PR17273. llvm-svn: 197060
2013-12-09Save another call to GetAddrOfFunction.Rafael Espindola
Thread an optional GV down to EmitGlobalFunctionDefinition so that it can avoid the lookup when we already know the corresponding llvm global value. llvm-svn: 196789