aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineModuleInfo.cpp
AgeCommit message (Collapse)AuthorFilesLines
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
2013-05-13Remove the MachineMove class.Rafael Espindola1-1/+34
It was just a less powerful and more confusing version of MCCFIInstruction. A side effect is that, since MCCFIInstruction uses dwarf register numbers, calls to getDwarfRegNum are pushed out, which should allow further simplifications. I left the MachineModuleInfo::addFrameMove interface unchanged since this patch was already fairly big. llvm-svn: 181680
2013-04-22Clarify that llvm.used can contain aliases.Rafael Espindola1-2/+1
Also add a check for llvm.used in the verifier and simplify clients now that they can assume they have a ConstantArray. llvm-svn: 180019
2013-01-04small fixes to enable the reuse of the pass manager across multiple modulesPedro Artigas1-1/+3
llvm-svn: 171475
2013-01-02Move all of the header files which are involved in modelling the LLVM IRChandler Carruth1-4/+4
into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long standing point of file layout clutter in LLVM. There are still more header files to move here, but I wanted to handle them in separate commits to make tracking what files make sense at each layer easier. The only really questionable files here are the target intrinsic tablegen files. But that's a battle I'd rather not fight today. I've updated both CMake and Makefile build systems (I think, and my tests think, but I may have missed something). I've also re-sorted the includes throughout the project. I'll be committing updates to Clang, DragonEgg, and Polly momentarily. llvm-svn: 171366
2012-12-12Make the MCStreamer have a reset method and call that after finalization of ↵Pedro Artigas1-3/+1
the asm printer, also changed MCContext to a single reset only method for simplicity as requested on the list llvm-svn: 170041
2012-12-06fixed valgrind issues of prior commit, this change applies r169456 changes ↵Pedro Artigas1-1/+6
back to the tree with fixes. on darwin no valgrind issues exist in the tests that used to fail. original change description: change MCContext to work on the doInitialization/doFinalization model reviewed by Evan Cheng <evan.cheng@apple.com> llvm-svn: 169553
2012-12-06Revert r169456, "change MCContext to work on the ↵NAKAMURA Takumi1-5/+0
doInitialization/doFinalization model" It broke many builders. llvm-svn: 169462
2012-12-06change MCContext to work on the doInitialization/doFinalization modelPedro Artigas1-0/+5
reviewed by Evan Cheng <evan.cheng@apple.com> llvm-svn: 169456
2012-12-05- Added calls to doInitialization/doFinalization to immutable passesPedro Artigas1-10/+23
- fixed ordering of calls to doFinalization to be the reverse of the pass run order due to potential dependencies - fixed machine module info to operate in the doInitialization/doFinalization model, also fixes some FIXMEs reviewed by Evan Cheng <evan.cheng@apple.com> llvm-svn: 169391
2012-12-03moves doInitialization and doFinalization to the Pass class and removes some ↵Pedro Artigas1-15/+0
unreachable code in MachineModuleInfo reviewed by Evan Cheng <evan.cheng@apple.com> llvm-svn: 169164
2012-12-03Use the new script to sort the includes of every file under lib.Chandler Carruth1-7/+6
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented. Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =] llvm-svn: 169131
2012-10-08Move TargetData to DataLayout.Micah Villmow1-1/+1
llvm-svn: 165402
2012-02-22Properly emit _fltused with FastISel. Refactor to share code with SDAG.Michael J. Spencer1-1/+1
Patch by Joe Groff! llvm-svn: 151183
2012-02-14Turn push_back loops into append/insert.Benjamin Kramer1-4/+2
llvm-svn: 150471
2012-02-13Don't recalculate the size of the vector each time through the loop.Bill Wendling1-2/+2
llvm-svn: 150436
2012-02-05Convert assert(0) to llvm_unreachableCraig Topper1-3/+3
llvm-svn: 149816
2011-10-05Add an ivar that maps a landing pad's EH symbol to the call sites that may jumpBill Wendling1-0/+8
to the landing pad. This will be used by the back-end to generate the jump tables for dispatching the arriving longjmp in sjlj eh. llvm-svn: 141224
2011-07-28Use ArrayRef instead of requiring an std::vector.Bill Wendling1-4/+6
llvm-svn: 136396
2011-07-20Goodbye TargetAsmInfo. This eliminate last bit of CodeGen and Target in llvm-mc.Evan Cheng1-5/+3
There is still a bit more refactoring left to do in Targets. But we are now very close to fixing all the layering issues in MC. llvm-svn: 135611
2011-07-20Add MCObjectFileInfo and sink the MCSections initialization code fromEvan Cheng1-5/+6
TargetLoweringObjectFileImpl down to MCObjectFileInfo. TargetAsmInfo is done to one last method. It's *almost* gone! llvm-svn: 135569
2011-07-19Rename CompactEncoding to CompactUnwindEncoding.Bill Wendling1-2/+2
llvm-svn: 135448
2011-07-18Move the compact encoding from the target-specific library to the code-genBill Wendling1-3/+4
library. llvm-svn: 135443
2011-07-18Sink getDwarfRegNum, getLLVMRegNum, getSEHRegNum from TargetRegisterInfo downEvan Cheng1-2/+3
to MCRegisterInfo. Also initialize the mapping at construction time. This patch eliminate TargetRegisterInfo from TargetAsmInfo. It's another step towards fixing the layering violation. llvm-svn: 135424
2010-12-10Fixed version of 121434 with no new memory leaks.Rafael Espindola1-3/+4
llvm-svn: 121471
2010-12-10Revert my previous patch to make the valgrind bots happy.Rafael Espindola1-4/+3
llvm-svn: 121461
2010-12-09Initial support for the cfi directives. This is just enough to getRafael Espindola1-3/+4
f: .cfi_startproc nop .cfi_endproc assembled (on ELF). llvm-svn: 121434
2010-10-21CodeGen-Windows: Only emit _fltused if a VarArg function is called with ↵Michael J. Spencer1-1/+1
floating point args. This should be the minimum set of functions that could possibly need it. llvm-svn: 116978
2010-10-19Get rid of static constructors for pass registration. Instead, every pass ↵Owen Anderson1-0/+1
exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. llvm-svn: 116820
2010-10-16X86-Windows: Emit an undefined global __fltused symbol when targeting WindowsMichael J. Spencer1-1/+2
if any floating point arguments are passed to an external function. llvm-svn: 116665
2010-10-16Whitespace!Michael J. Spencer1-23/+23
llvm-svn: 116664
2010-10-07Now with fewer extraneous semicolons!Owen Anderson1-1/+1
llvm-svn: 115996
2010-09-04zap dead code.Chris Lattner1-17/+0
llvm-svn: 113073
2010-08-06Reapply r110396, with fixes to appease the Linux buildbot gods.Owen Anderson1-2/+2
llvm-svn: 110460
2010-08-06Revert r110396 to fix buildbots.Owen Anderson1-2/+2
llvm-svn: 110410
2010-08-05Don't use PassInfo* as a type identifier for passes. Instead, use the ↵Owen Anderson1-2/+2
address of the static ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
2010-07-21Fix batch of converting RegisterPass<> to INTIALIZE_PASS().Owen Anderson1-2/+2
llvm-svn: 109045
2010-07-16Revert r108369, sorting llvm.dbg.declare information by source position,Dan Gohman1-7/+0
since it doesn't work for front-ends which don't emit column information (which includes llvm-gcc in its present configuration), and doesn't work for clang for K&R style variables where the variables are declared in a different order from the parameter list. Instead, make a separate pass through the instructions to collect the llvm.dbg.declare instructions in order. This ensures that the debug information for variables is emitted in this order. llvm-svn: 108538
2010-07-14Make the order in which variables are described in debug informationDan Gohman1-0/+23
independent of the order that isel happens to visit the dbg_declare intrinsics. This fixes a bug in which the formal arguments were being printed in reverse order, now that fast isel is going bottom up. llvm-svn: 108369