- Jan 22, 2010
-
-
Victor Hernandez authored
llvm-svn: 94114
-
Victor Hernandez authored
llvm-svn: 94113
-
Victor Hernandez authored
llvm-svn: 94112
-
Victor Hernandez authored
DbgInfoIntrinsics no longer appear in an instruction's use list; so clean up looking for them in use iterations and remove OnlyUsedByDbgInfoIntrinsics() llvm-svn: 94111
-
Dan Gohman authored
loop-variant components, adds must be inserted after the increment. Keep track of the increment position for this case, and insert these adds in the correct location. llvm-svn: 94110
-
- Jan 21, 2010
-
-
Dan Gohman authored
llvm-svn: 94108
-
Dan Gohman authored
operands exceeds the number of registers used in the initial solution, as that wouldn't lead to a profitable solution anyway. llvm-svn: 94107
-
Dan Gohman authored
llvm-svn: 94104
-
Chris Lattner authored
ValueMapper.cpp ends up calling an out of line __ZNK4llvm12PATypeHolder3getEv, which is a template and llvm-config determines arbitrarily to use the one in libipo. This sucks, but keeping the #include is a reasonable workaround. llvm-svn: 94103
-
Chris Lattner authored
llvm-svn: 94102
-
Chris Lattner authored
llvm-svn: 94101
-
Victor Hernandez authored
llvm-svn: 94092
-
Victor Hernandez authored
llvm-svn: 94091
-
Dan Gohman authored
This new version is much more aggressive about doing "full" reduction in cases where it reduces register pressure, and also more aggressive about rewriting induction variables to count down (or up) to zero when doing so reduces register pressure. It currently uses fairly simplistic algorithms for finding reuse opportunities, but it introduces a new framework allows it to combine multiple strategies at once to form hybrid solutions, instead of doing all full-reduction or all base+index. llvm-svn: 94061
-
Eric Christopher authored
answers. This will update as object size checking gets better information. llvm-svn: 94059
-
Chris Lattner authored
llvm-svn: 94048
-
- Jan 20, 2010
-
-
Jakob Stoklund Olesen authored
No functional change except the forgotten test for InlineLimit.getNumOccurrences() == 0 in the CurrentThreshold2 calculation. llvm-svn: 94007
-
Victor Hernandez authored
llvm-svn: 93989
-
Victor Hernandez authored
Map operands of all function-local metadata, not just metadata passed to llvm.dbg.declare intrinsics llvm-svn: 93979
-
- Jan 19, 2010
-
-
Dan Gohman authored
than the scaled register. This makes it more likely that subsequent AddrModeMatcher queries will match the new address the same way as the old, instead of accidentally matching what had been the base register as the new scaled register, and then failing to match the scaled register. This fixes some problems with address-mode sinking multiple muls into a block, which will be a lot more common with some upcoming LoopStrengthReduction changes. llvm-svn: 93935
-
Chris Lattner authored
Evans! llvm-svn: 93884
-
Bob Wilson authored
are the same. I had already fixed a similar problem where the source and destination were different bitcasts derived from the same alloca, but the previous fix still did not handle the case where both operands are exactly the same value. Radar 7552893. llvm-svn: 93848
-
Eric Christopher authored
llvm-svn: 93831
-
- Jan 18, 2010
-
-
Chris Lattner authored
aggressive changed the canonical form from sext(trunc(x)) to ashr(lshr(x)), make sure to transform a couple more things into that canonical form, and catch a case where we missed turning zext/shl/ashr into a single sext. llvm-svn: 93787
-
Devang Patel authored
because it points to an alloca instruction through metadata. llvm-svn: 93757
-
- Jan 17, 2010
-
-
Owen Anderson authored
llvm-svn: 93693
-
Owen Anderson authored
llvm-svn: 93679
-
- Jan 15, 2010
-
-
Bob Wilson authored
llvm-svn: 93560
-
- Jan 14, 2010
-
-
Bill Wendling authored
added to the FSub version. However, the original version of this xform guarded against doing this for floating point (!Op0->getType()->isFPOrFPVector()). This is causing LLVM to perform incorrect xforms for code like: void func(double *rhi, double *rlo, double xh, double xl, double yh, double yl){ double mh, ml; double c = 134217729.0; double up, u1, u2, vp, v1, v2; up = xh*c; u1 = (xh - up) + up; u2 = xh - u1; vp = yh*c; v1 = (yh - vp) + vp; v2 = yh - v1; mh = xh*yh; ml = (((u1*v1 - mh) + (u1*v2)) + (u2*v1)) + (u2*v2); ml += xh*yl + xl*yh; *rhi = mh + ml; *rlo = (mh - (*rhi)) + ml; } The last line was optimized away, but rl is intended to be the difference between the infinitely precise result of mh + ml and after it has been rounded to double precision. llvm-svn: 93369
-
- Jan 12, 2010
-
-
Chris Lattner authored
in JT. 2) When cloning blocks for PHI or xor conditions, use instsimplify to simplify the code as we go. This allows us to squish common cases early in JT which opens up opportunities for subsequent iterations, and allows it to completely simplify the testcase. llvm-svn: 93253
-
Chris Lattner authored
llvm-svn: 93251
-
Chris Lattner authored
llvm-svn: 93222
-
Chris Lattner authored
condition is a xor with a phi node. This eliminates nonsense like this from 176.gcc in several places: LBB166_84: testl %eax, %eax - setne %al - xorb %cl, %al - notb %al - testb $1, %al - je LBB166_85 + je LBB166_69 + jmp LBB166_85 This is rdar://7391699 llvm-svn: 93221
-
Chris Lattner authored
on branches by renaming it and checking for a branch at the call site. llvm-svn: 93208
-
- Jan 11, 2010
-
-
Chris Lattner authored
codegen has no apparent problem with the trunc version of this, because it turns into a simple subreg idiom llvm-svn: 93202
-
Chris Lattner authored
trunc has multiple uses. Codegen is not able to coalesce the subreg case correctly and so this leads to higher register pressure and spilling (see PR5997). This speeds up 256.bzip2 from 8.60 -> 8.04s on my machine, ~7%. llvm-svn: 93200
-
Chris Lattner authored
good code on PR4216: _test_bitfield: ## @test_bitfield orl $32962, %edi movl $4294941946, %eax andq %rdi, %rax ret instead of: _test_bitfield: movl $4294941696, %ecx movl %edi, %eax orl $194, %edi orl $32768, %eax andq $250, %rdi andq %rax, %rcx movq %rdi, %rax orq %rcx, %rax ret Evan is looking into the remaining andq+imm -> andl optimization. llvm-svn: 93147
-
Chris Lattner authored
BitsToClear case. This allows it to promote expressions which have an and/or/xor after the lshr, promoting cases like test2 (from PR4216) and test3 (random extample extracted from a spec benchmark). clang now compiles the code in PR4216 into: _test_bitfield: ## @test_bitfield movl %edi, %eax orl $194, %eax movl $4294902010, %ecx andq %rax, %rcx orl $32768, %edi andq $39936, %rdi movq %rdi, %rax orq %rcx, %rax ret instead of: _test_bitfield: ## @test_bitfield movl %edi, %eax orl $194, %eax movl $4294902010, %ecx andq %rax, %rcx shrl $8, %edi orl $128, %edi shlq $8, %rdi andq $39936, %rdi movq %rdi, %rax orq %rcx, %rax ret which is still not great, but is progress. llvm-svn: 93145
-
Chris Lattner authored
new BitsToClear result which allows us to start promoting expressions that end with a lshr-by-constant. This is conservatively correct and better than what we had before (see testcases) but still needs to be extended further. llvm-svn: 93144
-
Chris Lattner authored
llvm-svn: 93143
-