21 Commits

Author SHA1 Message Date
Dan Gohman
779c69bbc5 Add a DebugLoc argument to TargetInstrInfo::copyRegToReg, so that it
doesn't have to guess.

llvm-svn: 103194
2010-05-06 20:33:48 +00:00
Devang Patel
a0bb715977 Ignore debug value instructions while analyzing BB for tail duplication.
llvm-svn: 98675
2010-03-16 21:02:07 +00:00
Chris Lattner
07293da97e eliminate InvalidateLabel and LabelIDList from MMI and replace
them with a counter.

llvm-svn: 98462
2010-03-14 02:24:55 +00:00
Jakob Stoklund Olesen
75521cab3e Reuse operand location when updating PHI instructions.
Calling RemoveOperand is very expensive on huge PHI instructions. This makes
early tail duplication run twice as fast on the Firefox JavaScript
interpreter.

llvm-svn: 95832
2010-02-11 00:34:33 +00:00
Chris Lattner
b06015aa69 move target-independent opcodes out of TargetInstrInfo
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
2010-02-09 19:54:29 +00:00
Bob Wilson
97598f0cba Treat indirect branches specially only during pre-regalloc tail duplication,
not during the later post-alloc tail duplication.

llvm-svn: 93600
2010-01-16 00:42:25 +00:00
Jakob Stoklund Olesen
73ef9556dd Simplify logic. Any functional change is unintended.
llvm-svn: 93540
2010-01-15 19:59:57 +00:00
Bob Wilson
1a234c0aee Change pre-regalloc tail duplication to only duplicate indirect branch blocks.
The pre-regalloc pass caused some regressions in both compile time and
performance of the generated code, and it did not improve performance, except
for indirect branches.  I also moved the check for single-block loops to speed
up the common case when running the taildup pass before reg allocation.

llvm-svn: 93505
2010-01-15 06:29:17 +00:00
Jakob Stoklund Olesen
29a64c9575 Add Target hook to duplicate machine instructions.
Some instructions refer to unique labels, and so cannot be trivially cloned
with CloneMachineInstr.

llvm-svn: 92873
2010-01-06 23:47:07 +00:00
David Greene
85afc853b5 Change errs() to dbgs().
llvm-svn: 92582
2010-01-05 01:25:15 +00:00
Evan Cheng
45430bbfaa Tail duplication should zap a copy it inserted for SSA update if the copy is the only use of its source.
llvm-svn: 91390
2009-12-15 01:44:10 +00:00
Evan Cheng
d9cb324d7c Delete code accidentally left behind.
llvm-svn: 90804
2009-12-07 21:19:33 +00:00
Evan Cheng
cc77062194 Pre-regalloc tale duplication. Work in progress.
llvm-svn: 90759
2009-12-07 10:15:19 +00:00
Evan Cheng
9e67255748 Handle recursive PHI's.
llvm-svn: 90575
2009-12-04 19:09:10 +00:00
Evan Cheng
6154dbd5ee Add a pre-regalloc tail duplication pass.
llvm-svn: 90567
2009-12-04 09:42:45 +00:00
Evan Cheng
1bbe6be037 Teach tail duplication to update SSA form. Work in progress.
llvm-svn: 90432
2009-12-03 08:43:53 +00:00
Bob Wilson
fffbc0c5d9 Don't count PHI instructions toward the limit for tail duplicating a block.
llvm-svn: 90326
2009-12-02 17:15:24 +00:00
Bob Wilson
598f8ff9e5 Reprioritize tests for tail duplication to be aggressive about indirect
branches even when optimizing for code size.  Unless we find evidence to the
contrary in the future, the special treatment for indirect branches does not
have a significant effect on code size, and performance still matters with -Os.

llvm-svn: 90147
2009-11-30 18:56:45 +00:00
Bob Wilson
505ddaa4dc Remove isProfitableToDuplicateIndirectBranch target hook. It is profitable
for all the processors where I have tried it, and even when it might not help
performance, the cost is quite low.  The opportunities for duplicating
indirect branches are limited by other factors so code size does not change
much due to tail duplicating indirect branches aggressively.

llvm-svn: 90144
2009-11-30 18:35:03 +00:00
Bob Wilson
9594db5693 Rename new TailDuplicationPass to avoid name conflict with the old one.
llvm-svn: 89968
2009-11-26 21:38:41 +00:00
Bob Wilson
2d4ff12da9 Split tail duplication into a separate pass. This is needed to avoid
running tail duplication when doing branch folding for if-conversion, and
we also want to be able to run tail duplication earlier to fix some
reg alloc problems.  Move the CanFallThrough function from BranchFolding
to MachineBasicBlock so that it can be shared by TailDuplication.

llvm-svn: 89904
2009-11-26 00:32:21 +00:00