| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
half of PR8813.
llvm-svn: 122205
|
| |
|
|
|
|
| |
ConnectedVNInfoEqClasses::Classify().
llvm-svn: 122202
|
| |
|
|
| |
llvm-svn: 122199
|
| |
|
|
| |
llvm-svn: 122197
|
| |
|
|
| |
llvm-svn: 122193
|
| |
|
|
|
|
|
| |
enough to teach it that ADDE(0,0) is known 0 except the
low bit, for example.
llvm-svn: 122191
|
| |
|
|
|
|
|
|
|
|
|
| |
alternative register allocator that does not require LiveIntervals by specifying
it on the command-line for a target that has StrongPHIElimination enabled by
default.
These checks are pretty meaningless anyways, since StrongPHIElimination and
PHIElimination are never used at the same time.
llvm-svn: 122176
|
| |
|
|
|
|
|
| |
isel is *required* to split the edge. PHI values get evaluated
on the edge, not in their predecessor block.
llvm-svn: 122170
|
| |
|
|
| |
llvm-svn: 122135
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
use before rematerializing the load.
This allows us to produce:
addps LCPI0_1(%rip), %xmm2
Instead of:
movaps LCPI0_1(%rip), %xmm3
addps %xmm3, %xmm2
Saving a register and an instruction. The standard spiller already knows how to
do this.
llvm-svn: 122133
|
| |
|
|
| |
llvm-svn: 122132
|
| |
|
|
|
|
|
|
|
| |
the loop predecessors.
The register can be live-out from a predecessor without being live-in to the
loop header if there is a critical edge from the predecessor.
llvm-svn: 122123
|
| |
|
|
|
|
| |
lib/CodeGen/RegAllocGreedy.cpp:311: error: unused variable 'PhysReg' [-Wunused-variable]
llvm-svn: 122122
|
| |
|
|
|
|
|
|
| |
createMachineVerifierPass and MachineFunction::verify.
The banner is printed before the machine code dump, just like the printer pass.
llvm-svn: 122113
|
| |
|
|
|
|
| |
interference.
llvm-svn: 122108
|
| |
|
|
|
|
|
|
| |
RegAllocBase::VerifyEnabled.
Run the machine code verifier in a few interesting places during RegAllocGreedy.
llvm-svn: 122107
|
| |
|
|
|
|
|
| |
The heuristics split around the largest loop where the current register may be
allocated without interference.
llvm-svn: 122106
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
may be called. If the entry block is empty, the insertion point iterator will be
the "end()" value. Calling ->getParent() on it (among others) causes problems.
Modify materializeFrameBaseRegister to take the machine basic block and insert
the frame base register at the beginning of that block. (It's very similar to
what the code does all ready. The only difference is that it will always insert
at the beginning of the entry block instead of after a previous materialization
of the frame base register. I doubt that that matters here.)
<rdar://problem/8782198>
llvm-svn: 122104
|
| |
|
|
|
|
|
| |
BUILD_VECTOR operands where the element type is not legal. I had previously
changed this code to insert TRUNCATE operations, but that was just wrong.
llvm-svn: 122102
|
| |
|
|
|
|
|
| |
code for the case where 32-bit divide by constant is
turned into 64-bit multiply by constant. 8771012.
llvm-svn: 122090
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
the operand uses the same register as a tied operand:
%r1 = add %r1, %r1
If add were a three-address instruction, kill flags would be required on at
least one of the uses. Since it is a two-address instruction, the tied use
operand must not have a kill flag.
This change makes the kill flag on the untied use operand optional.
llvm-svn: 122082
|
| |
|
|
| |
llvm-svn: 122073
|
| |
|
|
|
|
|
|
| |
This is a three-way interval list intersection between a virtual register, a
live interval union, and a loop. It will be used to identify interference-free
loops for live range splitting.
llvm-svn: 122034
|
| |
|
|
|
|
| |
Radar 8776599
llvm-svn: 122018
|
| |
|
|
| |
llvm-svn: 122016
|
| |
|
|
|
|
| |
- Treaty talks on the non-proliferation of MC objects broke down.
llvm-svn: 121949
|
| |
|
|
|
|
|
|
| |
live range splitting around loops guided by register pressure.
So far, trySplit() simply prints a lot of debug output.
llvm-svn: 121918
|
| |
|
|
|
|
|
|
| |
A MachineLoopRange contains the intervals of slot indexes covered by the blocks
in a loop. This representation of the loop blocks is more efficient to compare
against interfering registers during register coalescing.
llvm-svn: 121917
|
| |
|
|
| |
llvm-svn: 121903
|
| |
|
|
|
|
|
| |
function so that it can live in Analysis instead of
VMCore.
llvm-svn: 121885
|
| |
|
|
| |
llvm-svn: 121872
|
| |
|
|
|
|
|
|
| |
Bypass loops have the current live range live through, but contain no uses or
defs. Splitting around a bypass loop can free registers for other uses inside
the loop by spilling the split range.
llvm-svn: 121871
|
| |
|
|
|
|
|
| |
This method returns the set of loops with uses that are candidates for
splitting.
llvm-svn: 121870
|
| |
|
|
|
|
| |
a wider mul if the wider mul is legal.
llvm-svn: 121848
|
| |
|
|
|
|
| |
result, the top bits are truncated off anyway, just use SRL.
llvm-svn: 121846
|
| |
|
|
| |
llvm-svn: 121807
|
| |
|
|
| |
llvm-svn: 121806
|
| |
|
|
| |
llvm-svn: 121805
|
| |
|
|
| |
llvm-svn: 121801
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
regB = move RCX
regA = op regB, regC
RAX = move regA
where both regB and regC are killed. If regB is constrainted to non-compatible
physical registers but regC is not constrainted at all, then it's better to
commute the instruction.
movl %edi, %eax
shlq $32, %rcx
leaq (%rcx,%rax), %rax
=>
movl %edi, %eax
shlq $32, %rcx
orq %rcx, %rax
rdar://8762995
llvm-svn: 121793
|
| |
|
|
|
|
| |
warning in the opt build.
llvm-svn: 121791
|
| |
|
|
| |
llvm-svn: 121783
|
| |
|
|
|
|
| |
LiveIntervalUnions.
llvm-svn: 121781
|
| |
|
|
| |
llvm-svn: 121774
|
| |
|
|
| |
llvm-svn: 121741
|
| |
|
|
|
|
|
|
| |
spill weight. Filter out fixed registers instead.
Add support for reassigning an interference that was assigned to an alias.
llvm-svn: 121737
|
| |
|
|
| |
llvm-svn: 121736
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when the wider type is legal. This allows us to compile:
define zeroext i16 @test1(i16 zeroext %x) nounwind {
entry:
%div = udiv i16 %x, 33
ret i16 %div
}
into:
test1: # @test1
movzwl 4(%esp), %eax
imull $63551, %eax, %eax # imm = 0xF83F
shrl $21, %eax
ret
instead of:
test1: # @test1
movw $-1985, %ax # imm = 0xFFFFFFFFFFFFF83F
mulw 4(%esp)
andl $65504, %edx # imm = 0xFFE0
movl %edx, %eax
shrl $5, %eax
ret
Implementing rdar://8760399 and example #4 from:
http://blog.regehr.org/archives/320
We should implement the same thing for [su]mul_hilo, but I don't
have immediate plans to do this.
llvm-svn: 121696
|
| |
|
|
|
|
|
|
|
|
|
| |
for each constant pool entry. Using WriteTypeSymbolic here takes time
proportional to the size of the module, for each constant pool entry.
This speeds up -verbose-asm llc on 252.eon (a random testcase at my disposal)
from 4.4s to 2.137s. llc takes 2.11s with asm-verbose off, so this is now a
pretty reasonable cost for verbose comments.
llvm-svn: 121691
|
| |
|
|
| |
llvm-svn: 121662
|