mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-21 22:29:07 +00:00
Rafactoring pass 2
This commit is contained in:
parent
9864995afb
commit
5d988dd859
@ -231,12 +231,12 @@ public class Compiler {
|
|||||||
|
|
||||||
private void pass2Optimize() {
|
private void pass2Optimize() {
|
||||||
List<Pass2SsaOptimization> optimizations = new ArrayList<>();
|
List<Pass2SsaOptimization> optimizations = new ArrayList<>();
|
||||||
optimizations.add(new PassNAddTypeConversionAssignment(program));
|
|
||||||
optimizations.add(new PassNAddNumberTypeConversions(program));
|
optimizations.add(new PassNAddNumberTypeConversions(program));
|
||||||
optimizations.add(new PassNAddArrayNumberTypeConversions(program));
|
optimizations.add(new PassNAddArrayNumberTypeConversions(program));
|
||||||
optimizations.add(new PassNDowngradeBytePlusWord(program));
|
optimizations.add(new PassNDowngradeBytePlusWord(program));
|
||||||
optimizations.add(new PassNTypeInference(program));
|
optimizations.add(new PassNTypeInference(program));
|
||||||
optimizations.add(new PassNTypeIdSimplification(program));
|
optimizations.add(new PassNTypeIdSimplification(program));
|
||||||
|
optimizations.add(new Pass2SizeOfSimplification(program));
|
||||||
optimizations.add(new Pass2CullEmptyBlocks(program));
|
optimizations.add(new Pass2CullEmptyBlocks(program));
|
||||||
optimizations.add(new PassNStatementIndices(program));
|
optimizations.add(new PassNStatementIndices(program));
|
||||||
optimizations.add(new PassNVariableReferenceInfos(program));
|
optimizations.add(new PassNVariableReferenceInfos(program));
|
||||||
@ -257,21 +257,18 @@ public class Compiler {
|
|||||||
optimizations.add(new Pass2FixInlineConstructorsNew(program));
|
optimizations.add(new Pass2FixInlineConstructorsNew(program));
|
||||||
optimizations.add(new PassNAddTypeConversionAssignment(program));
|
optimizations.add(new PassNAddTypeConversionAssignment(program));
|
||||||
optimizations.add(new Pass2TypeInference(program));
|
optimizations.add(new Pass2TypeInference(program));
|
||||||
optimizations.add(new PassNEliminateUnusedVars(program, true));
|
|
||||||
optimizations.add(new Pass2EliminateRedundantCasts(program));
|
optimizations.add(new Pass2EliminateRedundantCasts(program));
|
||||||
optimizations.add(new Pass2EliminateUnusedBlocks(program));
|
|
||||||
optimizations.add(new Pass2RangeResolving(program));
|
optimizations.add(new Pass2RangeResolving(program));
|
||||||
optimizations.add(new Pass2ComparisonOptimization(program));
|
optimizations.add(new Pass2ComparisonOptimization(program));
|
||||||
optimizations.add(new Pass2ConstantCallPointerIdentification(program));
|
optimizations.add(new Pass2ConstantCallPointerIdentification(program));
|
||||||
optimizations.add(new Pass2SizeOfSimplification(program));
|
|
||||||
optimizations.add(new Pass2InlineCast(program));
|
optimizations.add(new Pass2InlineCast(program));
|
||||||
optimizations.add(new PassNCastSimplification(program));
|
optimizations.add(new PassNCastSimplification(program));
|
||||||
optimizations.add(new PassNStatementIndices(program));
|
|
||||||
optimizations.add(new PassNVariableReferenceInfos(program));
|
|
||||||
optimizations.add(new Pass2InlineDerefIdx(program));
|
optimizations.add(new Pass2InlineDerefIdx(program));
|
||||||
optimizations.add(new Pass2DeInlineWordDerefIdx(program));
|
optimizations.add(new Pass2DeInlineWordDerefIdx(program));
|
||||||
optimizations.add(new PassNSimplifyConstantZero(program));
|
optimizations.add(new PassNSimplifyConstantZero(program));
|
||||||
optimizations.add(new PassNSimplifyExpressionWithZero(program));
|
optimizations.add(new PassNSimplifyExpressionWithZero(program));
|
||||||
|
optimizations.add(new PassNEliminateUnusedVars(program, true));
|
||||||
|
optimizations.add(new Pass2EliminateUnusedBlocks(program));
|
||||||
pass2Execute(optimizations);
|
pass2Execute(optimizations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,6 @@ public class TestPrograms {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHex2Dec() throws IOException, URISyntaxException {
|
public void testHex2Dec() throws IOException, URISyntaxException {
|
||||||
compileAndCompare("hex2dec");
|
compileAndCompare("hex2dec");
|
||||||
|
@ -4,15 +4,15 @@
|
|||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
main: {
|
main: {
|
||||||
.label SCREEN = $400
|
.label SCREEN = $400
|
||||||
.label _1 = 2
|
.label _0 = 2
|
||||||
.label _3 = 2
|
.label _2 = 2
|
||||||
lda #<msg1
|
lda #<msg1
|
||||||
sta first.msg
|
sta first.msg
|
||||||
lda #>msg1
|
lda #>msg1
|
||||||
sta first.msg+1
|
sta first.msg+1
|
||||||
jsr first
|
jsr first
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (_1),y
|
lda (_0),y
|
||||||
sta SCREEN
|
sta SCREEN
|
||||||
lda #<msg2
|
lda #<msg2
|
||||||
sta first.msg
|
sta first.msg
|
||||||
@ -20,7 +20,7 @@ main: {
|
|||||||
sta first.msg+1
|
sta first.msg+1
|
||||||
jsr first
|
jsr first
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (_3),y
|
lda (_2),y
|
||||||
sta SCREEN+1
|
sta SCREEN+1
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
|
@ -545,9 +545,9 @@ append: {
|
|||||||
bne !+
|
bne !+
|
||||||
lda sub
|
lda sub
|
||||||
cmp value
|
cmp value
|
||||||
|
beq b2
|
||||||
!:
|
!:
|
||||||
bcc b2
|
bcc b2
|
||||||
beq b2
|
|
||||||
rts
|
rts
|
||||||
b2:
|
b2:
|
||||||
ldy #0
|
ldy #0
|
||||||
|
@ -22,7 +22,7 @@ main: {
|
|||||||
}
|
}
|
||||||
// Print points
|
// Print points
|
||||||
print_points: {
|
print_points: {
|
||||||
.label pointXpos1__0 = 9
|
.label point = 9
|
||||||
.label i = 2
|
.label i = 2
|
||||||
jsr print_cls
|
jsr print_cls
|
||||||
lda #<$400
|
lda #<$400
|
||||||
@ -42,15 +42,15 @@ print_points: {
|
|||||||
tya
|
tya
|
||||||
clc
|
clc
|
||||||
adc #<points
|
adc #<points
|
||||||
sta pointXpos1__0
|
sta point
|
||||||
lda #>points
|
lda #>points
|
||||||
adc #0
|
adc #0
|
||||||
sta pointXpos1__0+1
|
sta point+1
|
||||||
ldx points,y
|
ldx points,y
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #1
|
ldy #1
|
||||||
lda (pointXpos1__0),y
|
lda (point),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
jsr print_ln
|
jsr print_ln
|
||||||
@ -168,7 +168,7 @@ print_cls: {
|
|||||||
}
|
}
|
||||||
// Initialize points
|
// Initialize points
|
||||||
init_points: {
|
init_points: {
|
||||||
.label pointXpos1__0 = 3
|
.label getPoint1_return = 3
|
||||||
.label pos = 2
|
.label pos = 2
|
||||||
lda #$a
|
lda #$a
|
||||||
sta pos
|
sta pos
|
||||||
@ -180,17 +180,17 @@ init_points: {
|
|||||||
tya
|
tya
|
||||||
clc
|
clc
|
||||||
adc #<points
|
adc #<points
|
||||||
sta pointXpos1__0
|
sta getPoint1_return
|
||||||
lda #>points
|
lda #>points
|
||||||
adc #0
|
adc #0
|
||||||
sta pointXpos1__0+1
|
sta getPoint1_return+1
|
||||||
lda pos
|
lda pos
|
||||||
sta points,y
|
sta points,y
|
||||||
lda #$a
|
lda #$a
|
||||||
clc
|
clc
|
||||||
adc pos
|
adc pos
|
||||||
ldy #1
|
ldy #1
|
||||||
sta (pointXpos1__0),y
|
sta (getPoint1_return),y
|
||||||
clc
|
clc
|
||||||
adc #$a
|
adc #$a
|
||||||
sta pos
|
sta pos
|
||||||
|
@ -301,7 +301,6 @@ print_ln: {
|
|||||||
// printEntry(byte* zeropage(4) entry)
|
// printEntry(byte* zeropage(4) entry)
|
||||||
printEntry: {
|
printEntry: {
|
||||||
.label entry = 4
|
.label entry = 4
|
||||||
.label entryBufDisk1__0 = 4
|
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
sta print_char_cursor
|
sta print_char_cursor
|
||||||
lda print_line_cursor+1
|
lda print_line_cursor+1
|
||||||
@ -312,10 +311,10 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #0
|
ldy #0
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w
|
sta print_word.w
|
||||||
iny
|
iny
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w+1
|
sta print_word.w+1
|
||||||
jsr print_word
|
jsr print_word
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -333,10 +332,10 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #2
|
ldy #2
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w
|
sta print_word.w
|
||||||
iny
|
iny
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w+1
|
sta print_word.w+1
|
||||||
jsr print_word
|
jsr print_word
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -354,10 +353,10 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #4
|
ldy #4
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w
|
sta print_word.w
|
||||||
iny
|
iny
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w+1
|
sta print_word.w+1
|
||||||
jsr print_word
|
jsr print_word
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -375,10 +374,10 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #6
|
ldy #6
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w
|
sta print_word.w
|
||||||
iny
|
iny
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w+1
|
sta print_word.w+1
|
||||||
jsr print_word
|
jsr print_word
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -396,7 +395,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #8
|
ldy #8
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -414,7 +413,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #9
|
ldy #9
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -432,7 +431,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$a
|
ldy #$a
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -450,7 +449,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$b
|
ldy #$b
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -468,10 +467,10 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$c
|
ldy #$c
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w
|
sta print_word.w
|
||||||
iny
|
iny
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
sta print_word.w+1
|
sta print_word.w+1
|
||||||
jsr print_word
|
jsr print_word
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -489,7 +488,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$e
|
ldy #$e
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -507,7 +506,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$f
|
ldy #$f
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -525,7 +524,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$10
|
ldy #$10
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -543,7 +542,7 @@ printEntry: {
|
|||||||
sta print_str.str+1
|
sta print_str.str+1
|
||||||
jsr print_str
|
jsr print_str
|
||||||
ldy #$11
|
ldy #$11
|
||||||
lda (entryBufDisk1__0),y
|
lda (entry),y
|
||||||
tax
|
tax
|
||||||
jsr print_byte
|
jsr print_byte
|
||||||
lda print_line_cursor
|
lda print_line_cursor
|
||||||
@ -616,7 +615,6 @@ initEntry: {
|
|||||||
.label _7 = 6
|
.label _7 = 6
|
||||||
.label _17 = 6
|
.label _17 = 6
|
||||||
.label entry = 2
|
.label entry = 2
|
||||||
.label entryBufDisk1__0 = 2
|
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #<$1111
|
adc #<$1111
|
||||||
@ -626,10 +624,10 @@ initEntry: {
|
|||||||
sta _1+1
|
sta _1+1
|
||||||
ldy #0
|
ldy #0
|
||||||
lda _1
|
lda _1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
iny
|
iny
|
||||||
lda _1+1
|
lda _1+1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #<$2222
|
adc #<$2222
|
||||||
@ -639,10 +637,10 @@ initEntry: {
|
|||||||
sta _3+1
|
sta _3+1
|
||||||
ldy #2
|
ldy #2
|
||||||
lda _3
|
lda _3
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
iny
|
iny
|
||||||
lda _3+1
|
lda _3+1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #<$3333
|
adc #<$3333
|
||||||
@ -652,10 +650,10 @@ initEntry: {
|
|||||||
sta _5+1
|
sta _5+1
|
||||||
ldy #4
|
ldy #4
|
||||||
lda _5
|
lda _5
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
iny
|
iny
|
||||||
lda _5+1
|
lda _5+1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #<$4444
|
adc #<$4444
|
||||||
@ -665,30 +663,30 @@ initEntry: {
|
|||||||
sta _7+1
|
sta _7+1
|
||||||
ldy #6
|
ldy #6
|
||||||
lda _7
|
lda _7
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
iny
|
iny
|
||||||
lda _7+1
|
lda _7+1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$55
|
adc #$55
|
||||||
ldy #8
|
ldy #8
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$66
|
adc #$66
|
||||||
ldy #9
|
ldy #9
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$77
|
adc #$77
|
||||||
ldy #$a
|
ldy #$a
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$88
|
adc #$88
|
||||||
ldy #$b
|
ldy #$b
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #<$9999
|
adc #<$9999
|
||||||
@ -698,30 +696,30 @@ initEntry: {
|
|||||||
sta _17+1
|
sta _17+1
|
||||||
ldy #$c
|
ldy #$c
|
||||||
lda _17
|
lda _17
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
iny
|
iny
|
||||||
lda _17+1
|
lda _17+1
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$aa
|
adc #$aa
|
||||||
ldy #$e
|
ldy #$e
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$bb
|
adc #$bb
|
||||||
ldy #$f
|
ldy #$f
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$cc
|
adc #$cc
|
||||||
ldy #$10
|
ldy #$10
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$dd
|
adc #$dd
|
||||||
ldy #$11
|
ldy #$11
|
||||||
sta (entryBufDisk1__0),y
|
sta (entry),y
|
||||||
rts
|
rts
|
||||||
}
|
}
|
||||||
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
|
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
.pc = $801 "Basic"
|
.pc = $801 "Basic"
|
||||||
:BasicUpstart(main)
|
:BasicUpstart(main)
|
||||||
.pc = $80d "Program"
|
.pc = $80d "Program"
|
||||||
.label SCREEN = $400
|
|
||||||
.const SIZEOF_BYTE = 1
|
.const SIZEOF_BYTE = 1
|
||||||
.const SIZEOF_WORD = 2
|
.const SIZEOF_WORD = 2
|
||||||
.const SIZEOF_POINTER = 2
|
.const SIZEOF_POINTER = 2
|
||||||
|
.label SCREEN = $400
|
||||||
.const SIZEOF_NUMBER = $ff
|
.const SIZEOF_NUMBER = $ff
|
||||||
main: {
|
main: {
|
||||||
.const sz = $f
|
.const sz = $f
|
||||||
|
@ -205,9 +205,9 @@ compare: {
|
|||||||
bne !+
|
bne !+
|
||||||
lda w1
|
lda w1
|
||||||
cmp w2
|
cmp w2
|
||||||
|
beq b11
|
||||||
!:
|
!:
|
||||||
bcc b11
|
bcc b11
|
||||||
beq b11
|
|
||||||
lda #TT
|
lda #TT
|
||||||
sta r
|
sta r
|
||||||
jmp b22
|
jmp b22
|
||||||
@ -247,9 +247,9 @@ compare: {
|
|||||||
bne !+
|
bne !+
|
||||||
lda w2
|
lda w2
|
||||||
cmp w1
|
cmp w1
|
||||||
|
beq b13
|
||||||
!:
|
!:
|
||||||
bcc b13
|
bcc b13
|
||||||
beq b13
|
|
||||||
lda #TT
|
lda #TT
|
||||||
sta r
|
sta r
|
||||||
jmp b24
|
jmp b24
|
||||||
|
Loading…
x
Reference in New Issue
Block a user