merge of types in ConditionalPhaseElimination
Lukas Stadler
lukas.stadler at jku.at
Mon Jul 22 09:02:55 PDT 2013
Hi Miguel,
yes, this is a bug… thanks for the hint!
- Lukas
On Jul 20, 2013, at 6:49 PM, Garcia Gutierrez Miguel Alfredo <miguelalfredo.garcia at epfl.ch> wrote:
>
> Still figuring out the workings of ConditionalEliminationPhase, I have a question regarding
>
> public boolean merge(MergeNode merge, List<State> withStates) {
>
> which merges among other things the "known (object) types" over all incoming states:
>
> for (Map.Entry<ValueNode, ResolvedJavaType> entry : knownTypes.entrySet()) {
> ValueNode node = entry.getKey();
> ResolvedJavaType type = entry.getValue();
>
> for (State other : withStates) {
> ResolvedJavaType otherType = other.getNodeType(node);
> type = widen(type, otherType);
> if (type == null) {
> break;
> }
> }
> ------------> if (type == null && type != node.objectStamp().type()) {
> newKnownTypes.put(node, type);
> }
> }
>
> My reading of the above is:
> (1) fold the meet-operation across all incoming states.
> (2) Two cases:
> (2.a) the accumulated type is null (ie, there's no common ancestor, for example because some of the incoming states lack entries in "knownTypes").
> (2.b) non-null, and moreover a type more precise than Object has been inferred. That's the merged type we want to track in the merged state.
>
> Getting to the code, there appears to be a typo (the arrow marks the spot). I guess the intention is adding an entry for the "accumulated type" to "newKnownTypes" (case 2.b). If so, that line should read:
>
> if (type != null && type != node.objectStamp().type()) {
>
>
>
> Miguel
>
> --
> Miguel Garcia
> Swiss Federal Institute of Technology
> EPFL - IC - LAMP1 - INR 328 - Station 14
> CH-1015 Lausanne - Switzerland
> http://lamp.epfl.ch/~magarcia/
More information about the graal-dev
mailing list