comparison c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/VMExitsNative.java @ 1456:cb03c46412a4

Merge.
author Doug Simon <doug.simon@oracle.com>
date Fri, 12 Nov 2010 16:17:55 +0100
parents 8cfe3537a0d3
children 1845386f5403
comparison
equal deleted inserted replaced
1455:43a93774d24f 1456:cb03c46412a4
21 21
22 package com.sun.hotspot.c1x; 22 package com.sun.hotspot.c1x;
23 23
24 import java.io.*; 24 import java.io.*;
25 import java.lang.reflect.*; 25 import java.lang.reflect.*;
26 import java.util.*;
26 27
27 import com.sun.c1x.*; 28 import com.sun.c1x.*;
28 import com.sun.cri.ci.*; 29 import com.sun.cri.ci.*;
29 import com.sun.cri.ri.*; 30 import com.sun.cri.ri.*;
30 import com.sun.hotspot.c1x.logging.*; 31 import com.sun.hotspot.c1x.logging.*;
35 * @author Thomas Wuerthinger, Lukas Stadler 36 * @author Thomas Wuerthinger, Lukas Stadler
36 */ 37 */
37 public class VMExitsNative implements VMExits { 38 public class VMExitsNative implements VMExits {
38 39
39 public static boolean compileMethods = true; 40 public static boolean compileMethods = true;
41
42 /**
43 * Default option configuration for C1X.
44 */
45 static {
46 C1XOptions.setOptimizationLevel(3);
47 C1XOptions.OptInlineExcept = false;
48 C1XOptions.OptInlineSynchronized = false;
49 C1XOptions.UseDeopt = false;
50 }
40 51
41 @Override 52 @Override
42 public boolean setOption(String option) { 53 public boolean setOption(String option) {
43 if (option.length() == 0) { 54 if (option.length() == 0) {
44 return false; 55 return false;
100 } 111 }
101 112
102 return true; 113 return true;
103 } 114 }
104 115
116 private static Set<String> compiledMethods = new HashSet<String>();
117
105 @Override 118 @Override
106 public void compileMethod(long methodVmId, String name, int entryBCI) throws Throwable { 119 public void compileMethod(long methodVmId, String name, int entryBCI) throws Throwable {
107 120
108 if (!compileMethods) { 121 if (!compileMethods) {
109 return; 122 return;
111 124
112 try { 125 try {
113 Compiler compiler = Compiler.getInstance(); 126 Compiler compiler = Compiler.getInstance();
114 HotSpotMethodResolved riMethod = new HotSpotMethodResolved(methodVmId, name); 127 HotSpotMethodResolved riMethod = new HotSpotMethodResolved(methodVmId, name);
115 CiResult result = compiler.getCompiler().compileMethod(riMethod, -1, null); 128 CiResult result = compiler.getCompiler().compileMethod(riMethod, -1, null);
129 String qualifiedName = CiUtil.toJavaName(riMethod.holder()) + "::" + riMethod.name();
130 compiledMethods.add(qualifiedName);
116 131
117 if (result.bailout() != null) { 132 if (result.bailout() != null) {
118 StringWriter out = new StringWriter(); 133 StringWriter out = new StringWriter();
119 result.bailout().printStackTrace(new PrintWriter(out)); 134 result.bailout().printStackTrace(new PrintWriter(out));
135 Throwable cause = result.bailout().getCause();
120 Logger.info("Bailout:\n" + out.toString()); 136 Logger.info("Bailout:\n" + out.toString());
137 if (cause != null) {
138 Logger.info("Trace for cause: ");
139 for (StackTraceElement e : cause.getStackTrace()) {
140 String current = e.getClassName() + "::" + e.getMethodName();
141 String type = "";
142 if (compiledMethods.contains(current)) {
143 type = "compiled";
144 }
145 Logger.info(String.format("%-10s %3d %s", type, e.getLineNumber(), current));
146 }
147 }
121 Compiler.getVMEntries().recordBailout(result.bailout().getMessage()); 148 Compiler.getVMEntries().recordBailout(result.bailout().getMessage());
122 } else { 149 } else {
123 Logger.log("Compilation result: " + result.targetMethod()); 150 Logger.log("Compilation result: " + result.targetMethod());
124 HotSpotTargetMethod.installMethod(riMethod, result.targetMethod()); 151 HotSpotTargetMethod.installMethod(riMethod, result.targetMethod());
125 } 152 }