Search in sources :

Example 6 with RegisterArray

use of jdk.vm.ci.code.RegisterArray in project graal by oracle.

the class SaveCalleeSaveRegisters method run.

@Override
protected void run(TargetDescription target, LIRGenerationResult lirGenRes, PreAllocationOptimizationContext context) {
    RegisterArray calleeSaveRegisters = lirGenRes.getRegisterConfig().getCalleeSaveRegisters();
    if (calleeSaveRegisters == null || calleeSaveRegisters.size() == 0) {
        return;
    }
    LIR lir = lirGenRes.getLIR();
    RegisterMap<Variable> savedRegisters = saveAtEntry(lir, context.lirGen, lirGenRes, calleeSaveRegisters, target.arch);
    for (AbstractBlockBase<?> block : lir.codeEmittingOrder()) {
        if (block == null) {
            continue;
        }
        if (block.getSuccessorCount() == 0) {
            restoreAtExit(lir, context.lirGen.getSpillMoveFactory(), lirGenRes, savedRegisters, block);
        }
    }
}
Also used : Variable(org.graalvm.compiler.lir.Variable) LIR(org.graalvm.compiler.lir.LIR) RegisterArray(jdk.vm.ci.code.RegisterArray)

Aggregations

RegisterArray (jdk.vm.ci.code.RegisterArray)6 ArrayList (java.util.ArrayList)4 BitSet (java.util.BitSet)4 Register (jdk.vm.ci.code.Register)4 Value (jdk.vm.ci.meta.Value)2 ArrayDeque (java.util.ArrayDeque)1 EnumSet (java.util.EnumSet)1 StackSlot (jdk.vm.ci.code.StackSlot)1 TargetDescription (jdk.vm.ci.code.TargetDescription)1 ValueUtil.asRegister (jdk.vm.ci.code.ValueUtil.asRegister)1 ValueUtil.asStackSlot (jdk.vm.ci.code.ValueUtil.asStackSlot)1 ValueUtil.isRegister (jdk.vm.ci.code.ValueUtil.isRegister)1 ValueUtil.isStackSlot (jdk.vm.ci.code.ValueUtil.isStackSlot)1 AArch64HotSpotRegisterConfig (jdk.vm.ci.hotspot.aarch64.AArch64HotSpotRegisterConfig)1 AllocatableValue (jdk.vm.ci.meta.AllocatableValue)1 Constant (jdk.vm.ci.meta.Constant)1 JavaConstant (jdk.vm.ci.meta.JavaConstant)1 ValueKind (jdk.vm.ci.meta.ValueKind)1 EconomicSet (org.graalvm.collections.EconomicSet)1 Equivalence (org.graalvm.collections.Equivalence)1