aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenAction.cpp
AgeCommit message (Collapse)AuthorFilesLines
2017-07-01Revert "[Driver] Add -fdiagnostics-hotness-threshold"Brian Gesiak1-3/+0
Summary: The commit caused a documentation breakage. llvm-svn: 306946
2017-07-01[Driver] Add -fdiagnostics-hotness-thresholdBrian Gesiak1-0/+3
Summary: Depends on https://reviews.llvm.org/D34867. Add a Clang frontend option to enable optimization remark hotness thresholds, which were added to LLVM in https://reviews.llvm.org/D34867. This prevents diagnostics that do not meet a minimum hotness threshold from being output. When generating optimization remarks for large codebases with a ton of cold code paths, this option can be used to limit the optimization remark output at a reasonable size. Discussion of this change can be read here: http://lists.llvm.org/pipermail/llvm-dev/2017-June/114377.html Reviewers: anemet, davidxl, hfinkel Reviewed By: anemet Subscribers: fhahn, cfe-commits Differential Revision: https://reviews.llvm.org/D34868 llvm-svn: 306945
2017-06-30[ORE] Use LLVM's "diagnostics hotness" spellingBrian Gesiak1-2/+2
Summary: Depends on https://reviews.llvm.org/D34864. To unify Clang and LLVM's spelling of "diagnostic[s] hotness", use the new "diagnostics hotness" spelling in LLVM, which was added in https://reviews.llvm.org/D34864. Reviewers: anemet, davidxl Reviewed By: anemet Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D34865 llvm-svn: 306862
2017-05-12Fix uninitialized bool read causing x86_64-mno-sse.c test failureReid Kleckner1-5/+5
llvm-svn: 302854
2017-04-26Refactor frontend InputKind to prepare for treating module maps as a ↵Richard Smith1-1/+1
distinct kind of input. No functionality change intended. llvm-svn: 301442
2017-03-13Fix -Wunused-lambda-capture warning in new codeReid Kleckner1-1/+1
llvm-svn: 297681
2017-03-13[Linker] Provide callback for internalizationJonas Devlieghere1-7/+24
Differential Revision: https://reviews.llvm.org/D30738 llvm-svn: 297649
2017-02-17Rename DiagnosticInfoWithDebugLoc to WithLocation to match LLVMJustin Bogner1-3/+3
Updates for llvm r295465. llvm-svn: 295466
2017-02-09[DebugInfo] Added support to Clang FE for generating debug info for ↵Amjad Aboud1-0/+14
preprocessor macros. Added "-fdebug-macro" flag (and "-fno-debug-macro" flag) to enable (and to disable) emitting macro debug info. Added CC1 "-debug-info-macro" flag that enables emitting macro debug info. Differential Revision: https://reviews.llvm.org/D16135 llvm-svn: 294637
2017-01-26IRGen: When loading the main module in the distributed ThinLTO backend, look ↵Peter Collingbourne1-2/+23
for the module containing the summary. Differential Revision: https://reviews.llvm.org/D29067 llvm-svn: 293209
2017-01-26Support MIR opt-remarks with -fsave-optimization-recordAdam Nemet1-33/+46
The handler that deals with IR passed/missed/analysis remarks is extended to also handle the corresponding MIR remarks. The more thorough testing in done via llc (rL293113, rL293121). Here we just make sure that the functionality is accessible through clang. llvm-svn: 293146
2017-01-25[CodeGen] [CUDA] Add the ability set default attrs on functions in linked ↵Justin Lebar1-40/+44
modules. Summary: Now when you ask clang to link in a bitcode module, you can tell it to set attributes on that module's functions to match what we would have set if we'd emitted those functions ourselves. This is particularly important for fast-math attributes in CUDA compilations. Each CUDA compilation links in libdevice, a bitcode library provided by nvidia as part of the CUDA distribution. Without this patch, if we have a user-function F that is compiled with -ffast-math that calls a function G from libdevice, F will have the unsafe-fp-math=true (etc.) attributes, but G will have no attributes. Since F calls G, the inliner will merge G's attributes into F's. It considers the lack of an unsafe-fp-math=true attribute on G to be tantamount to unsafe-fp-math=false, so it "merges" these by setting unsafe-fp-math=false on F. This then continues up the call graph, until every function that (transitively) calls something in libdevice gets unsafe-fp-math=false set, thus disabling fastmath in almost all CUDA code. Reviewers: echristo Subscribers: hfinkel, llvm-commits, mehdi_amini Differential Revision: https://reviews.llvm.org/D28538 llvm-svn: 293097
2017-01-24IRGen: Factor out function CodeGenAction::loadModule. NFCI.Peter Collingbourne1-28/+38
llvm-svn: 292972
2017-01-05CodeGen: plumb header search down to the IASSaleem Abdulrasool1-7/+9
inline assembly may use the `.include` directive to include other content into the file. Without the integrated assembler, the `-I` group gets passed to the assembler. Emulate this by collecting the header search paths and passing them to the IAS. Resolves PR24811! llvm-svn: 291123
2016-11-30Fix -Winconsistent-missing-override in CodeGenAction.cppReid Kleckner1-1/+1
llvm-svn: 288227
2016-11-30Stop handling interesting deserialized decls after HandleTranslationUnitReid Kleckner1-0/+13
Other AST consumers can deserialize interesting decls that we might codegen, but they won't make it to the final object file and can trigger assertions in debug information generation after finalization. llvm-svn: 288221
2016-11-19Change setDiagnosticsOutputFile to take a unique_ptr from a raw pointer (NFC)Mehdi Amini1-1/+2
Summary: This makes it explicit that ownership is taken. Also replace all `new` with make_unique<> at call sites. Reviewers: anemet Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D26884 llvm-svn: 287449
2016-11-18Adapt to llvm NamedRegionTimer changesMatthias Braun1-1/+1
We have to specify a name and description for the timers and groups now. llvm-svn: 287371
2016-11-13Bitcode: Change module reader functions to return an llvm::Expected.Peter Collingbourne1-4/+6
Differential Revision: https://reviews.llvm.org/D26562 llvm-svn: 286752
2016-11-11Mirror the llvm changes that split Bitcode/ReaderWriter.hTeresa Johnson1-1/+1
The change in D26502 splits ReaderWriter.h, which contains the APIs into both the BitReader and BitWriter libraries, into BitcodeReader.h and BitcodeWriter.h. Change clang uses to the appropriate split header(s). llvm-svn: 286567
2016-11-08IR, Bitcode: Change bitcode reader to no longer own its memory buffer.Peter Collingbourne1-1/+1
Unique ownership is just one possible ownership pattern for the memory buffer underlying the bitcode reader. In practice, as this patch shows, ownership can often reside at a higher level. With the upcoming change to allow multiple modules in a single bitcode file, it will no longer be appropriate for modules to generally have unique ownership of their memory buffer. The C API exposes the ownership relation via the LLVMGetBitcodeModuleInContext and LLVMGetBitcodeModuleInContext2 functions, so we still need some way for the module to own the memory buffer. This patch does so by adding an owned memory buffer field to Module, and using it in a few other places where it is convenient. Differential Revision: https://reviews.llvm.org/D26384 llvm-svn: 286214
2016-10-11Add an option to save the backend-produced YAML optimization record to a fileHal Finkel1-0/+23
The backend now has the capability to save information from optimizations, the same information that can be used to generate optimization diagnostics but in machine-consumable form, into an output file. This can be enabled when using opt (see r282539), and this change enables it when using clang. The idea is that other tools will be able to consume these files, and perhaps in combination with the original source code, produce various kinds of optimization reports for users (and for compiler developers). We now have at-least two tools that can consume these files: * tools/llvm-opt-report * utils/opt-viewer Using the flag -fsave-optimization-record will cause the YAML file to be generated; the file name will be based on the output file name (if we're using -c or -S and have an output name), or the input file name. When we're using CUDA, or some other offloading mechanism, separate files are generated for each backend target. The output file name can be specified by the user using -foptimization-record-file=filename. Differential Revision: https://reviews.llvm.org/D25225 llvm-svn: 283834
2016-10-01Use StringRef in Pass/PassManager APIs (NFC)Mehdi Amini1-1/+1
llvm-svn: 283004
2016-09-27Shorten DiagnosticInfoOptimizationRemark* to OptimizationRemark*. NFCAdam Nemet1-21/+15
With the new streaming interface in LLVM, these class names need to be typed a lot and it's way too looong. llvm-svn: 282545
2016-09-27Adapt to LLVM optimization remark interface change. NFCAdam Nemet1-1/+1
llvm-svn: 282540
2016-09-27Revert "Adapt to LLVM optimization remark interface change. NFC"Adam Nemet1-1/+1
This reverts commit r282500. llvm-svn: 282504
2016-09-27Adapt to LLVM optimization remark interface change. NFCAdam Nemet1-1/+1
llvm-svn: 282500
2016-09-13Reapply r281276 with passing -emit-llvm in one of the testsAdam Nemet1-1/+9
Original commit message: Add -fdiagnostics-show-hotness Summary: I've recently added the ability for optimization remarks to include the hotness of the corresponding code region. This uses PGO and allows filtering of the optimization remarks by relevance. The idea was first discussed here: http://thread.gmane.org/gmane.comp.compilers.llvm.devel/98334 The general goal is to produce a YAML file with the remarks. Then, an external tool could dynamically filter these by hotness and perhaps by other things. That said it makes sense to also expose this at the more basic level where we just include the hotness info with each optimization remark. For example, in D22694, the clang flag was pretty useful to measure the overhead of the additional analyses required to include hotness. (Without the flag we don't even run the analyses.) For the record, Hal has already expressed support for the idea of this patch on IRC. Differential Revision: https://reviews.llvm.org/D23284 llvm-svn: 281293
2016-09-13Revert "Add -fdiagnostics-show-hotness"Adam Nemet1-9/+1
This reverts commit r281276. Many bots are failing. llvm-svn: 281279
2016-09-12Add -fdiagnostics-show-hotnessAdam Nemet1-1/+9
Summary: I've recently added the ability for optimization remarks to include the hotness of the corresponding code region. This uses PGO and allows filtering of the optimization remarks by relevance. The idea was first discussed here: http://thread.gmane.org/gmane.comp.compilers.llvm.devel/98334 The general goal is to produce a YAML file with the remarks. Then, an external tool could dynamically filter these by hotness and perhaps by other things. That said it makes sense to also expose this at the more basic level where we just include the hotness info with each optimization remark. For example, in D22694, the clang flag was pretty useful to measure the overhead of the additional analyses required to include hotness. (Without the flag we don't even run the analyses.) For the record, Hal has already expressed support for the idea of this patch on IRC. Differential Revision: https://reviews.llvm.org/D23284 llvm-svn: 281276
2016-07-21[CodeGen] Handle recursion in LLVMIRGeneration Timer.Davide Italiano1-8/+23
This can happen when emitting a local decl, which triggers loading a decl imported from an AST file, which we then hand to the AST consumer. Timer is not allowed to recurse so an assertion fire. Keep a reference counter to avoid this problem. LGTM'd by Richard Smith on IRC. Differential Revision: https://reviews.llvm.org/D20748 llvm-svn: 276242
2016-07-18[NFC] Header cleanupMehdi Amini1-1/+0
Summary: Removed unused headers, replaced some headers with forward class declarations Patch by: Eugene <claprix@yandex.ru> Differential Revision: https://reviews.llvm.org/D20100 llvm-svn: 275882
2016-07-15Frontend: Simplify ownership model for clang's output streams.Peter Collingbourne1-10/+12
This changes the CompilerInstance::createOutputFile function to return a std::unique_ptr<llvm::raw_ostream>, rather than an llvm::raw_ostream implicitly owned by the CompilerInstance. This in most cases required that I move ownership of the output stream to the relevant ASTConsumer. The motivation for this change is to allow BackendConsumer to be a client of interfaces such as D20268 which take ownership of the output stream. Differential Revision: http://reviews.llvm.org/D21537 llvm-svn: 275507
2016-06-29[Diag] Add getter shouldAlwaysPrint. NFCAdam Nemet1-3/+3
For the new hotness attribute, the API will take the pass rather than the pass name so we can no longer play the trick of AlwaysPrint being a special pass name. This adds a getter to help the transition. There is also a corresponding llvm patch. llvm-svn: 274101
2016-06-20Update for DiagnosticInfoStackSize changesMatt Arsenault1-1/+2
llvm-svn: 273178
2016-05-11Embed bitcode in object file (clang cc1 part)Steven Wu1-0/+6
Summary: Teach clang to embed bitcode inside bitcode. When -fembed-bitcode cc1 option is used, clang will embed both the input bitcode and cc1 commandline into the bitcode in special sections before compiling to the object file. Using -fembed-bitcode-marker will only introduce a marker in both sections. Depends on D17390 Reviewers: rsmith Subscribers: yaron.keren, vsk, cfe-commits Differential Revision: http://reviews.llvm.org/D17392 llvm-svn: 269202
2016-05-06Adding omitted column to invalid loc diagnostic.Ben Craig1-1/+1
note_fe_backend_invalid_loc expects three arguments (file, line, column), and will assert when only given two. The other two places in this file that use note_fe_backend_invalid_loc already supply the Column for the third parameter. http://reviews.llvm.org/D19936 llvm-svn: 268732
2016-04-20Enable ODR uniquing of DITypes for ThinLTO backendsTeresa Johnson1-0/+5
Summary: This is a follow-on to apply Duncan's new DIType ODR uniquing from r266549 and r266713 in more places. When invoking ThinLTO backend compiles via clang (for a distributed build), invoke enableDebugTypeODRUniquing() before parsing the module. Reviewers: dexonsmith, joker.eph Subscribers: llvm-commits, joker.eph Differential Revision: http://reviews.llvm.org/D19264 llvm-svn: 266852
2016-04-06Restore slightly less dodgy diagnostic handler for inline asmTim Northover1-0/+25
Turns out it was there mostly to prevent Clang asking people to report a bug. This time we report something to Clang's real diagnostics handler so that it exits with something approximating a real error and tidies up after itself. llvm-svn: 265592
2016-03-31Diagnostics: remove dodgy handler for bitcode inlineasm diagnostics.Tim Northover1-8/+0
Whatever crash it was there to present appears to have been fixed in the backend now, and it had the nasty side-effect of causing clang to exit(0) and leave a .o containing goodness knows what even when an error hit. llvm-svn: 265038
2016-03-30For MS ABI, emit dllexport friend functions defined inline in classStephan Bergmann1-3/+3
...as that is apparently what MSVC does. This is an updated version of r263738, which had to be reverted in r263740 due to test failures. The original version had erroneously emitted functions that are defined in class templates, too (see the updated "Handle friend functions" code in EmitDeferredDecls, lib/CodeGen/ModuleBuilder.cpp). (The updated tests needed to be split out into their own dllexport-ms-friend.cpp because of the CHECK-NOTs which would have interfered with subsequent CHECK-DAGs in dllexport.cpp.) Differential Revision: http://reviews.llvm.org/D18430 llvm-svn: 264841
2016-03-17Revert "For MS ABI, emit dllexport friend functions defined inline in class"Reid Kleckner1-3/+3
This reverts commit r263738. This appears to cause a failure in CXX/temp/temp.decls/temp.friend/p1.cpp llvm-svn: 263740
2016-03-17For MS ABI, emit dllexport friend functions defined inline in classReid Kleckner1-3/+3
Summary: ...as that is apparently what MSVC does Reviewers: rnk Patch by Stephan Bergmann Differential Revision: http://reviews.llvm.org/D15267 llvm-svn: 263738
2016-03-12Temporarily revert these patches:Eric Christopher1-7/+1
commit 60d9845f6a037122d9be9a6d92d4de617ef45b04 Author: Mehdi Amini <mehdi.amini@apple.com> Date: Fri Mar 11 18:48:02 2016 +0000 Fix clang crash: when CodeGenAction is initialized without a context, use the member and not the parameter From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263273 91177308-0d34-0410-b5e6-96231b3b80d8 commit af7ce3bf04a75ad5124b457b805df26006bd215b Author: Mehdi Amini <mehdi.amini@apple.com> Date: Fri Mar 11 17:32:58 2016 +0000 Fix build: use -> with pointers and not . Silly typo. From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263267 91177308-0d34-0410-b5e6-96231b3b80d8 commit d0eea119192814954e7368c77d0dc5a9eeec1fbb Author: Mehdi Amini <mehdi.amini@apple.com> Date: Fri Mar 11 17:15:44 2016 +0000 Remove compile time PreserveName switch based on NDEBUG Summary: Following r263086, we are now relying on a flag on the Context to discard Value names in release builds. Reviewers: chandlerc Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D18024 From: Mehdi Amini <mehdi.amini@apple.com> git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263257 91177308-0d34-0410-b5e6-96231b3b80d8 until we can fix the Release builds. This reverts commits 263257, 263267, 263273 llvm-svn: 263320
2016-03-11Fix clang crash: when CodeGenAction is initialized without a context, use ↵Mehdi Amini1-1/+1
the member and not the parameter From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 263273
2016-03-11Fix build: use -> with pointers and not .Mehdi Amini1-1/+1
Silly typo. From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 263267
2016-03-11Remove compile time PreserveName switch based on NDEBUGMehdi Amini1-1/+7
Summary: Following r263086, we are now relying on a flag on the Context to discard Value names in release builds. Reviewers: chandlerc Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D18024 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 263257
2016-03-04Make TargetInfo store an actual DataLayout instead of a string.James Y Knight1-2/+2
Use it to calculate UserLabelPrefix, instead of specifying it (often incorrectly). Note that the *actual* user label prefix has always come from the DataLayout, and is handled within LLVM. The main thing clang's TargetInfo::UserLabelPrefix did was to set the #define value. Having these be different from each-other is just silly. Differential Revision: http://reviews.llvm.org/D17183 llvm-svn: 262737
2016-03-02Serialize `#pragma detect_mismatch`.Nico Weber1-5/+0
This is like r262493, but for pragma detect_mismatch instead of pragma comment. The two pragmas have similar behavior, so use the same approach for both. llvm-svn: 262506
2016-03-02Serialize `#pragma comment`.Nico Weber1-8/+0
`#pragma comment` was handled by Sema calling a function on ASTConsumer, and CodeGen then implementing this function and writing things to its output. Instead, introduce a PragmaCommentDecl AST node and hang one off the TranslationUnitDecl for every `#pragma comment` line, and then use the regular serialization machinery. (Since PragmaCommentDecl has codegen relevance, it's eagerly deserialized.) http://reviews.llvm.org/D17799 llvm-svn: 262493