Metadata can be constructed in a few different ways (See below).
After which it can either be attached to LLVM statements to pass along
Metadata expressions -- these are the raw metadata values that encode
Metadata nodes -- global metadata variables that attach a metadata
Named metadata -- global metadata variables that attach a metadata nodes
Attach to instructions -- metadata can be attached to LLVM instructions
As arguments -- llvm functions can take metadata as arguments, for
As a named metadata -- Here the metadata is simply declared in global