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:
parent
174346d0f1
commit
58c206cef4
@ -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();
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user