SIGNATURE SKETCH PROGRAM • Enumerative search for solutions • Constraints on type propagation • Test results using I/O examples define void @gemv(i32 %M, i32 %N, float %alpha, fl float %beta, float* %y) { entry: br label %header exit: ret void header: br label %loop_check body_pre: %0 = getelementptr float, float* %y, i32 %iter %1 = load float, float* %0 %2 = fmul float %beta, %1 %3 = fsub float %alpha, %1 %4 = fmul float %3, %9 br label %header1 body_post: %5 = getelementptr float, float* %y, i32 %iter %6 = fmul float %1, %1 %7 = fsub float %1, %beta %8 = fmul float %3, %20 store float %20, float* %5 br label %loop_check loop_exit: br label %exit loop_check: %body_post %9 = phi float [ %alpha, %header ], [ %2, %body_ %iter = phi i32 [ 0, %header ], [ %next_iter, %b %next_iter = add i32 %iter, 1 %10 = icmp slt i32 %iter, %M br i1 %10, label %body_pre, label %loop_exit header1: br label %loop_check5 body_pre2: %11 = getelementptr float, float* %x, i32 %iter6 %12 = load float, float* %11 %13 = mul i32 %iter, %N %14 = add i32 %iter6, %13 %15 = getelementptr float, float* %A, i32 %14 %16 = load float, float* %15 %17 = fmul float %alpha, %12 %18 = fmul float %17, %16 %19 = fadd float %18, %20 br label %body_post3 body_post3: br label %loop_check5 loop_exit4: br label %body_post