It's confusing the doc of impl TryFrom<Instance> for CrateItem says "Only user defined instances can be converted", while actually the behavior is like "only local defined instances can be converted".
Full example to demonstrate: Artisan-Lab/tag-std#1
Especially these lines related to this issue:
https://github.com/os-checker/tag-std/blob/9be540e2b237fb7c1cb001b6396034e61ec5b1f4/demo/rustc_driver/src/main.rs#L78-L83
From my observation, it's viable to convert non-user-defined instances like ones from std as stable_mir already does, and can convert more Instances to CrateItems as these lines show. So in any sense, the TryFrom doc description is incorrect.