1; RUN: llc < %s -march=x86 -mattr=+sse2 | grep andpd | not grep esp 2 3declare double @llvm.sqrt.f64(double) nounwind readnone 4 5declare fastcc void @ApplyGivens(double**, double, double, i32, i32, i32, i32) nounwind 6 7declare double @fabs(double) 8 9define void @main_bb114_2E_outer_2E_i_bb3_2E_i27(double** %tmp12.sub.i.i, [51 x double*]* %tmp12.i.i.i, i32 %i.0.reg2mem.0.ph.i, i32 %tmp11688.i, i32 %tmp19.i, i32 %tmp24.i, [51 x double*]* %tmp12.i.i) { 10newFuncRoot: 11 br label %bb3.i27 12 13bb111.i77.bb121.i_crit_edge.exitStub: ; preds = %bb111.i77 14 ret void 15 16bb3.i27: ; preds = %bb111.i77.bb3.i27_crit_edge, %newFuncRoot 17 %indvar94.i = phi i32 [ 0, %newFuncRoot ], [ %tmp113.i76, %bb111.i77.bb3.i27_crit_edge ] ; <i32> [#uses=6] 18 %tmp6.i20 = getelementptr [51 x double*]* %tmp12.i.i, i32 0, i32 %indvar94.i ; <double**> [#uses=1] 19 %tmp7.i21 = load double** %tmp6.i20, align 4 ; <double*> [#uses=2] 20 %tmp10.i = add i32 %indvar94.i, %i.0.reg2mem.0.ph.i ; <i32> [#uses=5] 21 %tmp11.i22 = getelementptr double* %tmp7.i21, i32 %tmp10.i ; <double*> [#uses=1] 22 %tmp12.i23 = load double* %tmp11.i22, align 8 ; <double> [#uses=4] 23 %tmp20.i24 = add i32 %tmp19.i, %indvar94.i ; <i32> [#uses=3] 24 %tmp21.i = getelementptr double* %tmp7.i21, i32 %tmp20.i24 ; <double*> [#uses=1] 25 %tmp22.i25 = load double* %tmp21.i, align 8 ; <double> [#uses=3] 26 %tmp1.i.i26 = fcmp oeq double %tmp12.i23, 0.000000e+00 ; <i1> [#uses=1] 27 br i1 %tmp1.i.i26, label %bb3.i27.Givens.exit.i49_crit_edge, label %bb5.i.i31 28 29bb5.i.i31: ; preds = %bb3.i27 30 %tmp7.i.i28 = call double @fabs( double %tmp12.i23 ) nounwind ; <double> [#uses=1] 31 %tmp9.i.i29 = call double @fabs( double %tmp22.i25 ) nounwind ; <double> [#uses=1] 32 %tmp10.i.i30 = fcmp ogt double %tmp7.i.i28, %tmp9.i.i29 ; <i1> [#uses=1] 33 br i1 %tmp10.i.i30, label %bb13.i.i37, label %bb30.i.i43 34 35bb13.i.i37: ; preds = %bb5.i.i31 36 %tmp15.i.i32 = fsub double -0.000000e+00, %tmp22.i25 ; <double> [#uses=1] 37 %tmp17.i.i33 = fdiv double %tmp15.i.i32, %tmp12.i23 ; <double> [#uses=3] 38 %tmp20.i4.i = fmul double %tmp17.i.i33, %tmp17.i.i33 ; <double> [#uses=1] 39 %tmp21.i.i34 = fadd double %tmp20.i4.i, 1.000000e+00 ; <double> [#uses=1] 40 %tmp22.i.i35 = call double @llvm.sqrt.f64( double %tmp21.i.i34 ) nounwind ; <double> [#uses=1] 41 %tmp23.i5.i = fdiv double 1.000000e+00, %tmp22.i.i35 ; <double> [#uses=2] 42 %tmp28.i.i36 = fmul double %tmp23.i5.i, %tmp17.i.i33 ; <double> [#uses=1] 43 br label %Givens.exit.i49 44 45bb30.i.i43: ; preds = %bb5.i.i31 46 %tmp32.i.i38 = fsub double -0.000000e+00, %tmp12.i23 ; <double> [#uses=1] 47 %tmp34.i.i39 = fdiv double %tmp32.i.i38, %tmp22.i25 ; <double> [#uses=3] 48 %tmp37.i6.i = fmul double %tmp34.i.i39, %tmp34.i.i39 ; <double> [#uses=1] 49 %tmp38.i.i40 = fadd double %tmp37.i6.i, 1.000000e+00 ; <double> [#uses=1] 50 %tmp39.i7.i = call double @llvm.sqrt.f64( double %tmp38.i.i40 ) nounwind ; <double> [#uses=1] 51 %tmp40.i.i41 = fdiv double 1.000000e+00, %tmp39.i7.i ; <double> [#uses=2] 52 %tmp45.i.i42 = fmul double %tmp40.i.i41, %tmp34.i.i39 ; <double> [#uses=1] 53 br label %Givens.exit.i49 54 55Givens.exit.i49: ; preds = %bb3.i27.Givens.exit.i49_crit_edge, %bb30.i.i43, %bb13.i.i37 56 %s.0.i44 = phi double [ %tmp45.i.i42, %bb30.i.i43 ], [ %tmp23.i5.i, %bb13.i.i37 ], [ 0.000000e+00, %bb3.i27.Givens.exit.i49_crit_edge ] ; <double> [#uses=2] 57 %c.0.i45 = phi double [ %tmp40.i.i41, %bb30.i.i43 ], [ %tmp28.i.i36, %bb13.i.i37 ], [ 1.000000e+00, %bb3.i27.Givens.exit.i49_crit_edge ] ; <double> [#uses=2] 58 %tmp26.i46 = add i32 %tmp24.i, %indvar94.i ; <i32> [#uses=2] 59 %tmp27.i47 = icmp slt i32 %tmp26.i46, 51 ; <i1> [#uses=1] 60 %min.i48 = select i1 %tmp27.i47, i32 %tmp26.i46, i32 50 ; <i32> [#uses=1] 61 call fastcc void @ApplyGivens( double** %tmp12.sub.i.i, double %s.0.i44, double %c.0.i45, i32 %tmp20.i24, i32 %tmp10.i, i32 %indvar94.i, i32 %min.i48 ) nounwind 62 br label %codeRepl 63 64codeRepl: ; preds = %Givens.exit.i49 65 call void @main_bb114_2E_outer_2E_i_bb3_2E_i27_bb_2E_i48_2E_i( i32 %tmp10.i, i32 %tmp20.i24, double %s.0.i44, double %c.0.i45, [51 x double*]* %tmp12.i.i.i ) 66 br label %ApplyRGivens.exit49.i 67 68ApplyRGivens.exit49.i: ; preds = %codeRepl 69 %tmp10986.i = icmp sgt i32 %tmp11688.i, %tmp10.i ; <i1> [#uses=1] 70 br i1 %tmp10986.i, label %ApplyRGivens.exit49.i.bb52.i57_crit_edge, label %ApplyRGivens.exit49.i.bb111.i77_crit_edge 71 72codeRepl1: ; preds = %ApplyRGivens.exit49.i.bb52.i57_crit_edge 73 call void @main_bb114_2E_outer_2E_i_bb3_2E_i27_bb52_2E_i57( i32 %tmp10.i, double** %tmp12.sub.i.i, [51 x double*]* %tmp12.i.i.i, i32 %i.0.reg2mem.0.ph.i, i32 %tmp11688.i, i32 %tmp19.i, i32 %tmp24.i, [51 x double*]* %tmp12.i.i ) 74 br label %bb105.i.bb111.i77_crit_edge 75 76bb111.i77: ; preds = %bb105.i.bb111.i77_crit_edge, %ApplyRGivens.exit49.i.bb111.i77_crit_edge 77 %tmp113.i76 = add i32 %indvar94.i, 1 ; <i32> [#uses=2] 78 %tmp118.i = icmp sgt i32 %tmp11688.i, %tmp113.i76 ; <i1> [#uses=1] 79 br i1 %tmp118.i, label %bb111.i77.bb3.i27_crit_edge, label %bb111.i77.bb121.i_crit_edge.exitStub 80 81bb3.i27.Givens.exit.i49_crit_edge: ; preds = %bb3.i27 82 br label %Givens.exit.i49 83 84ApplyRGivens.exit49.i.bb52.i57_crit_edge: ; preds = %ApplyRGivens.exit49.i 85 br label %codeRepl1 86 87ApplyRGivens.exit49.i.bb111.i77_crit_edge: ; preds = %ApplyRGivens.exit49.i 88 br label %bb111.i77 89 90bb105.i.bb111.i77_crit_edge: ; preds = %codeRepl1 91 br label %bb111.i77 92 93bb111.i77.bb3.i27_crit_edge: ; preds = %bb111.i77 94 br label %bb3.i27 95} 96 97declare void @main_bb114_2E_outer_2E_i_bb3_2E_i27_bb_2E_i48_2E_i(i32, i32, double, double, [51 x double*]*) 98 99declare void @main_bb114_2E_outer_2E_i_bb3_2E_i27_bb52_2E_i57(i32, double**, [51 x double*]*, i32, i32, i32, i32, [51 x double*]*) 100