Search in sources :

Example 11 with RegisterValue

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

the class AMD64VZeroUpper method initRegisterValues.

private static RegisterValue[] initRegisterValues(Value[] exclude) {
    BitSet skippedRegs = new BitSet();
    int numSkipped = 0;
    if (exclude != null) {
        for (Value value : exclude) {
            if (isRegister(value) && asRegister(value).getRegisterCategory().equals(AMD64.XMM)) {
                skippedRegs.set(asRegister(value).number);
                numSkipped++;
            }
        }
    }
    RegisterValue[] regs = new RegisterValue[AMD64.xmmRegistersAVX512.length - numSkipped];
    for (int i = 0, j = 0; i < AMD64.xmmRegistersAVX512.length; i++) {
        Register reg = AMD64.xmmRegistersAVX512[i];
        if (!skippedRegs.get(reg.number)) {
            regs[j++] = reg.asValue();
        }
    }
    return regs;
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue) ValueUtil.isRegister(jdk.vm.ci.code.ValueUtil.isRegister) ValueUtil.asRegister(jdk.vm.ci.code.ValueUtil.asRegister) Register(jdk.vm.ci.code.Register) BitSet(java.util.BitSet) Value(jdk.vm.ci.meta.Value) RegisterValue(jdk.vm.ci.code.RegisterValue)

Example 12 with RegisterValue

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

the class ShadowedRegisterValue method forEachComponent.

@Override
public CompositeValue forEachComponent(LIRInstruction inst, OperandMode mode, InstructionValueProcedure proc) {
    RegisterValue newRegister = (RegisterValue) proc.doValue(inst, register, mode, registerFlags);
    AllocatableValue newStackSlot = (AllocatableValue) proc.doValue(inst, stackslot, mode, stackslotFlags);
    if (register.equals(newRegister) || stackslot.equals(newStackSlot)) {
        return this;
    }
    return new ShadowedRegisterValue(newRegister, newStackSlot);
}
Also used : RegisterValue(jdk.vm.ci.code.RegisterValue) AllocatableValue(jdk.vm.ci.meta.AllocatableValue)

Example 13 with RegisterValue

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

the class TraceGlobalMoveResolutionPhase method addMappingToRegister.

private static void addMappingToRegister(MoveResolver moveResolver, Value from, RegisterValue register) {
    if (isShadowedRegisterValue(from)) {
        RegisterValue fromReg = asShadowedRegisterValue(from).getRegister();
        AllocatableValue fromStack = asShadowedRegisterValue(from).getStackSlot();
        checkAndAddMapping(moveResolver, fromReg, register, fromStack);
    } else {
        checkAndAddMapping(moveResolver, from, register, null);
    }
}
Also used : TraceUtil.isShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.isShadowedRegisterValue) TraceUtil.asShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.asShadowedRegisterValue) RegisterValue(jdk.vm.ci.code.RegisterValue) ValueUtil.asRegisterValue(jdk.vm.ci.code.ValueUtil.asRegisterValue) AllocatableValue(jdk.vm.ci.meta.AllocatableValue)

Example 14 with RegisterValue

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

the class TraceGlobalMoveResolutionPhase method addMappingToStackSlot.

private static void addMappingToStackSlot(MoveResolver moveResolver, Value from, AllocatableValue stack) {
    if (isShadowedRegisterValue(from)) {
        ShadowedRegisterValue shadowedFrom = asShadowedRegisterValue(from);
        RegisterValue fromReg = shadowedFrom.getRegister();
        AllocatableValue fromStack = shadowedFrom.getStackSlot();
        if (!fromStack.equals(stack)) {
            checkAndAddMapping(moveResolver, fromReg, stack, fromStack);
        }
    } else {
        checkAndAddMapping(moveResolver, from, stack, null);
    }
}
Also used : TraceUtil.isShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.isShadowedRegisterValue) TraceUtil.asShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.asShadowedRegisterValue) RegisterValue(jdk.vm.ci.code.RegisterValue) ValueUtil.asRegisterValue(jdk.vm.ci.code.ValueUtil.asRegisterValue) TraceUtil.isShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.isShadowedRegisterValue) TraceUtil.asShadowedRegisterValue(org.graalvm.compiler.lir.alloc.trace.TraceUtil.asShadowedRegisterValue) AllocatableValue(jdk.vm.ci.meta.AllocatableValue)

Example 15 with RegisterValue

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

the class SaveCalleeSaveRegisters method saveAtEntry.

private static RegisterMap<Variable> saveAtEntry(LIR lir, LIRGeneratorTool lirGen, LIRGenerationResult lirGenRes, RegisterArray calleeSaveRegisters, Architecture arch) {
    AbstractBlockBase<?> startBlock = lir.getControlFlowGraph().getStartBlock();
    ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(startBlock);
    int insertionIndex = 1;
    LIRInsertionBuffer buffer = new LIRInsertionBuffer();
    buffer.init(instructions);
    StandardOp.LabelOp entry = (StandardOp.LabelOp) instructions.get(insertionIndex - 1);
    RegisterValue[] savedRegisterValues = new RegisterValue[calleeSaveRegisters.size()];
    int savedRegisterValueIndex = 0;
    RegisterMap<Variable> saveMap = new RegisterMap<>(arch);
    for (Register register : calleeSaveRegisters) {
        PlatformKind registerPlatformKind = arch.getLargestStorableKind(register.getRegisterCategory());
        LIRKind lirKind = LIRKind.value(registerPlatformKind);
        RegisterValue registerValue = register.asValue(lirKind);
        Variable saveVariable = lirGen.newVariable(lirKind);
        LIRInstruction save = lirGen.getSpillMoveFactory().createMove(saveVariable, registerValue);
        buffer.append(insertionIndex, save);
        save.setComment(lirGenRes, "SaveCalleeSavedRegisters: saveAtEntry");
        saveMap.put(register, saveVariable);
        savedRegisterValues[savedRegisterValueIndex++] = registerValue;
    }
    entry.addIncomingValues(savedRegisterValues);
    buffer.finish();
    return saveMap;
}
Also used : Variable(org.graalvm.compiler.lir.Variable) LIRInstruction(org.graalvm.compiler.lir.LIRInstruction) PlatformKind(jdk.vm.ci.meta.PlatformKind) RegisterValue(jdk.vm.ci.code.RegisterValue) LIRInsertionBuffer(org.graalvm.compiler.lir.LIRInsertionBuffer) Register(jdk.vm.ci.code.Register) RegisterMap(org.graalvm.compiler.lir.util.RegisterMap) LIRKind(org.graalvm.compiler.core.common.LIRKind) StandardOp(org.graalvm.compiler.lir.StandardOp)

Aggregations

RegisterValue (jdk.vm.ci.code.RegisterValue)30 CallingConvention (jdk.vm.ci.code.CallingConvention)9 Variable (org.graalvm.compiler.lir.Variable)9 LIRKind (org.graalvm.compiler.core.common.LIRKind)8 Register (jdk.vm.ci.code.Register)7 ForeignCallLinkage (org.graalvm.compiler.core.common.spi.ForeignCallLinkage)6 PlatformKind (jdk.vm.ci.meta.PlatformKind)4 LIRGeneratorTool (org.graalvm.compiler.lir.gen.LIRGeneratorTool)4 AMD64Kind (jdk.vm.ci.amd64.AMD64Kind)3 TargetDescription (jdk.vm.ci.code.TargetDescription)3 AllocatableValue (jdk.vm.ci.meta.AllocatableValue)3 GraalHotSpotVMConfig (org.graalvm.compiler.hotspot.GraalHotSpotVMConfig)3 HotSpotForeignCallLinkage (org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage)3 HotSpotForeignCallLinkageImpl (org.graalvm.compiler.hotspot.HotSpotForeignCallLinkageImpl)3 AMD64AddressValue (org.graalvm.compiler.lir.amd64.AMD64AddressValue)3 CompareAndSwapOp (org.graalvm.compiler.lir.amd64.AMD64Move.CompareAndSwapOp)3 SubstrateRegisterConfig (com.oracle.svm.core.graal.meta.SubstrateRegisterConfig)2 ValueUtil.asRegisterValue (jdk.vm.ci.code.ValueUtil.asRegisterValue)2 TraceUtil.asShadowedRegisterValue (org.graalvm.compiler.lir.alloc.trace.TraceUtil.asShadowedRegisterValue)2 TraceUtil.isShadowedRegisterValue (org.graalvm.compiler.lir.alloc.trace.TraceUtil.isShadowedRegisterValue)2