brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · 9ec9804 Raw
184 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly<no-default-opts>' -S -polly-codegen-add-debug-printing -polly-ignore-aliasing < %s | FileCheck %s2 3;    #define N 104;    void foo(float A[restrict], double B[restrict], char C[restrict],5;             int D[restrict], long E[restrict]) {6;      for (long i = 0; i < N; i++)7;        A[i] += B[i] + C[i] + D[i] + E[i];8;    }9;10;    int main() {11;      float A[N];12;      double B[N];13;      char C[N];14;      int D[N];15;      long E[N];16;17;      for (long i = 0; i < N; i++) {18;        __sync_synchronize();19;        A[i] = B[i] = C[i] = D[i] = E[i] = 42;20;      }21;22;      foo(A, B, C, D, E);23;24;      return A[8];25;    }26 27; CHECK: @0 = private unnamed_addr addrspace(4) constant [11 x i8] c"Load from \00"28; CHECK: @1 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"29; CHECK: @2 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"30; CHECK: @3 = private unnamed_addr constant [12 x i8] c"%s%ld%s%f%s\00"31; CHECK: @4 = private unnamed_addr addrspace(4) constant [11 x i8] c"Load from \00"32; CHECK: @5 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"33; CHECK: @6 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"34; CHECK: @7 = private unnamed_addr constant [13 x i8] c"%s%ld%s%ld%s\00"35; CHECK: @8 = private unnamed_addr addrspace(4) constant [11 x i8] c"Load from \00"36; CHECK: @9 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"37; CHECK: @10 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"38; CHECK: @11 = private unnamed_addr constant [13 x i8] c"%s%ld%s%ld%s\00"39; CHECK: @12 = private unnamed_addr addrspace(4) constant [11 x i8] c"Load from \00"40; CHECK: @13 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"41; CHECK: @14 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"42; CHECK: @15 = private unnamed_addr constant [13 x i8] c"%s%ld%s%ld%s\00"43; CHECK: @16 = private unnamed_addr addrspace(4) constant [11 x i8] c"Load from \00"44; CHECK: @17 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"45; CHECK: @18 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"46; CHECK: @19 = private unnamed_addr constant [12 x i8] c"%s%ld%s%f%s\00"47; CHECK: @20 = private unnamed_addr addrspace(4) constant [11 x i8] c"Store to  \00"48; CHECK: @21 = private unnamed_addr addrspace(4) constant [3 x i8] c": \00"49; CHECK: @22 = private unnamed_addr addrspace(4) constant [2 x i8] c"\0A\00"50; CHECK: @23 = private unnamed_addr constant [12 x i8] c"%s%ld%s%f%s\00"51 52; CHECK: %0 = shl nuw nsw i64 %polly.indvar, 353; CHECK: %scevgep = getelementptr i8, ptr %B, i64 %054; CHECK: %tmp3_p_scalar_ = load double, ptr %scevgep, align 8, !alias.scope !2, !noalias !555; CHECK: %1 = ptrtoint ptr %scevgep to i6456; CHECK: %2 = call i32 (...) @printf(ptr @3, ptr addrspace(4) @0, i64 %1, ptr addrspace(4) @1, double %tmp3_p_scalar_, ptr addrspace(4) @2)57; CHECK: %3 = call i32 @fflush(ptr null)58; CHECK: %scevgep1 = getelementptr i8, ptr %C, i64 %polly.indvar59; CHECK: %tmp5_p_scalar_ = load i8, ptr %scevgep1, align 1, !alias.scope !10, !noalias !1160; CHECK: %4 = ptrtoint ptr %scevgep1 to i6461; CHECK: %5 = sext i8 %tmp5_p_scalar_ to i6462; CHECK: %6 = call i32 (...) @printf(ptr @7, ptr addrspace(4) @4, i64 %4, ptr addrspace(4) @5, i64 %5, ptr addrspace(4) @6)63; CHECK: %7 = call i32 @fflush(ptr null)64; CHECK: %p_tmp6 = sitofp i8 %tmp5_p_scalar_ to double65; CHECK: %p_tmp7 = fadd double %tmp3_p_scalar_, %p_tmp666; CHECK: %8 = shl nuw nsw i64 %polly.indvar, 267; CHECK: %scevgep2 = getelementptr i8, ptr %D, i64 %868; CHECK: %tmp9_p_scalar_ = load i32, ptr %scevgep2, align 4, !alias.scope !12, !noalias !1369; CHECK: %9 = ptrtoint ptr %scevgep2 to i6470; CHECK: %10 = sext i32 %tmp9_p_scalar_ to i6471; CHECK: %11 = call i32 (...) @printf(ptr @11, ptr addrspace(4) @8, i64 %9, ptr addrspace(4) @9, i64 %10, ptr addrspace(4) @10)72; CHECK: %12 = call i32 @fflush(ptr null)73; CHECK: %p_tmp10 = sitofp i32 %tmp9_p_scalar_ to double74; CHECK: %p_tmp11 = fadd double %p_tmp7, %p_tmp1075; CHECK: %13 = shl nuw nsw i64 %polly.indvar, 376; CHECK: %scevgep3 = getelementptr i8, ptr %E, i64 %1377; CHECK: %tmp13_p_scalar_ = load i64, ptr %scevgep3, align 8, !alias.scope !14, !noalias !1578; CHECK: %14 = ptrtoint ptr %scevgep3 to i6479; CHECK: %15 = call i32 (...) @printf(ptr @15, ptr addrspace(4) @12, i64 %14, ptr addrspace(4) @13, i64 %tmp13_p_scalar_, ptr addrspace(4) @14)80; CHECK: %16 = call i32 @fflush(ptr null)81; CHECK: %p_tmp14 = sitofp i64 %tmp13_p_scalar_ to double82; CHECK: %p_tmp15 = fadd double %p_tmp11, %p_tmp1483; CHECK: %17 = shl nuw nsw i64 %polly.indvar, 284; CHECK: %scevgep4 = getelementptr i8, ptr %A, i64 %1785; CHECK: %tmp17_p_scalar_ = load float, ptr %scevgep4, align 4, !alias.scope !16, !noalias !1786; CHECK: %18 = ptrtoint ptr %scevgep4 to i6487; CHECK: %19 = fpext float %tmp17_p_scalar_ to double88; CHECK: %20 = call i32 (...) @printf(ptr @19, ptr addrspace(4) @16, i64 %18, ptr addrspace(4) @17, double %19, ptr addrspace(4) @18)89; CHECK: %21 = call i32 @fflush(ptr null)90; CHECK: %p_tmp18 = fpext float %tmp17_p_scalar_ to double91; CHECK: %p_tmp19 = fadd double %p_tmp18, %p_tmp1592; CHECK: %p_tmp20 = fptrunc double %p_tmp19 to float93; CHECK: %22 = ptrtoint ptr %scevgep4 to i6494; CHECK: %23 = fpext float %p_tmp20 to double95; CHECK: %24 = call i32 (...) @printf(ptr @23, ptr addrspace(4) @20, i64 %22, ptr addrspace(4) @21, double %23, ptr addrspace(4) @22)96; CHECK: %25 = call i32 @fflush(ptr null)97 98target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"99 100define void @foo(ptr noalias %A, ptr noalias %B, ptr noalias %C, ptr noalias %D, ptr noalias %E) {101bb:102  br label %bb1103 104bb1:                                              ; preds = %bb21, %bb105  %i.0 = phi i64 [ 0, %bb ], [ %tmp22, %bb21 ]106  %exitcond = icmp ne i64 %i.0, 10107  br i1 %exitcond, label %bb2, label %bb23108 109bb2:                                              ; preds = %bb1110  %tmp = getelementptr inbounds double, ptr %B, i64 %i.0111  %tmp3 = load double, ptr %tmp, align 8112  %tmp4 = getelementptr inbounds i8, ptr %C, i64 %i.0113  %tmp5 = load i8, ptr %tmp4, align 1114  %tmp6 = sitofp i8 %tmp5 to double115  %tmp7 = fadd double %tmp3, %tmp6116  %tmp8 = getelementptr inbounds i32, ptr %D, i64 %i.0117  %tmp9 = load i32, ptr %tmp8, align 4118  %tmp10 = sitofp i32 %tmp9 to double119  %tmp11 = fadd double %tmp7, %tmp10120  %tmp12 = getelementptr inbounds i64, ptr %E, i64 %i.0121  %tmp13 = load i64, ptr %tmp12, align 8122  %tmp14 = sitofp i64 %tmp13 to double123  %tmp15 = fadd double %tmp11, %tmp14124  %tmp16 = getelementptr inbounds float, ptr %A, i64 %i.0125  %tmp17 = load float, ptr %tmp16, align 4126  %tmp18 = fpext float %tmp17 to double127  %tmp19 = fadd double %tmp18, %tmp15128  %tmp20 = fptrunc double %tmp19 to float129  store float %tmp20, ptr %tmp16, align 4130  br label %bb21131 132bb21:                                             ; preds = %bb2133  %tmp22 = add nsw i64 %i.0, 1134  br label %bb1135 136bb23:                                             ; preds = %bb1137  ret void138}139 140define i32 @main() {141bb:142  %A = alloca [10 x float], align 16143  %B = alloca [10 x double], align 16144  %C = alloca [10 x i8], align 1145  %D = alloca [10 x i32], align 16146  %E = alloca [10 x i64], align 16147  br label %bb1148 149bb1:                                              ; preds = %bb7, %bb150  %i.0 = phi i64 [ 0, %bb ], [ %tmp8, %bb7 ]151  %exitcond = icmp ne i64 %i.0, 10152  br i1 %exitcond, label %bb2, label %bb9153 154bb2:                                              ; preds = %bb1155  fence seq_cst156  %tmp = getelementptr inbounds [10 x i64], ptr %E, i64 0, i64 %i.0157  store i64 42, ptr %tmp, align 8158  %tmp3 = getelementptr inbounds [10 x i32], ptr %D, i64 0, i64 %i.0159  store i32 42, ptr %tmp3, align 4160  %tmp4 = getelementptr inbounds [10 x i8], ptr %C, i64 0, i64 %i.0161  store i8 42, ptr %tmp4, align 1162  %tmp5 = getelementptr inbounds [10 x double], ptr %B, i64 0, i64 %i.0163  store double 4.200000e+01, ptr %tmp5, align 8164  %tmp6 = getelementptr inbounds [10 x float], ptr %A, i64 0, i64 %i.0165  store float 4.200000e+01, ptr %tmp6, align 4166  br label %bb7167 168bb7:                                              ; preds = %bb2169  %tmp8 = add nsw i64 %i.0, 1170  br label %bb1171 172bb9:                                              ; preds = %bb1173  %tmp10 = getelementptr inbounds [10 x float], ptr %A, i64 0, i64 0174  %tmp11 = getelementptr inbounds [10 x double], ptr %B, i64 0, i64 0175  %tmp12 = getelementptr inbounds [10 x i8], ptr %C, i64 0, i64 0176  %tmp13 = getelementptr inbounds [10 x i32], ptr %D, i64 0, i64 0177  %tmp14 = getelementptr inbounds [10 x i64], ptr %E, i64 0, i64 0178  call void @foo(ptr %tmp10, ptr %tmp11, ptr %tmp12, ptr %tmp13, ptr %tmp14)179  %tmp15 = getelementptr inbounds [10 x float], ptr %A, i64 0, i64 8180  %tmp16 = load float, ptr %tmp15, align 16181  %tmp17 = fptosi float %tmp16 to i32182  ret i32 %tmp17183}184