Changes between Version 9 and Version 10 of SIMDVectorExampleInLLVM


Ignore:
Timestamp:
Oct 26, 2011 2:42:41 AM (4 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