1; RUN: llc < %s -march=x86 -regalloc=greedy -stop-after=greedy | FileCheck %s 2; Make sure bad eviction sequence doesnt occur 3 4; Fix for bugzilla 26810. 5; This test is meant to make sure bad eviction sequence like the one described 6; below does not occur 7; 8; movapd %xmm7, 160(%esp) # 16-byte Spill 9; movapd %xmm5, %xmm7 10; movapd %xmm4, %xmm5 11; movapd %xmm3, %xmm4 12; movapd %xmm2, %xmm3 13; some_inst 14; movapd %xmm3, %xmm2 15; movapd %xmm4, %xmm3 16; movapd %xmm5, %xmm4 17; movapd %xmm7, %xmm5 18; movapd 160(%esp), %xmm7 # 16-byte Reload 19 20; Make sure we have no redundant copies in the problematic code section 21; CHECK-LABEL: name: loop 22; CHECK: bb.2.for.body: 23; CHECK: SUBPDrr 24; CHECK-NEXT: MOVAPSmr 25; CHECK-NEXT: MULPDrm 26; CHECK-NEXT: MOVAPSrm 27; CHECK-NEXT: ADDPDrr 28; CHECK-NEXT: MOVAPSmr 29; CHECK-NEXT: ADD32ri8 30 31target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" 32target triple = "i386-pc-linux-gnu" 33 34%struct._iobuf = type { i8* } 35 36$"\01??_C@_01NOFIACDB@w?$AA@" = comdat any 37 38$"\01??_C@_09LAIDGMDM@?1dev?1null?$AA@" = comdat any 39 40@"\01?v@@3PAU__m128d@@A" = global [8 x <2 x double>] zeroinitializer, align 16 41@"\01?m1@@3PAU__m128d@@A" = local_unnamed_addr global [76800000 x <2 x double>] zeroinitializer, align 16 42@"\01?m2@@3PAU__m128d@@A" = local_unnamed_addr global [8 x <2 x double>] zeroinitializer, align 16 43@"\01??_C@_01NOFIACDB@w?$AA@" = linkonce_odr unnamed_addr constant [2 x i8] c"w\00", comdat, align 1 44@"\01??_C@_09LAIDGMDM@?1dev?1null?$AA@" = linkonce_odr unnamed_addr constant [10 x i8] c"/dev/null\00", comdat, align 1 45 46; Function Attrs: norecurse 47define i32 @main() local_unnamed_addr #0 { 48entry: 49 tail call void @init() 50 %0 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 51 %1 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 52 %2 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 53 %3 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 54 %4 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 55 %5 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 56 %6 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 57 %7 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 58 %.promoted.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 59 %.promoted51.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 60 %.promoted53.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 61 %.promoted55.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 62 %.promoted57.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 63 %.promoted59.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 64 %.promoted61.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 65 %.promoted63.i = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 66 br label %for.body.i 67 68for.body.i: ; preds = %for.body.i, %entry 69 %add.i64.i = phi <2 x double> [ %.promoted63.i, %entry ], [ %add.i.i, %for.body.i ] 70 %add.i3662.i = phi <2 x double> [ %.promoted61.i, %entry ], [ %add.i36.i, %for.body.i ] 71 %add.i3860.i = phi <2 x double> [ %.promoted59.i, %entry ], [ %add.i38.i, %for.body.i ] 72 %add.i4058.i = phi <2 x double> [ %.promoted57.i, %entry ], [ %add.i40.i, %for.body.i ] 73 %add.i4256.i = phi <2 x double> [ %.promoted55.i, %entry ], [ %add.i42.i, %for.body.i ] 74 %add.i4454.i = phi <2 x double> [ %.promoted53.i, %entry ], [ %add.i44.i, %for.body.i ] 75 %add.i4652.i = phi <2 x double> [ %.promoted51.i, %entry ], [ %add.i46.i, %for.body.i ] 76 %add.i4850.i = phi <2 x double> [ %.promoted.i, %entry ], [ %add.i48.i, %for.body.i ] 77 %i.049.i = phi i32 [ 0, %entry ], [ %inc.i, %for.body.i ] 78 %arrayidx.i = getelementptr inbounds [76800000 x <2 x double>], [76800000 x <2 x double>]* @"\01?m1@@3PAU__m128d@@A", i32 0, i32 %i.049.i 79 %8 = load <2 x double>, <2 x double>* %arrayidx.i, align 16, !tbaa !8 80 %mul.i.i = fmul <2 x double> %0, %8 81 %add.i48.i = fadd <2 x double> %add.i4850.i, %mul.i.i 82 %mul.i47.i = fmul <2 x double> %1, %8 83 %add.i46.i = fadd <2 x double> %add.i4652.i, %mul.i47.i 84 %mul.i45.i = fmul <2 x double> %2, %8 85 %add.i44.i = fadd <2 x double> %add.i4454.i, %mul.i45.i 86 %mul.i43.i = fmul <2 x double> %3, %8 87 %add.i42.i = fadd <2 x double> %add.i4256.i, %mul.i43.i 88 %mul.i41.i = fmul <2 x double> %4, %8 89 %add.i40.i = fadd <2 x double> %add.i4058.i, %mul.i41.i 90 %mul.i39.i = fmul <2 x double> %5, %8 91 %add.i38.i = fadd <2 x double> %add.i3860.i, %mul.i39.i 92 %mul.i37.i = fmul <2 x double> %6, %8 93 %add.i36.i = fsub <2 x double> %add.i3662.i, %mul.i37.i 94 %mul.i35.i = fmul <2 x double> %7, %8 95 %add.i.i = fadd <2 x double> %add.i64.i, %mul.i35.i 96 %inc.i = add nuw nsw i32 %i.049.i, 1 97 %exitcond.i = icmp eq i32 %inc.i, 76800000 98 br i1 %exitcond.i, label %loop.exit, label %for.body.i 99 100loop.exit: ; preds = %for.body.i 101 store <2 x double> %add.i48.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 102 store <2 x double> %add.i46.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 103 store <2 x double> %add.i46.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 104 store <2 x double> %add.i44.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 105 store <2 x double> %add.i42.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 106 store <2 x double> %add.i40.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 107 store <2 x double> %add.i38.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 108 store <2 x double> %add.i36.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 109 store <2 x double> %add.i.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 110 %call.i = tail call %struct._iobuf* @fopen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @"\01??_C@_09LAIDGMDM@?1dev?1null?$AA@", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @"\01??_C@_01NOFIACDB@w?$AA@", i32 0, i32 0)) #7 111 %call1.i = tail call i32 @fwrite(i8* bitcast ([8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A" to i8*), i32 16, i32 8, %struct._iobuf* %call.i) #7 112 %call2.i = tail call i32 @fclose(%struct._iobuf* %call.i) #7 113 ret i32 0 114} 115 116define void @init() local_unnamed_addr #1 { 117entry: 118 call void @llvm.memset.p0i8.i32(i8* align 16 bitcast ([8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A" to i8*), i8 0, i32 128, i1 false) 119 %call.i = tail call i64 @_time64(i64* null) 120 %conv = trunc i64 %call.i to i32 121 tail call void @srand(i32 %conv) 122 br label %for.body6 123 124for.body6: ; preds = %for.body6, %entry 125 %i2.051 = phi i32 [ 0, %entry ], [ %inc14, %for.body6 ] 126 %call7 = tail call i32 @rand() 127 %conv8 = sitofp i32 %call7 to double 128 %tmp.sroa.0.0.vec.insert = insertelement <2 x double> undef, double %conv8, i32 0 129 %call9 = tail call i32 @rand() 130 %conv10 = sitofp i32 %call9 to double 131 %tmp.sroa.0.8.vec.insert = insertelement <2 x double> %tmp.sroa.0.0.vec.insert, double %conv10, i32 1 132 %arrayidx12 = getelementptr inbounds [76800000 x <2 x double>], [76800000 x <2 x double>]* @"\01?m1@@3PAU__m128d@@A", i32 0, i32 %i2.051 133 store <2 x double> %tmp.sroa.0.8.vec.insert, <2 x double>* %arrayidx12, align 16, !tbaa !8 134 %inc14 = add nuw nsw i32 %i2.051, 1 135 %exitcond = icmp eq i32 %inc14, 76800000 136 br i1 %exitcond, label %for.body21.preheader, label %for.body6 137 138for.body21.preheader: ; preds = %for.body6 139 %call25 = tail call i32 @rand() 140 %conv26 = sitofp i32 %call25 to double 141 %tmp23.sroa.0.0.vec.insert = insertelement <2 x double> undef, double %conv26, i32 0 142 %call28 = tail call i32 @rand() 143 %conv29 = sitofp i32 %call28 to double 144 %tmp23.sroa.0.8.vec.insert = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert, double %conv29, i32 1 145 store <2 x double> %tmp23.sroa.0.8.vec.insert, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 146 %call25.1 = tail call i32 @rand() 147 %conv26.1 = sitofp i32 %call25.1 to double 148 %tmp23.sroa.0.0.vec.insert.1 = insertelement <2 x double> undef, double %conv26.1, i32 0 149 %call28.1 = tail call i32 @rand() 150 %conv29.1 = sitofp i32 %call28.1 to double 151 %tmp23.sroa.0.8.vec.insert.1 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.1, double %conv29.1, i32 1 152 store <2 x double> %tmp23.sroa.0.8.vec.insert.1, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 153 %call25.2 = tail call i32 @rand() 154 %conv26.2 = sitofp i32 %call25.2 to double 155 %tmp23.sroa.0.0.vec.insert.2 = insertelement <2 x double> undef, double %conv26.2, i32 0 156 %call28.2 = tail call i32 @rand() 157 %conv29.2 = sitofp i32 %call28.2 to double 158 %tmp23.sroa.0.8.vec.insert.2 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.2, double %conv29.2, i32 1 159 store <2 x double> %tmp23.sroa.0.8.vec.insert.2, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 160 %call25.3 = tail call i32 @rand() 161 %conv26.3 = sitofp i32 %call25.3 to double 162 %tmp23.sroa.0.0.vec.insert.3 = insertelement <2 x double> undef, double %conv26.3, i32 0 163 %call28.3 = tail call i32 @rand() 164 %conv29.3 = sitofp i32 %call28.3 to double 165 %tmp23.sroa.0.8.vec.insert.3 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.3, double %conv29.3, i32 1 166 store <2 x double> %tmp23.sroa.0.8.vec.insert.3, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 167 %call25.4 = tail call i32 @rand() 168 %conv26.4 = sitofp i32 %call25.4 to double 169 %tmp23.sroa.0.0.vec.insert.4 = insertelement <2 x double> undef, double %conv26.4, i32 0 170 %call28.4 = tail call i32 @rand() 171 %conv29.4 = sitofp i32 %call28.4 to double 172 %tmp23.sroa.0.8.vec.insert.4 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.4, double %conv29.4, i32 1 173 store <2 x double> %tmp23.sroa.0.8.vec.insert.4, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 174 %call25.5 = tail call i32 @rand() 175 %conv26.5 = sitofp i32 %call25.5 to double 176 %tmp23.sroa.0.0.vec.insert.5 = insertelement <2 x double> undef, double %conv26.5, i32 0 177 %call28.5 = tail call i32 @rand() 178 %conv29.5 = sitofp i32 %call28.5 to double 179 %tmp23.sroa.0.8.vec.insert.5 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.5, double %conv29.5, i32 1 180 store <2 x double> %tmp23.sroa.0.8.vec.insert.5, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 181 %call25.6 = tail call i32 @rand() 182 %conv26.6 = sitofp i32 %call25.6 to double 183 %tmp23.sroa.0.0.vec.insert.6 = insertelement <2 x double> undef, double %conv26.6, i32 0 184 %call28.6 = tail call i32 @rand() 185 %conv29.6 = sitofp i32 %call28.6 to double 186 %tmp23.sroa.0.8.vec.insert.6 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.6, double %conv29.6, i32 1 187 store <2 x double> %tmp23.sroa.0.8.vec.insert.6, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 188 %call25.7 = tail call i32 @rand() 189 %conv26.7 = sitofp i32 %call25.7 to double 190 %tmp23.sroa.0.0.vec.insert.7 = insertelement <2 x double> undef, double %conv26.7, i32 0 191 %call28.7 = tail call i32 @rand() 192 %conv29.7 = sitofp i32 %call28.7 to double 193 %tmp23.sroa.0.8.vec.insert.7 = insertelement <2 x double> %tmp23.sroa.0.0.vec.insert.7, double %conv29.7, i32 1 194 store <2 x double> %tmp23.sroa.0.8.vec.insert.7, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 195 ret void 196} 197 198; Function Attrs: norecurse nounwind 199define void @loop() local_unnamed_addr #2 { 200entry: 201 %0 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 202 %1 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 203 %2 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 204 %3 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 205 %4 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 206 %5 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 207 %6 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 208 %7 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?m2@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 209 %.promoted = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 210 %.promoted51 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 211 %.promoted53 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 212 %.promoted55 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 213 %.promoted57 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 214 %.promoted59 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 215 %.promoted61 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 216 %.promoted63 = load <2 x double>, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 217 br label %for.body 218 219for.cond.cleanup: ; preds = %for.body 220 store <2 x double> %add.i48, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 0), align 16, !tbaa !8 221 store <2 x double> %add.i46, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 1), align 16, !tbaa !8 222 store <2 x double> %add.i44, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 2), align 16, !tbaa !8 223 store <2 x double> %add.i42, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 3), align 16, !tbaa !8 224 store <2 x double> %add.i40, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 4), align 16, !tbaa !8 225 store <2 x double> %add.i38, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 5), align 16, !tbaa !8 226 store <2 x double> %add.i36, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 6), align 16, !tbaa !8 227 store <2 x double> %add.i, <2 x double>* getelementptr inbounds ([8 x <2 x double>], [8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A", i32 0, i32 7), align 16, !tbaa !8 228 ret void 229 230for.body: ; preds = %for.body, %entry 231 %add.i64 = phi <2 x double> [ %.promoted63, %entry ], [ %add.i, %for.body ] 232 %add.i3662 = phi <2 x double> [ %.promoted61, %entry ], [ %add.i36, %for.body ] 233 %add.i3860 = phi <2 x double> [ %.promoted59, %entry ], [ %add.i38, %for.body ] 234 %add.i4058 = phi <2 x double> [ %.promoted57, %entry ], [ %add.i40, %for.body ] 235 %add.i4256 = phi <2 x double> [ %.promoted55, %entry ], [ %add.i42, %for.body ] 236 %add.i4454 = phi <2 x double> [ %.promoted53, %entry ], [ %add.i44, %for.body ] 237 %add.i4652 = phi <2 x double> [ %.promoted51, %entry ], [ %add.i46, %for.body ] 238 %add.i4850 = phi <2 x double> [ %.promoted, %entry ], [ %add.i48, %for.body ] 239 %i.049 = phi i32 [ 0, %entry ], [ %inc, %for.body ] 240 %arrayidx = getelementptr inbounds [76800000 x <2 x double>], [76800000 x <2 x double>]* @"\01?m1@@3PAU__m128d@@A", i32 0, i32 %i.049 241 %8 = load <2 x double>, <2 x double>* %arrayidx, align 16, !tbaa !8 242 %mul.i = fmul <2 x double> %8, %0 243 %add.i48 = fadd <2 x double> %add.i4850, %mul.i 244 %mul.i47 = fmul <2 x double> %8, %1 245 %add.i46 = fadd <2 x double> %add.i4652, %mul.i47 246 %mul.i45 = fmul <2 x double> %8, %2 247 %add.i44 = fadd <2 x double> %add.i4454, %mul.i45 248 %mul.i43 = fmul <2 x double> %8, %3 249 %add.i42 = fadd <2 x double> %add.i4256, %mul.i43 250 %mul.i41 = fmul <2 x double> %8, %4 251 %add.i40 = fadd <2 x double> %add.i4058, %mul.i41 252 %mul.i39 = fmul <2 x double> %8, %5 253 %add.i38 = fadd <2 x double> %add.i3860, %mul.i39 254 %mul.i37 = fmul <2 x double> %8, %6 255 %add.i36 = fsub <2 x double> %add.i3662, %mul.i37 256 %mul.i35 = fmul <2 x double> %8, %7 257 %add.i = fadd <2 x double> %add.i64, %mul.i35 258 %inc = add nuw nsw i32 %i.049, 1 259 %exitcond = icmp eq i32 %inc, 76800000 260 br i1 %exitcond, label %for.cond.cleanup, label %for.body 261} 262 263; Function Attrs: nounwind 264define void @"\01?dump@@YAXXZ"() local_unnamed_addr #3 { 265entry: 266 %call = tail call %struct._iobuf* @fopen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @"\01??_C@_09LAIDGMDM@?1dev?1null?$AA@", i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @"\01??_C@_01NOFIACDB@w?$AA@", i32 0, i32 0)) 267 %call1 = tail call i32 @fwrite(i8* bitcast ([8 x <2 x double>]* @"\01?v@@3PAU__m128d@@A" to i8*), i32 16, i32 8, %struct._iobuf* %call) 268 %call2 = tail call i32 @fclose(%struct._iobuf* %call) 269 ret void 270} 271 272declare void @srand(i32) local_unnamed_addr #4 273 274declare i32 @rand() local_unnamed_addr #4 275 276; Function Attrs: nounwind 277declare noalias %struct._iobuf* @fopen(i8* nocapture readonly, i8* nocapture readonly) local_unnamed_addr #5 278 279; Function Attrs: nounwind 280declare i32 @fwrite(i8* nocapture, i32, i32, %struct._iobuf* nocapture) local_unnamed_addr #5 281 282; Function Attrs: nounwind 283declare i32 @fclose(%struct._iobuf* nocapture) local_unnamed_addr #5 284 285declare i64 @_time64(i64*) local_unnamed_addr #4 286 287; Function Attrs: argmemonly nounwind 288declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) #6 289 290attributes #0 = { norecurse "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 291attributes #1 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 292attributes #2 = { norecurse nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 293attributes #3 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 294attributes #4 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 295attributes #5 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="pentium4" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } 296attributes #6 = { argmemonly nounwind } 297attributes #7 = { nounwind } 298 299!llvm.linker.options = !{!0, !1, !2, !3, !4} 300!llvm.module.flags = !{!5, !6} 301!llvm.ident = !{!7} 302 303!0 = !{!"/FAILIFMISMATCH:\22_MSC_VER=1900\22"} 304!1 = !{!"/FAILIFMISMATCH:\22_ITERATOR_DEBUG_LEVEL=0\22"} 305!2 = !{!"/FAILIFMISMATCH:\22RuntimeLibrary=MT_StaticRelease\22"} 306!3 = !{!"/DEFAULTLIB:libcpmt.lib"} 307!4 = !{!"/FAILIFMISMATCH:\22_CRT_STDIO_ISO_WIDE_SPECIFIERS=0\22"} 308!5 = !{i32 1, !"NumRegisterParameters", i32 0} 309!6 = !{i32 1, !"wchar_size", i32 2} 310!7 = !{!"clang version 5.0.0 (cfe/trunk 305640)"} 311!8 = !{!9, !9, i64 0} 312!9 = !{!"omnipotent char", !10, i64 0} 313!10 = !{!"Simple C++ TBAA"} 314