1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-03 01:29:04 +00:00

Added more options to CompileLog for controlling verbosity.

This commit is contained in:
jespergravgaard 2017-12-30 17:31:22 +01:00
parent 174346d0f1
commit 58c206cef4
3 changed files with 98 additions and 36 deletions

View File

@ -1,15 +1,41 @@
package dk.camelot64.kickc; package dk.camelot64.kickc;
/** Log of actions & results during compile*/ /**
* Log of actions & results during compile
*/
public class CompileLog { public class CompileLog {
private StringBuilder log; private StringBuilder log;
/** Should register uplift analysis be verbose. */ /**
private boolean verboseUplift; * Should register uplift analysis be verbose.
*/
private boolean verboseUplift = false;
/** Should live range analysis be verbose. */ /**
private boolean verboseLiveRanges; * Should live range analysis be verbose.
*/
private boolean verboseLiveRanges = false;
/**
* Should fragment synthesis be verbose.
*/
private boolean verboseFragmentLog = false;
/**
* Should ASM optimization be verbose.
*/
private boolean verboseAsmOptimize = false;
/**
* Should SSA optimization be verbose.
*/
private boolean verboseSSAOptimize = false;
/**
* Should the log be output to System.out while being built
*/
private boolean sysOut = false;
public CompileLog() { public CompileLog() {
this.log = new StringBuilder(); this.log = new StringBuilder();
@ -18,7 +44,9 @@ public class CompileLog {
public void append(String msg) { public void append(String msg) {
log.append(msg); log.append(msg);
log.append("\n"); log.append("\n");
//System.out.append(msg+"\n"); if(sysOut) {
System.out.append(msg + "\n");
}
} }
public StringBuilder getLog() { public StringBuilder getLog() {
@ -41,6 +69,38 @@ public class CompileLog {
this.verboseLiveRanges = verboseLiveRanges; this.verboseLiveRanges = verboseLiveRanges;
} }
public boolean isVerboseFragmentLog() {
return verboseFragmentLog;
}
public void setVerboseFragmentLog(boolean verboseFragmentLog) {
this.verboseFragmentLog = verboseFragmentLog;
}
public boolean isVerboseAsmOptimize() {
return verboseAsmOptimize;
}
public void setVerboseAsmOptimize(boolean verboseAsmOptimize) {
this.verboseAsmOptimize = verboseAsmOptimize;
}
public boolean isVerboseSSAOptimize() {
return verboseSSAOptimize;
}
public void setVerboseSSAOptimize(boolean verboseSSAOptimize) {
this.verboseSSAOptimize = verboseSSAOptimize;
}
public boolean isSysOut() {
return sysOut;
}
public void setSysOut(boolean sysOut) {
this.sysOut = sysOut;
}
@Override @Override
public String toString() { public String toString() {
return log.toString(); return log.toString();

View File

@ -202,8 +202,10 @@ public class Compiler {
if(stepOptimized) { if(stepOptimized) {
getLog().append("Succesful SSA optimization " + optimization.getClass().getSimpleName() + ""); getLog().append("Succesful SSA optimization " + optimization.getClass().getSimpleName() + "");
ssaOptimized = true; ssaOptimized = true;
//getLog().append("CONTROL FLOW GRAPH"); if(getLog().isVerboseSSAOptimize()) {
//getLog().append(program.getGraph().toString(program)); getLog().append("CONTROL FLOW GRAPH");
getLog().append(program.getGraph().toString(program));
}
} }
} }
} }
@ -345,8 +347,10 @@ public class Compiler {
if(stepOptimized) { if(stepOptimized) {
getLog().append("Succesful ASM optimization " + optimization.getClass().getSimpleName()); getLog().append("Succesful ASM optimization " + optimization.getClass().getSimpleName());
asmOptimized = true; asmOptimized = true;
//getLog().append("ASSEMBLER"); if(getLog().isVerboseAsmOptimize()) {
//getLog().append(program.getAsm().toString()); getLog().append("ASSEMBLER");
getLog().append(program.getAsm().toString());
}
} }
} }
} }

View File

@ -21,8 +21,6 @@ import java.util.regex.Pattern;
*/ */
public class AsmFragmentManager { public class AsmFragmentManager {
static boolean verboseFragmentLog = false;
/** /**
* Cache for fragment files. Maps signature to the parsed file. * Cache for fragment files. Maps signature to the parsed file.
*/ */
@ -44,7 +42,7 @@ public class AsmFragmentManager {
private static KickCParser.AsmFileContext getFragmentFile(AsmFragmentSignature signature, CompileLog log) { private static KickCParser.AsmFileContext getFragmentFile(AsmFragmentSignature signature, CompileLog log) {
KickCParser.AsmFileContext fragmentCtx = fragmentFileCache.get(signature.getSignature()); KickCParser.AsmFileContext fragmentCtx = fragmentFileCache.get(signature.getSignature());
if(fragmentCtx == UNKNOWN) { if(fragmentCtx == UNKNOWN) {
if(verboseFragmentLog) { if(log.isVerboseFragmentLog()) {
log.append("Unknown fragment " + signature.getSignature()); log.append("Unknown fragment " + signature.getSignature());
} }
throw new UnknownFragmentException(signature.toString()); throw new UnknownFragmentException(signature.toString());
@ -53,7 +51,7 @@ public class AsmFragmentManager {
FragmentSynthesizer synthesizer = new FragmentSynthesizer(signature, log); FragmentSynthesizer synthesizer = new FragmentSynthesizer(signature, log);
List<CharStream> candidates = synthesizer.loadOrSynthesizeFragment(signature.getSignature()); List<CharStream> candidates = synthesizer.loadOrSynthesizeFragment(signature.getSignature());
if(candidates.size() == 0) { if(candidates.size() == 0) {
if(verboseFragmentLog) { if(log.isVerboseFragmentLog()) {
log.append("Unknown fragment " + signature.toString()); log.append("Unknown fragment " + signature.toString());
} }
fragmentFileCache.put(signature.getSignature(), UNKNOWN); fragmentFileCache.put(signature.getSignature(), UNKNOWN);
@ -78,7 +76,7 @@ public class AsmFragmentManager {
fragmentCtx = candidateCtx; fragmentCtx = candidateCtx;
} }
} }
if(verboseFragmentLog) { if(log.isVerboseFragmentLog()) {
log.append("Found fragment " + signature + " score: " + minScore + " from " + candidates.size() + " candidates"); log.append("Found fragment " + signature + " score: " + minScore + " from " + candidates.size() + " candidates");
} }
fragmentFileCache.put(signature.getSignature(), fragmentCtx); fragmentFileCache.put(signature.getSignature(), fragmentCtx);
@ -114,7 +112,7 @@ public class AsmFragmentManager {
CharStream fragmentCharStream = loadFragment(signature); CharStream fragmentCharStream = loadFragment(signature);
if(fragmentCharStream != null) { if(fragmentCharStream != null) {
candidates.add(fragmentCharStream); candidates.add(fragmentCharStream);
if(verboseFragmentLog) { if(log.isVerboseFragmentLog()) {
log.append("Finding fragment "+this.signature.getSignature()+" - Successfully loaded fragment " + signature); log.append("Finding fragment "+this.signature.getSignature()+" - Successfully loaded fragment " + signature);
} }
} }
@ -123,7 +121,7 @@ public class AsmFragmentManager {
for(FragmentSynthesis synth : synths) { for(FragmentSynthesis synth : synths) {
List<CharStream> synthesized = synth.synthesize(signature, this); List<CharStream> synthesized = synth.synthesize(signature, this);
if(synthesized != null) { if(synthesized != null) {
if(verboseFragmentLog && synthesized.size() > 0) { if(log.isVerboseFragmentLog() && synthesized.size() > 0) {
log.append("Finding fragment "+this.signature.getSignature()+" - Successfully synthesized " + synthesized.size() + " fragments " + signature + " (from " + synth.getSubSignature() + ")"); log.append("Finding fragment "+this.signature.getSignature()+" - Successfully synthesized " + synthesized.size() + " fragments " + signature + " (from " + synth.getSubSignature() + ")");
} }
candidates.addAll(synthesized); candidates.addAll(synthesized);