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.gen;
24
25 import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
26 import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
27
28 import java.util.EnumSet;
29
30 import org.graalvm.compiler.lir.LIRInstruction;
31 import org.graalvm.compiler.lir.LIRInstruction.OperandFlag;
32 import org.graalvm.compiler.lir.LIRInstruction.OperandMode;
33 import org.graalvm.compiler.lir.StandardOp.LoadConstantOp;
34 import org.graalvm.compiler.lir.gen.LIRGeneratorTool.MoveFactory;
35
36 import jdk.vm.ci.meta.AllocatableValue;
37 import jdk.vm.ci.meta.Constant;
38 import jdk.vm.ci.meta.JavaConstant;
39 import jdk.vm.ci.meta.Value;
40
41 /**
42 * Wrapper for {@link MoveFactory} that checks that the instructions created adhere to the contract
43 * of {@link MoveFactory}.
44 */
45 public final class VerifyingMoveFactory implements MoveFactory {
46
47 private final MoveFactory inner;
48
49 public VerifyingMoveFactory(MoveFactory inner) {
50 this.inner = inner;
51 }
52
53 @Override
54 public boolean canInlineConstant(JavaConstant c) {
55 return inner.canInlineConstant(c);
56 }
57
58 @Override
59 public boolean allowConstantToStackMove(Constant constant) {
60 return inner.allowConstantToStackMove(constant);
61 }
62
63 @Override
64 public LIRInstruction createMove(AllocatableValue result, Value input) {
65 LIRInstruction inst = inner.createMove(result, input);
66 assert checkResult(inst, result, input);
67 return inst;
68 }
69
70 @Override
71 public LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input) {
72 LIRInstruction inst = inner.createStackMove(result, input);
73 assert checkResult(inst, result, input);
74 return inst;
|
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.gen;
24
25 import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
26 import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
27
28 import java.util.EnumSet;
29
30 import org.graalvm.compiler.lir.LIRInstruction;
31 import org.graalvm.compiler.lir.LIRInstruction.OperandFlag;
32 import org.graalvm.compiler.lir.LIRInstruction.OperandMode;
33 import org.graalvm.compiler.lir.StandardOp.LoadConstantOp;
34 import org.graalvm.compiler.lir.gen.LIRGeneratorTool.MoveFactory;
35
36 import jdk.vm.ci.meta.AllocatableValue;
37 import jdk.vm.ci.meta.Constant;
38 import jdk.vm.ci.meta.Value;
39
40 /**
41 * Wrapper for {@link MoveFactory} that checks that the instructions created adhere to the contract
42 * of {@link MoveFactory}.
43 */
44 public final class VerifyingMoveFactory implements MoveFactory {
45
46 private final MoveFactory inner;
47
48 public VerifyingMoveFactory(MoveFactory inner) {
49 this.inner = inner;
50 }
51
52 @Override
53 public boolean canInlineConstant(Constant c) {
54 return inner.canInlineConstant(c);
55 }
56
57 @Override
58 public boolean allowConstantToStackMove(Constant constant) {
59 return inner.allowConstantToStackMove(constant);
60 }
61
62 @Override
63 public LIRInstruction createMove(AllocatableValue result, Value input) {
64 LIRInstruction inst = inner.createMove(result, input);
65 assert checkResult(inst, result, input);
66 return inst;
67 }
68
69 @Override
70 public LIRInstruction createStackMove(AllocatableValue result, AllocatableValue input) {
71 LIRInstruction inst = inner.createStackMove(result, input);
72 assert checkResult(inst, result, input);
73 return inst;
|