For testing purposes I need a way to build and install FileCheck and yaml2obj. I could either make FileCheck an LLVM tool or make obj2yaml and yaml2obj utilities. I think the distinction is rather arbitrary but my understanding is that tools are things meant for the toolchain while utilities are more used for things like testing, which is the case here. The functional difference is that they'll end up in the ${LLVM_UTILS_INSTALL_DIR} which defaults to the ${LLVM_TOOLS_INSTALL_DIR}. Unless you specify a different value or you added obj2yaml and yaml2obj to LLVM_TOOLCHAIN_TOOLS this change should make no difference.
Another option would be to get rid of this distinction altogether and just have tools. This would simplify the CMake logic but would mean you could no longer specify a separate ${LLVM_UTILS_INSTALL_DIR}.