package org.graalvm.compiler.lir.alloc;
import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot;
import java.util.EnumSet;
import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
import org.graalvm.compiler.lir.LIR;
import org.graalvm.compiler.lir.LIRInstruction;
import org.graalvm.compiler.lir.LIRInstruction.OperandFlag;
import org.graalvm.compiler.lir.LIRInstruction.OperandMode;
import org.graalvm.compiler.lir.gen.LIRGenerationResult;
import org.graalvm.compiler.lir.phases.AllocationPhase;
import jdk.vm.ci.code.TargetDescription;
import jdk.vm.ci.meta.Value;
public class AllocationStageVerifier extends AllocationPhase {
@Override
protected void run(TargetDescription target, LIRGenerationResult lirGenRes, AllocationContext context) {
verifyLIR(lirGenRes.getLIR());
}
protected void verifyLIR(LIR lir) {
for (AbstractBlockBase<?> block : lir.getControlFlowGraph().getBlocks()) {
verifyBlock(lir, block);
}
}
protected void verifyBlock(LIR lir, AbstractBlockBase<?> block) {
for (LIRInstruction inst : lir.getLIRforBlock(block)) {
verifyInstruction(inst);
}
}
protected void verifyInstruction(LIRInstruction inst) {
inst.visitEachInput(this::verifyOperands);
inst.visitEachOutput(this::verifyOperands);
inst.visitEachAlive(this::verifyOperands);
inst.visitEachTemp(this::verifyOperands);
}