Mercurial > hg > graal-jvmci-8
comparison graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/IfNode.java @ 13336:d4c6dd07be76
SL: added exemplary uses of new profiling utility BranchProfile to SL.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Sun, 15 Dec 2013 22:20:12 +0100 |
parents | 71991b7a0f14 |
children |
comparison
equal
deleted
inserted
replaced
13335:8531c47138dc | 13336:d4c6dd07be76 |
---|---|
22 */ | 22 */ |
23 package com.oracle.truffle.sl.nodes; | 23 package com.oracle.truffle.sl.nodes; |
24 | 24 |
25 import com.oracle.truffle.api.dsl.*; | 25 import com.oracle.truffle.api.dsl.*; |
26 import com.oracle.truffle.api.frame.*; | 26 import com.oracle.truffle.api.frame.*; |
27 import com.oracle.truffle.api.utilities.*; | |
27 | 28 |
28 @NodeChild(value = "conditionNode", type = ConditionNode.class) | 29 @NodeChild(value = "conditionNode", type = ConditionNode.class) |
29 public abstract class IfNode extends StatementNode { | 30 public abstract class IfNode extends StatementNode { |
30 | 31 |
31 @Child private StatementNode thenPartNode; | 32 @Child private StatementNode thenPartNode; |
32 @Child private StatementNode elsePartNode; | 33 @Child private StatementNode elsePartNode; |
34 | |
35 private final BranchProfile ifBranch = new BranchProfile(); | |
36 private final BranchProfile elseBranch = new BranchProfile(); | |
33 | 37 |
34 public IfNode(StatementNode thenPart, StatementNode elsePart) { | 38 public IfNode(StatementNode thenPart, StatementNode elsePart) { |
35 this.thenPartNode = adoptChild(thenPart); | 39 this.thenPartNode = adoptChild(thenPart); |
36 this.elsePartNode = adoptChild(elsePart); | 40 this.elsePartNode = adoptChild(elsePart); |
37 } | 41 } |
41 } | 45 } |
42 | 46 |
43 @Specialization | 47 @Specialization |
44 public void doVoid(VirtualFrame frame, boolean condition) { | 48 public void doVoid(VirtualFrame frame, boolean condition) { |
45 if (condition) { | 49 if (condition) { |
50 ifBranch.enter(); | |
46 thenPartNode.executeVoid(frame); | 51 thenPartNode.executeVoid(frame); |
47 } else { | 52 } else { |
48 if (elsePartNode != null) { | 53 if (elsePartNode != null) { |
54 elseBranch.enter(); | |
49 elsePartNode.executeVoid(frame); | 55 elsePartNode.executeVoid(frame); |
50 } | 56 } |
51 } | 57 } |
52 } | 58 } |
53 | 59 |