- Aug 06, 2010
-
-
Jakob Stoklund Olesen authored
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
-
Owen Anderson authored
llvm-svn: 110410
-
Jakob Stoklund Olesen authored
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
-
Owen Anderson authored
ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
-
Jakob Stoklund Olesen authored
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
-
- Aug 05, 2010
-
-
Jakob Stoklund Olesen authored
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
-
- Jun 19, 2010
-
-
Evan Cheng authored
- 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
-
- May 18, 2010
-
-
Jakob Stoklund Olesen authored
The old approach was wrong. It had an off-by-one error. llvm-svn: 104034
-
- May 14, 2010
-
-
Jakob Stoklund Olesen authored
- 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
-
- Apr 15, 2010
-
-
Dan Gohman authored
llvm-svn: 101376
-
- Apr 13, 2010
-
-
Dan Gohman authored
MachineBasicBlock::livein_iterator a const_iterator, because clients shouldn't ever be using the iterator interface to mutate the livein set. llvm-svn: 101147
-
- Apr 08, 2010
-
-
Chris Lattner authored
llvm-svn: 100709
-
- Feb 09, 2010
-
-
Chris Lattner authored
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
-
- Jan 05, 2010
-
-
Jakob Stoklund Olesen authored
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
-
- Dec 22, 2009
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
ARM uses these to indicate predicates. llvm-svn: 91922
-
- Dec 05, 2009
-
-
Dan Gohman authored
MachineBasicBlock::canFallThrough(), which is target-independent and more thorough. llvm-svn: 90634
-
- Nov 20, 2009
-
-
Jakob Stoklund Olesen authored
Fix debug code that assumes getBasicBlock never returns NULL. llvm-svn: 89428
-
- Nov 18, 2009
-
-
Jakob Stoklund Olesen authored
Verify LiveVariables information when present. llvm-svn: 89241
-
- Nov 13, 2009
-
-
Jakob Stoklund Olesen authored
llvm-svn: 88706
-
Jakob Stoklund Olesen authored
llvm-svn: 88704
-
- Oct 31, 2009
-
-
Dan Gohman authored
- 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
-
- Oct 25, 2009
-
-
Nick Lewycky authored
VISIBILITY_HIDDEN removal. llvm-svn: 85043
-
Nick Lewycky authored
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
-
- Oct 07, 2009
-
-
Dan Gohman authored
llvm-svn: 83474
-
- Oct 04, 2009
-
-
Jakob Stoklund Olesen authored
llvm-svn: 83285
-
- Sep 23, 2009
-
-
Jakob Stoklund Olesen authored
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
-
- Sep 21, 2009
-
-
Jakob Stoklund Olesen authored
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
-
- Aug 27, 2009
-
-
Dan Gohman authored
tolerant of blocks that end with "unreachable". llvm-svn: 80270
-
Dan Gohman authored
do extra checking when it succeeds, as those are cases where CodeGen will be doing particularly interesting CFG modifications. llvm-svn: 80196
-
- Aug 23, 2009
-
-
Chris Lattner authored
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
-
Chris Lattner authored
upgrading a few things to use raw_ostream llvm-svn: 79811
-
Chris Lattner authored
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
-
Chris Lattner authored
llvm-svn: 79801
-
- Aug 13, 2009
-
-
Jakob Stoklund Olesen authored
So far these registers are simply tracked as if they were live-in. llvm-svn: 78912
-
- Aug 08, 2009
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
* 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
-
- Aug 04, 2009
-
-
Jakob Stoklund Olesen authored
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
-
- Aug 02, 2009
-
-
Jakob Stoklund Olesen authored
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
-
- Jul 31, 2009
-
-
Dan Gohman authored
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
-