|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| ... |  | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining
issues when they see them. All changes pass DejaGnu tests and Olden.
llvm-svn: 31380 | 
| | 
| 
| 
| | llvm-svn: 31040 | 
| | 
| 
| 
| | llvm-svn: 31035 | 
| | 
| 
| 
| | llvm-svn: 31019 | 
| | 
| 
| 
| 
| 
| | optimization.
llvm-svn: 31009 | 
| | 
| 
| 
| | llvm-svn: 30999 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | (vector_shuffle
  (vbitconvert (vbuildvector (copyfromreg v4f32), 1, v4f32), 4, f32),
  (undef, undef, undef, undef), (0, 0, 0, 0), 4, f32)
to the
  vbitconvert
is a very bad idea.
llvm-svn: 30989 | 
| | 
| 
| 
| | llvm-svn: 30984 | 
| | 
| 
| 
| | llvm-svn: 30961 | 
| | 
| 
| 
| 
| 
| | so that it can be deleted if unused.
llvm-svn: 30955 | 
| | 
| 
| 
| | llvm-svn: 30953 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | SelectionDAG and it has since bitrotted.  Remove the copy from SelectionDAG.
Next, remove the constant folding piece of DAGCombiner::SimplifySetCC into
a new FoldSetCC method which can be used by getNode() and SimplifySetCC.
This fixes obscure bugs.
llvm-svn: 30952 | 
| | 
| 
| 
| | llvm-svn: 30948 | 
| | 
| 
| 
| | llvm-svn: 30945 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | apply to rems as well as divs.  This fixes PR945 and speeds up ReedSolomon
from 14.57s to 10.90s (which is now faster than gcc).
It compiles CodeGen/X86/rem.ll into:
_test1:
        subl $4, %esp
        movl %esi, (%esp)
        movl $2155905153, %ecx
        movl 8(%esp), %esi
        movl %esi, %eax
        imull %ecx
        addl %esi, %edx
        movl %edx, %eax
        shrl $31, %eax
        sarl $7, %edx
        addl %eax, %edx
        imull $255, %edx, %eax
        subl %eax, %esi
        movl %esi, %eax
        movl (%esp), %esi
        addl $4, %esp
        ret
_test2:
        movl 4(%esp), %eax
        movl %eax, %ecx
        sarl $31, %ecx
        shrl $24, %ecx
        addl %eax, %ecx
        andl $4294967040, %ecx
        subl %ecx, %eax
        ret
_test3:
        subl $4, %esp
        movl %esi, (%esp)
        movl $2155905153, %ecx
        movl 8(%esp), %esi
        movl %esi, %eax
        mull %ecx
        shrl $7, %edx
        imull $255, %edx, %eax
        subl %eax, %esi
        movl %esi, %eax
        movl (%esp), %esi
        addl $4, %esp
        ret
instead of div/idiv instructions.
llvm-svn: 30920 | 
| | 
| 
| 
| | llvm-svn: 30915 | 
| | 
| 
| 
| | llvm-svn: 30903 | 
| | 
| 
| 
| | llvm-svn: 30889 | 
| | 
| 
| 
| | llvm-svn: 30883 | 
| | 
| 
| 
| | llvm-svn: 30880 | 
| | 
| 
| 
| | llvm-svn: 30878 | 
| | 
| 
| 
| | llvm-svn: 30844 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | if TF depends on A and B, and A depends on B, TF just needs to depend on
A.  With Jim's alias-analysis stuff enabled, this compiles the testcase in
PR892 into:
__Z4test3Val:
        subl $44, %esp
        call L__Z3foov$stub
        movl %edx, 28(%esp)
        movl %eax, 32(%esp)
        movl %eax, 24(%esp)
        movl %edx, 36(%esp)
        movl 52(%esp), %ecx
        movl %ecx, 4(%esp)
        movl %eax, 8(%esp)
        movl %edx, 12(%esp)
        movl 48(%esp), %eax
        movl %eax, (%esp)
        call L__Z3bar3ValS_$stub
        addl $44, %esp
        ret
instead of:
__Z4test3Val:
        subl $44, %esp
        call L__Z3foov$stub
        movl %eax, 24(%esp)
        movl %edx, 28(%esp)
        movl 24(%esp), %eax
        movl %eax, 32(%esp)
        movl 28(%esp), %eax
        movl %eax, 36(%esp)
        movl 32(%esp), %eax
        movl 36(%esp), %ecx
        movl 52(%esp), %edx
        movl %edx, 4(%esp)
        movl %eax, 8(%esp)
        movl %ecx, 12(%esp)
        movl 48(%esp), %eax
        movl %eax, (%esp)
        call L__Z3bar3ValS_$stub
        addl $44, %esp
        ret
llvm-svn: 30821 | 
| | 
| 
| 
| | llvm-svn: 30818 | 
| | 
| 
| 
| | llvm-svn: 30759 | 
| | 
| 
| 
| | llvm-svn: 30753 | 
| | 
| 
| 
| | llvm-svn: 30721 | 
| | 
| 
| 
| 
| 
| | extra operand to LOADX to specify the exact value extension type.
llvm-svn: 30714 | 
| | 
| 
| 
| | llvm-svn: 30613 | 
| | 
| 
| 
| | llvm-svn: 30611 | 
| | 
| 
| 
| | llvm-svn: 30610 | 
| | 
| 
| 
| | llvm-svn: 30609 | 
| | 
| 
| 
| | llvm-svn: 30601 | 
| | 
| 
| 
| | llvm-svn: 30600 | 
| | 
| 
| 
| | llvm-svn: 30597 | 
| | 
| 
| 
| | llvm-svn: 30573 | 
| | 
| 
| 
| | llvm-svn: 30570 | 
| | 
| 
| 
| | llvm-svn: 30568 | 
| | 
| 
| 
| | llvm-svn: 30561 | 
| | 
| 
| 
| | llvm-svn: 30560 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | int %test(ulong *%tmp) {
        %tmp = load ulong* %tmp         ; <ulong> [#uses=1]
        %tmp.mask = shr ulong %tmp, ubyte 50            ; <ulong> [#uses=1]
        %tmp.mask = cast ulong %tmp.mask to ubyte
        %tmp2 = and ubyte %tmp.mask, 3          ; <ubyte> [#uses=1]
        %tmp2 = cast ubyte %tmp2 to int         ; <int> [#uses=1]
        ret int %tmp2
}
to:
_test:
        movl 4(%esp), %eax
        movl 4(%eax), %eax
        shrl $18, %eax
        andl $3, %eax
        ret
instead of:
_test:
        movl 4(%esp), %eax
        movl 4(%eax), %eax
        shrl $18, %eax
        # TRUNCATE movb %al, %al
        andb $3, %al
        movzbl %al, %eax
        ret
llvm-svn: 30558 | 
| | 
| 
| 
| 
| 
| 
| | the src/dst are not the same size.  This catches things like "truncate
32-bit X to 8 bits, then zext to 16", which happens a bit on X86.
llvm-svn: 30557 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | int test3(int a, int b) { return (a < 0) ? a : 0; }
to:
_test3:
        srawi r2, r3, 31
        and r3, r2, r3
        blr
instead of:
_test3:
        cmpwi cr0, r3, 1
        li r2, 0
        blt cr0, LBB2_2 ;entry
LBB2_1: ;entry
        mr r3, r2
LBB2_2: ;entry
        blr
This implements: PowerPC/select_lt0.ll:seli32_a_a
llvm-svn: 30517 | 
| | 
| 
| 
| | llvm-svn: 30514 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | 1. teach SimplifySetCC that '(srl (ctlz x), 5) == 0' is really x != 0.
2. Teach visitSELECT_CC to use SimplifySetCC instead of calling it and
   ignoring the result.  This allows us to compile:
bool %test(ulong %x) {
  %tmp = setlt ulong %x, 4294967296
  ret bool %tmp
}
to:
_test:
        cntlzw r2, r3
        cmplwi cr0, r3, 1
        srwi r2, r2, 5
        li r3, 0
        beq cr0, LBB1_2 ;
LBB1_1: ;
        mr r3, r2
LBB1_2: ;
        blr
instead of:
_test:
        addi r2, r3, -1
        cntlzw r2, r2
        cntlzw r3, r3
        srwi r2, r2, 5
        cmplwi cr0, r2, 0
        srwi r2, r3, 5
        li r3, 0
        bne cr0, LBB1_2 ;
LBB1_1: ;
        mr r3, r2
LBB1_2: ;
        blr
This isn't wonderful, but it's an improvement.
llvm-svn: 30513 | 
| | 
| 
| 
| 
| 
| | This implements CodeGen/X86/and-or-fold.ll
llvm-svn: 30379 | 
| | 
| 
| 
| 
| 
| | matching things like ((x >> c1) & c2) | ((x << c3) & c4) to (rot x, c5) & c6
llvm-svn: 30376 | 
| | 
| 
| 
| 
| 
| 
| | for ROTL availability. This prevents it from forming ROTR for targets that
has ROTR only.
llvm-svn: 29997 | 
| | 
| 
| 
| 
| 
| | it a static method of SelectionDAG.
llvm-svn: 29951 | 
| | 
| 
| 
| | llvm-svn: 29911 |