Mercurial > hg > graal-compiler
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 } |