diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WhileNode.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 5e3d1a68664e
children
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WhileNode.java	Sun Dec 15 22:19:19 2013 +0100
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/WhileNode.java	Sun Dec 15 22:20:12 2013 +0100
@@ -23,6 +23,7 @@
 package com.oracle.truffle.sl.nodes;
 
 import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.utilities.*;
 
 public class WhileNode extends StatementNode {
 
@@ -33,6 +34,11 @@
     private final BreakException breakTarget;
     private final ContinueException continueTarget;
 
+    private final BranchProfile continueMismatch = new BranchProfile();
+    private final BranchProfile continueMatch = new BranchProfile();
+    private final BranchProfile breakMismatch = new BranchProfile();
+    private final BranchProfile breakMatch = new BranchProfile();
+
     public WhileNode(ConditionNode condition, StatementNode body) {
         this.condition = adoptChild(condition);
         this.body = adoptChild(body);
@@ -49,15 +55,19 @@
                     body.executeVoid(frame);
                 } catch (ContinueException ex) {
                     if (ex != continueTarget) {
+                        continueMismatch.enter();
                         throw ex;
                     }
+                    continueMatch.enter();
                     // Fall through to next loop iteration.
                 }
             }
         } catch (BreakException ex) {
             if (ex != breakTarget) {
+                breakMismatch.enter();
                 throw ex;
             }
+            breakMatch.enter();
             // Done executing this loop, exit method to execute statement following the loop.
         }
     }