- Feb 03, 2011
-
-
Jakob Stoklund Olesen authored
llvm-svn: 124814
-
Jakob Stoklund Olesen authored
llvm-svn: 124813
-
Jakob Stoklund Olesen authored
If the found value is not live-through the block, we should only add liveness up to the requested slot index. When the value is live-through, the whole block should be colored. Bug found by SSA verification in the machine code verifier. llvm-svn: 124812
-
Jakob Stoklund Olesen authored
These end points come from the inserted copies, and can be passed directly to useIntv. This simplifies the coloring code. llvm-svn: 124799
-
Jakob Stoklund Olesen authored
llvm-svn: 124798
-
Eric Christopher authored
llvm-svn: 124779
-
Eric Christopher authored
llvm-svn: 124778
-
Jakob Stoklund Olesen authored
The greedy register allocator revealed some problems with the value mapping in SplitKit. We would sometimes start mapping values before all defs were known, and that could change a value from a simple 1-1 mapping to a multi-def mapping that requires ssa update. The new approach collects all defs and register assignments first without filling in any live intervals. Only when finish() is called, do we compute liveness and mapped values. At this time we know with certainty which values map to multiple values in a split range. This also has the advantage that we can compute live ranges based on the remaining uses after rematerializing at split points. The current implementation has many opportunities for compile time optimization. llvm-svn: 124765
-
- Feb 02, 2011
-
-
Devang Patel authored
llvm-svn: 124755
-
Devang Patel authored
llvm-svn: 124752
-
Evan Cheng authored
the load, then it may be legal to transform the load and store to integer load and store of the same width. This is done if the target specified the transformation as profitable. e.g. On arm, this can transform: vldr.32 s0, [] vstr.32 s0, [] to ldr r12, [] str r12, [] rdar://8944252 llvm-svn: 124708
-
- Feb 01, 2011
-
-
Matt Beaumont-Gay authored
llvm-svn: 124688
-
- Jan 31, 2011
-
-
Devang Patel authored
llvm-svn: 124611
-
Richard Osborne authored
llvm-svn: 124587
-
- Jan 30, 2011
-
-
Anton Korobeynikov authored
llvm-svn: 124569
-
Jakob Stoklund Olesen authored
This is similar to the -unroll-threshold option. There should be no change in behavior when -tail-dup-size is not explicit on the llc command line. llvm-svn: 124564
-
Benjamin Kramer authored
Teach DAGCombine to fold fold (sra (trunc (sr x, c1)), c2) -> (trunc (sra x, c1+c2) when c1 equals the amount of bits that are truncated off. This happens all the time when a smul is promoted to a larger type. On x86-64 we now compile "int test(int x) { return x/10; }" into movslq %edi, %rax imulq $1717986919, %rax, %rax movq %rax, %rcx shrq $63, %rcx sarq $34, %rax <- used to be "shrq $32, %rax; sarl $2, %eax" addl %ecx, %eax This fires 96 times in gcc.c on x86-64. llvm-svn: 124559
-
- Jan 29, 2011
-
-
Benjamin Kramer authored
This happens e.g. for code like "X - X%10" where we lower the modulo operation to a series of multiplies and shifts that are then subtracted from X, leading to this missed optimization. llvm-svn: 124532
-
Evan Cheng authored
llvm-svn: 124526
-
Evan Cheng authored
llvm-svn: 124522
-
Evan Cheng authored
Re-commit r124462 with fixes. Tail recursion elim will now dup ret into unconditional predecessor to enable TCE on demand. llvm-svn: 124518
-
- Jan 28, 2011
-
-
Evan Cheng authored
llvm-svn: 124478
-
Nick Lewycky authored
llvm-svn: 124472
-
Rafael Espindola authored
llvm-svn: 124468
-
Evan Cheng authored
branches. PR8575, rdar://5134905, rdar://8911460. - Allow codegen tail duplication to dup small return blocks after register allocation is done. llvm-svn: 124462
-
- Jan 27, 2011
-
-
Andrew Trick authored
llvm-svn: 124443
-
Andrew Trick authored
rdar://problem/8893967: JM/lencod miscompile at -arch armv7 -mthumb -O3 Added ResurrectKill to remove kill flags after we decide to reused a physical register. And (hopefully) ensure that we call it in all the right places. Sorry, I'm not checking in a unit test given that it's a miscompile I can't reproduce easily with a toy example. Failures in the rewriter depend on a series of heuristic decisions maked during one of the many upstream phases in codegen. This case would require coercing regalloc to generate a couple of rematerialzations in a way that causes the scavenger to reuse the same register at just the wrong point. The general way to test this is to implement kill flags verification. Then we could have a simple, robust compile-only unit test. That would be worth doing if the whole pass was not about to disappear. At this point we focus verification work on the next generation of regalloc. llvm-svn: 124442
-
Devang Patel authored
llvm-svn: 124397
-
Devang Patel authored
Take 2. This includes fix for dragonegg crash. llvm-svn: 124380
-
Bob Wilson authored
Linear scan regalloc is currently assuming that any register aliased with a member of a regclass must also be in at least one regclass. That is not always true. For example, for X86, RIP is in a regclass but IP is not. If you're unlucky, this can cause a crash by invalidating the iterator. llvm-svn: 124365
-
Matt Beaumont-Gay authored
llvm-svn: 124350
-
Matt Beaumont-Gay authored
llvm-svn: 124346
-
Devang Patel authored
llvm-svn: 124339
-
- Jan 26, 2011
-
-
Bill Wendling authored
llvm-svn: 124331
-
Devang Patel authored
llvm-svn: 124327
-
Devang Patel authored
llvm-svn: 124320
-
David Greene authored
[AVX] Add INSERT_SUBVECTOR and support it on x86. This provides a default implementation for x86, going through the stack in a similr fashion to how the codegen implements BUILD_VECTOR. Eventually this will get matched to VINSERTF128 if AVX is available. llvm-svn: 124307
-
Devang Patel authored
llvm-svn: 124302
-
Devang Patel authored
llvm-svn: 124301
-
Devang Patel authored
llvm-svn: 124300
-