aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/BranchFolding.cpp
Commit message (Collapse)AuthorAgeFilesLines
* rename TargetInstrDescriptor -> TargetInstrDesc.Chris Lattner2008-01-071-5/+5
| | | | | | | | Make MachineInstr::getDesc return a reference instead of a pointer, since it can never be null. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45695 91177308-0d34-0410-b5e6-96231b3b80d8
* Rename MachineInstr::getInstrDescriptor -> getDesc(), which reflectsChris Lattner2008-01-071-14/+11
| | | | | | | | | | | | | | | | | | that it is cheap and efficient to get. Move a variety of predicates from TargetInstrInfo into TargetInstrDescriptor, which makes it much easier to query a predicate when you don't have TII around. Now you can use MI->getDesc()->isBranch() instead of going through TII, and this is much more efficient anyway. Not all of the predicates have been moved over yet. Update old code that used MI->getInstrDescriptor()->Flags to use the new predicates in many places. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45674 91177308-0d34-0410-b5e6-96231b3b80d8
* rename isLoad -> isSimpleLoad due to evan's desire to have such a predicate.Chris Lattner2008-01-061-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45667 91177308-0d34-0410-b5e6-96231b3b80d8
* rename isStore -> mayStore to more accurately reflect what it captures.Chris Lattner2008-01-061-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45656 91177308-0d34-0410-b5e6-96231b3b80d8
* Add new shorter predicates for testing machine operands for various types: Chris Lattner2007-12-301-7/+5
| | | | | | | | | | | | | | e.g. MO.isMBB() instead of MO.isMachineBasicBlock(). I don't plan on switching everything over, so new clients should just start using the shorter names. Remove old long accessors, switching everything over to use the short accessor: getMachineBasicBlock() -> getMBB(), getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45464 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove attribution from file headers, per discussion on llvmdev.Chris Lattner2007-12-291-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45418 91177308-0d34-0410-b5e6-96231b3b80d8
* Improve branch folding by recgonizing that explict successor relationships ↵Christopher Lamb2007-12-101-0/+5
| | | | | | impact the value of fall-through choices. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44785 91177308-0d34-0410-b5e6-96231b3b80d8
* Changed XXX to FIXME, and added comment to the README fileBill Wendling2007-10-251-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43359 91177308-0d34-0410-b5e6-96231b3b80d8
* Added comment explaining why we are doing this check.Bill Wendling2007-10-251-0/+5
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43353 91177308-0d34-0410-b5e6-96231b3b80d8
* Don't branch fold inline asm statements.Bill Wendling2007-10-191-1/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43191 91177308-0d34-0410-b5e6-96231b3b80d8
* More explicit keywords.Dan Gohman2007-08-021-1/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40757 91177308-0d34-0410-b5e6-96231b3b80d8
* If assertions are not enabled, we should return False here.Duncan Sands2007-07-111-5/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38535 91177308-0d34-0410-b5e6-96231b3b80d8
* Make this work with GLIBCXX_DEBUG.David Greene2007-07-101-1/+8
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38516 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix misue of iterator pointing to erased object. Uncovered byDavid Greene2007-06-291-4/+5
| | | | | | | _GLIBCXX_DEBUG. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37793 91177308-0d34-0410-b5e6-96231b3b80d8
* Move CorrectExtraCFGEdges() from BranchFolding.cpp to a MachineBasicBlock ↵Evan Cheng2007-06-181-75/+4
| | | | | | method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37633 91177308-0d34-0410-b5e6-96231b3b80d8
* Make throttle a hidden parameter, per review.Dale Johannesen2007-06-081-6/+11
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37511 91177308-0d34-0410-b5e6-96231b3b80d8
* Throttle tail merging; handling blocks with large numbers of predecessorsDale Johannesen2007-06-081-2/+6
| | | | | | | is too slow. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37509 91177308-0d34-0410-b5e6-96231b3b80d8
* Tail merging wasn't working for predecessors of landing pads. PR 1496.Dale Johannesen2007-06-041-0/+22
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37427 91177308-0d34-0410-b5e6-96231b3b80d8
* Move ReplaceUsesOfBlockWith() out of BranchFolding into a MachineBasicBlock ↵Evan Cheng2007-06-041-40/+2
| | | | | | general facility. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37408 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix CorrectExtraCFGEdges to allow for multiple LandingPad targets.Dale Johannesen2007-06-021-9/+6
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37394 91177308-0d34-0410-b5e6-96231b3b80d8
* Implement smarter algorithm for choosing which blocks to tail-merge.Dale Johannesen2007-06-011-28/+43
| | | | | | | | | See test/CodeGen/X86/test-pic-jtbl.ll for a case where it works well; shaves another 10K off our favorite benchmark. I was hesitant about this because of compile speed, but seems to do OK on a bootstrap. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37392 91177308-0d34-0410-b5e6-96231b3b80d8
* Arrange for only 1 of multiple branches to landing pad to be kept.Dale Johannesen2007-05-311-4/+13
| | | | | | | Do not remove empty landing pads (EH table needs to be updated) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37375 91177308-0d34-0410-b5e6-96231b3b80d8
* Changed per review comment.Dale Johannesen2007-05-301-3/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37355 91177308-0d34-0410-b5e6-96231b3b80d8
* Make stable_sort in tail merging actually be stable (it never was, but didn'tDale Johannesen2007-05-291-1/+16
| | | | | | | matter until my last change). Reenable tail merging by default. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37354 91177308-0d34-0410-b5e6-96231b3b80d8
* Blocks that cond-br and uncond-br/fallthrough to same block should haveDale Johannesen2007-05-241-1/+4
| | | | | | | only one successor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37324 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix for PR1444: do not create two successors to the same block.Dale Johannesen2007-05-241-2/+10
| | | | | | | | Temporarily, this breaks CodeGen/Generic/2006-02-12-InsertLibraryCall.ll by exposing an unrelated latent problem; working on that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37323 91177308-0d34-0410-b5e6-96231b3b80d8
* Two tail merging improvements:Dale Johannesen2007-05-231-40/+44
| | | | | | | | | | When considering blocks with more than 2 predecessors, merge the block with the largest number of matching insns, rather than the first block found. Considering that 1 matching insn is enough to show a win for candidates that already end with a branch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37315 91177308-0d34-0410-b5e6-96231b3b80d8
* Make tail merging the default, except on powerPC. There was no prior artDale Johannesen2007-05-221-4/+13
| | | | | | | | for a target-dependent default with a command-line override; this way should be generally usable. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37285 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove some unneeded branches. (spotted by Evan, thanks)Dale Johannesen2007-05-181-0/+1
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37198 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove extra CFG edges before doing these passes; it makes them happier.Dale Johannesen2007-05-151-1/+16
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37089 91177308-0d34-0410-b5e6-96231b3b80d8
* Do not generate branches to entry block. This fixes several test suiteDale Johannesen2007-05-101-4/+19
| | | | | | | failures on PPC (can happen only when prologue code is null) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36979 91177308-0d34-0410-b5e6-96231b3b80d8
* Make tail merging handle many more cases (all it can, I think).Dale Johannesen2007-05-101-32/+91
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36966 91177308-0d34-0410-b5e6-96231b3b80d8
* Handle some non-exit blocks in tail merging.Dale Johannesen2007-05-071-11/+81
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36907 91177308-0d34-0410-b5e6-96231b3b80d8
* Drop 'const'Devang Patel2007-05-031-2/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36662 91177308-0d34-0410-b5e6-96231b3b80d8
* Use 'static const char' instead of 'static const int'.Devang Patel2007-05-021-2/+2
| | | | | | | | Due to darwin gcc bug, one version of darwin linker coalesces static const int, which defauts PassID based pass identification. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36652 91177308-0d34-0410-b5e6-96231b3b80d8
* Do not use typeinfo to identify pass in pass manager.Devang Patel2007-05-011-0/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36632 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix PR1228 and CodeGen/Generic/2007-04-30-LandingPadBranchFolding.llChris Lattner2007-04-301-2/+8
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36602 91177308-0d34-0410-b5e6-96231b3b80d8
* maintain LiveIn when splitting blocks (register scavenging needs it)Dale Johannesen2007-03-201-1/+22
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35226 91177308-0d34-0410-b5e6-96231b3b80d8
* Remove isAccessable.Jim Laskey2007-02-221-4/+4
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34497 91177308-0d34-0410-b5e6-96231b3b80d8
* Make branch folding behave in the presence of landing pads.Jim Laskey2007-02-211-25/+30
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34476 91177308-0d34-0410-b5e6-96231b3b80d8
* Fixes PR 1200Dale Johannesen2007-02-171-13/+29
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34359 91177308-0d34-0410-b5e6-96231b3b80d8
* Change the MachineDebugInfo to MachineModuleInfo to better reflect usageJim Laskey2007-01-261-6/+6
| | | | | | | for debugging and exception handling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33550 91177308-0d34-0410-b5e6-96231b3b80d8
* Make LABEL a builtin opcode.Jim Laskey2007-01-261-6/+2
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33537 91177308-0d34-0410-b5e6-96231b3b80d8
* Eliminate static ctors from StatisticsChris Lattner2006-12-191-3/+3
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32698 91177308-0d34-0410-b5e6-96231b3b80d8
* Detemplatize the Statistic class. The only type it is instantiated withChris Lattner2006-12-061-3/+3
| | | | | | | is 'unsigned'. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32279 91177308-0d34-0410-b5e6-96231b3b80d8
* Don't transform in another bad case: if the block is empty, it should beChris Lattner2006-11-181-1/+2
| | | | | | | simplified before we do this xform so that our cost model is accurate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31864 91177308-0d34-0410-b5e6-96231b3b80d8
* Fix another case we *don't* want to do this xform.Chris Lattner2006-11-181-2/+26
| | | | git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31861 91177308-0d34-0410-b5e6-96231b3b80d8
* make the previous change more aggressive, moving any block with no fallthrough.Chris Lattner2006-11-181-9/+11
| | | | | | | This speeds up yacr2 by 7% on a core2. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31856 91177308-0d34-0410-b5e6-96231b3b80d8
* Minor code layout tweak: if we have something like this:Chris Lattner2006-11-181-0/+50
| | | | | | | | | | | | | | | | if (cond) goto BB2 BB1: ... return; BB2: ... Move BB1 to the end of the function so that the code falls through in the non-return case. This has the effect of moving assert (and other no-return call) bodies and return blocks out of loops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31855 91177308-0d34-0410-b5e6-96231b3b80d8
* optimize single MBB loops better. In particular, produce:Chris Lattner2006-11-081-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LBB1_57: #bb207.i movl 72(%esp), %ecx movb (%ecx,%eax), %cl movl 80(%esp), %edx movb %cl, 1(%edx,%eax) incl %eax cmpl $143, %eax jne LBB1_57 #bb207.i jmp LBB1_64 #cond_next255.i intead of: LBB1_57: #bb207.i movl 72(%esp), %ecx movb (%ecx,%eax), %cl movl 80(%esp), %edx movb %cl, 1(%edx,%eax) incl %eax cmpl $143, %eax je LBB1_64 #cond_next255.i jmp LBB1_57 #bb207.i This eliminates a branch per iteration of the loop. This hurted PPC particularly, because the extra branch meant another dispatch group for each iteration of the loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31530 91177308-0d34-0410-b5e6-96231b3b80d8