aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineModuleInfo.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-12-01Move most EH from MachineModuleInfo to MachineFunctionMatthias Braun1-201/+3
Recommitting r288293 with some extra fixes for GlobalISel code. Most of the exception handling members in MachineModuleInfo is actually per function data (talks about the "current function") so it is better to keep it at the function instead of the module. This is a necessary step to have machine module passes work properly. Also: - Rename TidyLandingPads() to tidyLandingPads() - Use doxygen member groups instead of "//===- EH ---"... so it is clear where a group ends. - I had to add an ugly const_cast at two places in the AsmPrinter because the available MachineFunction pointers are const, but the code wants to call tidyLandingPads() in between (markFunctionEnd()/endFunction()). Differential Revision: https://reviews.llvm.org/D27227 llvm-svn: 288405
2016-12-01Temporarily Revert "Move most EH from MachineModuleInfo to MachineFunction"Eric Christopher1-3/+201
This apprears to have broken the global isel bot: http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-globalisel_build/5174/console This reverts commit r288293. llvm-svn: 288322
2016-11-30Move most EH from MachineModuleInfo to MachineFunctionMatthias Braun1-201/+3
Most of the exception handling members in MachineModuleInfo is actually per function data (talks about the "current function") so it is better to keep it at the function instead of the module. This is a necessary step to have machine module passes work properly. Also: - Rename TidyLandingPads() to tidyLandingPads() - Use doxygen member groups instead of "//===- EH ---"... so it is clear where a group ends. - I had to add an ugly const_cast at two places in the AsmPrinter because the available MachineFunction pointers are const, but the code wants to call tidyLandingPads() in between (markFunctionEnd()/endFunction()). Differential Revision: https://reviews.llvm.org/D27227 llvm-svn: 288293
2016-11-30Move VariableDbgInfo from MachineModuleInfo to MachineFunctionMatthias Braun1-1/+0
VariableDbgInfo is per function data, so it makes sense to have it with the function instead of the module. This is a necessary step to have machine module passes work properly. Differential Revision: https://reviews.llvm.org/D27186 llvm-svn: 288292
2016-11-30Move FrameInstructions from MachineModuleInfo to MachineFunctionMatthias Braun1-3/+0
This is per function data so it is better kept at the function instead of the module. This is a necessary step to have machine module passes work properly. Differential Revision: https://reviews.llvm.org/D27185 llvm-svn: 288291
2016-11-16[CodeGen] Pass references, not pointers, to MMI helpers. NFC.Ahmed Bougacha1-9/+9
While there, rename them to follow the coding style. llvm-svn: 287169
2016-11-16[CodeGen] Pull MMI helpers from FunctionLoweringInfo to MMI. NFC.Ahmed Bougacha1-0/+51
They're not SelectionDAG- or FunctionLoweringInfo-specific. They are, however, specific to building MMI from IR. We could make them members, but it's nice having MMI be a "simple" data structure and this logic kept separate. This also lets us reuse them from GlobalISel. llvm-svn: 287167
2016-11-16[CodeGen] Cleanup MachineModuleInfo doxygen comments. NFC.Ahmed Bougacha1-39/+7
Remove redundant names and only keep header comments. llvm-svn: 287166
2016-08-24CodeGen: Remove MachineFunctionAnalysis => Enable (Machine)ModulePassesMatthias Braun1-3/+65
Re-apply this patch, hopefully I will get away without any warnings in the constructor now. This patch removes the MachineFunctionAnalysis. Instead we keep a map from IR Function to MachineFunction in the MachineModuleInfo. This allows the insertion of ModulePasses into the codegen pipeline without breaking it because the MachineFunctionAnalysis gets dropped before a module pass. Peak memory should stay unchanged without a ModulePass in the codegen pipeline: Previously the MachineFunction was freed at the end of a codegen function pipeline because the MachineFunctionAnalysis was dropped; With this patch the MachineFunction is freed after the AsmPrinter has finished. Differential Revision: http://reviews.llvm.org/D23736 llvm-svn: 279602
2016-08-24MachineModuleInfo: Avoid dummy constructor, use INITIALIZE_TM_PASSMatthias Braun1-13/+7
Change this pass constructor to just accept a const TargetMachine * and use INITIALIZE_TM_PASS, that way we can get rid of the dummy constructor. The pass will still fail when calling the default constructor leading to TM == nullptr, this is no different than before but is more in line what other codegen passes are doing and avoids the dummy constructor. llvm-svn: 279598
2016-08-23Revert r279564. It introduces undefined behavior (binding a reference to aRichard Smith1-70/+5
dereferenced null pointer) in MachineModuleInfo::MachineModuleInfo that causes -Werror builds (including several buildbots) to fail. llvm-svn: 279580
2016-08-23CodeGen: Remove MachineFunctionAnalysis => Enable (Machine)ModulePassesMatthias Braun1-5/+70
Re-apply this commit with the deletion of a MachineFunction delegated to a separate pass to avoid use after free when doing this directly in AsmPrinter. This patch removes the MachineFunctionAnalysis. Instead we keep a map from IR Function to MachineFunction in the MachineModuleInfo. This allows the insertion of ModulePasses into the codegen pipeline without breaking it because the MachineFunctionAnalysis gets dropped before a module pass. Peak memory should stay unchanged without a ModulePass in the codegen pipeline: Previously the MachineFunction was freed at the end of a codegen function pipeline because the MachineFunctionAnalysis was dropped; With this patch the MachineFunction is freed after the AsmPrinter has finished. Differential Revision: http://reviews.llvm.org/D23736 llvm-svn: 279564
2016-08-23Revert "(HEAD -> master, origin/master, origin/HEAD) CodeGen: Remove ↵Matthias Braun1-49/+5
MachineFunctionAnalysis => Enable (Machine)ModulePasses" Reverting while tracking down a use after free. This reverts commit r279502. llvm-svn: 279503
2016-08-23CodeGen: Remove MachineFunctionAnalysis => Enable (Machine)ModulePassesMatthias Braun1-5/+49
This patch removes the MachineFunctionAnalysis. Instead we keep a map from IR Function to MachineFunction in the MachineModuleInfo. This allows the insertion of ModulePasses into the codegen pipeline without breaking it because the MachineFunctionAnalysis gets dropped before a module pass. Peak memory should stay unchanged without a ModulePass in the codegen pipeline: Previously the MachineFunction was freed at the end of a codegen function pipeline because the MachineFunctionAnalysis was dropped; With this patch the MachineFunction is freed after the AsmPrinter has finished. Differential Revision: http://reviews.llvm.org/D23736 llvm-svn: 279502
2016-02-18Remove uses of builtin comma operator.Richard Trieu1-1/+2
Cleanup for upcoming Clang warning -Wcomma. No functionality change intended. llvm-svn: 261270
2015-12-02Move EH-specific helper functions to a more appropriate placeDavid Majnemer1-1/+1
No functionality change is intended. llvm-svn: 254562
2015-11-17[WinEH] Move WinEHFuncInfo from MachineModuleInfo to MachineFunctionReid Kleckner1-14/+1
Summary: Now that there is a one-to-one mapping from MachineFunction to WinEHFuncInfo, we don't need to use a DenseMap to select the right WinEHFuncInfo for the current funclet. The main challenge here is that X86WinEHStatePass is an IR pass that doesn't have access to the MachineFunction. I gave it its own WinEHFuncInfo object that it uses to calculate state numbers, which it then throws away. As long as nobody creates or removes EH pads between this pass and SDAG construction, we will get the same state numbers. The other thing X86WinEHStatePass does is to mark the EH registration node. Instead of communicating which alloca was the registration through WinEHFuncInfo, I added the llvm.x86.seh.ehregnode intrinsic. This intrinsic generates no code and simply marks the alloca in use. Reviewers: JCTremoulet Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D14668 llvm-svn: 253378
2015-10-10[WinEH] Remove more dead codeDavid Majnemer1-9/+1
wineh-parent is dead, so is ValueOrMBB. llvm-svn: 249920
2015-08-31[EH] Handle non-Function personalities like unknown personalitiesReid Kleckner1-56/+1
Also delete and simplify a lot of MachineModuleInfo code that used to be needed to handle personalities on landingpads. Now that the personality is on the LLVM Function, we no longer need to track it this way on MMI. Certainly it should not live on LandingPadInfo. llvm-svn: 246478
2015-08-27[WinEH] Add some support for code generating catchpadReid Kleckner1-0/+2
We can now run 32-bit programs with empty catch bodies. The next step is to change PEI so that we get funclet prologues and epilogues. llvm-svn: 246235
2015-08-03-Wdeprecated-clean: Fix cases of violating the rule of 5 in ways that are ↵David Blaikie1-1/+1
deprecated in C++11 Various value handles needed to be copy constructible and copy assignable (mostly for their use in DenseMap). But to avoid an API that might allow accidental slicing, make these members protected in the base class and make derived classes final (the special members become implicitly public there - but disallowing further derived classes that might be sliced to the intermediate type). Might be worth having a warning a bit like -Wnon-virtual-dtor that catches public move/copy assign/ctors in classes with virtual functions. (suppressable in the same way - by making them protected in the base, and making the derived classes final) Could be fancier and only diagnose them when they're actually called, potentially. Also allow a few default implementations where custom implementations (especially with non-standard return types) were implemented. llvm-svn: 243909
2015-07-14[CodeGen] Force emission of personality directive if explicitly specifiedKeno Fischer1-0/+3
Summary: Before this change, personality directives were not emitted if there was no invoke left in the function (of course until recently this also meant that we couldn't know what the personality actually was). This patch forces personality directives to still be emitted, unless it is known to be a noop in the absence of invokes, or the user explicitly specified `nounwind` (and not `uwtable`) on the function. Reviewers: majnemer, rnk Subscribers: rnk, llvm-commits Differential Revision: http://reviews.llvm.org/D10884 llvm-svn: 242185
2015-07-03Initialize booleans CallsUnwindInit and CallsEHReturn with false instead of 0.Yaron Keren1-4/+4
llvm-svn: 241324
2015-06-29[MMI] Use TinyPtrVector instead of PointerUnion with vector.Benjamin Kramer1-98/+21
Also simplify duplicated code a bit. No functionality change intended. llvm-svn: 240990
2015-06-23Revert r240137 (Fixed/added namespace ending comments using clang-tidy. NFC)Alexander Kornienko1-1/+1
Apparently, the style needs to be agreed upon first. llvm-svn: 240390
2015-06-19Fixed/added namespace ending comments using clang-tidy. NFCAlexander Kornienko1-1/+1
The patch is generated using this command: tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \ -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \ llvm/lib/ Thanks to Eugene Kosov for the original patch! llvm-svn: 240137
2015-06-11Remove MachineModuleInfo::UsedFunctions as it has no users.Pete Cooper1-17/+0
It hasn't been used since r130964. This also removes MachineModuleInfo::isUsedFunction and MachineModuleInfo::AnalyzeModule, both of which were only there to support UsedFunctions. llvm-svn: 239501
2015-05-29Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial typesBenjamin Kramer1-1/+1
If the type isn't trivially moveable emplace can skip a potentially expensive move. It also saves a couple of characters. Call sites were found with the ASTMatcher + some semi-automated cleanup. memberCallExpr( argumentCountIs(1), callee(methodDecl(hasName("push_back"))), on(hasType(recordDecl(has(namedDecl(hasName("emplace_back")))))), hasArgument(0, bindTemporaryExpr( hasType(recordDecl(hasNonTrivialDestructor())), has(constructExpr()))), unless(isInTemplateInstantiation())) No functional change intended. llvm-svn: 238602
2015-05-29[WinEH] Emit EH tables for __CxxFrameHandler3 on 32-bit x86Reid Kleckner1-0/+1
Small (really small!) C++ exception handling examples work on 32-bit x86 now. This change disables the use of .seh_* directives in WinException when CFI is not in use. It also uses absolute symbol references in the tables instead of imagerel32 relocations. Also fixes a cache invalidation bug in MMI personality classification. llvm-svn: 238575
2015-05-18MC: Clean up method names in MCContext.Jim Grosbach1-2/+2
The naming was a mish-mash of old and new style. Update to be consistent with the new. NFC. llvm-svn: 237594
2015-04-23Re-commit "[SEH] Remove the old __C_specific_handler code now that ↵Reid Kleckner1-8/+0
WinEHPrepare works" This reverts commit r235617. r235649 should have addressed the problems. llvm-svn: 235667
2015-04-23Revert "[SEH] Remove the old __C_specific_handler code now that WinEHPrepare ↵Reid Kleckner1-0/+8
works" We still have some "uses remain after removal" issues in -O0 builds. This reverts commit r235557. llvm-svn: 235617
2015-04-22[SEH] Remove the old __C_specific_handler code now that WinEHPrepare worksReid Kleckner1-8/+0
This removes the -sehprepare flag and makes __C_specific_handler functions always to use WinEHPrepare. This was tested by building all of chromium_builder_tests and running a few tests that use SEH, but if something breaks, we can revert this. llvm-svn: 235557
2015-04-21Re-land r235154-r235156 under the existing -sehprepare flagReid Kleckner1-0/+19
Keep the old SEH fan-in lowering on by default for now, since projects rely on it. This will make it easy to test this change with a simple flag flip. llvm-svn: 235399
2015-04-17Revert r235154-r235156, they cause asserts when building win64 code ↵Nico Weber1-16/+5
(http://crbug.com/477988) llvm-svn: 235170
2015-04-17[SEH] Reimplement x64 SEH using WinEHPrepareReid Kleckner1-5/+16
This now emits simple, unoptimized xdata tables for __C_specific_handler based on the handlers listed in @llvm.eh.actions calls produced by WinEHPrepare. This adds support for running __finally blocks when exceptions are thrown, and removes the old landingpad fan-in codepath. I ran some manual execution tests on small basic test cases with and without optimization, as well as on Chrome base_unittests, which uses a small amount of SEH. I'm sure there are bugs, and we may need to revert. llvm-svn: 235154
2015-04-15[WinEH] Try to make the MachineFunction CFG more accurateReid Kleckner1-2/+5
This avoids emitting code for unreachable landingpad blocks that contain calls to llvm.eh.actions and indirectbr. It's also a first step towards unifying the SEH and WinEH lowering codepaths. I'm keeping the old fan-in lowering of SEH around until the preparation version works well enough that we can switch over without breaking existing users. llvm-svn: 235037
2015-03-30[WinEH] Run cleanup handlers when an exception is thrownDavid Majnemer1-0/+22
Generate tables in the .xdata section representing what actions to take when an exception is thrown. This currently fills in state for cleanups, catch handlers are still unfinished. llvm-svn: 233636
2015-02-14Unify the two EH personality classification routines I wroteReid Kleckner1-10/+5
We only need one. llvm-svn: 229193
2015-01-23Classify functions by EH personality type rather than using the tripleReid Kleckner1-1/+16
This mostly reverts commit r222062 and replaces it with a new enum. At some point this enum will grow at least for other MSVC EH personalities. Also beefs up the way we were sniffing the personality function. Previously we would emit the Itanium LSDA despite using __C_specific_handler. Reviewers: majnemer Differential Revision: http://reviews.llvm.org/D6987 llvm-svn: 226920
2015-01-14Use MMI->getPersonality() instead of ↵Reid Kleckner1-2/+0
MMI->getPersonalities()[MMI->getPersonalityIndex()] Also nuke the comment about supporting multiple personalities in a single function, aka PR1414. That's just crazy. llvm-svn: 226052
2015-01-14CodeGen support for x86_64 SEH catch handlers in LLVMReid Kleckner1-0/+8
This adds handling for ExceptionHandling::MSVC, used by the x86_64-pc-windows-msvc triple. It assumes that filter functions have already been outlined in either the frontend or the backend. Filter functions are used in place of the landingpad catch clause type info operands. In catch clause order, the first filter to return true will catch the exception. The C specific handler table expects the landing pad to be split into one block per handler, but LLVM IR uses a single landing pad for all possible unwind actions. This patch papers over the mismatch by synthesizing single instruction BBs for every catch clause to fill in the EH selector that the landing pad block expects. Missing functionality: - Accessing data in the parent frame from outlined filters - Cleanups (from __finally) are unsupported, as they will require outlining and parent frame access - Filter clauses are unsupported, as there's no clear analogue in SEH In other words, this is the minimal set of changes needed to write IR to catch arbitrary exceptions and resume normal execution. Reviewers: majnemer Differential Revision: http://reviews.llvm.org/D6300 llvm-svn: 225904
2014-12-30x86_64: Fix calls to __morestack under the large code model.Peter Collingbourne1-1/+1
Under the large code model, we cannot assume that __morestack lives within 2^31 bytes of the call site, so we cannot use pc-relative addressing. We cannot perform the call via a temporary register, as the rax register may be used to store the static chain, and all other suitable registers may be either callee-save or used for parameter passing. We cannot use the stack at this point either because __morestack manipulates the stack directly. To avoid these issues, perform an indirect call via a read-only memory location containing the address. This solution is not perfect, as it assumes that the .rodata section is laid out within 2^31 bytes of each function body, but this seems to be sufficient for JIT. Differential Revision: http://reviews.llvm.org/D6787 llvm-svn: 225003
2014-11-14Allow the use of functions as typeinfo in landingpad clausesReid Kleckner1-3/+3
This is one step towards supporting SEH filter functions in LLVM. llvm-svn: 221954
2014-08-15Delete dead code. NFC.Rafael Espindola1-2/+0
llvm-svn: 215720
2014-04-14[C++11] More 'nullptr' conversion. In some cases just using a boolean check ↵Craig Topper1-20/+20
instead of comparing to nullptr. llvm-svn: 206142
2014-03-09MachineModuleInfo: Turn nested std::pairs into a proper struct.Benjamin Kramer1-1/+1
llvm-svn: 203414
2014-03-07[C++11] Add 'override' keyword to virtual methods that override their base ↵Craig Topper1-2/+2
class. llvm-svn: 203220
2013-06-18Use pointers to the MCAsmInfo and MCRegInfo.Bill Wendling1-3/+2
Someone may want to do something crazy, like replace these objects if they change or something. No functionality change intended. llvm-svn: 184175
2013-05-16Remove addFrameMove.Rafael Espindola1-33/+0
Now that we have good testing, remove addFrameMove and create cfi instructions directly. llvm-svn: 182052