llvm events implementation