mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-11-03 12:07:26 +00:00
Less logging during uplift.
This commit is contained in:
parent
d640c53033
commit
9f5efab3ee
@ -79,7 +79,7 @@ public class Compiler {
|
||||
program.getLog().append(program.getRegisterUpliftProgram().toString((program.getVariableRegisterWeights())));
|
||||
|
||||
// Attempt uplifting registers through a lot of combinations
|
||||
new Pass3RegisterUpliftCombinations(program).performUplift(10_000);
|
||||
new Pass3RegisterUpliftCombinations(program).performUplift(30_000);
|
||||
|
||||
// Attempt uplifting registers one at a time to catch remaining potential not realized by combination search
|
||||
new Pass3RegisterUpliftRemains(program).performUplift();
|
||||
|
@ -19,6 +19,10 @@ public class RegisterCombination {
|
||||
allocation.put(equivalenceClass, register);
|
||||
}
|
||||
|
||||
public RegisterAllocation.Register getRegister(LiveRangeEquivalenceClass equivalenceClass) {
|
||||
return allocation.get(equivalenceClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate the registers of the combination into the programs register allocation
|
||||
*/
|
||||
|
@ -28,6 +28,9 @@ public class Pass3RegisterUpliftCombinations extends Pass2Base {
|
||||
int countCombinations = 0;
|
||||
while (combinationIterator.hasNext() && countCombinations<maxCombinations) {
|
||||
countCombinations++;
|
||||
if(countCombinations%10000==0) {
|
||||
getLog().append("Uplift attempts ["+upliftScope.getScopeRef()+"] "+countCombinations+"/"+combinationIterator.getNumIterations()+" (limiting to "+maxCombinations+")");
|
||||
}
|
||||
RegisterCombination combination = combinationIterator.next();
|
||||
// Reset register allocation to original zero page allocation
|
||||
new Pass3RegistersFinalize(getProgram()).allocate(false);
|
||||
@ -38,32 +41,32 @@ public class Pass3RegisterUpliftCombinations extends Pass2Base {
|
||||
new Pass3CodeGeneration(getProgram()).generate();
|
||||
} catch (AsmFragment.UnknownFragmentException e) {
|
||||
unknownFragments.add(e.getFragmentSignature());
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
msg.append("missing fragment " + e.getFragmentSignature());
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//StringBuilder msg = new StringBuilder();
|
||||
//msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
//msg.append("missing fragment " + e.getFragmentSignature());
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
continue;
|
||||
} catch (AsmFragment.AluNotApplicableException e) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
msg.append("alu not applicable");
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//StringBuilder msg = new StringBuilder();
|
||||
//msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
//msg.append("alu not applicable");
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
continue;
|
||||
}
|
||||
// If no clobber - Find value of the resulting allocation
|
||||
boolean hasClobberProblem = new Pass3AssertNoCpuClobber(getProgram()).hasClobberProblem(false);
|
||||
int combinationScore = getAsmScore(getProgram());
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
if (hasClobberProblem) {
|
||||
msg.append("clobber");
|
||||
} else {
|
||||
msg.append(combinationScore);
|
||||
}
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
|
||||
//if (hasClobberProblem) {
|
||||
// msg.append("clobber");
|
||||
//} else {
|
||||
// msg.append(combinationScore);
|
||||
//}
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
if (!hasClobberProblem) {
|
||||
if (combinationScore < bestScore) {
|
||||
bestScore = combinationScore;
|
||||
|
@ -45,32 +45,32 @@ public class Pass3RegisterUpliftRemains extends Pass2Base {
|
||||
new Pass3CodeGeneration(getProgram()).generate();
|
||||
} catch (AsmFragment.UnknownFragmentException e) {
|
||||
unknownFragments.add(e.getFragmentSignature());
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
msg.append("missing fragment " + e.getFragmentSignature());
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//StringBuilder msg = new StringBuilder();
|
||||
//msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
//msg.append("missing fragment " + e.getFragmentSignature());
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
continue;
|
||||
} catch (AsmFragment.AluNotApplicableException e) {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
msg.append("alu not applicable");
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//StringBuilder msg = new StringBuilder();
|
||||
//msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
//msg.append("alu not applicable");
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
continue;
|
||||
}
|
||||
// If no clobber - Find value of the resulting allocation
|
||||
boolean hasClobberProblem = new Pass3AssertNoCpuClobber(getProgram()).hasClobberProblem(false);
|
||||
int combinationScore = getAsmScore(getProgram());
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
if (hasClobberProblem) {
|
||||
msg.append("clobber");
|
||||
} else {
|
||||
msg.append(combinationScore);
|
||||
}
|
||||
msg.append(" allocation: ").append(combination.toString());
|
||||
getLog().append(msg.toString());
|
||||
//StringBuilder msg = new StringBuilder();
|
||||
//msg.append("Uplift remains attempt [" + equivalenceClass + "] ");
|
||||
//if (hasClobberProblem) {
|
||||
// msg.append("clobber");
|
||||
//} else {
|
||||
// msg.append(combinationScore);
|
||||
//}
|
||||
//msg.append(" allocation: ").append(combination.toString());
|
||||
//getLog().append(msg.toString());
|
||||
if (!hasClobberProblem) {
|
||||
if (combinationScore < bestScore) {
|
||||
bestScore = combinationScore;
|
||||
@ -79,8 +79,10 @@ public class Pass3RegisterUpliftRemains extends Pass2Base {
|
||||
}
|
||||
}
|
||||
// Save the best combination in the equivalence class
|
||||
bestCombination.store(equivalenceClassSet);
|
||||
getLog().append("Uplifting remains [" + equivalenceClass + "] best " + bestScore + " combination " + bestCombination.toString());
|
||||
if(!bestCombination.getRegister(equivalenceClass).isZp()) {
|
||||
bestCombination.store(equivalenceClassSet);
|
||||
getLog().append("Uplifting remains [" + equivalenceClass + "] best " + bestScore + " combination " + bestCombination.toString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -75,12 +75,12 @@ render__B2_from_B1:
|
||||
render__B2_from_B5:
|
||||
render__B2:
|
||||
lda 7
|
||||
sta 10
|
||||
lda 2
|
||||
sta 11
|
||||
lda 2
|
||||
sta 12
|
||||
jsr findcol
|
||||
render__B5:
|
||||
lda 9
|
||||
lda 10
|
||||
ldy 7
|
||||
sta (3),y
|
||||
lda #230
|
||||
@ -114,80 +114,75 @@ render__Breturn:
|
||||
findcol:
|
||||
findcol__B1_from_findcol:
|
||||
lda #0
|
||||
sta 9
|
||||
ldy #255
|
||||
ldx #0
|
||||
sta 10
|
||||
lda #255
|
||||
sta 8
|
||||
ldy #0
|
||||
findcol__B1_from_B13:
|
||||
findcol__B1:
|
||||
lda 4096,x
|
||||
sta 8
|
||||
lda 4352,x
|
||||
sta 12
|
||||
lda 10
|
||||
cmp 8
|
||||
lda 4096,y
|
||||
ldx 4352,y
|
||||
cmp 11
|
||||
beq findcol__B2
|
||||
findcol__B3:
|
||||
lda 10
|
||||
cmp 8
|
||||
bcc findcol__B6
|
||||
cmp 11
|
||||
bcs findcol__B6
|
||||
findcol__B7:
|
||||
lda 10
|
||||
eor #255
|
||||
sec
|
||||
sbc 8
|
||||
sta 8
|
||||
adc 11
|
||||
sta 9
|
||||
findcol__B8_from_B7:
|
||||
findcol__B8:
|
||||
lda 11
|
||||
cmp 12
|
||||
bcc findcol__B9
|
||||
cpx 12
|
||||
bcs findcol__B9
|
||||
findcol__B10:
|
||||
lda 11
|
||||
stx 255
|
||||
lda 12
|
||||
sec
|
||||
sbc 12
|
||||
sbc 255
|
||||
clc
|
||||
adc 8
|
||||
sta 8
|
||||
adc 9
|
||||
tax
|
||||
findcol__B11_from_B10:
|
||||
findcol__B11:
|
||||
cpy 8
|
||||
bcs findcol__B12
|
||||
cpx 8
|
||||
bcc findcol__B12
|
||||
findcol__B13_from_B11:
|
||||
findcol__B13:
|
||||
inx
|
||||
cpx #6
|
||||
iny
|
||||
cpy #6
|
||||
bcc findcol__B1_from_B13
|
||||
findcol__Breturn_from_B13:
|
||||
jmp findcol__Breturn
|
||||
findcol__Breturn_from_B2:
|
||||
lda #0
|
||||
sta 9
|
||||
sta 10
|
||||
findcol__Breturn:
|
||||
rts
|
||||
findcol__B12:
|
||||
lda 4608,x
|
||||
sta 9
|
||||
ldy 8
|
||||
lda 4608,y
|
||||
sta 10
|
||||
stx 8
|
||||
findcol__B13_from_B12:
|
||||
jmp findcol__B13
|
||||
findcol__B9:
|
||||
lda 12
|
||||
txa
|
||||
sec
|
||||
sbc 11
|
||||
sbc 12
|
||||
clc
|
||||
adc 8
|
||||
sta 8
|
||||
adc 9
|
||||
tax
|
||||
findcol__B11_from_B9:
|
||||
jmp findcol__B11
|
||||
findcol__B6:
|
||||
lda 8
|
||||
sec
|
||||
sbc 10
|
||||
sta 8
|
||||
sbc 11
|
||||
sta 9
|
||||
findcol__B8_from_B6:
|
||||
jmp findcol__B8
|
||||
findcol__B2:
|
||||
lda 11
|
||||
cmp 12
|
||||
cpx 12
|
||||
beq findcol__Breturn_from_B2
|
||||
jmp findcol__B3
|
||||
addpoint:
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -32,33 +32,33 @@
|
||||
(label) findcol::@9
|
||||
(label) findcol::@return
|
||||
(byte) findcol::diff
|
||||
(byte) findcol::diff#0 zp byte:8 20002.0
|
||||
(byte) findcol::diff#1 zp byte:8 20002.0
|
||||
(byte~) findcol::diff#13 reg byte y 20002.0
|
||||
(byte) findcol::diff#2 zp byte:8 20002.0
|
||||
(byte) findcol::diff#3 zp byte:8 20002.0
|
||||
(byte) findcol::diff#4 zp byte:8 10001.0
|
||||
(byte) findcol::diff#6 zp byte:8 13334.666666666666
|
||||
(byte) findcol::diff#0 zp byte:9 20002.0
|
||||
(byte) findcol::diff#1 zp byte:9 20002.0
|
||||
(byte~) findcol::diff#13 zp byte:8 20002.0
|
||||
(byte) findcol::diff#2 reg byte x 20002.0
|
||||
(byte) findcol::diff#3 reg byte x 20002.0
|
||||
(byte) findcol::diff#4 zp byte:9 10001.0
|
||||
(byte) findcol::diff#6 reg byte x 13334.666666666666
|
||||
(byte) findcol::i
|
||||
(byte) findcol::i#1 reg byte x 15001.5
|
||||
(byte) findcol::i#12 reg byte x 2631.842105263158
|
||||
(byte) findcol::i#1 reg byte y 15001.5
|
||||
(byte) findcol::i#12 reg byte y 2631.842105263158
|
||||
(byte) findcol::mincol
|
||||
(byte) findcol::mincol#1 zp byte:9 10001.0
|
||||
(byte) findcol::mincol#11 zp byte:9 1250.125
|
||||
(byte) findcol::mincol#2 zp byte:9 13334.666666666666
|
||||
(byte) findcol::mincol#1 zp byte:10 10001.0
|
||||
(byte) findcol::mincol#11 zp byte:10 1250.125
|
||||
(byte) findcol::mincol#2 zp byte:10 13334.666666666666
|
||||
(byte) findcol::mindiff
|
||||
(byte) findcol::mindiff#10 reg byte y 1875.1875
|
||||
(byte) findcol::mindiff#11 reg byte y 10001.0
|
||||
(byte) findcol::mindiff#10 zp byte:8 1875.1875
|
||||
(byte) findcol::mindiff#11 zp byte:8 10001.0
|
||||
(byte) findcol::return
|
||||
(byte) findcol::return#0 zp byte:9 343.8125
|
||||
(byte) findcol::return#0 zp byte:10 343.8125
|
||||
(byte) findcol::x
|
||||
(byte) findcol::x#0 zp byte:10 1577.1153846153845
|
||||
(byte) findcol::x#0 zp byte:11 1577.1153846153845
|
||||
(byte) findcol::xp
|
||||
(byte) findcol::xp#0 zp byte:8 10001.0
|
||||
(byte) findcol::xp#0 reg byte a 10001.0
|
||||
(byte) findcol::y
|
||||
(byte) findcol::y#0 zp byte:11 1640.2
|
||||
(byte) findcol::y#0 zp byte:12 1640.2
|
||||
(byte) findcol::yp
|
||||
(byte) findcol::yp#0 zp byte:12 6250.625
|
||||
(byte) findcol::yp#0 reg byte x 6250.625
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@3
|
||||
@ -94,16 +94,18 @@ zp byte:2 [ render::y#2 render::y#1 addpoint::c#6 ]
|
||||
zp ptr byte:3 [ render::colline#2 render::colline#1 ]
|
||||
zp ptr byte:5 [ render::chrline#2 render::chrline#1 ]
|
||||
zp byte:7 [ render::x#2 render::x#1 ]
|
||||
reg byte x [ findcol::i#12 findcol::i#1 ]
|
||||
reg byte y [ findcol::mindiff#10 findcol::mindiff#11 findcol::diff#13 ]
|
||||
zp byte:8 [ findcol::diff#4 findcol::diff#0 findcol::diff#1 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::xp#0 ]
|
||||
zp byte:9 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ]
|
||||
reg byte y [ findcol::i#12 findcol::i#1 ]
|
||||
zp byte:8 [ findcol::mindiff#10 findcol::mindiff#11 findcol::diff#13 ]
|
||||
zp byte:9 [ findcol::diff#4 findcol::diff#0 findcol::diff#1 ]
|
||||
reg byte x [ findcol::diff#6 findcol::diff#3 findcol::diff#2 ]
|
||||
zp byte:10 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ]
|
||||
reg byte a [ addpoint::x#6 ]
|
||||
reg byte y [ addpoint::idx#6 ]
|
||||
reg byte x [ addpoint::y#6 ]
|
||||
zp byte:10 [ findcol::x#0 ]
|
||||
zp byte:11 [ findcol::y#0 ]
|
||||
zp byte:11 [ findcol::x#0 ]
|
||||
zp byte:12 [ findcol::y#0 ]
|
||||
reg byte a [ render::col#0 ]
|
||||
zp byte:12 [ findcol::yp#0 ]
|
||||
reg byte a [ findcol::xp#0 ]
|
||||
reg byte x [ findcol::yp#0 ]
|
||||
reg byte a [ findcol::$10 ]
|
||||
reg byte a [ findcol::$8 ]
|
||||
|
Loading…
Reference in New Issue
Block a user