...
The ordering of operands can not be determined by looking at a rule. Especially if a match rule matches several different trees, several nodes are generated from one instruct specification with different operand orderings. In this case the adlc generated variables are the only way to access the ins and operands deterministically.
Example
Below
...
you
...
find
...
an
...
example
...
how
...
to
...
use
...
late
...
expand
...
for
...
the
...
sparc.ad
...
file.
...
Further
...
down
...
you
...
see
...
the
...
code
...
generated
...
by
...
adlc.
...
Perhaps
...
you
...
can
...
find
...
better
...
use
...
cases
...
for
...
this
...
feature.
...
---
...
a/src/cpu/sparc/vm/sparc.ad
...
2012-11-21
...
12:27:04.591486000
...
+0100
...
+++
...
b/src/cpu/sparc/vm/sparc.ad
...
2012-11-19
...
14:45:15.059452000
...
+0100
...
@@
...
-1933,7
...
+1937,7
...
@@
...
}
// Does the CPU require late expand (see block.cpp for description of late expand)?
-const bool Matcher::require_late_expand = false;
+const bool Matcher::require_late_expand = true;
...