A little correction: target_compile_definitions supports -D flag as part of arguments (I confuse with add_compile_definitions).
Now, I don’t know LLVM package. But if LLVM_DEFINITIONS is specified as a string, I think target_compile_definitions(foo PRIVATE ${LLVM_DEFINITIONS}) is OK.
But, it seems there is a bug in the parsing of the arguments. As you already discovered. If a definition has a value, the rest of the arguments are included as part of the value. So I suggest you to create a bug for that.
And as a workaround, use separate_arguments:
set (CLEAN_DEFS ${LLVM_DEFINITIONS})
separate_arguments(CLEAN_DEFS)
target_compile_definitions(target PRIVATE ${CLEAN_DEFS})