Changes between Version 9 and Version 10 of SIMDVectorExampleInLLVM


Ignore:
Timestamp:
Oct 26, 2011 2:42:41 AM (2 years ago)
Author:
pmonday
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SIMDVectorExampleInLLVM

    v9 v10  
    204204int main() 
    205205{ 
    206    int sz = 40000; 
     206   int sz = 128; 
    207207   float x[sz], y[sz], z[sz]; 
    208208   int i; 
     
    227227The resulting optimized LLVM code is as follows: 
    228228{{{ 
    229 ; ModuleID = '/tmp/webcompile/_2358_0.bc' 
     229; ModuleID = '/tmp/webcompile/_15374_0.bc' 
    230230target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 
    231231target triple = "x86_64-unknown-linux-gnu" 
    232232 
    233 @.str = private constant [13 x i8] c"%f %f %f %f\0A\00" 
     233@.str2 = private unnamed_addr constant [13 x i8] c"%f %f %f %f\0A\00" 
     234@str = internal constant [24 x i8] c"Entering initialization\00" 
     235@str3 = internal constant [18 x i8] c"Entering addition\00" 
    234236 
    235237define i32 @main() nounwind { 
     
    238240  %2 = alloca [40000 x float], align 16 
    239241  %3 = alloca [40000 x float], align 16 
     242  %puts = call i32 @puts(i8* getelementptr inbounds ([24 x i8]* @str, i64 0, i64 0)) 
    240243  br label %4 
    241244 
    242 .preheader:                                       ; preds = %4 
     245; <label>:4                                       ; preds = %4, %0 
     246  %indvar21 = phi i64 [ 0, %0 ], [ %indvar.next22, %4 ] 
     247  %i.06 = trunc i64 %indvar21 to i32 
     248  %scevgep25 = getelementptr [40000 x float]* %2, i64 0, i64 %indvar21 
     249  %scevgep26 = getelementptr [40000 x float]* %1, i64 0, i64 %indvar21 
     250  %tmp27 = add i64 %indvar21, 40000 
     251  %tmp28 = trunc i64 %tmp27 to i32 
     252  %5 = sitofp i32 %i.06 to float 
     253  store float %5, float* %scevgep26, align 4, !tbaa !0 
     254  %6 = sitofp i32 %tmp28 to float 
     255  store float %6, float* %scevgep25, align 4, !tbaa !0 
     256  %indvar.next22 = add i64 %indvar21, 1 
     257  %exitcond23 = icmp eq i64 %indvar.next22, 40000 
     258  br i1 %exitcond23, label %7, label %4 
     259 
     260; <label>:7                                       ; preds = %4 
    243261  %.sub3 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 0 
    244   br label %7 
    245  
    246 ; <label>:4                                       ; preds = %4, %0 
    247   %indvar20 = phi i64 [ 0, %0 ], [ %indvar.next21, %4 ] 
    248   %i.05 = trunc i64 %indvar20 to i32 
    249   %scevgep24 = getelementptr [40000 x float]* %2, i64 0, i64 %indvar20 
    250   %scevgep25 = getelementptr [40000 x float]* %1, i64 0, i64 %indvar20 
    251   %tmp26 = add i64 %indvar20, 40000 
    252   %tmp27 = trunc i64 %tmp26 to i32 
    253   %5 = sitofp i32 %i.05 to float 
    254   store float %5, float* %scevgep25, align 4, !tbaa !0 
    255   %6 = sitofp i32 %tmp27 to float 
    256   store float %6, float* %scevgep24, align 4, !tbaa !0 
    257   %indvar.next21 = add i64 %indvar20, 1 
    258   %exitcond22 = icmp eq i64 %indvar.next21, 40000 
    259   br i1 %exitcond22, label %.preheader, label %4 
    260  
    261 ; <label>:7                                       ; preds = %7, %.preheader 
    262   %indvar = phi i64 [ 0, %.preheader ], [ %indvar.next, %7 ] 
     262  %puts4 = call i32 @puts(i8* getelementptr inbounds ([18 x i8]* @str3, i64 0, i64 0)) 
     263  br label %8 
     264 
     265; <label>:8                                       ; preds = %8, %7 
     266  %indvar = phi i64 [ 0, %7 ], [ %indvar.next, %8 ] 
    263267  %tmp = shl i64 %indvar, 2 
    264268  %scevgep = getelementptr [40000 x float]* %3, i64 0, i64 %tmp 
    265   %scevgep6 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp 
    266   %scevgep7 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp 
    267   %tmp828 = or i64 %tmp, 1 
    268   %scevgep9 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp828 
    269   %scevgep10 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp828 
    270   %scevgep11 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp828 
    271   %tmp1229 = or i64 %tmp, 2 
    272   %scevgep13 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp1229 
    273   %scevgep14 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp1229 
    274   %scevgep15 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp1229 
    275   %tmp1630 = or i64 %tmp, 3 
    276   %scevgep17 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp1630 
    277   %scevgep18 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp1630 
    278   %scevgep19 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp1630 
    279   %8 = load float* %scevgep7, align 16, !tbaa !0 
    280   %9 = load float* %scevgep6, align 16, !tbaa !0 
    281   %10 = fadd float %8, %9 
    282   store float %10, float* %scevgep, align 16, !tbaa !0 
    283   %11 = load float* %scevgep11, align 4, !tbaa !0 
    284   %12 = load float* %scevgep10, align 4, !tbaa !0 
    285   %13 = fadd float %11, %12 
    286   store float %13, float* %scevgep9, align 4, !tbaa !0 
    287   %14 = load float* %scevgep15, align 8, !tbaa !0 
    288   %15 = load float* %scevgep14, align 8, !tbaa !0 
    289   %16 = fadd float %14, %15 
    290   store float %16, float* %scevgep13, align 8, !tbaa !0 
    291   %17 = load float* %scevgep19, align 4, !tbaa !0 
    292   %18 = load float* %scevgep18, align 4, !tbaa !0 
    293   %19 = fadd float %17, %18 
    294   store float %19, float* %scevgep17, align 4, !tbaa !0 
     269  %scevgep7 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp 
     270  %scevgep8 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp 
     271  %tmp929 = or i64 %tmp, 1 
     272  %scevgep10 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp929 
     273  %scevgep11 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp929 
     274  %scevgep12 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp929 
     275  %tmp1330 = or i64 %tmp, 2 
     276  %scevgep14 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp1330 
     277  %scevgep15 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp1330 
     278  %scevgep16 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp1330 
     279  %tmp1731 = or i64 %tmp, 3 
     280  %scevgep18 = getelementptr [40000 x float]* %3, i64 0, i64 %tmp1731 
     281  %scevgep19 = getelementptr [40000 x float]* %2, i64 0, i64 %tmp1731 
     282  %scevgep20 = getelementptr [40000 x float]* %1, i64 0, i64 %tmp1731 
     283  %9 = load float* %scevgep8, align 16, !tbaa !0 
     284  %10 = load float* %scevgep7, align 16, !tbaa !0 
     285  %11 = fadd float %9, %10 
     286  store float %11, float* %scevgep, align 16, !tbaa !0 
     287  %12 = load float* %scevgep12, align 4, !tbaa !0 
     288  %13 = load float* %scevgep11, align 4, !tbaa !0 
     289  %14 = fadd float %12, %13 
     290  store float %14, float* %scevgep10, align 4, !tbaa !0 
     291  %15 = load float* %scevgep16, align 8, !tbaa !0 
     292  %16 = load float* %scevgep15, align 8, !tbaa !0 
     293  %17 = fadd float %15, %16 
     294  store float %17, float* %scevgep14, align 8, !tbaa !0 
     295  %18 = load float* %scevgep20, align 4, !tbaa !0 
     296  %19 = load float* %scevgep19, align 4, !tbaa !0 
     297  %20 = fadd float %18, %19 
     298  store float %20, float* %scevgep18, align 4, !tbaa !0 
    295299  %indvar.next = add i64 %indvar, 1 
    296300  %exitcond = icmp eq i64 %indvar.next, 10000 
    297   br i1 %exitcond, label %20, label %7 
    298  
    299 ; <label>:20                                      ; preds = %7 
    300   %21 = load float* %.sub3, align 16, !tbaa !0 
    301   %22 = fpext float %21 to double 
    302   %23 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 1 
    303   %24 = load float* %23, align 4, !tbaa !0 
    304   %25 = fpext float %24 to double 
    305   %26 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 2 
    306   %27 = load float* %26, align 8, !tbaa !0 
    307   %28 = fpext float %27 to double 
    308   %29 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 3 
    309   %30 = load float* %29, align 4, !tbaa !0 
    310   %31 = fpext float %30 to double 
    311   %32 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i64 0, i64 0), double %22, double %25, double %28, double %31) nounwind 
     301  br i1 %exitcond, label %21, label %8 
     302 
     303; <label>:21                                      ; preds = %8 
     304  %22 = load float* %.sub3, align 16, !tbaa !0 
     305  %23 = fpext float %22 to double 
     306  %24 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 1 
     307  %25 = load float* %24, align 4, !tbaa !0 
     308  %26 = fpext float %25 to double 
     309  %27 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 2 
     310  %28 = load float* %27, align 8, !tbaa !0 
     311  %29 = fpext float %28 to double 
     312  %30 = getelementptr inbounds [40000 x float]* %3, i64 0, i64 3 
     313  %31 = load float* %30, align 4, !tbaa !0 
     314  %32 = fpext float %31 to double 
     315  %33 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str2, i64 0, i64 0), double %23, double %26, double %29, double %32) nounwind 
    312316  ret i32 0 
    313317} 
    314318 
    315319declare i32 @printf(i8* nocapture, ...) nounwind 
     320 
     321declare i32 @puts(i8* nocapture) nounwind 
    316322 
    317323!0 = metadata !{metadata !"float", metadata !1} 
     
    323329 
    324330{{{ 
    325  
     331; ModuleID = '/tmp/webcompile/_15374_0.bc' 
     332target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 
     333target triple = "x86_64-unknown-linux-gnu" 
     334 
     335@.str2 = private unnamed_addr constant [13 x i8] c"%f %f %f %f\0A\00" 
     336@str = internal constant [24 x i8] c"Entering initialization\00" 
     337@str3 = internal constant [18 x i8] c"Entering addition\00" 
     338 
     339define i32 @main() nounwind { 
     340; <label>:0 
     341  %1 = alloca <128 x float>, align 16 
     342  %2 = alloca <128 x float>, align 16 
     343  %3 = alloca <128 x float>, align 16 
     344  %puts = call i32 @puts(i8* getelementptr inbounds ([24 x i8]* @str, i64 0, i64 0)) 
     345  br label %4 
     346 
     347; <label>:4                                       ; preds = %4, %0 
     348  %indvar21 = phi i64 [ 0, %0 ], [ %indvar.next22, %4 ] 
     349  %i.06 = trunc i64 %indvar21 to i32 
     350  %scevgep25 = getelementptr <128 x float>* %2, i64 0, i64 %indvar21 
     351  %scevgep26 = getelementptr <128 x float>* %1, i64 0, i64 %indvar21 
     352  %tmp27 = add i64 %indvar21, 128 
     353  %tmp28 = trunc i64 %tmp27 to i32 
     354  %5 = sitofp i32 %i.06 to float 
     355  store float %5, float* %scevgep26, align 4, !tbaa !0 
     356  %6 = sitofp i32 %tmp28 to float 
     357  store float %6, float* %scevgep25, align 4, !tbaa !0 
     358  %indvar.next22 = add i64 %indvar21, 1 
     359  %exitcond23 = icmp eq i64 %indvar.next22, 128 
     360  br i1 %exitcond23, label %7, label %4 
     361 
     362; <label>:7                                       ; preds = %4 
     363  %.sub3 = getelementptr inbounds <128 x float>* %3, i64 0, i64 0 
     364  %puts4 = call i32 @puts(i8* getelementptr inbounds ([18 x i8]* @str3, i64 0, i64 0)) 
     365  br label %8 
     366 
     367; <label>:8                                       ; preds = %8, %7 
     368;  %indvar = phi i64 [ 0, %7 ], [ %indvar.next, %8 ] 
     369 
     370 
     371;  %indvar.next = add i64 %indvar, 1 
     372;  %exitcond = icmp eq i64 %indvar.next, 10000 
     373;  br i1 %exitcond, label %9, label %8 
     374   br label %9 
     375 
     376; <label>:9                                      ; preds = %8 
     377  %xs = load <128 x float>* %1 
     378  %ys = load <128 x float>* %2 
     379  %zs = fadd <128 x float> %xs, %ys 
     380  store <128 x float> %zs, <128 x float>* %3 
     381 
     382  %10 = load float* %.sub3, align 16, !tbaa !0 
     383  %11 = fpext float %10 to double 
     384  %12 = getelementptr inbounds <128 x float>* %3, i64 0, i64 1 
     385  %13 = load float* %12, align 4, !tbaa !0 
     386  %14 = fpext float %13 to double 
     387  %15 = getelementptr inbounds <128 x float>* %3, i64 0, i64 2 
     388  %16 = load float* %15, align 8, !tbaa !0 
     389  %17 = fpext float %16 to double 
     390  %18 = getelementptr inbounds <128 x float>* %3, i64 0, i64 3 
     391  %19 = load float* %18, align 4, !tbaa !0 
     392  %20 = fpext float %19 to double 
     393  %21 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str2, i64 0, i64 0), double %11, double %14, double %17, double %20) nounwind 
     394  ret i32 0 
     395} 
     396 
     397declare i32 @printf(i8* nocapture, ...) nounwind 
     398 
     399declare i32 @puts(i8* nocapture) nounwind 
     400 
     401!0 = metadata !{metadata !"float", metadata !1} 
     402!1 = metadata !{metadata !"omnipotent char", metadata !2} 
     403!2 = metadata !{metadata !"Simple C/C++ TBAA", null} 
    326404}}} 
    327405