- Dec 18, 2010
-
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
llvm-svn: 122132
-
Jakob Stoklund Olesen authored
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
-
Nick Lewycky authored
lib/CodeGen/RegAllocGreedy.cpp:311: error: unused variable 'PhysReg' [-Wunused-variable] llvm-svn: 122122
-
Jakob Stoklund Olesen authored
createMachineVerifierPass and MachineFunction::verify. The banner is printed before the machine code dump, just like the printer pass. llvm-svn: 122113
-
Jakob Stoklund Olesen authored
interference. llvm-svn: 122108
-
Jakob Stoklund Olesen authored
RegAllocBase::VerifyEnabled. Run the machine code verifier in a few interesting places during RegAllocGreedy. llvm-svn: 122107
-
Jakob Stoklund Olesen authored
The heuristics split around the largest loop where the current register may be allocated without interference. llvm-svn: 122106
-
Bill Wendling authored
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
-
Bob Wilson authored
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
-
- Dec 17, 2010
-
-
Dale Johannesen authored
code for the case where 32-bit divide by constant is turned into 64-bit multiply by constant. 8771012. llvm-svn: 122090
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
llvm-svn: 122073
-
Jakob Stoklund Olesen authored
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
-
Bob Wilson authored
Radar 8776599 llvm-svn: 122018
-
Bob Wilson authored
llvm-svn: 122016
-
- Dec 16, 2010
-
-
Daniel Dunbar authored
- Treaty talks on the non-proliferation of MC objects broke down. llvm-svn: 121949
-
Jakob Stoklund Olesen authored
live range splitting around loops guided by register pressure. So far, trySplit() simply prints a lot of debug output. llvm-svn: 121918
-
Jakob Stoklund Olesen authored
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
-
- Dec 15, 2010
-
-
Evan Cheng authored
llvm-svn: 121903
-
Dan Gohman authored
function so that it can live in Analysis instead of VMCore. llvm-svn: 121885
-
Jakob Stoklund Olesen authored
llvm-svn: 121872
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
This method returns the set of loops with uses that are candidates for splitting. llvm-svn: 121870
-
Chris Lattner authored
a wider mul if the wider mul is legal. llvm-svn: 121848
-
Chris Lattner authored
result, the top bits are truncated off anyway, just use SRL. llvm-svn: 121846
-
Jakob Stoklund Olesen authored
llvm-svn: 121807
-
Jakob Stoklund Olesen authored
llvm-svn: 121806
-
Jakob Stoklund Olesen authored
llvm-svn: 121805
-
Jakob Stoklund Olesen authored
llvm-svn: 121801
-
- Dec 14, 2010
-
-
Evan Cheng authored
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
-
Matt Beaumont-Gay authored
warning in the opt build. llvm-svn: 121791
-
Jakob Stoklund Olesen authored
llvm-svn: 121783
-
Jakob Stoklund Olesen authored
LiveIntervalUnions. llvm-svn: 121781
-
Jakob Stoklund Olesen authored
llvm-svn: 121774
-
Jakob Stoklund Olesen authored
llvm-svn: 121741
-
Jakob Stoklund Olesen authored
spill weight. Filter out fixed registers instead. Add support for reassigning an interference that was assigned to an alias. llvm-svn: 121737
-
Jakob Stoklund Olesen authored
llvm-svn: 121736
-
- Dec 13, 2010
-
-
Chris Lattner authored
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
-
Chris Lattner authored
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
-