src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/framemap/FrameMapBuilderImpl.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/framemap

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/framemap/FrameMapBuilderImpl.java

Print this page




  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.lir.framemap;
  24 
  25 import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot;
  26 
  27 import java.util.ArrayList;
  28 import java.util.BitSet;
  29 import java.util.EnumSet;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.LIRKind;
  33 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
  34 import org.graalvm.compiler.debug.Debug;
  35 import org.graalvm.compiler.debug.GraalError;
  36 import org.graalvm.compiler.lir.InstructionValueConsumer;
  37 import org.graalvm.compiler.lir.LIR;
  38 import org.graalvm.compiler.lir.LIRInstruction;
  39 import org.graalvm.compiler.lir.LIRInstruction.OperandFlag;
  40 import org.graalvm.compiler.lir.LIRInstruction.OperandMode;
  41 import org.graalvm.compiler.lir.VirtualStackSlot;
  42 import org.graalvm.compiler.lir.gen.LIRGenerationResult;
  43 
  44 import jdk.vm.ci.code.CallingConvention;
  45 import jdk.vm.ci.code.CodeCacheProvider;
  46 import jdk.vm.ci.code.RegisterConfig;
  47 import jdk.vm.ci.meta.JavaKind;
  48 import jdk.vm.ci.meta.Value;
  49 import jdk.vm.ci.meta.ValueKind;
  50 
  51 /**
  52  * A FrameMapBuilder that records allocation.
  53  */
  54 public class FrameMapBuilderImpl extends FrameMapBuilderTool {


 101     }
 102 
 103     @Override
 104     public FrameMap getFrameMap() {
 105         return frameMap;
 106     }
 107 
 108     @Override
 109     public int getNumberOfStackSlots() {
 110         return numStackSlots;
 111     }
 112 
 113     @Override
 114     public void callsMethod(CallingConvention cc) {
 115         calls.add(cc);
 116     }
 117 
 118     @Override
 119     @SuppressWarnings("try")
 120     public FrameMap buildFrameMap(LIRGenerationResult res) {
 121         if (Debug.isEnabled()) {

 122             verifyStackSlotAllocation(res);
 123         }
 124         for (CallingConvention cc : calls) {
 125             frameMap.callsMethod(cc);
 126         }
 127         frameMap.finish();
 128         return frameMap;
 129     }
 130 
 131     private static void verifyStackSlotAllocation(LIRGenerationResult res) {
 132         LIR lir = res.getLIR();
 133         InstructionValueConsumer verifySlots = (LIRInstruction op, Value value, OperandMode mode, EnumSet<OperandFlag> flags) -> {
 134             assert !isVirtualStackSlot(value) : String.format("Instruction %s contains a virtual stack slot %s", op, value);
 135         };
 136         for (AbstractBlockBase<?> block : lir.getControlFlowGraph().getBlocks()) {
 137             lir.getLIRforBlock(block).forEach(op -> {
 138                 op.visitEachInput(verifySlots);
 139                 op.visitEachAlive(verifySlots);
 140                 op.visitEachState(verifySlots);
 141 


  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 package org.graalvm.compiler.lir.framemap;
  24 
  25 import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot;
  26 
  27 import java.util.ArrayList;
  28 import java.util.BitSet;
  29 import java.util.EnumSet;
  30 import java.util.List;
  31 
  32 import org.graalvm.compiler.core.common.LIRKind;
  33 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
  34 import org.graalvm.compiler.debug.DebugContext;
  35 import org.graalvm.compiler.debug.GraalError;
  36 import org.graalvm.compiler.lir.InstructionValueConsumer;
  37 import org.graalvm.compiler.lir.LIR;
  38 import org.graalvm.compiler.lir.LIRInstruction;
  39 import org.graalvm.compiler.lir.LIRInstruction.OperandFlag;
  40 import org.graalvm.compiler.lir.LIRInstruction.OperandMode;
  41 import org.graalvm.compiler.lir.VirtualStackSlot;
  42 import org.graalvm.compiler.lir.gen.LIRGenerationResult;
  43 
  44 import jdk.vm.ci.code.CallingConvention;
  45 import jdk.vm.ci.code.CodeCacheProvider;
  46 import jdk.vm.ci.code.RegisterConfig;
  47 import jdk.vm.ci.meta.JavaKind;
  48 import jdk.vm.ci.meta.Value;
  49 import jdk.vm.ci.meta.ValueKind;
  50 
  51 /**
  52  * A FrameMapBuilder that records allocation.
  53  */
  54 public class FrameMapBuilderImpl extends FrameMapBuilderTool {


 101     }
 102 
 103     @Override
 104     public FrameMap getFrameMap() {
 105         return frameMap;
 106     }
 107 
 108     @Override
 109     public int getNumberOfStackSlots() {
 110         return numStackSlots;
 111     }
 112 
 113     @Override
 114     public void callsMethod(CallingConvention cc) {
 115         calls.add(cc);
 116     }
 117 
 118     @Override
 119     @SuppressWarnings("try")
 120     public FrameMap buildFrameMap(LIRGenerationResult res) {
 121         DebugContext debug = res.getLIR().getDebug();
 122         if (debug.areScopesEnabled()) {
 123             verifyStackSlotAllocation(res);
 124         }
 125         for (CallingConvention cc : calls) {
 126             frameMap.callsMethod(cc);
 127         }
 128         frameMap.finish();
 129         return frameMap;
 130     }
 131 
 132     private static void verifyStackSlotAllocation(LIRGenerationResult res) {
 133         LIR lir = res.getLIR();
 134         InstructionValueConsumer verifySlots = (LIRInstruction op, Value value, OperandMode mode, EnumSet<OperandFlag> flags) -> {
 135             assert !isVirtualStackSlot(value) : String.format("Instruction %s contains a virtual stack slot %s", op, value);
 136         };
 137         for (AbstractBlockBase<?> block : lir.getControlFlowGraph().getBlocks()) {
 138             lir.getLIRforBlock(block).forEach(op -> {
 139                 op.visitEachInput(verifySlots);
 140                 op.visitEachAlive(verifySlots);
 141                 op.visitEachState(verifySlots);
 142 
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/framemap/FrameMapBuilderImpl.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File