comparison graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/trace/TraceAllocationPhase.java @ 23338:859766efc59e

TraceRA: introduce Trace class.
author Josef Eisl <josef.eisl@jku.at>
date Wed, 20 Jan 2016 11:58:32 +0100
parents ef5ce69bdc21
children
comparison
equal deleted inserted replaced
23337:da555eeb09af 23338:859766efc59e
20 * or visit www.oracle.com if you need additional information or have any 20 * or visit www.oracle.com if you need additional information or have any
21 * questions. 21 * questions.
22 */ 22 */
23 package com.oracle.graal.lir.alloc.trace; 23 package com.oracle.graal.lir.alloc.trace;
24 24
25 import java.util.List;
26
25 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig; 27 import com.oracle.graal.compiler.common.alloc.RegisterAllocationConfig;
28 import com.oracle.graal.compiler.common.alloc.Trace;
26 import com.oracle.graal.compiler.common.alloc.TraceBuilderResult; 29 import com.oracle.graal.compiler.common.alloc.TraceBuilderResult;
30 import com.oracle.graal.compiler.common.cfg.AbstractBlockBase;
31 import com.oracle.graal.lir.gen.LIRGenerationResult;
27 import com.oracle.graal.lir.gen.LIRGeneratorTool.MoveFactory; 32 import com.oracle.graal.lir.gen.LIRGeneratorTool.MoveFactory;
28 import com.oracle.graal.lir.phases.LIRPhase; 33 import com.oracle.graal.lir.phases.LIRPhase;
34
35 import jdk.vm.ci.code.TargetDescription;
29 36
30 public abstract class TraceAllocationPhase extends LIRPhase<TraceAllocationPhase.TraceAllocationContext> { 37 public abstract class TraceAllocationPhase extends LIRPhase<TraceAllocationPhase.TraceAllocationContext> {
31 38
32 public static final class TraceAllocationContext { 39 public static final class TraceAllocationContext {
33 public final MoveFactory spillMoveFactory; 40 public final MoveFactory spillMoveFactory;
39 this.registerAllocationConfig = registerAllocationConfig; 46 this.registerAllocationConfig = registerAllocationConfig;
40 this.resultTraces = resultTraces; 47 this.resultTraces = resultTraces;
41 } 48 }
42 } 49 }
43 50
51 public final <B extends AbstractBlockBase<B>> void apply(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, Trace<B> trace, TraceAllocationContext context,
52 boolean dumpLIR) {
53 apply(target, lirGenRes, codeEmittingOrder, trace.getBlocks(), context, dumpLIR);
54 }
55
56 public final <B extends AbstractBlockBase<B>> void apply(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, Trace<B> trace, TraceAllocationContext context) {
57 apply(target, lirGenRes, codeEmittingOrder, trace.getBlocks(), context);
58 }
59
60 @Override
61 protected final <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> sortedBlocks, TraceAllocationContext context) {
62 TraceBuilderResult<B> resultTraces = getTraceBuilderResult(context);
63 Trace<B> trace = resultTraces.getTraces().get(resultTraces.getTraceForBlock(sortedBlocks.get(0)));
64 run(target, lirGenRes, codeEmittingOrder, trace, context);
65 }
66
67 @SuppressWarnings("unchecked")
68 private static <B extends AbstractBlockBase<B>> TraceBuilderResult<B> getTraceBuilderResult(TraceAllocationContext context) {
69 return (TraceBuilderResult<B>) context.resultTraces;
70 }
71
72 protected abstract <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, Trace<B> trace, TraceAllocationContext context);
44 } 73 }