Skip to content
  • Chris Lattner's avatar
    Add some folds for == and != comparisons. This allows us to · fde3a212
    Chris Lattner authored
    codegen this loop in stepanov:
    
    no_exit.i:              ; preds = %entry, %no_exit.i, %then.i, %_Z5checkd.exit
            %i.0.0 = phi int [ 0, %entry ], [ %i.0.0, %no_exit.i ], [ %inc.0, %_Z5checkd.exit ], [ %inc.012, %then.i ]              ; <int> [#uses=3]
            %indvar = phi uint [ %indvar.next, %no_exit.i ], [ 0, %entry ], [ 0, %then.i ], [ 0, %_Z5checkd.exit ]          ; <uint> [#uses=3]
            %result_addr.i.0 = phi double [ %tmp.4.i.i, %no_exit.i ], [ 0.000000e+00, %entry ], [ 0.000000e+00, %then.i ], [ 0.000000e+00, %_Z5checkd.exit ]          ; <double> [#uses=1]
            %first_addr.0.i.2.rec = cast uint %indvar to int                ; <int> [#uses=1]
            %first_addr.0.i.2 = getelementptr [2000 x double]* %data, int 0, uint %indvar           ; <double*> [#uses=1]
            %inc.i.rec = add int %first_addr.0.i.2.rec, 1           ; <int> [#uses=1]
            %inc.i = getelementptr [2000 x double]* %data, int 0, int %inc.i.rec            ; <double*> [#uses=1]
            %tmp.3.i.i = load double* %first_addr.0.i.2             ; <double> [#uses=1]
            %tmp.4.i.i = add double %result_addr.i.0, %tmp.3.i.i            ; <double> [#uses=2]
            %tmp.2.i = seteq double* %inc.i, getelementptr ([2000 x double]* %data, int 0, int 2000)                ; <bool> [#uses=1]
            %indvar.next = add uint %indvar, 1              ; <uint> [#uses=1]
            br bool %tmp.2.i, label %_Z10accumulateIPddET0_T_S2_S1_.exit, label %no_exit.i
    
    To this:
    
    .LBB_Z4testIPddEvT_S1_T0__1:    # no_exit.i
            fldl data(,%eax,8)
            fldl 16(%esp)
            faddp %st(1)
            fstpl 16(%esp)
            incl %eax
            movl %eax, %ecx
            shll $3, %ecx
            cmpl $16000, %ecx
            #FP_REG_KILL
            jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
    
    instead of this:
    
    .LBB_Z4testIPddEvT_S1_T0__1:    # no_exit.i
            fldl data(,%eax,8)
            fldl 16(%esp)
            faddp %st(1)
            fstpl 16(%esp)
            incl %eax
            leal data(,%eax,8), %ecx
            leal data+16000, %edx
            cmpl %edx, %ecx
            #FP_REG_KILL
            jne .LBB_Z4testIPddEvT_S1_T0__1 # no_exit.i
    
    llvm-svn: 19425
    fde3a212
Loading