summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/MachineVerifier.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Permit landing pad successor blocks when verifying basic blocks that end in anJakob Stoklund Olesen2010-10-211-5/+13
| | | | | | unconditional branch. llvm-svn: 117041
* Get rid of static constructors for pass registration. Instead, every pass ↵Owen Anderson2010-10-191-1/+3
| | | | | | | | | | | | | | | | | 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
* Now with fewer extraneous semicolons!Owen Anderson2010-10-071-1/+1
| | | | llvm-svn: 115996
* Skip unused registers when verifying LiveIntervals.Jakob Stoklund Olesen2010-10-061-0/+5
| | | | llvm-svn: 115874
* Stop using LiveRange in MachineVerifier.Jakob Stoklund Olesen2010-10-021-16/+15
| | | | llvm-svn: 115408
* Now that PassInfo and Pass::ID have been separated, move the rest of the ↵Owen Anderson2010-08-231-3/+2
| | | | | | passes over to the new registration API. llvm-svn: 111815
* Correct header.Bill Wendling2010-08-191-1/+1
| | | | llvm-svn: 111540
* Reapply r110396, with fixes to appease the Linux buildbot gods.Owen Anderson2010-08-061-1/+1
| | | | llvm-svn: 110460
* Add more verification of LiveIntervals.Jakob Stoklund Olesen2010-08-061-4/+58
| | | | llvm-svn: 110454
* Don't try to verify LiveIntervals for physical registers.Jakob Stoklund Olesen2010-08-061-8/+4
| | | | | | | | | When a physical register is in use, some alias of that register has a live interval with a relevant live range. That is the sad state of intervals after physreg coalescing of subregs, and it is good enough for correct register allocation. llvm-svn: 110452
* Revert r110396 to fix buildbots.Owen Anderson2010-08-061-1/+1
| | | | llvm-svn: 110410
* Don't verify LiveVariables if LiveIntervals is available.Jakob Stoklund Olesen2010-08-051-12/+13
| | | | | | | | LiveVariables becomes horribly wrong while the coalescer is running, but the analysis is not zapped until after the coalescer pass has run. This causes tons of false reports when calling verify form the coalescer. llvm-svn: 110402
* Don't use PassInfo* as a type identifier for passes. Instead, use the ↵Owen Anderson2010-08-051-1/+1
| | | | | | | | address of the static ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
* Add basic verification of LiveIntervals.Jakob Stoklund Olesen2010-08-051-0/+59
| | | | | | | | | | | | | | We verify that the LiveInterval is live at uses and defs, and that all instructions have a SlotIndex. Stuff we don't check yet: - Is the LiveInterval minimal? - Do all defs correspond to instructions or phis? - Do all defs dominate all their live ranges? - Are all live ranges continually reachable from their def? llvm-svn: 110386
* Remove double-def checking from MachineVerifier, so a register does not have toJakob Stoklund Olesen2010-08-051-76/+11
| | | | | | | | | | be killed before being redefined. These checks are usually disabled, and usually fail when enabled. We de facto allow live registers to be redefined without a kill, the corresponding assertions in RegScavenger were removed long ago. llvm-svn: 110362
* Allow ARM if-converter to be run after post allocation scheduling.Evan Cheng2010-06-181-1/+2
| | | | | | | | | | | | | | | | - This fixed a number of bugs in if-converter, tail merging, and post-allocation scheduler. If-converter now runs branch folding / tail merging first to maximize if-conversion opportunities. - Also changed the t2IT instruction slightly. It now defines the ITSTATE register which is read by instructions in the IT block. - Added Thumb2 specific hazard recognizer to ensure the scheduler doesn't change the instruction ordering in the IT block (since IT mask has been finalized). It also ensures no other instructions can be scheduled between instructions in the IT block. This is not yet enabled. llvm-svn: 106344
* Teach the machine code verifier to use getSubRegisterRegClass().Jakob Stoklund Olesen2010-05-181-2/+5
| | | | | | The old approach was wrong. It had an off-by-one error. llvm-svn: 104034
* When verifying two-address instructions, check the following:Jakob Stoklund Olesen2010-05-141-12/+16
| | | | | | | | | - Kill is implicit when use and def registers are identical. - Only virtual registers can differ. Add a -verify-fast-regalloc to run the verifier before the fast allocator. llvm-svn: 103797
* Fix a bunch of namespace polution.Dan Gohman2010-04-151-2/+2
| | | | llvm-svn: 101376
* Eliminate MachineBasicBlock::const_livein_iterator and makeDan Gohman2010-04-131-1/+1
| | | | | | | | MachineBasicBlock::livein_iterator a const_iterator, because clients shouldn't ever be using the iterator interface to mutate the livein set. llvm-svn: 101147
* rename llvm::llvm_report_error -> llvm::report_fatal_errorChris Lattner2010-04-071-1/+1
| | | | llvm-svn: 100709
* move target-independent opcodes out of TargetInstrInfoChris Lattner2010-02-091-6/+4
| | | | | | | | | into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase. llvm-svn: 95687
* Remove livein checks from machine code verifier.Jakob Stoklund Olesen2010-01-051-99/+13
| | | | | | | | | | | A phi operand that is implicitly defined in a predecessor becomes an undefined register after phi elimination. This causes a lot of false positives when the verifier is checking if live-in registers are live-out from all predecessors. Removing the verifier checks seems like a better solution than insisting on IMPLICIT_DEF instructions in predecessor blocks. llvm-svn: 92769
* Remove minimal CFG sanity checks from verifier.Jakob Stoklund Olesen2009-12-221-18/+0
| | | | | | | | | These checks would often trigger on unreachable statements inserted by bugpoint, leading it astray. It would be nice if we could distinguish unreachable blocks from errors. llvm-svn: 91923
* Allow explicit %reg0 operands beyond what the .td file describes.Jakob Stoklund Olesen2009-12-221-1/+2
| | | | | | ARM uses these to indicate predicates. llvm-svn: 91922
* Remove the target hook TargetInstrInfo::BlockHasNoFallThrough in favor ofDan Gohman2009-12-051-9/+0
| | | | | | | MachineBasicBlock::canFallThrough(), which is target-independent and more thorough. llvm-svn: 90634
* Add MachineBasicBlock::getName, and use it in place of getBasicBlock()->getName.Jakob Stoklund Olesen2009-11-201-1/+1
| | | | | | Fix debug code that assumes getBasicBlock never returns NULL. llvm-svn: 89428
* Allow the machine verifier to be run outside the PassManager.Jakob Stoklund Olesen2009-11-181-17/+160
| | | | | | Verify LiveVariables information when present. llvm-svn: 89241
* Add MachineFunction::verify() to call the machine code verifier directly.Jakob Stoklund Olesen2009-11-131-0/+4
| | | | llvm-svn: 88706
* Fix polarity of a CFG check in machine verifier.Jakob Stoklund Olesen2009-11-131-5/+14
| | | | llvm-svn: 88704
* Make -print-machineinstrs more readable.Dan Gohman2009-10-311-3/+3
| | | | | | | | | | | | | | - Be consistent when referring to MachineBasicBlocks: BB#0. - Be consistent when referring to virtual registers: %reg1024. - Be consistent when referring to unknown physical registers: %physreg10. - Be consistent when referring to known physical registers: %RAX - Be consistent when referring to register 0: %reg0 - Be consistent when printing alignments: align=16 - Print jump table contents. - Don't print host addresses, in general. - and various other cleanups. llvm-svn: 85682
* Remove includes of Support/Compiler.h that are no longer needed after theNick Lewycky2009-10-251-1/+0
| | | | | | VISIBILITY_HIDDEN removal. llvm-svn: 85043
* Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces.Nick Lewycky2009-10-251-1/+1
| | | | | | | Chris claims we should never have visibility_hidden inside any .cpp file but that's still not true even after this commit. llvm-svn: 85042
* Add a few simple MachineVerifier checks for MachineMemOperands.Dan Gohman2009-10-071-0/+10
| | | | llvm-svn: 83474
* Whitespace and formatting.Jakob Stoklund Olesen2009-10-041-42/+16
| | | | llvm-svn: 83285
* Fix verification of explicit operands.Jakob Stoklund Olesen2009-09-231-8/+11
| | | | | | | | | | The machine code verifier did not check for explicit operands correctly. It used MachineInstr::getNumExplicitOperands, but that method may cheat and use the declared count in the TargetInstrDesc. Now we check the explicit operands one at a time in visitMachineOperand. llvm-svn: 82652
* Verify that phi instructions refer to MBBs in the CFG.Jakob Stoklund Olesen2009-09-211-7/+8
| | | | | | | The machine code verifier no longer tolerates phi instructions with noop operands. All MBBs on a phi instruction must be in the CFG. llvm-svn: 82448
* Adjust the MachineBasicBlock verifier rules to be moreDan Gohman2009-08-271-11/+14
| | | | | | tolerant of blocks that end with "unreachable". llvm-svn: 80270
* Add some checks for MachineCFG consistency. Use AnalyzeBranch andDan Gohman2009-08-271-0/+133
| | | | | | | do extra checking when it succeeds, as those are cases where CodeGen will be doing particularly interesting CFG modifications. llvm-svn: 80196
* remove various std::ostream version of printing methods fromChris Lattner2009-08-231-1/+1
| | | | | | | | MachineInstr and MachineOperand. This required eliminating a bunch of stuff that was using DOUT, I hope that bill doesn't mind me stealing his fun. ;-) llvm-svn: 79813
* remove std::ostream versions of printing stuff for MBB and MF,Chris Lattner2009-08-231-3/+3
| | | | | | upgrading a few things to use raw_ostream llvm-svn: 79811
* Change raw_fd_ostream to take flags as an optional bitmask Chris Lattner2009-08-231-22/+19
| | | | | | | | | | | | | | | | instead of as two bools. Use this to add a F_Append flag which has the obvious behavior. Other unrelated changes conflated into this patch: 1. REmove EH stuff from llvm-dis and llvm-as, the try blocks are dead. 2. Simplify the filename inference code in llvm-as/llvm-dis, because raw_fd_ostream does the right thing with '-'. 3. Switch machine verifier to use raw_ostream instead of ostream (Which is the thing that needed append in the first place). llvm-svn: 79807
* remove some dead print method variants.Chris Lattner2009-08-231-4/+2
| | | | llvm-svn: 79801
* Use pristine register info in machine code verifier.Jakob Stoklund Olesen2009-08-131-0/+11
| | | | | | So far these registers are simply tracked as if they were live-in. llvm-svn: 78912
* Clean out per-function data after the machine code verifier is done with it.Jakob Stoklund Olesen2009-08-081-0/+8
| | | | | | | | | | | | | | | Also don't dereference old pointers after they have been deleted causing random crashes when enabling the machine code verifier. Ahem... I have not included a test case for the crash. It hapened when enabling the verifier on CodeGen/X86/2009-08-06-branchfolder-crash.ll. The crash depends on an MBB being allocated at the same address as a previously deleted MBB. I don't think that can be reproduced reliably. llvm-svn: 78472
* Update the machine code verifier to keep up with the scavenger.Jakob Stoklund Olesen2009-08-081-12/+22
| | | | | | | | | * Cleaner handling of <undef>. * <def> takes precedence over <def,dead>. * Implement the OK-to-redefine-a-register-that-was- live-in-but-has-not-been-used-before rule. llvm-svn: 78467
* Enforce stricter rules in machine code verifier.Jakob Stoklund Olesen2009-08-041-20/+15
| | | | | | | | | | | Implicit operands no longer get a free pass: Imp-use requires a live register and imp-def requires a dead register. There is also no special rule allowing redefinition of a sub-register when the super-register is live. The super register must have imp-kill+imp-def operands instead. llvm-svn: 78090
* Handle <undef> flag in machine code verifier.Jakob Stoklund Olesen2009-08-021-1/+2
| | | | | | Use of an <undef> register is treated like an <imp-use>. It is not an error to use a dead <undef> register. llvm-svn: 77890
* Reapply r77654 with a fix: MachineFunctionPass's getAnalysisUsageDan Gohman2009-07-311-0/+1
| | | | | | | | shouldn't do AU.setPreservesCFG(), because even though CodeGen passes don't modify the LLVM IR CFG, they may modify the MachineFunction CFG, and passes like MachineLoop are registered with isCFGOnly set to true. llvm-svn: 77691
* Revert r77654, it appears to be causing llvm-gcc bootstrap failures, and manyDaniel Dunbar2009-07-311-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | failures when building assorted projects with clang. --- Reverse-merging r77654 into '.': U include/llvm/CodeGen/Passes.h U include/llvm/CodeGen/MachineFunctionPass.h U include/llvm/CodeGen/MachineFunction.h U include/llvm/CodeGen/LazyLiveness.h U include/llvm/CodeGen/SelectionDAGISel.h D include/llvm/CodeGen/MachineFunctionAnalysis.h U include/llvm/Function.h U lib/Target/CellSPU/SPUISelDAGToDAG.cpp U lib/Target/PowerPC/PPCISelDAGToDAG.cpp U lib/CodeGen/LLVMTargetMachine.cpp U lib/CodeGen/MachineVerifier.cpp U lib/CodeGen/MachineFunction.cpp U lib/CodeGen/PrologEpilogInserter.cpp U lib/CodeGen/MachineLoopInfo.cpp U lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp D lib/CodeGen/MachineFunctionAnalysis.cpp D lib/CodeGen/MachineFunctionPass.cpp U lib/CodeGen/LiveVariables.cpp llvm-svn: 77661
OpenPOWER on IntegriCloud