use of org.graalvm.compiler.lir.LIR in project graal by oracle.
the class TraceGlobalMoveResolutionPhase method resolveGlobalDataFlow.
@SuppressWarnings("try")
private static void resolveGlobalDataFlow(TraceBuilderResult resultTraces, LIRGenerationResult lirGenRes, MoveFactory spillMoveFactory, Architecture arch, GlobalLivenessInfo livenessInfo, RegisterAllocationConfig registerAllocationConfig) {
LIR lir = lirGenRes.getLIR();
/* Resolve trace global data-flow mismatch. */
TraceGlobalMoveResolver moveResolver = new TraceGlobalMoveResolver(lirGenRes, spillMoveFactory, registerAllocationConfig, arch);
DebugContext debug = lir.getDebug();
try (Indent indent = debug.logAndIndent("Trace global move resolution")) {
for (Trace trace : resultTraces.getTraces()) {
resolveTrace(resultTraces, livenessInfo, lir, moveResolver, trace);
}
}
}
use of org.graalvm.compiler.lir.LIR 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);
}
}
}
use of org.graalvm.compiler.lir.LIR in project graal by oracle.
the class StackMoveOptimizationPhase method run.
@Override
protected void run(TargetDescription target, LIRGenerationResult lirGenRes, PostAllocationOptimizationContext context) {
LIR lir = lirGenRes.getLIR();
DebugContext debug = lir.getDebug();
for (AbstractBlockBase<?> block : lir.getControlFlowGraph().getBlocks()) {
ArrayList<LIRInstruction> instructions = lir.getLIRforBlock(block);
new Closure().process(debug, instructions);
}
}
use of org.graalvm.compiler.lir.LIR in project graal by oracle.
the class SPARCLIRGenerator method beforeRegisterAllocation.
@Override
public void beforeRegisterAllocation() {
LIR lir = getResult().getLIR();
loadConstantTableBaseOp.setAlive(lir, constantTableBaseProvider.useConstantTableBase);
}
use of org.graalvm.compiler.lir.LIR in project graal by oracle.
the class TrivialTraceAllocator method run.
@Override
protected void run(TargetDescription target, LIRGenerationResult lirGenRes, Trace trace, TraceAllocationContext context) {
LIR lir = lirGenRes.getLIR();
assert isTrivialTrace(lir, trace) : "Not a trivial trace! " + trace;
AbstractBlockBase<?> block = trace.getBlocks()[0];
assert TraceAssertions.singleHeadPredecessor(trace) : "Trace head with more than one predecessor?!" + trace;
AbstractBlockBase<?> pred = block.getPredecessors()[0];
GlobalLivenessInfo livenessInfo = context.livenessInfo;
allocate(block, pred, livenessInfo, SSAUtil.phiOutOrNull(lir, block));
}
Aggregations