code: def __call__(self, *bufs, vals: Tuple[int, ...] = (), wait=False):
      self.cfunc = ctypes.CFUNCTYPE(
          ctypes.c_int,
          *([ctypes.c_void_p] * len(bufs)),
          *([ctypes.c_int32] * len(vals)),
      )(self.fxn)
      return cpu_time_execution(
          lambda: self.cfunc(*bufs, *vals), enable=wait
      )
  
file_path: tinygrad/tinygrad/runtime/ops_llvm.py
imports: from __future__ import annotations
  import ctypes, functools
  from typing import Tuple
  from tinygrad.device import Compiled, MallocAllocator
  from tinygrad.helpers import DEBUG, cpu_time_execution
  from tinygrad.codegen.kernel import LinearizerOptions
  from tinygrad.renderer.llvmir import uops_to_llvm_ir
  import llvmlite.binding
label_desc: Use image node_id 2 for calling the LLVMProgram obj's underlying member method code with example usage: obj.__call__() and returns: cpu_time_execution