| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
interval.
llvm-svn: 85599
|
| |
|
|
| |
llvm-svn: 85514
|
| |
|
|
|
|
|
|
| |
--- Reverse-merging r85338 into '.':
U lib/CodeGen/SimpleRegisterCoalescing.cpp
U lib/CodeGen/SimpleRegisterCoalescing.h
llvm-svn: 85454
|
| |
|
|
|
|
| |
despite a real interference. This fixes rdar://problem/7157961.
llvm-svn: 85338
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
is trivially rematerializable and integrate it into
TargetInstrInfo::isTriviallyReMaterializable. This way, all places that
need to know whether an instruction is rematerializable will get the
same answer.
This enables the useful parts of the aggressive-remat option by
default -- using AliasAnalysis to determine whether a memory location
is invariant, and removes the questionable parts -- rematting operations
with virtual register inputs that may not be live everywhere.
llvm-svn: 83687
|
| |
|
|
| |
llvm-svn: 83254
|
| |
|
|
|
|
|
|
|
|
| |
variable increment / decrement slighter high priority.
This has major impact on some micro-benchmarks. On MultiSource/Applications
and spec tests, it's a minor win. It also reduce 256.bzip instruction count
by 8%, 55 on 164.gzip on i386 / Darwin.
llvm-svn: 82485
|
| |
|
|
| |
llvm-svn: 81600
|
| |
|
|
|
|
|
|
| |
a new class, MachineInstrIndex, which hides arithmetic details from
most clients. This is a step towards allowing the register allocator
to update/insert code during allocation.
llvm-svn: 81040
|
| |
|
|
|
|
| |
update all code that this affects.
llvm-svn: 79830
|
| |
|
|
| |
llvm-svn: 76239
|
| |
|
|
|
|
| |
LiveIntervals::processImplicitDefs a little more aggressive and teaching liveintervals to make use of isUndef marker on MachineOperands.
llvm-svn: 76223
|
| |
|
|
|
|
|
|
| |
rematerialized instructions.
Avoid remat'ing instructions whose def have sub-register indices for now. It's just really really hard to get all the cases right.
llvm-svn: 75900
|
| |
|
|
| |
llvm-svn: 73479
|
| |
|
|
|
|
| |
trivial rewriter.
llvm-svn: 72729
|
| |
|
|
|
|
|
|
| |
with a physical one. More specifically, it avoid tying a virtual register in the loop with a physical register defined / used outside the loop. When it determines it's not profitable, it will use the physical register as the allocation preference instead.
This is *not* turned on by default. Testing indicates this is just as likely to pessimize code. The main issue seems to be allocation preference doesn't work effectively. That will change once I've taught register allocator "swapping".
llvm-svn: 70503
|
| |
|
|
|
|
| |
the copy kills the source register. This fixes uint64tof64.ll after ARM::MOVi is marked as isAsCheapAsAMove.
llvm-svn: 63853
|
| |
|
|
| |
llvm-svn: 62832
|
| |
|
|
| |
llvm-svn: 62573
|
| |
|
|
| |
llvm-svn: 61715
|
| |
|
|
| |
llvm-svn: 58294
|
| |
|
|
| |
llvm-svn: 56352
|
| |
|
|
|
|
|
|
|
|
|
| |
would create illegal extract_subreg. e.g.
vr1024 = extract_subreg vr1025, 1
...
vr1024 = mov8rr AH
If vr1024 is coalesced with AH, the extract_subreg is now illegal since AH does not have a super-reg whose sub-register 1 is AH.
llvm-svn: 56118
|
| |
|
|
| |
llvm-svn: 55779
|
| |
|
|
|
|
| |
the implicit defs onto the remat'ed instruction.
llvm-svn: 55564
|
| |
|
|
|
|
| |
Benchmarks/sim/sim, and others on x86-64.
llvm-svn: 55475
|
| |
|
|
|
|
| |
Re-materialize the src to replace the copy.
llvm-svn: 55467
|
| |
|
|
|
|
|
|
|
| |
forgot
to multiply the instruction count by a constant factor in a few places, which
caused the register allocator to require many more iterations.
llvm-svn: 53959
|
| |
|
|
|
|
|
| |
live intervals itself to use an instruction count approximation that is
not affected by inserting empty indices.
llvm-svn: 53937
|
| |
|
|
|
|
| |
X86::MOV16to16_.
llvm-svn: 52480
|
| |
|
|
|
|
| |
iterators.
llvm-svn: 51790
|
| |
|
|
| |
llvm-svn: 49810
|
| |
|
|
| |
llvm-svn: 49469
|
| |
|
|
|
|
|
|
| |
implicit_def.
- Added insert_subreg coalescing support.
llvm-svn: 49448
|
| |
|
|
|
|
| |
- Be smarter about coalescing copies from implicit_def.
llvm-svn: 49168
|
| |
|
|
|
|
| |
coalesced. This remove some ugly spaghetti code and fixed a number of subtle bugs.
llvm-svn: 48490
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the source is defined; BLR is the live range which is defined by the copy.
If ALR and BLR overlaps and end of BLR extends beyond end of ALR, e.g.
A = or A, B
...
B = A
...
C = A<kill>
...
= B
then do not add kills of A to the newly created B interval.
- Also fix some kill info update bug.
llvm-svn: 48141
|
| |
|
|
| |
llvm-svn: 47966
|
| |
|
|
|
|
| |
findRegisterUseOperandIdx, findRegisterDefOperandIndx. Fix some naming inconsistencies.
llvm-svn: 47927
|
| |
|
|
|
|
| |
instructions will be deleted. Doh.
llvm-svn: 47749
|
| |
|
|
|
|
| |
instruction.
llvm-svn: 47208
|
| |
|
|
|
|
|
| |
register defs and uses after each successful coalescing.
- Also removed a number of hacks and fixed some subtle kill information bugs.
llvm-svn: 47167
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PR1877.
A3 = op A2 B0<kill>
...
B1 = A3 <- this copy
...
= op A3 <- more uses
==>
B2 = op B0 A2<kill>
...
B1 = B2 <- now an identify copy
...
= op B2 <- more uses
This speeds up FreeBench/neural by 29%, Olden/bh by 12%, oopack_v1p8 by 53%.
llvm-svn: 47046
|
| |
|
|
| |
llvm-svn: 46930
|
| |
|
|
| |
llvm-svn: 45418
|
| |
|
|
| |
llvm-svn: 45034
|
| |
|
|
| |
llvm-svn: 44838
|
| |
|
|
| |
llvm-svn: 43764
|
|
|
register coalescer interface: RegisterCoalescing.
llvm-svn: 43714
|