This makes some rather tricky analysis available to other users besides the current IR. It shouldn't change current behavior, except if a rule attempts to bind its root term to a name. There's no Rust value for a root term, so the existing code silently ignored such bindings and would panic saying "Variable should already be bound" if a rule attempted to use such bindings. With this commit, the initial attempt to bind the name reports the error instead.
ISLE: Instruction Selection / Lowering Expressions
ISLE is a domain specific language (DSL) for instruction selection and lowering
clif instructions to vcode's MachInsts in Cranelift.
ISLE is a statically-typed term-rewriting language. You define rewriting rules
that map input terms (clif instructions) into output terms (MachInsts). These
rules get compiled down into Rust source test that uses a tree of match
expressions that is as good or better than what you would have written by hand.