comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java @ 16464:76081918079d

Truffle: move TraceRewrites code to NodeUtil
author Andreas Woess <andreas.woess@jku.at>
date Thu, 10 Jul 2014 18:08:29 +0200
parents 915ebb306fcc
children 456abab80eb5
comparison
equal deleted inserted replaced
16463:f1d839174e71 16464:76081918079d
889 } 889 }
890 890
891 private static String toStringWithClass(Object obj) { 891 private static String toStringWithClass(Object obj) {
892 return obj == null ? "null" : obj + "(" + obj.getClass().getName() + ")"; 892 return obj == null ? "null" : obj + "(" + obj.getClass().getName() + ")";
893 } 893 }
894
895 static void traceRewrite(Node oldNode, Node newNode, CharSequence reason) {
896 if (TruffleOptions.TraceRewritesFilterFromCost != null) {
897 if (filterByKind(oldNode, TruffleOptions.TraceRewritesFilterFromCost)) {
898 return;
899 }
900 }
901
902 if (TruffleOptions.TraceRewritesFilterToCost != null) {
903 if (filterByKind(newNode, TruffleOptions.TraceRewritesFilterToCost)) {
904 return;
905 }
906 }
907
908 String filter = TruffleOptions.TraceRewritesFilterClass;
909 Class<? extends Node> from = oldNode.getClass();
910 Class<? extends Node> to = newNode.getClass();
911 if (filter != null && (filterByContainsClassName(from, filter) || filterByContainsClassName(to, filter))) {
912 return;
913 }
914
915 final SourceSection reportedSourceSection = oldNode.getEncapsulatingSourceSection();
916
917 PrintStream out = System.out;
918 out.printf("[truffle] rewrite %-50s |From %-40s |To %-40s |Reason %s%s%n", oldNode.toString(), formatNodeInfo(oldNode), formatNodeInfo(newNode),
919 reason != null && reason.length() > 0 ? reason : "unknown", reportedSourceSection != null ? " at " + reportedSourceSection.getShortDescription() : "");
920 }
921
922 private static String formatNodeInfo(Node node) {
923 String cost = "?";
924 switch (node.getCost()) {
925 case NONE:
926 cost = "G";
927 break;
928 case MONOMORPHIC:
929 cost = "M";
930 break;
931 case POLYMORPHIC:
932 cost = "P";
933 break;
934 case MEGAMORPHIC:
935 cost = "G";
936 break;
937 default:
938 cost = "?";
939 break;
940 }
941 return cost + " " + node.getClass().getSimpleName();
942 }
943
944 private static boolean filterByKind(Node node, NodeCost cost) {
945 return node.getCost() == cost;
946 }
947
948 private static boolean filterByContainsClassName(Class<? extends Node> from, String filter) {
949 Class<?> currentFrom = from;
950 while (currentFrom != null) {
951 if (currentFrom.getName().contains(filter)) {
952 return false;
953 }
954 currentFrom = currentFrom.getSuperclass();
955 }
956 return true;
957 }
894 } 958 }