Loosen up iv reuse to allow reuse of the same stride but a larger type when truncatin...
authorEvan Cheng <evan.cheng@apple.com>
Fri, 26 Oct 2007 01:56:11 +0000 (01:56 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 26 Oct 2007 01:56:11 +0000 (01:56 +0000)
commit2bd122c4d934a70e031dc0ca5171719bac66c2c9
tree2aa0e737c3f01cc1f447def3d95d9ec7833f99bc
parent081fdf238ba17747487d35da1283b8323482b4d2
Loosen up iv reuse to allow reuse of the same stride but a larger type when truncating from the larger type to smaller type is free.
e.g.
Turns this loop:
LBB1_1: # entry.bb_crit_edge
        xorl    %ecx, %ecx
        xorw    %dx, %dx
        movw    %dx, %si
LBB1_2: # bb
        movl    L_X$non_lazy_ptr, %edi
        movw    %si, (%edi)
        movl    L_Y$non_lazy_ptr, %edi
        movw    %dx, (%edi)
addw    $4, %dx
incw    %si
incl    %ecx
cmpl    %eax, %ecx
jne     LBB1_2  # bb

into

LBB1_1: # entry.bb_crit_edge
        xorl    %ecx, %ecx
        xorw    %dx, %dx
LBB1_2: # bb
        movl    L_X$non_lazy_ptr, %esi
        movw    %cx, (%esi)
        movl    L_Y$non_lazy_ptr, %esi
        movw    %dx, (%esi)
        addw    $4, %dx
incl    %ecx
        cmpl    %eax, %ecx
        jne     LBB1_2  # bb

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43375 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Target/TargetLowering.h
lib/Target/X86/README.txt
lib/Target/X86/X86ISelLowering.cpp
lib/Target/X86/X86ISelLowering.h
lib/Transforms/Scalar/LoopStrengthReduce.cpp
test/CodeGen/X86/loop-strength-reduce5.ll [new file with mode: 0644]