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