Skip to content

From .cpp to Data Flow Graph (DFG)

yyan7223 edited this page Jul 18, 2023 · 2 revisions

kernel.cpp

for (i = 0; i < NTAPS; ++i) {
    output[j] += input[i] * coefficient[i];
}

LLVM intermediate Representation (IR)

*** current basic block:   %6 = phi float [ %4, %3 ], [ %13, %5 ]   
****** succ bb:   ret void 
****** succ bb:   %6 = phi float [ %4, %3 ], [ %13, %5 ]

%6 = phi float [ %4, %3 ], [ %13, %5 ]  
%7 = phi i64 [ 0, %3 ], [ %14, %5 ]  
%8 = getelementptr inbounds float, float* %0, i64 %7  
%9 = load float, float* %8, align 4, !tbaa !2  
%10 = getelementptr inbounds float, float* %2, i64 %7  
%11 = load float, float* %10, align 4, !tbaa !2  
%12 = fmul float %9, %11  
%13 = fadd float %6, %12  
store float %13, float* %1, align 4, !tbaa !2  
%14 = add nuw nsw i64 %7, 1  
%15 = icmp eq i64 %14, 32  
br i1 %15, label %16, label %5, !llvm.loop !6

ctrl to:   %6 = phi float [ %4, %3 ], [ %13, %5 ];  front:   %6 = phi float [ %4, %3 ], [ %13, %5 ];  // 
check inst:   %6 = phi float [ %4, %3 ], [ %13, %5 ]
!!!!!!! construct ctrl flow:   br i1 %15, label %16, label %5, !llvm.loop !6->  %6 = phi float [ %4, %3 ], [ %13, %5 ]
ctrl to:   %7 = phi i64 [ 0, %3 ], [ %14, %5 ];  
check inst:   %7 = phi i64 [ 0, %3 ], [ %14, %5 ]
!!!!!!! construct ctrl flow:   br i1 %15, label %16, label %5, !llvm.loop !6->  %7 = phi i64 [ 0, %3 ], [ %14, %5 ]

Data FLow Graph (DFG)

image

Clone this wiki locally