Home | History | Annotate | Download | only in X86
      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 
     31 target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
     32 target 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
     47 define i32 @main() local_unnamed_addr #0 {
     48 entry:
     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 
     68 for.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 
    100 loop.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 
    116 define void @init() local_unnamed_addr #1 {
    117 entry:
    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 
    124 for.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 
    138 for.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
    199 define void @loop() local_unnamed_addr #2 {
    200 entry:
    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 
    219 for.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 
    230 for.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
    264 define void @"\01?dump@@YAXXZ"() local_unnamed_addr #3 {
    265 entry:
    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 
    272 declare void @srand(i32) local_unnamed_addr #4
    273 
    274 declare i32 @rand() local_unnamed_addr #4
    275 
    276 ; Function Attrs: nounwind
    277 declare noalias %struct._iobuf* @fopen(i8* nocapture readonly, i8* nocapture readonly) local_unnamed_addr #5
    278 
    279 ; Function Attrs: nounwind
    280 declare i32 @fwrite(i8* nocapture, i32, i32, %struct._iobuf* nocapture) local_unnamed_addr #5
    281 
    282 ; Function Attrs: nounwind
    283 declare i32 @fclose(%struct._iobuf* nocapture) local_unnamed_addr #5
    284 
    285 declare i64 @_time64(i64*) local_unnamed_addr #4
    286 
    287 ; Function Attrs: argmemonly nounwind
    288 declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) #6
    289 
    290 attributes #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" }
    291 attributes #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" }
    292 attributes #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" }
    293 attributes #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" }
    294 attributes #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" }
    295 attributes #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" }
    296 attributes #6 = { argmemonly nounwind }
    297 attributes #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