| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bootstrapping. It's not safe to leave identity subreg_to_reg and insert_subreg
around.
- Relax register scavenging to allow use of partially "not-live" registers. It's
common for targets to operate on registers where the top bits are undef. e.g.
s0 =
d0 = insert_subreg d0<undef>, s0, 1
...
= d0
When the insert_subreg is eliminated by the coalescer, the scavenger used to
complain. The previous fix was to keep to insert_subreg around. But that's
brittle and it's overly conservative when we want to use the scavenger to
allocate registers. It's actually legal and desirable for other instructions
to use the "undef" part of d0. e.g.
s0 =
d0 = insert_subreg d0<undef>, s0, 1
...
s1 =
= s1
= d0
We probably need add a "partial-undef" marker on machine operand so the
machine verifier would not complain.
llvm-svn: 85091
|
| |
|
|
|
|
| |
passes delete them. This avoids register scavenger complain.
llvm-svn: 85045
|
| |
|
|
|
|
|
|
| |
used elsewhere - an exit block is a block outside the loop branched to
from within the loop. An exiting block is a block inside the loop that
branches out.
llvm-svn: 85019
|
| |
|
|
| |
llvm-svn: 84978
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
TargetInstrDesc::isRematerializable flag, so it isn't necessary to do
this check in its callers.
llvm-svn: 83671
|
| |
|
|
| |
llvm-svn: 83255
|
| |
|
|
| |
llvm-svn: 83254
|
| |
|
|
|
|
|
|
|
|
|
| |
physical registers. This is especially critical for the later two since they
start the live interval of a super-register. e.g.
%DO<def> = INSERT_SUBREG %D0<undef>, %S0<kill>, 1
If this instruction is eliminated, the register scavenger will not be happy as
D0 is not defined previously.
This fixes PR5055.
llvm-svn: 82968
|
| |
|
|
|
|
| |
kills. This also eliminate the horrible check which scan forward to the end of the basic block. It should be faster and more accurate.
llvm-svn: 82676
|
| |
|
|
| |
llvm-svn: 82610
|
| |
|
|
| |
llvm-svn: 82505
|
| |
|
|
|
|
|
|
|
|
| |
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: 82455
|
| |
|
|
| |
llvm-svn: 82355
|
| |
|
|
|
|
| |
liveness is being shortened, the sub-registers were not. The symptom is the register allocator could not find a free register for this particular test.
llvm-svn: 82108
|
| |
|
|
| |
llvm-svn: 81600
|
| |
|
|
|
|
| |
Make sure the sub-register class matches the register class of the remat'ed instruction definition register class.
llvm-svn: 81204
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 79842
|
| |
|
|
|
|
| |
update all code that this affects.
llvm-svn: 79830
|
| |
|
|
| |
llvm-svn: 79765
|
| |
|
|
|
|
| |
register interval, or the defining register for a stack interval. Access is via getCopy/setCopy and getReg/setReg.
llvm-svn: 78620
|
| |
|
|
|
|
| |
a def of the exact register rather than a super-register.
llvm-svn: 78376
|
| |
|
|
| |
llvm-svn: 78202
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
After coalescing reg1027's def and kill are both at the same point:
%reg1027,0.000000e+00 = [56,814:0) 0@70-(814)
bb5:
60 %reg1027<def> = t2MOVr %reg1027, 14, %reg0, %reg0
68 %reg1027<def> = t2LDRi12 %reg1027<kill>, 8, 14, %reg0
76 t2CMPzri %reg1038<kill,undef>, 0, 14, %reg0, %CPSR<imp-def>
84 %reg1027<def> = t2MOVr %reg1027, 14, %reg0, %reg0
96 t2Bcc mbb<bb5,0x2030910>, 1, %CPSR<kill>
Do not remove the kill marker on t2LDRi12.
llvm-svn: 78178
|
| |
|
|
|
|
| |
non-trivially coalesced copy, and the copy kills its source register. Trim the source register's live range to the last use if possible. This fixes up kill marker to make the scavenger happy.
llvm-svn: 77967
|
| |
|
|
| |
llvm-svn: 77754
|
| |
|
|
|
|
| |
now that TargetOperandInfo does the heavy lifting.
llvm-svn: 77508
|
| |
|
|
| |
llvm-svn: 77271
|
| |
|
|
|
|
|
|
|
|
| |
- Some clients which used DOUT have moved to DEBUG. We are deprecating the
"magic" DOUT behavior which avoided calling printing functions when the
statement was disabled. In addition to being unnecessary magic, it had the
downside of leaving code in -Asserts builds, and of hiding potentially
unnecessary computations.
llvm-svn: 77019
|
| |
|
|
| |
llvm-svn: 76775
|
| |
|
|
|
|
|
|
|
|
| |
range's weight properly. This is turned off right now in the sense that
you'll get an assert if you get into a situation that can only be caused
by an iterative coalescer. All other code paths operate exactly as
before so there is no functional change with this patch. The asserts
should be disabled if/when an iterative coalescer gets added to trunk.
llvm-svn: 76680
|
| |
|
|
| |
llvm-svn: 76519
|
| |
|
|
|
|
| |
resulting interval's register class.
llvm-svn: 76458
|
| |
|
|
| |
llvm-svn: 76282
|
| |
|
|
| |
llvm-svn: 76281
|
| |
|
|
| |
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
|
| |
|
|
|
|
| |
situations.
llvm-svn: 75838
|
| |
|
|
|
|
|
|
|
| |
This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").
llvm-svn: 75640
|
| |
|
|
|
|
|
|
| |
instruction definition. It may be mismatched due to sub-register coalescing.
No test case yet because the code doesn't trigger until 75408 is re-applied.
llvm-svn: 75572
|
| |
|
|
|
|
|
|
|
| |
Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.
llvm-svn: 75379
|
| |
|
|
|
|
| |
findCommutedOpIndices which returns the operand indices which are swapped (when applicable). This allows for some code clean up and future enhancements.
llvm-svn: 75264
|
| |
|
|
|
|
|
|
|
|
|
|
| |
as an (index,bool) pair. The bool flag records whether the kill is a
PHI kill or not. This code will be used to enable splitting of live
intervals containing PHI-kills.
A slight change to live interval weights introduced an extra spill
into lsr-code-insertion (outside the critical sections). The test
condition has been updated to reflect this.
llvm-svn: 75097
|
| |
|
|
|
|
|
|
| |
liveintervalanalysis and coalescer handling of implicit_def.
Note, isUndef marker must be placed even on implicit_def def operand or else the scavenger will not ignore it. This is necessary because -O0 path does not use liveintervalanalysis, it treats implicit_def just like any other def.
llvm-svn: 74601
|