annotate graal/com.oracle.graal.java/src/com/oracle/graal/java/AbstractBytecodeParser.java @ 19962:9b669776bf8a

added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
author Doug Simon <doug.simon@oracle.com>
date Thu, 19 Mar 2015 22:31:42 +0100
parents a252927dfbfd
children aaf5039e56d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14854
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1 /*
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
2 * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved.
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
4 *
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
7 * published by the Free Software Foundation.
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
8 *
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
13 * accompanied this code).
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
14 *
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
15 * You should have received a copy of the GNU General Public License version
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
18 *
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
21 * questions.
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
22 */
64e6a5484cac Fix style issues.
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
23
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
24 package com.oracle.graal.java;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
25
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
26 import static com.oracle.graal.api.code.TypeCheckHints.*;
19239
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
27 import static com.oracle.graal.api.meta.DeoptimizationReason.*;
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
28 import static com.oracle.graal.bytecode.Bytecodes.*;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
29 import static com.oracle.graal.java.AbstractBytecodeParser.Options.*;
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
30
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
31 import java.util.*;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
32
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
33 import com.oracle.graal.api.code.*;
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
34 import com.oracle.graal.api.meta.*;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
35 import com.oracle.graal.api.replacements.*;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
36 import com.oracle.graal.bytecode.*;
15193
96bb07a5d667 Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents: 15031
diff changeset
37 import com.oracle.graal.compiler.common.*;
15200
97eed257999b Move Condition to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents: 15193
diff changeset
38 import com.oracle.graal.compiler.common.calc.*;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
39 import com.oracle.graal.debug.*;
19883
4d33cd6e0c8f refactored GraphBuilderConfiguration (and its component classes) into a separate project
Doug Simon <doug.simon@oracle.com>
parents: 19838
diff changeset
40 import com.oracle.graal.graphbuilderconf.*;
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
41 import com.oracle.graal.graphbuilderconf.GraphBuilderContext.Replacement;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
42 import com.oracle.graal.java.BciBlockMapping.BciBlock;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
43 import com.oracle.graal.java.GraphBuilderPhase.Instance.BytecodeParser;
19111
0b15114268c8 Draft for LoadFieldPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19050
diff changeset
44 import com.oracle.graal.nodes.*;
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
45 import com.oracle.graal.nodes.type.*;
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
46 import com.oracle.graal.options.*;
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
47 import com.oracle.graal.phases.*;
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
48
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
49 public abstract class AbstractBytecodeParser {
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
50
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
51 public static class Options {
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
52 // @formatter:off
18674
ecb9d0cedbab First draft of option classification.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18490
diff changeset
53 @Option(help = "The trace level for the bytecode parser used when building a graph from bytecode", type = OptionType.Debug)
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
54 public static final OptionValue<Integer> TraceBytecodeParserLevel = new OptionValue<>(0);
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
55
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
56 @Option(help = "Inlines trivial methods during bytecode parsing.", type = OptionType.Expert)
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
57 public static final StableOptionValue<Boolean> InlineDuringParsing = new StableOptionValue<>(false);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
58
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
59 @Option(help = "Traces inlining performed during bytecode parsing.", type = OptionType.Debug)
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
60 public static final StableOptionValue<Boolean> TraceInlineDuringParsing = new StableOptionValue<>(false);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
61
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
62 @Option(help = "Traces use of plugins during bytecode parsing.", type = OptionType.Debug)
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
63 public static final StableOptionValue<Boolean> TraceParserPlugins = new StableOptionValue<>(false);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
64
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
65 @Option(help = "Maximum depth when inlining during bytecode parsing.", type = OptionType.Debug)
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
66 public static final StableOptionValue<Integer> InlineDuringParsingMaxDepth = new StableOptionValue<>(10);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
67
19808
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
68 @Option(help = "Dump graphs after non-trivial changes during bytecode parsing.", type = OptionType.Debug)
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
69 public static final StableOptionValue<Boolean> DumpDuringGraphBuilding = new StableOptionValue<>(false);
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
70
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
71 @Option(help = "Max number of loop explosions per method.", type = OptionType.Debug)
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
72 public static final OptionValue<Integer> MaximumLoopExplosionCount = new OptionValue<>(10000);
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
73
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
74 @Option(help = "Do not bail out but throw an exception on failed loop explosion.", type = OptionType.Debug)
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
75 public static final OptionValue<Boolean> FailedLoopExplosionIsFatal = new OptionValue<>(false);
73dddd2d8710 moved bytecode paring options to AbstractBytecodeParser.Options
Doug Simon <doug.simon@oracle.com>
parents: 19791
diff changeset
76
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
77 // @formatter:on
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
78 }
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
79
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
80 /**
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
81 * Information about a substitute method being parsed in lieu of an original method. This can
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
82 * happen when a call to a {@link MethodSubstitution} is encountered or the root of compilation
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
83 * is a {@link MethodSubstitution} or a snippet.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
84 */
19811
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
85 static class ReplacementContext implements Replacement {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
86 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
87 * The method being replaced.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
88 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
89 final ResolvedJavaMethod method;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
90
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
91 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
92 * The replacement method.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
93 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
94 final ResolvedJavaMethod replacement;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
95
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
96 public ReplacementContext(ResolvedJavaMethod method, ResolvedJavaMethod substitute) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
97 this.method = method;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
98 this.replacement = substitute;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
99 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
100
19811
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
101 public ResolvedJavaMethod getOriginalMethod() {
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
102 return method;
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
103 }
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
104
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
105 public ResolvedJavaMethod getReplacementMethod() {
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
106 return replacement;
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
107 }
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
108
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
109 public boolean isIntrinsic() {
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
110 return false;
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
111 }
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
112
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
113 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
114 * Determines if a call within the compilation scope of a replacement represents a call to
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
115 * the original method.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
116 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
117 public boolean isCallToOriginal(ResolvedJavaMethod targetMethod) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
118 return method.equals(targetMethod) || replacement.equals(targetMethod);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
119 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
120
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
121 IntrinsicContext asIntrinsic() {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
122 return null;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
123 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
124 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
125
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
126 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
127 * Context for a replacement being inlined as a compiler intrinsic. Deoptimization within a
19811
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
128 * compiler intrinsic must replay the intrinsified call. This context object retains the
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
129 * information required to build a frame state denoting the JVM state just before the
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
130 * intrinsified call.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
131 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
132 static class IntrinsicContext extends ReplacementContext {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
133
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
134 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
135 * The arguments to the intrinsified invocation.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
136 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
137 private final ValueNode[] invokeArgs;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
138
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
139 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
140 * The BCI of the intrinsified invocation.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
141 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
142 private final int invokeBci;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
143
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
144 private FrameState invokeStateBefore;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
145 private FrameState invokeStateDuring;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
146
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
147 public IntrinsicContext(ResolvedJavaMethod method, ResolvedJavaMethod substitute, ValueNode[] invokeArgs, int invokeBci) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
148 super(method, substitute);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
149 this.invokeArgs = invokeArgs;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
150 this.invokeBci = invokeBci;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
151 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
152
19811
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
153 @Override
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
154 public boolean isIntrinsic() {
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
155 return true;
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
156 }
1e27e31aca11 fixed bug in managing replacement scope during bytecode parsing and improved API for querying replacement info from graph builder plugins
Doug Simon <doug.simon@oracle.com>
parents: 19808
diff changeset
157
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
158 /**
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
159 * Gets the frame state that will restart the interpreter just before the intrinsified
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
160 * invocation.
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
161 */
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
162 public FrameState getInvokeStateBefore(BytecodeParser parent) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
163 assert !parent.parsingReplacement() || parent.replacementContext instanceof IntrinsicContext;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
164 if (invokeStateDuring == null) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
165 assert invokeStateBefore == null;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
166 // Find the ancestor calling the replaced method
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
167 BytecodeParser ancestor = parent;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
168 while (ancestor.parsingReplacement()) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
169 ancestor = ancestor.getParent();
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
170 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
171 invokeStateDuring = ancestor.getFrameState().create(ancestor.bci(), ancestor.getParent(), true);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
172 invokeStateBefore = invokeStateDuring.duplicateModifiedBeforeCall(invokeBci, Kind.Void, invokeArgs);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
173 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
174 return invokeStateBefore;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
175 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
176
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
177 public FrameState getInvokeStateDuring() {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
178 assert invokeStateDuring != null : "must only be called after getInvokeStateBefore()";
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
179 return invokeStateDuring;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
180 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
181
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
182 @Override
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
183 IntrinsicContext asIntrinsic() {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
184 return this;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
185 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
186 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
187
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
188 /**
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
189 * The minimum value to which {@link Options#TraceBytecodeParserLevel} must be set to trace the
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
190 * bytecode instructions as they are parsed.
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
191 */
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
192 public static final int TRACELEVEL_INSTRUCTIONS = 1;
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
193
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
194 /**
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
195 * The minimum value to which {@link Options#TraceBytecodeParserLevel} must be set to trace the
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
196 * frame state before each bytecode instruction as it is parsed.
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
197 */
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
198 public static final int TRACELEVEL_STATE = 2;
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
199
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
200 protected HIRFrameStateBuilder frameState;
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
201 protected BciBlock currentBlock;
18918
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
202
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
203 protected final BytecodeStream stream;
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
204 protected final GraphBuilderConfiguration graphBuilderConfig;
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
205 protected final ResolvedJavaMethod method;
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
206 protected final ProfilingInfo profilingInfo;
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
207 protected final OptimisticOptimizations optimisticOpts;
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
208 protected final ConstantPool constantPool;
18935
07f2a49f0bfb Various adjustments to simplify future merges
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18920
diff changeset
209 protected final MetaAccessProvider metaAccess;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
210
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
211 protected final ReplacementContext replacementContext;
19409
1307b475f10d added BytecodeParser.parsingReplacement field to distinguish parsing method replacements (or snippets) from normal method parsing
Doug Simon <doug.simon@oracle.com>
parents: 19390
diff changeset
212
1307b475f10d added BytecodeParser.parsingReplacement field to distinguish parsing method replacements (or snippets) from normal method parsing
Doug Simon <doug.simon@oracle.com>
parents: 19390
diff changeset
213 /**
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
214 * Meters the number of actual bytecodes parsed.
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
215 */
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
216 public static final DebugMetric BytecodesParsed = Debug.metric("BytecodesParsed");
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
217
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
218 public AbstractBytecodeParser(MetaAccessProvider metaAccess, ResolvedJavaMethod method, GraphBuilderConfiguration graphBuilderConfig, OptimisticOptimizations optimisticOpts,
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
219 ReplacementContext replacementContext) {
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
220 this.graphBuilderConfig = graphBuilderConfig;
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
221 this.optimisticOpts = optimisticOpts;
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
222 this.metaAccess = metaAccess;
18918
e8fd0342d9c4 GraphBuilder simplifications.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18917
diff changeset
223 this.stream = new BytecodeStream(method.getCode());
19439
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
224 this.profilingInfo = (graphBuilderConfig.getUseProfiling() ? method.getProfilingInfo() : null);
18917
323ac2b4d988 Small simplification for BaselineBytecodeParser.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18825
diff changeset
225 this.constantPool = method.getConstantPool();
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
226 this.method = method;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
227 this.replacementContext = replacementContext;
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
228 assert metaAccess != null;
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
229 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
230
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
231 public void setCurrentFrameState(HIRFrameStateBuilder frameState) {
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
232 this.frameState = frameState;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
233 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
234
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
235 protected final BytecodeStream getStream() {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
236 return stream;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
237 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
238
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
239 public int bci() {
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
240 return stream.currentBCI();
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
241 }
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
242
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
243 public void loadLocal(int index, Kind kind) {
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
244 frameState.push(kind, frameState.loadLocal(index));
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
245 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
246
14895
d76fce67b49d Created BaselineCompiler BytecodeParser inner class.
Josef Eisl <josef.eisl@jku.at>
parents: 14894
diff changeset
247 public void storeLocal(Kind kind, int index) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
248 ValueNode value;
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
249 if (kind == Kind.Object) {
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
250 value = frameState.xpop();
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
251 // astore and astore_<n> may be used to store a returnAddress (jsr)
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
252 assert parsingReplacement() || (value.getKind() == Kind.Object || value.getKind() == Kind.Int) : value + ":" + value.getKind();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
253 } else {
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
254 value = frameState.pop(kind);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
255 }
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
256 frameState.storeLocal(index, value, kind);
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
257 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
258
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
259 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
260 * @param type the unresolved type of the constant
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
261 */
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
262 protected abstract void handleUnresolvedLoadConstant(JavaType type);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
263
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
264 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
265 * @param type the unresolved type of the type check
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
266 * @param object the object value whose type is being checked against {@code type}
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
267 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
268 protected abstract void handleUnresolvedCheckCast(JavaType type, ValueNode object);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
269
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
270 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
271 * @param type the unresolved type of the type check
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
272 * @param object the object value whose type is being checked against {@code type}
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
273 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
274 protected abstract void handleUnresolvedInstanceOf(JavaType type, ValueNode object);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
275
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
276 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
277 * @param type the type being instantiated
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
278 */
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
279 protected abstract void handleUnresolvedNewInstance(JavaType type);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
280
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
281 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
282 * @param type the type of the array being instantiated
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
283 * @param length the length of the array
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
284 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
285 protected abstract void handleUnresolvedNewObjectArray(JavaType type, ValueNode length);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
286
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
287 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
288 * @param type the type being instantiated
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
289 * @param dims the dimensions for the multi-array
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
290 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
291 protected abstract void handleUnresolvedNewMultiArray(JavaType type, List<ValueNode> dims);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
292
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
293 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
294 * @param field the unresolved field
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
295 * @param receiver the object containing the field or {@code null} if {@code field} is static
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
296 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
297 protected abstract void handleUnresolvedLoadField(JavaField field, ValueNode receiver);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
298
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
299 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
300 * @param field the unresolved field
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
301 * @param value the value being stored to the field
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
302 * @param receiver the object containing the field or {@code null} if {@code field} is static
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
303 */
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
304 protected abstract void handleUnresolvedStoreField(JavaField field, ValueNode value, ValueNode receiver);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
305
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
306 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
307 * @param type
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
308 */
18361
6ac7e9c85be6 Split getEncoding into two methods.
Roland Schatz <roland.schatz@oracle.com>
parents: 18187
diff changeset
309 protected abstract void handleUnresolvedExceptionType(JavaType type);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
310
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
311 // protected abstract void handleUnresolvedInvoke(JavaMethod javaMethod, InvokeKind invokeKind);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
312
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
313 // protected abstract DispatchBeginNode handleException(ValueNode exceptionObject, int bci);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
314
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
315 private void genLoadConstant(int cpi, int opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
316 Object con = lookupConstant(cpi, opcode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
317
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
318 if (con instanceof JavaType) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
319 // this is a load of class constant which might be unresolved
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
320 JavaType type = (JavaType) con;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
321 if (type instanceof ResolvedJavaType) {
18361
6ac7e9c85be6 Split getEncoding into two methods.
Roland Schatz <roland.schatz@oracle.com>
parents: 18187
diff changeset
322 frameState.push(Kind.Object, appendConstant(((ResolvedJavaType) type).getJavaClass()));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
323 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
324 handleUnresolvedLoadConstant(type);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
325 }
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
326 } else if (con instanceof JavaConstant) {
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
327 JavaConstant constant = (JavaConstant) con;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
328 frameState.push(constant.getKind().getStackKind(), appendConstant(constant));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
329 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
330 throw new Error("lookupConstant returned an object of incorrect type");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
331 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
332 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
333
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
334 protected abstract ValueNode genLoadIndexed(ValueNode index, ValueNode array, Kind kind);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
335
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
336 private void genLoadIndexed(Kind kind) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
337 ValueNode index = frameState.ipop();
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
338 ValueNode array = emitExplicitExceptions(frameState.apop(), index);
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
339 if (!tryLoadIndexedPlugin(kind, index, array)) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
340 frameState.push(kind.getStackKind(), append(genLoadIndexed(array, index, kind)));
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
341 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
342 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
343
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
344 protected abstract void traceWithContext(String format, Object... args);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
345
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
346 protected boolean tryLoadIndexedPlugin(Kind kind, ValueNode index, ValueNode array) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
347 LoadIndexedPlugin loadIndexedPlugin = graphBuilderConfig.getPlugins().getLoadIndexedPlugin();
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
348 if (loadIndexedPlugin != null && loadIndexedPlugin.apply((GraphBuilderContext) this, array, index, kind)) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
349 if (TraceParserPlugins.getValue()) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
350 traceWithContext("used load indexed plugin");
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
351 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
352 return true;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
353 } else {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
354 return false;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
355 }
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
356 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
357
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
358 protected abstract void genStoreIndexed(ValueNode array, ValueNode index, Kind kind, ValueNode value);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
359
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
360 private void genStoreIndexed(Kind kind) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
361 ValueNode value = frameState.pop(kind.getStackKind());
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
362 ValueNode index = frameState.ipop();
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
363 ValueNode array = emitExplicitExceptions(frameState.apop(), index);
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
364 genStoreIndexed(array, index, kind, value);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
365 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
366
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
367 private void stackOp(int opcode) {
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
368 switch (opcode) {
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
369 case DUP_X1: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
370 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
371 ValueNode w2 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
372 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
373 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
374 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
375 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
376 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
377 case DUP_X2: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
378 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
379 ValueNode w2 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
380 ValueNode w3 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
381 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
382 frameState.xpush(w3);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
383 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
384 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
385 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
386 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
387 case DUP2: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
388 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
389 ValueNode w2 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
390 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
391 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
392 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
393 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
394 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
395 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
396 case DUP2_X1: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
397 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
398 ValueNode w2 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
399 ValueNode w3 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
400 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
401 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
402 frameState.xpush(w3);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
403 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
404 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
405 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
406 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
407 case DUP2_X2: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
408 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
409 ValueNode w2 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
410 ValueNode w3 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
411 ValueNode w4 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
412 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
413 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
414 frameState.xpush(w4);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
415 frameState.xpush(w3);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
416 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
417 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
418 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
419 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
420 case SWAP: {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
421 ValueNode w1 = frameState.xpop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
422 ValueNode w2 = frameState.xpop();
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
423 frameState.xpush(w1);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
424 frameState.xpush(w2);
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
425 break;
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
426 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
427 default:
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
428 throw GraalInternalError.shouldNotReachHere();
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
429 }
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
430 }
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
431
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
432 protected abstract ValueNode genIntegerAdd(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
433
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
434 protected abstract ValueNode genIntegerSub(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
435
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
436 protected abstract ValueNode genIntegerMul(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
437
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
438 protected abstract ValueNode genFloatAdd(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
439
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
440 protected abstract ValueNode genFloatSub(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
441
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
442 protected abstract ValueNode genFloatMul(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
443
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
444 protected abstract ValueNode genFloatDiv(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
445
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
446 protected abstract ValueNode genFloatRem(Kind kind, ValueNode x, ValueNode y, boolean isStrictFP);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
447
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
448 private void genArithmeticOp(Kind result, int opcode) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
449 ValueNode y = frameState.pop(result);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
450 ValueNode x = frameState.pop(result);
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15294
diff changeset
451 boolean isStrictFP = method.isStrict();
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
452 ValueNode v;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
453 switch (opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
454 case IADD:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
455 case LADD:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
456 v = genIntegerAdd(result, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
457 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
458 case FADD:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
459 case DADD:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
460 v = genFloatAdd(result, x, y, isStrictFP);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
461 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
462 case ISUB:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
463 case LSUB:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
464 v = genIntegerSub(result, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
465 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
466 case FSUB:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
467 case DSUB:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
468 v = genFloatSub(result, x, y, isStrictFP);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
469 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
470 case IMUL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
471 case LMUL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
472 v = genIntegerMul(result, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
473 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
474 case FMUL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
475 case DMUL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
476 v = genFloatMul(result, x, y, isStrictFP);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
477 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
478 case FDIV:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
479 case DDIV:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
480 v = genFloatDiv(result, x, y, isStrictFP);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
481 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
482 case FREM:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
483 case DREM:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
484 v = genFloatRem(result, x, y, isStrictFP);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
485 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
486 default:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
487 throw new GraalInternalError("should not reach");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
488 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
489 frameState.push(result, append(v));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
490 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
491
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
492 protected abstract ValueNode genIntegerDiv(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
493
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
494 protected abstract ValueNode genIntegerRem(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
495
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
496 private void genIntegerDivOp(Kind result, int opcode) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
497 ValueNode y = frameState.pop(result);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
498 ValueNode x = frameState.pop(result);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
499 ValueNode v;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
500 switch (opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
501 case IDIV:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
502 case LDIV:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
503 v = genIntegerDiv(result, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
504 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
505 case IREM:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
506 case LREM:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
507 v = genIntegerRem(result, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
508 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
509 default:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
510 throw new GraalInternalError("should not reach");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
511 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
512 frameState.push(result, append(v));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
513 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
514
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
515 protected abstract ValueNode genNegateOp(ValueNode x);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
516
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
517 private void genNegateOp(Kind kind) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
518 frameState.push(kind, append(genNegateOp(frameState.pop(kind))));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
519 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
520
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
521 protected abstract ValueNode genLeftShift(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
522
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
523 protected abstract ValueNode genRightShift(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
524
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
525 protected abstract ValueNode genUnsignedRightShift(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
526
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
527 private void genShiftOp(Kind kind, int opcode) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
528 ValueNode s = frameState.ipop();
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
529 ValueNode x = frameState.pop(kind);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
530 ValueNode v;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
531 switch (opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
532 case ISHL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
533 case LSHL:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
534 v = genLeftShift(kind, x, s);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
535 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
536 case ISHR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
537 case LSHR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
538 v = genRightShift(kind, x, s);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
539 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
540 case IUSHR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
541 case LUSHR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
542 v = genUnsignedRightShift(kind, x, s);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
543 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
544 default:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
545 throw new GraalInternalError("should not reach");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
546 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
547 frameState.push(kind, append(v));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
548 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
549
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
550 protected abstract ValueNode genAnd(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
551
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
552 protected abstract ValueNode genOr(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
553
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
554 protected abstract ValueNode genXor(Kind kind, ValueNode x, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
555
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
556 private void genLogicOp(Kind kind, int opcode) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
557 ValueNode y = frameState.pop(kind);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
558 ValueNode x = frameState.pop(kind);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
559 ValueNode v;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
560 switch (opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
561 case IAND:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
562 case LAND:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
563 v = genAnd(kind, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
564 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
565 case IOR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
566 case LOR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
567 v = genOr(kind, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
568 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
569 case IXOR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
570 case LXOR:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
571 v = genXor(kind, x, y);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
572 break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
573 default:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
574 throw new GraalInternalError("should not reach");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
575 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
576 frameState.push(kind, append(v));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
577 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
578
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
579 protected abstract ValueNode genNormalizeCompare(ValueNode x, ValueNode y, boolean isUnorderedLess);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
580
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
581 private void genCompareOp(Kind kind, boolean isUnorderedLess) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
582 ValueNode y = frameState.pop(kind);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
583 ValueNode x = frameState.pop(kind);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
584 frameState.ipush(append(genNormalizeCompare(x, y, isUnorderedLess)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
585 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
586
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
587 protected abstract ValueNode genFloatConvert(FloatConvert op, ValueNode input);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
588
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
589 private void genFloatConvert(FloatConvert op, Kind from, Kind to) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
590 ValueNode input = frameState.pop(from.getStackKind());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
591 frameState.push(to.getStackKind(), append(genFloatConvert(op, input)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
592 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
593
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
594 protected abstract ValueNode genNarrow(ValueNode input, int bitCount);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
595
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
596 protected abstract ValueNode genSignExtend(ValueNode input, int bitCount);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
597
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
598 protected abstract ValueNode genZeroExtend(ValueNode input, int bitCount);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
599
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
600 private void genSignExtend(Kind from, Kind to) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
601 ValueNode input = frameState.pop(from.getStackKind());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
602 if (from != from.getStackKind()) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
603 input = append(genNarrow(input, from.getBitCount()));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
604 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
605 frameState.push(to.getStackKind(), append(genSignExtend(input, to.getBitCount())));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
606 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
607
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
608 private void genZeroExtend(Kind from, Kind to) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
609 ValueNode input = frameState.pop(from.getStackKind());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
610 if (from != from.getStackKind()) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
611 input = append(genNarrow(input, from.getBitCount()));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
612 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
613 frameState.push(to.getStackKind(), append(genZeroExtend(input, to.getBitCount())));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
614 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
615
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
616 private void genNarrow(Kind from, Kind to) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
617 ValueNode input = frameState.pop(from.getStackKind());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
618 frameState.push(to.getStackKind(), append(genNarrow(input, to.getBitCount())));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
619 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
620
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
621 private void genIncrement() {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
622 int index = getStream().readLocalIndex();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
623 int delta = getStream().readIncrement();
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
624 ValueNode x = frameState.loadLocal(index);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
625 ValueNode y = appendConstant(JavaConstant.forInt(delta));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
626 frameState.storeLocal(index, append(genIntegerAdd(Kind.Int, x, y)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
627 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
628
15030
e098038093d5 AbstractBytecodeParser: move createTarget to GraphBuilderPhase.
Josef Eisl <josef.eisl@jku.at>
parents: 15029
diff changeset
629 protected abstract void genGoto();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
630
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
631 protected abstract ValueNode genObjectEquals(ValueNode x, ValueNode y);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
632
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
633 protected abstract ValueNode genIntegerEquals(ValueNode x, ValueNode y);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
634
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
635 protected abstract ValueNode genIntegerLessThan(ValueNode x, ValueNode y);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
636
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
637 protected abstract ValueNode genUnique(ValueNode x);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
638
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
639 protected abstract void genIf(ValueNode x, Condition cond, ValueNode y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
640
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
641 private void genIfZero(Condition cond) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
642 ValueNode y = appendConstant(JavaConstant.INT_0);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
643 ValueNode x = frameState.ipop();
14948
bc72e5ed9752 AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents: 14947
diff changeset
644 genIf(x, cond, y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
645 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
646
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
647 private void genIfNull(Condition cond) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
648 ValueNode y = appendConstant(JavaConstant.NULL_POINTER);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
649 ValueNode x = frameState.apop();
14948
bc72e5ed9752 AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents: 14947
diff changeset
650 genIf(x, cond, y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
651 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
652
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
653 private void genIfSame(Kind kind, Condition cond) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
654 ValueNode y = frameState.pop(kind);
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
655 ValueNode x = frameState.pop(kind);
14948
bc72e5ed9752 AbstractBytecodeParser: rename ifNode to genIf.
Josef Eisl <josef.eisl@jku.at>
parents: 14947
diff changeset
656 genIf(x, cond, y);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
657 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
658
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
659 protected abstract void genThrow();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
660
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
661 protected JavaType lookupType(int cpi, int bytecode) {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
662 maybeEagerlyResolve(cpi, bytecode);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
663 JavaType result = constantPool.lookupType(cpi, bytecode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
664 assert !graphBuilderConfig.unresolvedIsError() || result instanceof ResolvedJavaType;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
665 return result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
666 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
667
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
668 private JavaMethod lookupMethod(int cpi, int opcode) {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
669 maybeEagerlyResolve(cpi, opcode);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
670 JavaMethod result = constantPool.lookupMethod(cpi, opcode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
671 /*
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
672 * In general, one cannot assume that the declaring class being initialized is useful, since
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
673 * the actual concrete receiver may be a different class (except for static calls). Also,
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
674 * interfaces are initialized only under special circumstances, so that this assertion would
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
675 * often fail for interface calls.
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
676 */
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
677 assert !graphBuilderConfig.unresolvedIsError() || (result instanceof ResolvedJavaMethod && (opcode != INVOKESTATIC || ((ResolvedJavaMethod) result).getDeclaringClass().isInitialized())) : result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
678 return result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
679 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
680
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
681 private JavaField lookupField(int cpi, int opcode) {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
682 maybeEagerlyResolve(cpi, opcode);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
683 JavaField result = constantPool.lookupField(cpi, opcode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
684 assert !graphBuilderConfig.unresolvedIsError() || (result instanceof ResolvedJavaField && ((ResolvedJavaField) result).getDeclaringClass().isInitialized()) : result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
685 return result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
686 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
687
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
688 private Object lookupConstant(int cpi, int opcode) {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
689 maybeEagerlyResolve(cpi, opcode);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
690 Object result = constantPool.lookupConstant(cpi);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
691 assert !graphBuilderConfig.eagerResolving() || !(result instanceof JavaType) || (result instanceof ResolvedJavaType) : result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
692 return result;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
693 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
694
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
695 private void maybeEagerlyResolve(int cpi, int bytecode) {
19838
5e27aa02bb92 only do eager resolving for replacements that are intrinsics
Doug Simon <doug.simon@oracle.com>
parents: 19811
diff changeset
696 if (graphBuilderConfig.eagerResolving() || replacementContext instanceof IntrinsicContext) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
697 constantPool.loadReferencedType(cpi, bytecode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
698 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
699 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
700
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
701 private JavaTypeProfile getProfileForTypeCheck(ResolvedJavaType type) {
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
702 if (parsingReplacement() || profilingInfo == null || !optimisticOpts.useTypeCheckHints() || !canHaveSubtype(type)) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
703 return null;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
704 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
705 return profilingInfo.getTypeProfile(bci());
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
706 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
707 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
708
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
709 protected abstract ValueNode createCheckCast(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck, boolean forStoreCheck);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
710
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
711 private void genCheckCast() {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
712 int cpi = getStream().readCPI();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
713 JavaType type = lookupType(cpi, CHECKCAST);
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
714 ValueNode object = frameState.apop();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
715 if (type instanceof ResolvedJavaType) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
716 JavaTypeProfile profileForTypeCheck = getProfileForTypeCheck((ResolvedJavaType) type);
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
717 ValueNode checkCastNode = append(createCheckCast((ResolvedJavaType) type, object, profileForTypeCheck, false));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
718 frameState.apush(checkCastNode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
719 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
720 handleUnresolvedCheckCast(type, object);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
721 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
722 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
723
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
724 protected abstract ValueNode createInstanceOf(ResolvedJavaType type, ValueNode object, JavaTypeProfile profileForTypeCheck);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
725
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
726 protected abstract ValueNode genConditional(ValueNode x);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
727
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
728 private void genInstanceOf() {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
729 int cpi = getStream().readCPI();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
730 JavaType type = lookupType(cpi, INSTANCEOF);
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
731 ValueNode object = frameState.apop();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
732 if (type instanceof ResolvedJavaType) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
733 ResolvedJavaType resolvedType = (ResolvedJavaType) type;
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
734 ValueNode instanceOfNode = createInstanceOf((ResolvedJavaType) type, object, getProfileForTypeCheck(resolvedType));
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
735 frameState.ipush(append(genConditional(genUnique(instanceOfNode))));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
736 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
737 handleUnresolvedInstanceOf(type, object);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
738 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
739 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
740
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
741 protected abstract ValueNode createNewInstance(ResolvedJavaType type, boolean fillContents);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
742
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
743 void genNewInstance(int cpi) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
744 JavaType type = lookupType(cpi, NEW);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
745 if (type instanceof ResolvedJavaType && ((ResolvedJavaType) type).isInitialized()) {
19239
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
746 ResolvedJavaType[] skippedExceptionTypes = this.graphBuilderConfig.getSkippedExceptionTypes();
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
747 if (skippedExceptionTypes != null) {
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
748 for (ResolvedJavaType exceptionType : skippedExceptionTypes) {
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
749 if (exceptionType.isAssignableFrom((ResolvedJavaType) type)) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
750 append(new DeoptimizeNode(DeoptimizationAction.None, TransferToInterpreter));
19239
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
751 return;
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
752 }
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
753 }
637ca4d37bca Extensions and fixes to inline and canonicalize during parsing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19147
diff changeset
754 }
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
755 frameState.apush(append(createNewInstance((ResolvedJavaType) type, true)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
756 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
757 handleUnresolvedNewInstance(type);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
758 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
759 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
760
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
761 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
762 * Gets the kind of array elements for the array type code that appears in a
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
763 * {@link Bytecodes#NEWARRAY} bytecode.
14899
e2a5528599e0 Merge (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14854 14896
diff changeset
764 *
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
765 * @param code the array type code
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
766 * @return the kind from the array type code
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
767 */
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
768 public static Class<?> arrayTypeCodeToClass(int code) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
769 // Checkstyle: stop
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
770 switch (code) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
771 case 4:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
772 return boolean.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
773 case 5:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
774 return char.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
775 case 6:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
776 return float.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
777 case 7:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
778 return double.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
779 case 8:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
780 return byte.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
781 case 9:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
782 return short.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
783 case 10:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
784 return int.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
785 case 11:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
786 return long.class;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
787 default:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
788 throw new IllegalArgumentException("unknown array type code: " + code);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
789 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
790 // Checkstyle: resume
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
791 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
792
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
793 private void genNewPrimitiveArray(int typeCode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
794 Class<?> clazz = arrayTypeCodeToClass(typeCode);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
795 ResolvedJavaType elementType = metaAccess.lookupJavaType(clazz);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
796 frameState.apush(append(createNewArray(elementType, frameState.ipop(), true)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
797 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
798
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
799 private void genNewObjectArray(int cpi) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
800 JavaType type = lookupType(cpi, ANEWARRAY);
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
801 ValueNode length = frameState.ipop();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
802 if (type instanceof ResolvedJavaType) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
803 frameState.apush(append(createNewArray((ResolvedJavaType) type, length, true)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
804 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
805 handleUnresolvedNewObjectArray(type, length);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
806 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
807
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
808 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
809
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
810 protected abstract ValueNode createNewArray(ResolvedJavaType elementType, ValueNode length, boolean fillContents);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
811
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
812 private void genNewMultiArray(int cpi) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
813 JavaType type = lookupType(cpi, MULTIANEWARRAY);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
814 int rank = getStream().readUByte(bci() + 3);
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
815 List<ValueNode> dims = new ArrayList<>(Collections.nCopies(rank, null));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
816 for (int i = rank - 1; i >= 0; i--) {
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
817 dims.set(i, frameState.ipop());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
818 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
819 if (type instanceof ResolvedJavaType) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
820 frameState.apush(append(createNewMultiArray((ResolvedJavaType) type, dims)));
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
821 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
822 handleUnresolvedNewMultiArray(type, dims);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
823 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
824 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
825
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
826 protected abstract ValueNode createNewMultiArray(ResolvedJavaType type, List<ValueNode> dims);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
827
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
828 protected abstract ValueNode genLoadField(ValueNode receiver, ResolvedJavaField field);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
829
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
830 private void genGetField(JavaField field) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
831 Kind kind = field.getKind();
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
832 ValueNode receiver = emitExplicitExceptions(frameState.apop(), null);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
833 if ((field instanceof ResolvedJavaField) && ((ResolvedJavaField) field).getDeclaringClass().isInitialized()) {
19787
7117697d11e1 refactored graph builder plugins into a separate class
Doug Simon <doug.simon@oracle.com>
parents: 19717
diff changeset
834 LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getPlugins().getLoadFieldPlugin();
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
835 if (loadFieldPlugin == null || !loadFieldPlugin.apply((GraphBuilderContext) this, receiver, (ResolvedJavaField) field)) {
19111
0b15114268c8 Draft for LoadFieldPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19050
diff changeset
836 appendOptimizedLoadField(kind, genLoadField(receiver, (ResolvedJavaField) field));
0b15114268c8 Draft for LoadFieldPlugin.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19050
diff changeset
837 }
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
838 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
839 handleUnresolvedLoadField(field, receiver);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
840 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
841 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
842
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
843 /**
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
844 * Emits control flow to null check a receiver if it's stamp does not indicate it is
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
845 * {@linkplain StampTool#isPointerNonNull always non-null}.
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
846 *
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
847 * @return the receiver with a stamp indicating non-nullness
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
848 */
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
849 protected abstract ValueNode emitExplicitNullCheck(ValueNode receiver);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
850
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
851 /**
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
852 * Emits control flow to check an array index is within bounds of an array's length.
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
853 *
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
854 * @param index the index to check
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
855 * @param length the length of the array being indexed
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
856 */
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
857 protected abstract void emitExplicitBoundsCheck(ValueNode index, ValueNode length);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
858
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
859 private static final DebugMetric EXPLICIT_EXCEPTIONS = Debug.metric("ExplicitExceptions");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
860
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
861 protected abstract ValueNode genArrayLength(ValueNode x);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
862
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
863 /**
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
864 * @param receiver the receiver of an object based operation
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
865 * @param index the index of an array based operation that is to be tested for out of bounds.
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
866 * This is null for a non-array operation.
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
867 * @return the receiver value possibly modified to have a tighter stamp
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
868 */
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
869 protected ValueNode emitExplicitExceptions(ValueNode receiver, ValueNode index) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
870 assert receiver != null;
19439
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
871 if (graphBuilderConfig.omitAllExceptionEdges() || profilingInfo == null ||
18825
bf382ef59838 Avoid using placeholder nodes when emitting explicit exceptions. Introduce StressExplictExceptionCode flag for debugging.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18818
diff changeset
872 (optimisticOpts.useExceptionProbabilityForOperations() && profilingInfo.getExceptionSeen(bci()) == TriState.FALSE && !GraalOptions.StressExplicitExceptionCode.getValue())) {
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
873 return receiver;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
874 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
875
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
876 ValueNode nonNullReceiver = emitExplicitNullCheck(receiver);
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
877 if (index != null) {
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
878 ValueNode length = append(genArrayLength(nonNullReceiver));
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
879 emitExplicitBoundsCheck(index, length);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
880 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
881 EXPLICIT_EXCEPTIONS.increment();
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
882 return nonNullReceiver;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
883 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
884
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
885 protected abstract void genStoreField(ValueNode receiver, ResolvedJavaField field, ValueNode value);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
886
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
887 private void genPutField(JavaField field) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
888 ValueNode value = frameState.pop(field.getKind().getStackKind());
19962
9b669776bf8a added null checking for the receiver when inlining or applying an InvocationPlugin during graph parsing
Doug Simon <doug.simon@oracle.com>
parents: 19951
diff changeset
889 ValueNode receiver = emitExplicitExceptions(frameState.apop(), null);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
890 if (field instanceof ResolvedJavaField && ((ResolvedJavaField) field).getDeclaringClass().isInitialized()) {
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
891 genStoreField(receiver, (ResolvedJavaField) field, value);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
892 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
893 handleUnresolvedStoreField(field, value, receiver);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
894 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
895 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
896
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
897 private void genGetStatic(JavaField field) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
898 Kind kind = field.getKind();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
899 if (field instanceof ResolvedJavaField && ((ResolvedJavaType) field.getDeclaringClass()).isInitialized()) {
19787
7117697d11e1 refactored graph builder plugins into a separate class
Doug Simon <doug.simon@oracle.com>
parents: 19717
diff changeset
900 LoadFieldPlugin loadFieldPlugin = this.graphBuilderConfig.getPlugins().getLoadFieldPlugin();
19147
609480dfa0d8 Create ExplodeLoop plugin prototype. Special sort for blocks from bci block map builder for explode loop methods. Graph builder plugin for customizing static field accesses. New Truffle option TruffleExcludeAssertions default true that excludes assertion code from being partial evaluated in the new partial evaluator.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19111
diff changeset
901 if (loadFieldPlugin == null || !loadFieldPlugin.apply((GraphBuilderContext) this, (ResolvedJavaField) field)) {
609480dfa0d8 Create ExplodeLoop plugin prototype. Special sort for blocks from bci block map builder for explode loop methods. Graph builder plugin for customizing static field accesses. New Truffle option TruffleExcludeAssertions default true that excludes assertion code from being partial evaluated in the new partial evaluator.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19111
diff changeset
902 appendOptimizedLoadField(kind, genLoadField(null, (ResolvedJavaField) field));
609480dfa0d8 Create ExplodeLoop plugin prototype. Special sort for blocks from bci block map builder for explode loop methods. Graph builder plugin for customizing static field accesses. New Truffle option TruffleExcludeAssertions default true that excludes assertion code from being partial evaluated in the new partial evaluator.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19111
diff changeset
903 }
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
904 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
905 handleUnresolvedLoadField(field, null);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
906 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
907 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
908
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
909 public boolean tryLoadFieldPlugin(JavaField field, LoadFieldPlugin loadFieldPlugin) {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
910 return loadFieldPlugin.apply((GraphBuilderContext) this, (ResolvedJavaField) field);
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
911 }
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
912
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
913 private void genPutStatic(JavaField field) {
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
914 ValueNode value = frameState.pop(field.getKind().getStackKind());
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
915 if (field instanceof ResolvedJavaField && ((ResolvedJavaType) field.getDeclaringClass()).isInitialized()) {
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
916 genStoreField(null, (ResolvedJavaField) field, value);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
917 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
918 handleUnresolvedStoreField(field, value, null);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
919 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
920 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
921
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
922 protected void appendOptimizedLoadField(Kind kind, ValueNode load) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
923 // append the load to the instruction
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
924 ValueNode optimized = append(load);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
925 frameState.push(kind.getStackKind(), optimized);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
926 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
927
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
928 protected abstract void genInvokeStatic(JavaMethod target);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
929
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
930 protected abstract void genInvokeInterface(JavaMethod target);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
931
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
932 protected abstract void genInvokeDynamic(JavaMethod target);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
933
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
934 protected abstract void genInvokeVirtual(JavaMethod target);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
935
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
936 protected abstract void genInvokeSpecial(JavaMethod target);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
937
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
938 protected abstract void genReturn(ValueNode x, Kind kind);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
939
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
940 protected abstract void genMonitorEnter(ValueNode x, int bci);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
941
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
942 protected abstract void genMonitorExit(ValueNode x, ValueNode returnValue, int bci);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
943
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
944 protected abstract void genJsr(int dest);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
945
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
946 protected abstract void genRet(int localIndex);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
947
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
948 private double[] switchProbability(int numberOfCases, int bci) {
19439
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
949 double[] prob = (profilingInfo == null ? null : profilingInfo.getSwitchProbabilities(bci));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
950 if (prob != null) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
951 assert prob.length == numberOfCases;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
952 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
953 Debug.log("Missing probability (switch) in %s at bci %d", method, bci);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
954 prob = new double[numberOfCases];
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
955 for (int i = 0; i < numberOfCases; i++) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
956 prob[i] = 1.0d / numberOfCases;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
957 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
958 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
959 assert allPositive(prob);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
960 return prob;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
961 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
962
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
963 private static boolean allPositive(double[] a) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
964 for (double d : a) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
965 if (d < 0) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
966 return false;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
967 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
968 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
969 return true;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
970 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
971
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
972 /**
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
973 * Helper function that sums up the probabilities of all keys that lead to a specific successor.
14899
e2a5528599e0 Merge (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14854 14896
diff changeset
974 *
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
975 * @return an array of size successorCount with the accumulated probability for each successor.
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
976 */
15028
7ee9decb2784 AbstractBytecodeParser: rework genIntegerSwitch.
Josef Eisl <josef.eisl@jku.at>
parents: 15027
diff changeset
977 public static double[] successorProbabilites(int successorCount, int[] keySuccessors, double[] keyProbabilities) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
978 double[] probability = new double[successorCount];
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
979 for (int i = 0; i < keySuccessors.length; i++) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
980 probability[keySuccessors[i]] += keyProbabilities[i];
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
981 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
982 return probability;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
983 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
984
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
985 private void genSwitch(BytecodeSwitch bs) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
986 int bci = bci();
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
987 ValueNode value = frameState.ipop();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
988
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
989 int nofCases = bs.numberOfCases();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
990 double[] keyProbabilities = switchProbability(nofCases + 1, bci);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
991
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
992 Map<Integer, SuccessorInfo> bciToBlockSuccessorIndex = new HashMap<>();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
993 for (int i = 0; i < currentBlock.getSuccessorCount(); i++) {
19333
ae87324c37d6 Do not extend AbstractBlockBase with BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19239
diff changeset
994 assert !bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessor(i).startBci);
ae87324c37d6 Do not extend AbstractBlockBase with BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19239
diff changeset
995 if (!bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessor(i).startBci)) {
ae87324c37d6 Do not extend AbstractBlockBase with BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19239
diff changeset
996 bciToBlockSuccessorIndex.put(currentBlock.getSuccessor(i).startBci, new SuccessorInfo(i));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
997 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
998 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
999
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1000 ArrayList<BciBlock> actualSuccessors = new ArrayList<>();
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1001 int[] keys = new int[nofCases];
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1002 int[] keySuccessors = new int[nofCases + 1];
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1003 int deoptSuccessorIndex = -1;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1004 int nextSuccessorIndex = 0;
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
1005 boolean constantValue = value.isConstant();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1006 for (int i = 0; i < nofCases + 1; i++) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1007 if (i < nofCases) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1008 keys[i] = bs.keyAt(i);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1009 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1010
19512
7f168e4c5dde Added flag FailedLoopExplosionIsFatal. Added support for graph builder canonicalization of integer switches.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19496
diff changeset
1011 if (!constantValue && isNeverExecutedCode(keyProbabilities[i])) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1012 if (deoptSuccessorIndex < 0) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1013 deoptSuccessorIndex = nextSuccessorIndex++;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1014 actualSuccessors.add(null);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1015 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1016 keySuccessors[i] = deoptSuccessorIndex;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1017 } else {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1018 int targetBci = i >= nofCases ? bs.defaultTarget() : bs.targetAt(i);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1019 SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1020 if (info.actualIndex < 0) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1021 info.actualIndex = nextSuccessorIndex++;
19333
ae87324c37d6 Do not extend AbstractBlockBase with BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19239
diff changeset
1022 actualSuccessors.add(currentBlock.getSuccessor(info.blockIndex));
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1023 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1024 keySuccessors[i] = info.actualIndex;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1025 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1026 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1027
15028
7ee9decb2784 AbstractBytecodeParser: rework genIntegerSwitch.
Josef Eisl <josef.eisl@jku.at>
parents: 15027
diff changeset
1028 genIntegerSwitch(value, actualSuccessors, keys, keyProbabilities, keySuccessors);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1029
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1030 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1031
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
1032 protected abstract void genIntegerSwitch(ValueNode value, ArrayList<BciBlock> actualSuccessors, int[] keys, double[] keyProbabilities, int[] keySuccessors);
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1033
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1034 private static class SuccessorInfo {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1035
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1036 int blockIndex;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1037 int actualIndex;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1038
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1039 public SuccessorInfo(int blockSuccessorIndex) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1040 this.blockIndex = blockSuccessorIndex;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1041 actualIndex = -1;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1042 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1043 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1044
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
1045 protected abstract ValueNode appendConstant(JavaConstant constant);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1046
19951
a252927dfbfd Fix an issue when the result of canonicalization is appended in the graph builder. Introduce GraphBuilderPhase#recursiveAppend.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19886
diff changeset
1047 protected abstract <T extends ValueNode> T append(T v);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1048
15030
e098038093d5 AbstractBytecodeParser: move createTarget to GraphBuilderPhase.
Josef Eisl <josef.eisl@jku.at>
parents: 15029
diff changeset
1049 protected boolean isNeverExecutedCode(double probability) {
18920
4af661af76fd Restructuring in the GraphBuilder to have less fields in the phase instance.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18918
diff changeset
1050 return probability == 0 && optimisticOpts.removeNeverExecutedCode();
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1051 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1052
16886
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1053 protected double branchProbability() {
19439
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
1054 if (profilingInfo == null) {
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
1055 return 0.5;
5be35dd0a9dd Disable use of profiling information during partial evaluation.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19390
diff changeset
1056 }
19456
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1057 assert assertAtIfBytecode();
16886
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1058 double probability = profilingInfo.getBranchTakenProbability(bci());
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1059 if (probability < 0) {
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1060 assert probability == -1 : "invalid probability";
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1061 Debug.log("missing probability in %s at bci %d", method, bci());
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1062 probability = 0.5;
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1063 }
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1064
18920
4af661af76fd Restructuring in the GraphBuilder to have less fields in the phase instance.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18918
diff changeset
1065 if (!optimisticOpts.removeNeverExecutedCode()) {
16886
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1066 if (probability == 0) {
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1067 probability = 0.0000001;
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1068 } else if (probability == 1) {
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1069 probability = 0.999999;
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1070 }
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1071 }
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1072 return probability;
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1073 }
b61b88c9c103 Make handling of removeNeverExecutedCode more consistent
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16841
diff changeset
1074
19456
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1075 private boolean assertAtIfBytecode() {
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1076 int bytecode = stream.currentBC();
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1077 switch (bytecode) {
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1078 case IFEQ:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1079 case IFNE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1080 case IFLT:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1081 case IFGE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1082 case IFGT:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1083 case IFLE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1084 case IF_ICMPEQ:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1085 case IF_ICMPNE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1086 case IF_ICMPLT:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1087 case IF_ICMPGE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1088 case IF_ICMPGT:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1089 case IF_ICMPLE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1090 case IF_ACMPEQ:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1091 case IF_ACMPNE:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1092 case IFNULL:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1093 case IFNONNULL:
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1094 return true;
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1095 }
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1096 assert false : String.format("%x is not an if bytecode", bytecode);
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1097 return true;
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1098 }
f04d2a9f2020 Assert that current bci points to an if Java bytecode when branch taken probability is requested.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19440
diff changeset
1099
14894
3676333a46bb Use BciBlock in BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14893
diff changeset
1100 protected abstract void iterateBytecodesForBlock(BciBlock block);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1101
18817
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1102 public final void processBytecode(int bci, int opcode) {
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1103 int cpi;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1104
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1105 // Checkstyle: stop
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1106 // @formatter:off
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1107 switch (opcode) {
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1108 case NOP : /* nothing to do */ break;
18490
ca81508f2a19 Generalize NULL handling to work on arbitrary pointers.
Roland Schatz <roland.schatz@oracle.com>
parents: 18361
diff changeset
1109 case ACONST_NULL : frameState.apush(appendConstant(JavaConstant.NULL_POINTER)); break;
16036
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1110 case ICONST_M1 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1111 case ICONST_0 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1112 case ICONST_1 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1113 case ICONST_2 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1114 case ICONST_3 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1115 case ICONST_4 : // fall through
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1116 case ICONST_5 : frameState.ipush(appendConstant(JavaConstant.forInt(opcode - ICONST_0))); break;
16036
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1117 case LCONST_0 : // fall through
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1118 case LCONST_1 : frameState.lpush(appendConstant(JavaConstant.forLong(opcode - LCONST_0))); break;
16036
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1119 case FCONST_0 : // fall through
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1120 case FCONST_1 : // fall through
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1121 case FCONST_2 : frameState.fpush(appendConstant(JavaConstant.forFloat(opcode - FCONST_0))); break;
16036
4161a58e48cb refactor/simplify Constant
Lukas Stadler <lukas.stadler@oracle.com>
parents: 15837
diff changeset
1122 case DCONST_0 : // fall through
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1123 case DCONST_1 : frameState.dpush(appendConstant(JavaConstant.forDouble(opcode - DCONST_0))); break;
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1124 case BIPUSH : frameState.ipush(appendConstant(JavaConstant.forInt(stream.readByte()))); break;
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 17341
diff changeset
1125 case SIPUSH : frameState.ipush(appendConstant(JavaConstant.forInt(stream.readShort()))); break;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1126 case LDC : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1127 case LDC_W : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1128 case LDC2_W : genLoadConstant(stream.readCPI(), opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1129 case ILOAD : loadLocal(stream.readLocalIndex(), Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1130 case LLOAD : loadLocal(stream.readLocalIndex(), Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1131 case FLOAD : loadLocal(stream.readLocalIndex(), Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1132 case DLOAD : loadLocal(stream.readLocalIndex(), Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1133 case ALOAD : loadLocal(stream.readLocalIndex(), Kind.Object); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1134 case ILOAD_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1135 case ILOAD_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1136 case ILOAD_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1137 case ILOAD_3 : loadLocal(opcode - ILOAD_0, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1138 case LLOAD_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1139 case LLOAD_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1140 case LLOAD_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1141 case LLOAD_3 : loadLocal(opcode - LLOAD_0, Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1142 case FLOAD_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1143 case FLOAD_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1144 case FLOAD_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1145 case FLOAD_3 : loadLocal(opcode - FLOAD_0, Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1146 case DLOAD_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1147 case DLOAD_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1148 case DLOAD_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1149 case DLOAD_3 : loadLocal(opcode - DLOAD_0, Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1150 case ALOAD_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1151 case ALOAD_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1152 case ALOAD_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1153 case ALOAD_3 : loadLocal(opcode - ALOAD_0, Kind.Object); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1154 case IALOAD : genLoadIndexed(Kind.Int ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1155 case LALOAD : genLoadIndexed(Kind.Long ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1156 case FALOAD : genLoadIndexed(Kind.Float ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1157 case DALOAD : genLoadIndexed(Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1158 case AALOAD : genLoadIndexed(Kind.Object); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1159 case BALOAD : genLoadIndexed(Kind.Byte ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1160 case CALOAD : genLoadIndexed(Kind.Char ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1161 case SALOAD : genLoadIndexed(Kind.Short ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1162 case ISTORE : storeLocal(Kind.Int, stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1163 case LSTORE : storeLocal(Kind.Long, stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1164 case FSTORE : storeLocal(Kind.Float, stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1165 case DSTORE : storeLocal(Kind.Double, stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1166 case ASTORE : storeLocal(Kind.Object, stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1167 case ISTORE_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1168 case ISTORE_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1169 case ISTORE_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1170 case ISTORE_3 : storeLocal(Kind.Int, opcode - ISTORE_0); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1171 case LSTORE_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1172 case LSTORE_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1173 case LSTORE_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1174 case LSTORE_3 : storeLocal(Kind.Long, opcode - LSTORE_0); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1175 case FSTORE_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1176 case FSTORE_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1177 case FSTORE_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1178 case FSTORE_3 : storeLocal(Kind.Float, opcode - FSTORE_0); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1179 case DSTORE_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1180 case DSTORE_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1181 case DSTORE_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1182 case DSTORE_3 : storeLocal(Kind.Double, opcode - DSTORE_0); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1183 case ASTORE_0 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1184 case ASTORE_1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1185 case ASTORE_2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1186 case ASTORE_3 : storeLocal(Kind.Object, opcode - ASTORE_0); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1187 case IASTORE : genStoreIndexed(Kind.Int ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1188 case LASTORE : genStoreIndexed(Kind.Long ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1189 case FASTORE : genStoreIndexed(Kind.Float ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1190 case DASTORE : genStoreIndexed(Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1191 case AASTORE : genStoreIndexed(Kind.Object); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1192 case BASTORE : genStoreIndexed(Kind.Byte ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1193 case CASTORE : genStoreIndexed(Kind.Char ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1194 case SASTORE : genStoreIndexed(Kind.Short ); break;
19546
0362d64c0cd4 Small refactoring of DUP/POP bytecode processing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19535
diff changeset
1195 case POP : frameState.xpop(); break;
0362d64c0cd4 Small refactoring of DUP/POP bytecode processing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19535
diff changeset
1196 case POP2 : frameState.xpop(); frameState.xpop(); break;
0362d64c0cd4 Small refactoring of DUP/POP bytecode processing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19535
diff changeset
1197 case DUP : frameState.xpush(frameState.xpeek()); break;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1198 case DUP_X1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1199 case DUP_X2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1200 case DUP2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1201 case DUP2_X1 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1202 case DUP2_X2 : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1203 case SWAP : stackOp(opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1204 case IADD : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1205 case ISUB : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1206 case IMUL : genArithmeticOp(Kind.Int, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1207 case IDIV : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1208 case IREM : genIntegerDivOp(Kind.Int, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1209 case LADD : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1210 case LSUB : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1211 case LMUL : genArithmeticOp(Kind.Long, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1212 case LDIV : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1213 case LREM : genIntegerDivOp(Kind.Long, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1214 case FADD : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1215 case FSUB : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1216 case FMUL : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1217 case FDIV : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1218 case FREM : genArithmeticOp(Kind.Float, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1219 case DADD : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1220 case DSUB : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1221 case DMUL : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1222 case DDIV : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1223 case DREM : genArithmeticOp(Kind.Double, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1224 case INEG : genNegateOp(Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1225 case LNEG : genNegateOp(Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1226 case FNEG : genNegateOp(Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1227 case DNEG : genNegateOp(Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1228 case ISHL : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1229 case ISHR : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1230 case IUSHR : genShiftOp(Kind.Int, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1231 case IAND : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1232 case IOR : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1233 case IXOR : genLogicOp(Kind.Int, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1234 case LSHL : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1235 case LSHR : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1236 case LUSHR : genShiftOp(Kind.Long, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1237 case LAND : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1238 case LOR : // fall through
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1239 case LXOR : genLogicOp(Kind.Long, opcode); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1240 case IINC : genIncrement(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1241 case I2F : genFloatConvert(FloatConvert.I2F, Kind.Int, Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1242 case I2D : genFloatConvert(FloatConvert.I2D, Kind.Int, Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1243 case L2F : genFloatConvert(FloatConvert.L2F, Kind.Long, Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1244 case L2D : genFloatConvert(FloatConvert.L2D, Kind.Long, Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1245 case F2I : genFloatConvert(FloatConvert.F2I, Kind.Float, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1246 case F2L : genFloatConvert(FloatConvert.F2L, Kind.Float, Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1247 case F2D : genFloatConvert(FloatConvert.F2D, Kind.Float, Kind.Double); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1248 case D2I : genFloatConvert(FloatConvert.D2I, Kind.Double, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1249 case D2L : genFloatConvert(FloatConvert.D2L, Kind.Double, Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1250 case D2F : genFloatConvert(FloatConvert.D2F, Kind.Double, Kind.Float); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1251 case L2I : genNarrow(Kind.Long, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1252 case I2L : genSignExtend(Kind.Int, Kind.Long); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1253 case I2B : genSignExtend(Kind.Byte, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1254 case I2S : genSignExtend(Kind.Short, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1255 case I2C : genZeroExtend(Kind.Char, Kind.Int); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1256 case LCMP : genCompareOp(Kind.Long, false); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1257 case FCMPL : genCompareOp(Kind.Float, true); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1258 case FCMPG : genCompareOp(Kind.Float, false); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1259 case DCMPL : genCompareOp(Kind.Double, true); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1260 case DCMPG : genCompareOp(Kind.Double, false); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1261 case IFEQ : genIfZero(Condition.EQ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1262 case IFNE : genIfZero(Condition.NE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1263 case IFLT : genIfZero(Condition.LT); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1264 case IFGE : genIfZero(Condition.GE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1265 case IFGT : genIfZero(Condition.GT); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1266 case IFLE : genIfZero(Condition.LE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1267 case IF_ICMPEQ : genIfSame(Kind.Int, Condition.EQ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1268 case IF_ICMPNE : genIfSame(Kind.Int, Condition.NE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1269 case IF_ICMPLT : genIfSame(Kind.Int, Condition.LT); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1270 case IF_ICMPGE : genIfSame(Kind.Int, Condition.GE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1271 case IF_ICMPGT : genIfSame(Kind.Int, Condition.GT); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1272 case IF_ICMPLE : genIfSame(Kind.Int, Condition.LE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1273 case IF_ACMPEQ : genIfSame(Kind.Object, Condition.EQ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1274 case IF_ACMPNE : genIfSame(Kind.Object, Condition.NE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1275 case GOTO : genGoto(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1276 case JSR : genJsr(stream.readBranchDest()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1277 case RET : genRet(stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1278 case TABLESWITCH : genSwitch(new BytecodeTableSwitch(getStream(), bci())); break;
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1279 case LOOKUPSWITCH : genSwitch(new BytecodeLookupSwitch(getStream(), bci())); break;
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1280 case IRETURN : genReturn(frameState.ipop(), Kind.Int); break;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1281 case LRETURN : genReturn(frameState.lpop(), Kind.Long); break;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1282 case FRETURN : genReturn(frameState.fpop(), Kind.Float); break;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1283 case DRETURN : genReturn(frameState.dpop(), Kind.Double); break;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1284 case ARETURN : genReturn(frameState.apop(), Kind.Object); break;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1285 case RETURN : genReturn(null, Kind.Void); break;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1286 case GETSTATIC : cpi = stream.readCPI(); genGetStatic(lookupField(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1287 case PUTSTATIC : cpi = stream.readCPI(); genPutStatic(lookupField(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1288 case GETFIELD : cpi = stream.readCPI(); genGetField(lookupField(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1289 case PUTFIELD : cpi = stream.readCPI(); genPutField(lookupField(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1290 case INVOKEVIRTUAL : cpi = stream.readCPI(); genInvokeVirtual(lookupMethod(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1291 case INVOKESPECIAL : cpi = stream.readCPI(); genInvokeSpecial(lookupMethod(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1292 case INVOKESTATIC : cpi = stream.readCPI(); genInvokeStatic(lookupMethod(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1293 case INVOKEINTERFACE: cpi = stream.readCPI(); genInvokeInterface(lookupMethod(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1294 case INVOKEDYNAMIC : cpi = stream.readCPI4(); genInvokeDynamic(lookupMethod(cpi, opcode)); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1295 case NEW : genNewInstance(stream.readCPI()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1296 case NEWARRAY : genNewPrimitiveArray(stream.readLocalIndex()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1297 case ANEWARRAY : genNewObjectArray(stream.readCPI()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1298 case ARRAYLENGTH : genArrayLength(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1299 case ATHROW : genThrow(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1300 case CHECKCAST : genCheckCast(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1301 case INSTANCEOF : genInstanceOf(); break;
19854
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
1302 case MONITORENTER : genMonitorEnter(frameState.apop(), stream.nextBCI()); break;
4178f9830a27 Assign the state after when appending the node and not automatically in the main graph builder loop.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19838
diff changeset
1303 case MONITOREXIT : genMonitorExit(frameState.apop(), null, stream.nextBCI()); break;
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1304 case MULTIANEWARRAY : genNewMultiArray(stream.readCPI()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1305 case IFNULL : genIfNull(Condition.EQ); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1306 case IFNONNULL : genIfNull(Condition.NE); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1307 case GOTO_W : genGoto(); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1308 case JSR_W : genJsr(stream.readBranchDest()); break;
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1309 case BREAKPOINT:
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1310 throw new BailoutException("concurrent setting of breakpoint");
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1311 default:
17341
e3f3233ec6cd refactor BailoutException to include information about non-permanent errors
Lukas Stadler <lukas.stadler@oracle.com>
parents: 17131
diff changeset
1312 throw new BailoutException("Unsupported opcode %d (%s) [bci=%d]", opcode, nameOf(opcode), bci);
14892
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1313 }
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1314 // @formatter:on
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1315 // Checkstyle: resume
75104db5215e Move Bytecode parsing into BytecodeParseHelper (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14830
diff changeset
1316 }
14893
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1317
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1318 private void genArrayLength() {
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1319 frameState.ipush(append(genArrayLength(frameState.apop())));
f97c85e6366d Finished cleaning up BytecodeParseHelper abstract base class.
Josef Eisl <josef.eisl@jku.at>
parents: 14892
diff changeset
1320 }
14899
e2a5528599e0 Merge (defunc).
Josef Eisl <josef.eisl@jku.at>
parents: 14854 14896
diff changeset
1321
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1322 public ResolvedJavaMethod getMethod() {
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1323 return method;
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1324 }
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1325
19535
97b35083d49d Reduce casting in AbstractBytecodeParser. Consolidate asserts in HIRFrameStateBuilder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19512
diff changeset
1326 public HIRFrameStateBuilder getFrameState() {
14900
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1327 return frameState;
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1328 }
be4c28683c08 Moved bytecode parsing from GraphBuilderPhase to BytecodeParseHelper.
Josef Eisl <josef.eisl@jku.at>
parents: 14899
diff changeset
1329
19387
fc390dcb0ba5 Enable bytecode instruction level tracing only when assertions are enabled.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19333
diff changeset
1330 protected boolean traceInstruction(int bci, int opcode, boolean blockStart) {
18817
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1331 if (Debug.isEnabled() && Options.TraceBytecodeParserLevel.getValue() >= TRACELEVEL_INSTRUCTIONS && Debug.isLogEnabled()) {
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1332 traceInstructionHelper(bci, opcode, blockStart);
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
1333 }
19387
fc390dcb0ba5 Enable bytecode instruction level tracing only when assertions are enabled.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 19333
diff changeset
1334 return true;
14922
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
1335 }
ea57ed7085cf Move options from GraphBuilderPhase to AbstractBytecodeParser.
Josef Eisl <josef.eisl@jku.at>
parents: 14902
diff changeset
1336
18817
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1337 private void traceInstructionHelper(int bci, int opcode, boolean blockStart) {
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1338 StringBuilder sb = new StringBuilder(40);
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1339 sb.append(blockStart ? '+' : '|');
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1340 if (bci < 10) {
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1341 sb.append(" ");
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1342 } else if (bci < 100) {
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1343 sb.append(' ');
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1344 }
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1345 sb.append(bci).append(": ").append(Bytecodes.nameOf(opcode));
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1346 for (int i = bci + 1; i < stream.nextBCI(); ++i) {
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1347 sb.append(' ').append(stream.readUByte(i));
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1348 }
18818
adf3a8581a67 Factor JSR info data into separate data structure from BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18817
diff changeset
1349 if (!currentBlock.getJsrScope().isEmpty()) {
adf3a8581a67 Factor JSR info data into separate data structure from BciBlock.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18817
diff changeset
1350 sb.append(' ').append(currentBlock.getJsrScope());
18817
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1351 }
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1352 Debug.log("%s", sb);
b51cfbc2bd07 Make allocation of loop header array in BciBlockMapping lazy.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18674
diff changeset
1353 }
19791
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1354
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1355 public boolean parsingReplacement() {
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1356 return replacementContext != null;
14e703edb2ab use GraphBuilderPlugins for method substitutions, intrinsics and snippets (GRAAL-982)
Doug Simon <doug.simon@oracle.com>
parents: 19787
diff changeset
1357 }
14818
3d04915a55c6 added kindinterface for valuenode and variable and started to generalize some methods used for bytecodeparsing
Niclas Adlertz <niclas.adlertz@oracle.com>
parents:
diff changeset
1358 }