From 1ee63ce40a996f9ae82c4f242c4b7101fbe8a0d8 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Thu, 19 Oct 2017 10:21:32 +0200 Subject: [PATCH] Added literal char syntax. Added literal test. Improved voronoi by using inmem arrays. --- .../camelot64/kickc/fragment/AsmFragment.java | 2 + .../camelot64/kickc/model/ConstantChar.java | 37 + .../kickc/model/SymbolTypeInference.java | 2 + .../java/dk/camelot64/kickc/parser/KickC.g4 | 2 + .../dk/camelot64/kickc/parser/KickC.tokens | 29 +- .../kickc/parser/KickCBaseListener.java | 132 +- .../kickc/parser/KickCBaseVisitor.java | 77 +- .../dk/camelot64/kickc/parser/KickCLexer.java | 322 +- .../camelot64/kickc/parser/KickCLexer.tokens | 29 +- .../camelot64/kickc/parser/KickCListener.java | 132 +- .../camelot64/kickc/parser/KickCParser.java | 423 +- .../camelot64/kickc/parser/KickCVisitor.java | 77 +- .../Pass1GenerateStatementSequence.java | 5 + .../kickc/test/TestCompilationOutput.java | 4 + .../java/dk/camelot64/kickc/test/literals.kc | 16 + .../dk/camelot64/kickc/test/ref/literals.asm | 22 + .../dk/camelot64/kickc/test/ref/literals.cfg | 20 + .../dk/camelot64/kickc/test/ref/literals.log | 1092 +++ .../dk/camelot64/kickc/test/ref/literals.sym | 24 + .../dk/camelot64/kickc/test/ref/scroll.asm | 5 +- .../dk/camelot64/kickc/test/ref/scroll.cfg | 2 +- .../dk/camelot64/kickc/test/ref/scroll.log | 171 +- .../dk/camelot64/kickc/test/ref/scroll.sym | 4 +- .../dk/camelot64/kickc/test/ref/voronoi.asm | 61 +- .../dk/camelot64/kickc/test/ref/voronoi.cfg | 229 +- .../dk/camelot64/kickc/test/ref/voronoi.log | 8687 ++++++----------- .../dk/camelot64/kickc/test/ref/voronoi.sym | 46 +- .../java/dk/camelot64/kickc/test/scroll.kc | 2 +- .../java/dk/camelot64/kickc/test/voronoi.kc | 21 +- 29 files changed, 5297 insertions(+), 6378 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/model/ConstantChar.java create mode 100644 src/main/java/dk/camelot64/kickc/test/literals.kc create mode 100644 src/main/java/dk/camelot64/kickc/test/ref/literals.asm create mode 100644 src/main/java/dk/camelot64/kickc/test/ref/literals.cfg create mode 100644 src/main/java/dk/camelot64/kickc/test/ref/literals.log create mode 100644 src/main/java/dk/camelot64/kickc/test/ref/literals.sym diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java index 51271855c..5ea5fe83b 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragment.java @@ -87,6 +87,8 @@ public class AsmFragment { return asmName.replace("#", "_").replace("$", "_"); } else if (value instanceof ConstantInteger) { return getAsmNumber(((ConstantInteger) value).getNumber()); + } else if (value instanceof ConstantChar) { + return "'"+((ConstantChar) value).getValue()+"'"; } else if (value instanceof ConstantUnary) { ConstantUnary unary = (ConstantUnary) value; Operator operator = unary.getOperator(); diff --git a/src/main/java/dk/camelot64/kickc/model/ConstantChar.java b/src/main/java/dk/camelot64/kickc/model/ConstantChar.java new file mode 100644 index 000000000..8b957a8fc --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/model/ConstantChar.java @@ -0,0 +1,37 @@ +package dk.camelot64.kickc.model; + +/** + * SSA form constant char value (a byte) + */ +public class ConstantChar implements ConstantValue { + + private Character value; + + public ConstantChar(Character value) { + this.value = value; + } + + @Override + public SymbolType getType(ProgramScope scope) { + return SymbolTypeBasic.BYTE; + } + + public Character getValue() { + return value; + } + + @Override + public String toString() { + return toString(null); + } + + @Override + public String toString(Program program) { + if (program == null) { + return "'" + value + "'"; + } else { + return "(" + SymbolTypeBasic.BYTE.getTypeName() + ") " + "'" + value + "'"; + } + } + +} diff --git a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java index 7ec38ec54..d3576fcdc 100644 --- a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java +++ b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java @@ -104,6 +104,8 @@ public class SymbolTypeInference { return rInt.getType(programScope); } else if (rValue instanceof ConstantString) { type = SymbolTypeBasic.STRING; + } else if (rValue instanceof ConstantChar) { + type = SymbolTypeBasic.BYTE; } else if (rValue instanceof ConstantBool) { type = SymbolTypeBasic.BOOLEAN; } else if (rValue instanceof ConstantUnary) { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 index 377ba9fc3..4893c4383 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.g4 @@ -72,6 +72,7 @@ expr | NAME #exprId | NUMBER #exprNumber | STRING #exprString + | CHAR #exprChar | BOOLEAN #exprBool ; @@ -81,6 +82,7 @@ parameterList SIMPLETYPE: 'byte' | 'word' | 'string' | 'boolean' | 'void' ; STRING : '"' ('\\"' | ~'"')* '"'; +CHAR : '\'' ('\\\'' | ~'\'' ) '\''; BOOLEAN : 'true' | 'false'; NUMBER : NUMFLOAT | NUMINT ; NUMFLOAT : BINFLOAT | DECFLOAT | HEXFLOAT; diff --git a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens index 774f0b0b7..52e9cc928 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickC.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickC.tokens @@ -42,20 +42,21 @@ T__40=41 T__41=42 SIMPLETYPE=43 STRING=44 -BOOLEAN=45 -NUMBER=46 -NUMFLOAT=47 -BINFLOAT=48 -DECFLOAT=49 -HEXFLOAT=50 -NUMINT=51 -BININTEGER=52 -DECINTEGER=53 -HEXINTEGER=54 -NAME=55 -WS=56 -COMMENT_LINE=57 -COMMENT_BLOCK=58 +CHAR=45 +BOOLEAN=46 +NUMBER=47 +NUMFLOAT=48 +BINFLOAT=49 +DECFLOAT=50 +HEXFLOAT=51 +NUMINT=52 +BININTEGER=53 +DECINTEGER=54 +HEXINTEGER=55 +NAME=56 +WS=57 +COMMENT_LINE=58 +COMMENT_BLOCK=59 '{'=1 '}'=2 '('=3 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java index 748c37366..694ba343d 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseListener.java @@ -323,30 +323,6 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitLvaluePar(KickCParser.LvalueParContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExprCast(KickCParser.ExprCastContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExprCast(KickCParser.ExprCastContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExprCall(KickCParser.ExprCallContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExprCall(KickCParser.ExprCallContext ctx) { } /** * {@inheritDoc} * @@ -371,6 +347,78 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitExprBinary(KickCParser.ExprBinaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprPostMod(KickCParser.ExprPostModContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprPostMod(KickCParser.ExprPostModContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprUnary(KickCParser.ExprUnaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprUnary(KickCParser.ExprUnaryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprNumber(KickCParser.ExprNumberContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprNumber(KickCParser.ExprNumberContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprChar(KickCParser.ExprCharContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprChar(KickCParser.ExprCharContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprCast(KickCParser.ExprCastContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprCast(KickCParser.ExprCastContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExprCall(KickCParser.ExprCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExprCall(KickCParser.ExprCallContext ctx) { } /** * {@inheritDoc} * @@ -407,18 +455,6 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitExprBool(KickCParser.ExprBoolContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExprPostMod(KickCParser.ExprPostModContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExprPostMod(KickCParser.ExprPostModContext ctx) { } /** * {@inheritDoc} * @@ -431,30 +467,6 @@ public class KickCBaseListener implements KickCListener { *

The default implementation does nothing.

*/ @Override public void exitExprId(KickCParser.ExprIdContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExprUnary(KickCParser.ExprUnaryContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExprUnary(KickCParser.ExprUnaryContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterExprNumber(KickCParser.ExprNumberContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitExprNumber(KickCParser.ExprNumberContext ctx) { } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java index eb8d98441..1efc5f8a8 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCBaseVisitor.java @@ -193,20 +193,6 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitLvaluePar(KickCParser.LvalueParContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -221,6 +207,48 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitExprBinary(KickCParser.ExprBinaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprChar(KickCParser.ExprCharContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprCast(KickCParser.ExprCastContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExprCall(KickCParser.ExprCallContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -242,13 +270,6 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitExprBool(KickCParser.ExprBoolContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExprPostMod(KickCParser.ExprPostModContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -256,20 +277,6 @@ public class KickCBaseVisitor extends AbstractParseTreeVisitor implements * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitExprId(KickCParser.ExprIdContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExprUnary(KickCParser.ExprUnaryContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitExprNumber(KickCParser.ExprNumberContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java index c7b32445c..be8eda76a 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.java @@ -22,10 +22,10 @@ public class KickCLexer extends Lexer { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, - T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45, - NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51, - BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57, - COMMENT_BLOCK=58; + T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45, + BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51, + NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57, + COMMENT_LINE=58, COMMENT_BLOCK=59; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -40,10 +40,10 @@ public class KickCLexer extends Lexer { "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", - "T__41", "SIMPLETYPE", "STRING", "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", - "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", "HEXINTEGER", - "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", "NAME_CHAR", - "WS", "COMMENT_LINE", "COMMENT_BLOCK" + "T__41", "SIMPLETYPE", "STRING", "CHAR", "BOOLEAN", "NUMBER", "NUMFLOAT", + "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", "DECINTEGER", + "HEXINTEGER", "BINDIGIT", "DECDIGIT", "HEXDIGIT", "NAME", "NAME_START", + "NAME_CHAR", "WS", "COMMENT_LINE", "COMMENT_BLOCK" }; private static final String[] _LITERAL_NAMES = { @@ -57,9 +57,10 @@ public class KickCLexer extends Lexer { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN", - "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", - "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR", + "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", + "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", + "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -119,7 +120,7 @@ public class KickCLexer extends Lexer { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2<\u01be\b\1\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2=\u01c8\b\1\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -127,153 +128,156 @@ public class KickCLexer extends Lexer { "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ - "\4>\t>\4?\t?\4@\t@\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\6\3\6"+ - "\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3"+ - "\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16"+ - "\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24"+ - "\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31\3\31"+ - "\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37\3\37"+ - "\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3"+ - "\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3,"+ - "\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0116\n,\3-\3-"+ - "\3-\3-\7-\u011c\n-\f-\16-\u011f\13-\3-\3-\3.\3.\3.\3.\3.\3.\3.\3.\3.\5"+ - ".\u012c\n.\3/\3/\5/\u0130\n/\3\60\3\60\3\60\5\60\u0135\n\60\3\61\3\61"+ - "\3\61\3\61\3\61\5\61\u013c\n\61\3\61\7\61\u013f\n\61\f\61\16\61\u0142"+ - "\13\61\3\61\3\61\6\61\u0146\n\61\r\61\16\61\u0147\3\62\7\62\u014b\n\62"+ - "\f\62\16\62\u014e\13\62\3\62\3\62\6\62\u0152\n\62\r\62\16\62\u0153\3\63"+ - "\3\63\3\63\3\63\3\63\5\63\u015b\n\63\3\63\7\63\u015e\n\63\f\63\16\63\u0161"+ - "\13\63\3\63\3\63\6\63\u0165\n\63\r\63\16\63\u0166\3\64\3\64\3\64\5\64"+ - "\u016c\n\64\3\65\3\65\3\65\6\65\u0171\n\65\r\65\16\65\u0172\3\65\3\65"+ - "\6\65\u0177\n\65\r\65\16\65\u0178\5\65\u017b\n\65\3\66\6\66\u017e\n\66"+ - "\r\66\16\66\u017f\3\67\3\67\3\67\3\67\3\67\5\67\u0187\n\67\3\67\6\67\u018a"+ - "\n\67\r\67\16\67\u018b\38\38\39\39\3:\3:\3;\3;\7;\u0196\n;\f;\16;\u0199"+ - "\13;\3<\3<\3=\3=\3>\6>\u01a0\n>\r>\16>\u01a1\3>\3>\3?\3?\3?\3?\7?\u01aa"+ - "\n?\f?\16?\u01ad\13?\3?\3?\3@\3@\3@\3@\7@\u01b5\n@\f@\16@\u01b8\13@\3"+ - "@\3@\3@\3@\3@\3\u01b6\2A\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f"+ - "\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63"+ - "\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62"+ - "c\63e\64g\65i\66k\67m8o\2q\2s\2u9w\2y\2{:};\177<\3\2\13\3\2$$\4\2DDdd"+ - "\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17"+ - "\"\"\4\2\f\f\17\17\2\u01d9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2"+ - "\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2"+ - "\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3"+ - "\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2"+ - "\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67"+ - "\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2"+ - "\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2"+ - "\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]"+ - "\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2"+ - "\2\2\2k\3\2\2\2\2m\3\2\2\2\2u\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2"+ - "\2\2\3\u0081\3\2\2\2\5\u0083\3\2\2\2\7\u0085\3\2\2\2\t\u0087\3\2\2\2\13"+ - "\u0089\3\2\2\2\r\u008f\3\2\2\2\17\u0091\3\2\2\2\21\u0093\3\2\2\2\23\u0096"+ - "\3\2\2\2\25\u009b\3\2\2\2\27\u00a1\3\2\2\2\31\u00a4\3\2\2\2\33\u00a8\3"+ - "\2\2\2\35\u00af\3\2\2\2\37\u00b1\3\2\2\2!\u00b4\3\2\2\2#\u00b6\3\2\2\2"+ - "%\u00b8\3\2\2\2\'\u00ba\3\2\2\2)\u00bc\3\2\2\2+\u00bf\3\2\2\2-\u00c2\3"+ - "\2\2\2/\u00c4\3\2\2\2\61\u00c6\3\2\2\2\63\u00ca\3\2\2\2\65\u00cc\3\2\2"+ - "\2\67\u00ce\3\2\2\29\u00d1\3\2\2\2;\u00d4\3\2\2\2=\u00d6\3\2\2\2?\u00d9"+ - "\3\2\2\2A\u00dc\3\2\2\2C\u00df\3\2\2\2E\u00e1\3\2\2\2G\u00e4\3\2\2\2I"+ - "\u00e7\3\2\2\2K\u00ea\3\2\2\2M\u00ed\3\2\2\2O\u00ef\3\2\2\2Q\u00f3\3\2"+ - "\2\2S\u00f6\3\2\2\2U\u00f9\3\2\2\2W\u0115\3\2\2\2Y\u0117\3\2\2\2[\u012b"+ - "\3\2\2\2]\u012f\3\2\2\2_\u0134\3\2\2\2a\u013b\3\2\2\2c\u014c\3\2\2\2e"+ - "\u015a\3\2\2\2g\u016b\3\2\2\2i\u017a\3\2\2\2k\u017d\3\2\2\2m\u0186\3\2"+ - "\2\2o\u018d\3\2\2\2q\u018f\3\2\2\2s\u0191\3\2\2\2u\u0193\3\2\2\2w\u019a"+ - "\3\2\2\2y\u019c\3\2\2\2{\u019f\3\2\2\2}\u01a5\3\2\2\2\177\u01b0\3\2\2"+ - "\2\u0081\u0082\7}\2\2\u0082\4\3\2\2\2\u0083\u0084\7\177\2\2\u0084\6\3"+ - "\2\2\2\u0085\u0086\7*\2\2\u0086\b\3\2\2\2\u0087\u0088\7+\2\2\u0088\n\3"+ - "\2\2\2\u0089\u008a\7e\2\2\u008a\u008b\7q\2\2\u008b\u008c\7p\2\2\u008c"+ - "\u008d\7u\2\2\u008d\u008e\7v\2\2\u008e\f\3\2\2\2\u008f\u0090\7?\2\2\u0090"+ - "\16\3\2\2\2\u0091\u0092\7=\2\2\u0092\20\3\2\2\2\u0093\u0094\7k\2\2\u0094"+ - "\u0095\7h\2\2\u0095\22\3\2\2\2\u0096\u0097\7g\2\2\u0097\u0098\7n\2\2\u0098"+ - "\u0099\7u\2\2\u0099\u009a\7g\2\2\u009a\24\3\2\2\2\u009b\u009c\7y\2\2\u009c"+ - "\u009d\7j\2\2\u009d\u009e\7k\2\2\u009e\u009f\7n\2\2\u009f\u00a0\7g\2\2"+ - "\u00a0\26\3\2\2\2\u00a1\u00a2\7f\2\2\u00a2\u00a3\7q\2\2\u00a3\30\3\2\2"+ - "\2\u00a4\u00a5\7h\2\2\u00a5\u00a6\7q\2\2\u00a6\u00a7\7t\2\2\u00a7\32\3"+ - "\2\2\2\u00a8\u00a9\7t\2\2\u00a9\u00aa\7g\2\2\u00aa\u00ab\7v\2\2\u00ab"+ - "\u00ac\7w\2\2\u00ac\u00ad\7t\2\2\u00ad\u00ae\7p\2\2\u00ae\34\3\2\2\2\u00af"+ - "\u00b0\7<\2\2\u00b0\36\3\2\2\2\u00b1\u00b2\7\60\2\2\u00b2\u00b3\7\60\2"+ - "\2\u00b3 \3\2\2\2\u00b4\u00b5\7.\2\2\u00b5\"\3\2\2\2\u00b6\u00b7\7,\2"+ - "\2\u00b7$\3\2\2\2\u00b8\u00b9\7]\2\2\u00b9&\3\2\2\2\u00ba\u00bb\7_\2\2"+ - "\u00bb(\3\2\2\2\u00bc\u00bd\7/\2\2\u00bd\u00be\7/\2\2\u00be*\3\2\2\2\u00bf"+ - "\u00c0\7-\2\2\u00c0\u00c1\7-\2\2\u00c1,\3\2\2\2\u00c2\u00c3\7-\2\2\u00c3"+ - ".\3\2\2\2\u00c4\u00c5\7/\2\2\u00c5\60\3\2\2\2\u00c6\u00c7\7p\2\2\u00c7"+ - "\u00c8\7q\2\2\u00c8\u00c9\7v\2\2\u00c9\62\3\2\2\2\u00ca\u00cb\7#\2\2\u00cb"+ - "\64\3\2\2\2\u00cc\u00cd\7(\2\2\u00cd\66\3\2\2\2\u00ce\u00cf\7@\2\2\u00cf"+ - "\u00d0\7@\2\2\u00d08\3\2\2\2\u00d1\u00d2\7>\2\2\u00d2\u00d3\7>\2\2\u00d3"+ - ":\3\2\2\2\u00d4\u00d5\7\61\2\2\u00d5<\3\2\2\2\u00d6\u00d7\7?\2\2\u00d7"+ - "\u00d8\7?\2\2\u00d8>\3\2\2\2\u00d9\u00da\7#\2\2\u00da\u00db\7?\2\2\u00db"+ - "@\3\2\2\2\u00dc\u00dd\7>\2\2\u00dd\u00de\7@\2\2\u00deB\3\2\2\2\u00df\u00e0"+ - "\7>\2\2\u00e0D\3\2\2\2\u00e1\u00e2\7>\2\2\u00e2\u00e3\7?\2\2\u00e3F\3"+ - "\2\2\2\u00e4\u00e5\7?\2\2\u00e5\u00e6\7>\2\2\u00e6H\3\2\2\2\u00e7\u00e8"+ - "\7@\2\2\u00e8\u00e9\7?\2\2\u00e9J\3\2\2\2\u00ea\u00eb\7?\2\2\u00eb\u00ec"+ - "\7@\2\2\u00ecL\3\2\2\2\u00ed\u00ee\7@\2\2\u00eeN\3\2\2\2\u00ef\u00f0\7"+ - "c\2\2\u00f0\u00f1\7p\2\2\u00f1\u00f2\7f\2\2\u00f2P\3\2\2\2\u00f3\u00f4"+ - "\7(\2\2\u00f4\u00f5\7(\2\2\u00f5R\3\2\2\2\u00f6\u00f7\7q\2\2\u00f7\u00f8"+ - "\7t\2\2\u00f8T\3\2\2\2\u00f9\u00fa\7~\2\2\u00fa\u00fb\7~\2\2\u00fbV\3"+ - "\2\2\2\u00fc\u00fd\7d\2\2\u00fd\u00fe\7{\2\2\u00fe\u00ff\7v\2\2\u00ff"+ - "\u0116\7g\2\2\u0100\u0101\7y\2\2\u0101\u0102\7q\2\2\u0102\u0103\7t\2\2"+ - "\u0103\u0116\7f\2\2\u0104\u0105\7u\2\2\u0105\u0106\7v\2\2\u0106\u0107"+ - "\7t\2\2\u0107\u0108\7k\2\2\u0108\u0109\7p\2\2\u0109\u0116\7i\2\2\u010a"+ - "\u010b\7d\2\2\u010b\u010c\7q\2\2\u010c\u010d\7q\2\2\u010d\u010e\7n\2\2"+ - "\u010e\u010f\7g\2\2\u010f\u0110\7c\2\2\u0110\u0116\7p\2\2\u0111\u0112"+ - "\7x\2\2\u0112\u0113\7q\2\2\u0113\u0114\7k\2\2\u0114\u0116\7f\2\2\u0115"+ - "\u00fc\3\2\2\2\u0115\u0100\3\2\2\2\u0115\u0104\3\2\2\2\u0115\u010a\3\2"+ - "\2\2\u0115\u0111\3\2\2\2\u0116X\3\2\2\2\u0117\u011d\7$\2\2\u0118\u0119"+ - "\7^\2\2\u0119\u011c\7$\2\2\u011a\u011c\n\2\2\2\u011b\u0118\3\2\2\2\u011b"+ - "\u011a\3\2\2\2\u011c\u011f\3\2\2\2\u011d\u011b\3\2\2\2\u011d\u011e\3\2"+ - "\2\2\u011e\u0120\3\2\2\2\u011f\u011d\3\2\2\2\u0120\u0121\7$\2\2\u0121"+ - "Z\3\2\2\2\u0122\u0123\7v\2\2\u0123\u0124\7t\2\2\u0124\u0125\7w\2\2\u0125"+ - "\u012c\7g\2\2\u0126\u0127\7h\2\2\u0127\u0128\7c\2\2\u0128\u0129\7n\2\2"+ - "\u0129\u012a\7u\2\2\u012a\u012c\7g\2\2\u012b\u0122\3\2\2\2\u012b\u0126"+ - "\3\2\2\2\u012c\\\3\2\2\2\u012d\u0130\5_\60\2\u012e\u0130\5g\64\2\u012f"+ - "\u012d\3\2\2\2\u012f\u012e\3\2\2\2\u0130^\3\2\2\2\u0131\u0135\5a\61\2"+ - "\u0132\u0135\5c\62\2\u0133\u0135\5e\63\2\u0134\u0131\3\2\2\2\u0134\u0132"+ - "\3\2\2\2\u0134\u0133\3\2\2\2\u0135`\3\2\2\2\u0136\u013c\7\'\2\2\u0137"+ - "\u0138\7\62\2\2\u0138\u013c\7d\2\2\u0139\u013a\7\62\2\2\u013a\u013c\7"+ - "D\2\2\u013b\u0136\3\2\2\2\u013b\u0137\3\2\2\2\u013b\u0139\3\2\2\2\u013c"+ - "\u0140\3\2\2\2\u013d\u013f\5o8\2\u013e\u013d\3\2\2\2\u013f\u0142\3\2\2"+ - "\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0143\3\2\2\2\u0142\u0140"+ - "\3\2\2\2\u0143\u0145\7\60\2\2\u0144\u0146\5o8\2\u0145\u0144\3\2\2\2\u0146"+ - "\u0147\3\2\2\2\u0147\u0145\3\2\2\2\u0147\u0148\3\2\2\2\u0148b\3\2\2\2"+ - "\u0149\u014b\5q9\2\u014a\u0149\3\2\2\2\u014b\u014e\3\2\2\2\u014c\u014a"+ - "\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014f\3\2\2\2\u014e\u014c\3\2\2\2\u014f"+ - "\u0151\7\60\2\2\u0150\u0152\5q9\2\u0151\u0150\3\2\2\2\u0152\u0153\3\2"+ - "\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154d\3\2\2\2\u0155\u015b"+ - "\7&\2\2\u0156\u0157\7\62\2\2\u0157\u015b\7z\2\2\u0158\u0159\7\62\2\2\u0159"+ - "\u015b\7Z\2\2\u015a\u0155\3\2\2\2\u015a\u0156\3\2\2\2\u015a\u0158\3\2"+ - "\2\2\u015b\u015f\3\2\2\2\u015c\u015e\5s:\2\u015d\u015c\3\2\2\2\u015e\u0161"+ - "\3\2\2\2\u015f\u015d\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u0162\3\2\2\2\u0161"+ - "\u015f\3\2\2\2\u0162\u0164\7\60\2\2\u0163\u0165\5s:\2\u0164\u0163\3\2"+ - "\2\2\u0165\u0166\3\2\2\2\u0166\u0164\3\2\2\2\u0166\u0167\3\2\2\2\u0167"+ - "f\3\2\2\2\u0168\u016c\5k\66\2\u0169\u016c\5m\67\2\u016a\u016c\5i\65\2"+ - "\u016b\u0168\3\2\2\2\u016b\u0169\3\2\2\2\u016b\u016a\3\2\2\2\u016ch\3"+ - "\2\2\2\u016d\u016e\7\62\2\2\u016e\u0170\t\3\2\2\u016f\u0171\5o8\2\u0170"+ - "\u016f\3\2\2\2\u0171\u0172\3\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2"+ - "\2\2\u0173\u017b\3\2\2\2\u0174\u0176\7\'\2\2\u0175\u0177\5o8\2\u0176\u0175"+ - "\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0176\3\2\2\2\u0178\u0179\3\2\2\2\u0179"+ - "\u017b\3\2\2\2\u017a\u016d\3\2\2\2\u017a\u0174\3\2\2\2\u017bj\3\2\2\2"+ - "\u017c\u017e\5q9\2\u017d\u017c\3\2\2\2\u017e\u017f\3\2\2\2\u017f\u017d"+ - "\3\2\2\2\u017f\u0180\3\2\2\2\u0180l\3\2\2\2\u0181\u0187\7&\2\2\u0182\u0183"+ - "\7\62\2\2\u0183\u0187\7z\2\2\u0184\u0185\7\62\2\2\u0185\u0187\7Z\2\2\u0186"+ - "\u0181\3\2\2\2\u0186\u0182\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u0189\3\2"+ - "\2\2\u0188\u018a\5s:\2\u0189\u0188\3\2\2\2\u018a\u018b\3\2\2\2\u018b\u0189"+ - "\3\2\2\2\u018b\u018c\3\2\2\2\u018cn\3\2\2\2\u018d\u018e\t\4\2\2\u018e"+ - "p\3\2\2\2\u018f\u0190\t\5\2\2\u0190r\3\2\2\2\u0191\u0192\t\6\2\2\u0192"+ - "t\3\2\2\2\u0193\u0197\5w<\2\u0194\u0196\5y=\2\u0195\u0194\3\2\2\2\u0196"+ - "\u0199\3\2\2\2\u0197\u0195\3\2\2\2\u0197\u0198\3\2\2\2\u0198v\3\2\2\2"+ - "\u0199\u0197\3\2\2\2\u019a\u019b\t\7\2\2\u019bx\3\2\2\2\u019c\u019d\t"+ - "\b\2\2\u019dz\3\2\2\2\u019e\u01a0\t\t\2\2\u019f\u019e\3\2\2\2\u01a0\u01a1"+ - "\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3"+ - "\u01a4\b>\2\2\u01a4|\3\2\2\2\u01a5\u01a6\7\61\2\2\u01a6\u01a7\7\61\2\2"+ - "\u01a7\u01ab\3\2\2\2\u01a8\u01aa\n\n\2\2\u01a9\u01a8\3\2\2\2\u01aa\u01ad"+ - "\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ae\3\2\2\2\u01ad"+ - "\u01ab\3\2\2\2\u01ae\u01af\b?\2\2\u01af~\3\2\2\2\u01b0\u01b1\7\61\2\2"+ - "\u01b1\u01b2\7,\2\2\u01b2\u01b6\3\2\2\2\u01b3\u01b5\13\2\2\2\u01b4\u01b3"+ - "\3\2\2\2\u01b5\u01b8\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b6\u01b4\3\2\2\2\u01b7"+ - "\u01b9\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01ba\7,\2\2\u01ba\u01bb\7\61"+ - "\2\2\u01bb\u01bc\3\2\2\2\u01bc\u01bd\b@\2\2\u01bd\u0080\3\2\2\2\34\2\u0115"+ - "\u011b\u011d\u012b\u012f\u0134\u013b\u0140\u0147\u014c\u0153\u015a\u015f"+ - "\u0166\u016b\u0172\u0178\u017a\u017f\u0186\u018b\u0197\u01a1\u01ab\u01b6"+ - "\3\b\2\2"; + "\4>\t>\4?\t?\4@\t@\4A\tA\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3"+ + "\6\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3"+ + "\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16"+ + "\3\16\3\16\3\17\3\17\3\20\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24"+ + "\3\24\3\25\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\31"+ + "\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37"+ + "\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&"+ + "\3&\3\'\3\'\3(\3(\3(\3(\3)\3)\3)\3*\3*\3*\3+\3+\3+\3,\3,\3,\3,\3,\3,\3"+ + ",\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\5,\u0118\n,\3"+ + "-\3-\3-\3-\7-\u011e\n-\f-\16-\u0121\13-\3-\3-\3.\3.\3.\3.\5.\u0129\n."+ + "\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\5/\u0136\n/\3\60\3\60\5\60\u013a\n\60"+ + "\3\61\3\61\3\61\5\61\u013f\n\61\3\62\3\62\3\62\3\62\3\62\5\62\u0146\n"+ + "\62\3\62\7\62\u0149\n\62\f\62\16\62\u014c\13\62\3\62\3\62\6\62\u0150\n"+ + "\62\r\62\16\62\u0151\3\63\7\63\u0155\n\63\f\63\16\63\u0158\13\63\3\63"+ + "\3\63\6\63\u015c\n\63\r\63\16\63\u015d\3\64\3\64\3\64\3\64\3\64\5\64\u0165"+ + "\n\64\3\64\7\64\u0168\n\64\f\64\16\64\u016b\13\64\3\64\3\64\6\64\u016f"+ + "\n\64\r\64\16\64\u0170\3\65\3\65\3\65\5\65\u0176\n\65\3\66\3\66\3\66\6"+ + "\66\u017b\n\66\r\66\16\66\u017c\3\66\3\66\6\66\u0181\n\66\r\66\16\66\u0182"+ + "\5\66\u0185\n\66\3\67\6\67\u0188\n\67\r\67\16\67\u0189\38\38\38\38\38"+ + "\58\u0191\n8\38\68\u0194\n8\r8\168\u0195\39\39\3:\3:\3;\3;\3<\3<\7<\u01a0"+ + "\n<\f<\16<\u01a3\13<\3=\3=\3>\3>\3?\6?\u01aa\n?\r?\16?\u01ab\3?\3?\3@"+ + "\3@\3@\3@\7@\u01b4\n@\f@\16@\u01b7\13@\3@\3@\3A\3A\3A\3A\7A\u01bf\nA\f"+ + "A\16A\u01c2\13A\3A\3A\3A\3A\3A\3\u01c0\2B\3\3\5\4\7\5\t\6\13\7\r\b\17"+ + "\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+"+ + "\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+"+ + "U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67m8o9q\2s\2u\2w:y\2{\2};\177<\u0081"+ + "=\3\2\f\3\2$$\3\2))\4\2DDdd\3\2\62\63\3\2\62;\5\2\62;CHch\5\2C\\aac|\6"+ + "\2\62;C\\aac|\5\2\13\f\17\17\"\"\4\2\f\f\17\17\2\u01e4\2\3\3\2\2\2\2\5"+ + "\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+ + "\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33"+ + "\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2"+ + "\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2"+ + "\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2"+ + "\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K"+ + "\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2"+ + "\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2"+ + "\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2w"+ + "\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\3\u0083\3\2\2\2\5\u0085"+ + "\3\2\2\2\7\u0087\3\2\2\2\t\u0089\3\2\2\2\13\u008b\3\2\2\2\r\u0091\3\2"+ + "\2\2\17\u0093\3\2\2\2\21\u0095\3\2\2\2\23\u0098\3\2\2\2\25\u009d\3\2\2"+ + "\2\27\u00a3\3\2\2\2\31\u00a6\3\2\2\2\33\u00aa\3\2\2\2\35\u00b1\3\2\2\2"+ + "\37\u00b3\3\2\2\2!\u00b6\3\2\2\2#\u00b8\3\2\2\2%\u00ba\3\2\2\2\'\u00bc"+ + "\3\2\2\2)\u00be\3\2\2\2+\u00c1\3\2\2\2-\u00c4\3\2\2\2/\u00c6\3\2\2\2\61"+ + "\u00c8\3\2\2\2\63\u00cc\3\2\2\2\65\u00ce\3\2\2\2\67\u00d0\3\2\2\29\u00d3"+ + "\3\2\2\2;\u00d6\3\2\2\2=\u00d8\3\2\2\2?\u00db\3\2\2\2A\u00de\3\2\2\2C"+ + "\u00e1\3\2\2\2E\u00e3\3\2\2\2G\u00e6\3\2\2\2I\u00e9\3\2\2\2K\u00ec\3\2"+ + "\2\2M\u00ef\3\2\2\2O\u00f1\3\2\2\2Q\u00f5\3\2\2\2S\u00f8\3\2\2\2U\u00fb"+ + "\3\2\2\2W\u0117\3\2\2\2Y\u0119\3\2\2\2[\u0124\3\2\2\2]\u0135\3\2\2\2_"+ + "\u0139\3\2\2\2a\u013e\3\2\2\2c\u0145\3\2\2\2e\u0156\3\2\2\2g\u0164\3\2"+ + "\2\2i\u0175\3\2\2\2k\u0184\3\2\2\2m\u0187\3\2\2\2o\u0190\3\2\2\2q\u0197"+ + "\3\2\2\2s\u0199\3\2\2\2u\u019b\3\2\2\2w\u019d\3\2\2\2y\u01a4\3\2\2\2{"+ + "\u01a6\3\2\2\2}\u01a9\3\2\2\2\177\u01af\3\2\2\2\u0081\u01ba\3\2\2\2\u0083"+ + "\u0084\7}\2\2\u0084\4\3\2\2\2\u0085\u0086\7\177\2\2\u0086\6\3\2\2\2\u0087"+ + "\u0088\7*\2\2\u0088\b\3\2\2\2\u0089\u008a\7+\2\2\u008a\n\3\2\2\2\u008b"+ + "\u008c\7e\2\2\u008c\u008d\7q\2\2\u008d\u008e\7p\2\2\u008e\u008f\7u\2\2"+ + "\u008f\u0090\7v\2\2\u0090\f\3\2\2\2\u0091\u0092\7?\2\2\u0092\16\3\2\2"+ + "\2\u0093\u0094\7=\2\2\u0094\20\3\2\2\2\u0095\u0096\7k\2\2\u0096\u0097"+ + "\7h\2\2\u0097\22\3\2\2\2\u0098\u0099\7g\2\2\u0099\u009a\7n\2\2\u009a\u009b"+ + "\7u\2\2\u009b\u009c\7g\2\2\u009c\24\3\2\2\2\u009d\u009e\7y\2\2\u009e\u009f"+ + "\7j\2\2\u009f\u00a0\7k\2\2\u00a0\u00a1\7n\2\2\u00a1\u00a2\7g\2\2\u00a2"+ + "\26\3\2\2\2\u00a3\u00a4\7f\2\2\u00a4\u00a5\7q\2\2\u00a5\30\3\2\2\2\u00a6"+ + "\u00a7\7h\2\2\u00a7\u00a8\7q\2\2\u00a8\u00a9\7t\2\2\u00a9\32\3\2\2\2\u00aa"+ + "\u00ab\7t\2\2\u00ab\u00ac\7g\2\2\u00ac\u00ad\7v\2\2\u00ad\u00ae\7w\2\2"+ + "\u00ae\u00af\7t\2\2\u00af\u00b0\7p\2\2\u00b0\34\3\2\2\2\u00b1\u00b2\7"+ + "<\2\2\u00b2\36\3\2\2\2\u00b3\u00b4\7\60\2\2\u00b4\u00b5\7\60\2\2\u00b5"+ + " \3\2\2\2\u00b6\u00b7\7.\2\2\u00b7\"\3\2\2\2\u00b8\u00b9\7,\2\2\u00b9"+ + "$\3\2\2\2\u00ba\u00bb\7]\2\2\u00bb&\3\2\2\2\u00bc\u00bd\7_\2\2\u00bd("+ + "\3\2\2\2\u00be\u00bf\7/\2\2\u00bf\u00c0\7/\2\2\u00c0*\3\2\2\2\u00c1\u00c2"+ + "\7-\2\2\u00c2\u00c3\7-\2\2\u00c3,\3\2\2\2\u00c4\u00c5\7-\2\2\u00c5.\3"+ + "\2\2\2\u00c6\u00c7\7/\2\2\u00c7\60\3\2\2\2\u00c8\u00c9\7p\2\2\u00c9\u00ca"+ + "\7q\2\2\u00ca\u00cb\7v\2\2\u00cb\62\3\2\2\2\u00cc\u00cd\7#\2\2\u00cd\64"+ + "\3\2\2\2\u00ce\u00cf\7(\2\2\u00cf\66\3\2\2\2\u00d0\u00d1\7@\2\2\u00d1"+ + "\u00d2\7@\2\2\u00d28\3\2\2\2\u00d3\u00d4\7>\2\2\u00d4\u00d5\7>\2\2\u00d5"+ + ":\3\2\2\2\u00d6\u00d7\7\61\2\2\u00d7<\3\2\2\2\u00d8\u00d9\7?\2\2\u00d9"+ + "\u00da\7?\2\2\u00da>\3\2\2\2\u00db\u00dc\7#\2\2\u00dc\u00dd\7?\2\2\u00dd"+ + "@\3\2\2\2\u00de\u00df\7>\2\2\u00df\u00e0\7@\2\2\u00e0B\3\2\2\2\u00e1\u00e2"+ + "\7>\2\2\u00e2D\3\2\2\2\u00e3\u00e4\7>\2\2\u00e4\u00e5\7?\2\2\u00e5F\3"+ + "\2\2\2\u00e6\u00e7\7?\2\2\u00e7\u00e8\7>\2\2\u00e8H\3\2\2\2\u00e9\u00ea"+ + "\7@\2\2\u00ea\u00eb\7?\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7?\2\2\u00ed\u00ee"+ + "\7@\2\2\u00eeL\3\2\2\2\u00ef\u00f0\7@\2\2\u00f0N\3\2\2\2\u00f1\u00f2\7"+ + "c\2\2\u00f2\u00f3\7p\2\2\u00f3\u00f4\7f\2\2\u00f4P\3\2\2\2\u00f5\u00f6"+ + "\7(\2\2\u00f6\u00f7\7(\2\2\u00f7R\3\2\2\2\u00f8\u00f9\7q\2\2\u00f9\u00fa"+ + "\7t\2\2\u00faT\3\2\2\2\u00fb\u00fc\7~\2\2\u00fc\u00fd\7~\2\2\u00fdV\3"+ + "\2\2\2\u00fe\u00ff\7d\2\2\u00ff\u0100\7{\2\2\u0100\u0101\7v\2\2\u0101"+ + "\u0118\7g\2\2\u0102\u0103\7y\2\2\u0103\u0104\7q\2\2\u0104\u0105\7t\2\2"+ + "\u0105\u0118\7f\2\2\u0106\u0107\7u\2\2\u0107\u0108\7v\2\2\u0108\u0109"+ + "\7t\2\2\u0109\u010a\7k\2\2\u010a\u010b\7p\2\2\u010b\u0118\7i\2\2\u010c"+ + "\u010d\7d\2\2\u010d\u010e\7q\2\2\u010e\u010f\7q\2\2\u010f\u0110\7n\2\2"+ + "\u0110\u0111\7g\2\2\u0111\u0112\7c\2\2\u0112\u0118\7p\2\2\u0113\u0114"+ + "\7x\2\2\u0114\u0115\7q\2\2\u0115\u0116\7k\2\2\u0116\u0118\7f\2\2\u0117"+ + "\u00fe\3\2\2\2\u0117\u0102\3\2\2\2\u0117\u0106\3\2\2\2\u0117\u010c\3\2"+ + "\2\2\u0117\u0113\3\2\2\2\u0118X\3\2\2\2\u0119\u011f\7$\2\2\u011a\u011b"+ + "\7^\2\2\u011b\u011e\7$\2\2\u011c\u011e\n\2\2\2\u011d\u011a\3\2\2\2\u011d"+ + "\u011c\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2"+ + "\2\2\u0120\u0122\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\7$\2\2\u0123"+ + "Z\3\2\2\2\u0124\u0128\7)\2\2\u0125\u0126\7^\2\2\u0126\u0129\7)\2\2\u0127"+ + "\u0129\n\3\2\2\u0128\u0125\3\2\2\2\u0128\u0127\3\2\2\2\u0129\u012a\3\2"+ + "\2\2\u012a\u012b\7)\2\2\u012b\\\3\2\2\2\u012c\u012d\7v\2\2\u012d\u012e"+ + "\7t\2\2\u012e\u012f\7w\2\2\u012f\u0136\7g\2\2\u0130\u0131\7h\2\2\u0131"+ + "\u0132\7c\2\2\u0132\u0133\7n\2\2\u0133\u0134\7u\2\2\u0134\u0136\7g\2\2"+ + "\u0135\u012c\3\2\2\2\u0135\u0130\3\2\2\2\u0136^\3\2\2\2\u0137\u013a\5"+ + "a\61\2\u0138\u013a\5i\65\2\u0139\u0137\3\2\2\2\u0139\u0138\3\2\2\2\u013a"+ + "`\3\2\2\2\u013b\u013f\5c\62\2\u013c\u013f\5e\63\2\u013d\u013f\5g\64\2"+ + "\u013e\u013b\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013d\3\2\2\2\u013fb\3"+ + "\2\2\2\u0140\u0146\7\'\2\2\u0141\u0142\7\62\2\2\u0142\u0146\7d\2\2\u0143"+ + "\u0144\7\62\2\2\u0144\u0146\7D\2\2\u0145\u0140\3\2\2\2\u0145\u0141\3\2"+ + "\2\2\u0145\u0143\3\2\2\2\u0146\u014a\3\2\2\2\u0147\u0149\5q9\2\u0148\u0147"+ + "\3\2\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b"+ + "\u014d\3\2\2\2\u014c\u014a\3\2\2\2\u014d\u014f\7\60\2\2\u014e\u0150\5"+ + "q9\2\u014f\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u014f\3\2\2\2\u0151"+ + "\u0152\3\2\2\2\u0152d\3\2\2\2\u0153\u0155\5s:\2\u0154\u0153\3\2\2\2\u0155"+ + "\u0158\3\2\2\2\u0156\u0154\3\2\2\2\u0156\u0157\3\2\2\2\u0157\u0159\3\2"+ + "\2\2\u0158\u0156\3\2\2\2\u0159\u015b\7\60\2\2\u015a\u015c\5s:\2\u015b"+ + "\u015a\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015b\3\2\2\2\u015d\u015e\3\2"+ + "\2\2\u015ef\3\2\2\2\u015f\u0165\7&\2\2\u0160\u0161\7\62\2\2\u0161\u0165"+ + "\7z\2\2\u0162\u0163\7\62\2\2\u0163\u0165\7Z\2\2\u0164\u015f\3\2\2\2\u0164"+ + "\u0160\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0169\3\2\2\2\u0166\u0168\5u"+ + ";\2\u0167\u0166\3\2\2\2\u0168\u016b\3\2\2\2\u0169\u0167\3\2\2\2\u0169"+ + "\u016a\3\2\2\2\u016a\u016c\3\2\2\2\u016b\u0169\3\2\2\2\u016c\u016e\7\60"+ + "\2\2\u016d\u016f\5u;\2\u016e\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u016e"+ + "\3\2\2\2\u0170\u0171\3\2\2\2\u0171h\3\2\2\2\u0172\u0176\5m\67\2\u0173"+ + "\u0176\5o8\2\u0174\u0176\5k\66\2\u0175\u0172\3\2\2\2\u0175\u0173\3\2\2"+ + "\2\u0175\u0174\3\2\2\2\u0176j\3\2\2\2\u0177\u0178\7\62\2\2\u0178\u017a"+ + "\t\4\2\2\u0179\u017b\5q9\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2\2\2\u017c"+ + "\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u0185\3\2\2\2\u017e\u0180\7\'"+ + "\2\2\u017f\u0181\5q9\2\u0180\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0180"+ + "\3\2\2\2\u0182\u0183\3\2\2\2\u0183\u0185\3\2\2\2\u0184\u0177\3\2\2\2\u0184"+ + "\u017e\3\2\2\2\u0185l\3\2\2\2\u0186\u0188\5s:\2\u0187\u0186\3\2\2\2\u0188"+ + "\u0189\3\2\2\2\u0189\u0187\3\2\2\2\u0189\u018a\3\2\2\2\u018an\3\2\2\2"+ + "\u018b\u0191\7&\2\2\u018c\u018d\7\62\2\2\u018d\u0191\7z\2\2\u018e\u018f"+ + "\7\62\2\2\u018f\u0191\7Z\2\2\u0190\u018b\3\2\2\2\u0190\u018c\3\2\2\2\u0190"+ + "\u018e\3\2\2\2\u0191\u0193\3\2\2\2\u0192\u0194\5u;\2\u0193\u0192\3\2\2"+ + "\2\u0194\u0195\3\2\2\2\u0195\u0193\3\2\2\2\u0195\u0196\3\2\2\2\u0196p"+ + "\3\2\2\2\u0197\u0198\t\5\2\2\u0198r\3\2\2\2\u0199\u019a\t\6\2\2\u019a"+ + "t\3\2\2\2\u019b\u019c\t\7\2\2\u019cv\3\2\2\2\u019d\u01a1\5y=\2\u019e\u01a0"+ + "\5{>\2\u019f\u019e\3\2\2\2\u01a0\u01a3\3\2\2\2\u01a1\u019f\3\2\2\2\u01a1"+ + "\u01a2\3\2\2\2\u01a2x\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a4\u01a5\t\b\2\2"+ + "\u01a5z\3\2\2\2\u01a6\u01a7\t\t\2\2\u01a7|\3\2\2\2\u01a8\u01aa\t\n\2\2"+ + "\u01a9\u01a8\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac"+ + "\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01ae\b?\2\2\u01ae~\3\2\2\2\u01af\u01b0"+ + "\7\61\2\2\u01b0\u01b1\7\61\2\2\u01b1\u01b5\3\2\2\2\u01b2\u01b4\n\13\2"+ + "\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5\u01b6"+ + "\3\2\2\2\u01b6\u01b8\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b8\u01b9\b@\2\2\u01b9"+ + "\u0080\3\2\2\2\u01ba\u01bb\7\61\2\2\u01bb\u01bc\7,\2\2\u01bc\u01c0\3\2"+ + "\2\2\u01bd\u01bf\13\2\2\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0"+ + "\u01c1\3\2\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01c0\3\2"+ + "\2\2\u01c3\u01c4\7,\2\2\u01c4\u01c5\7\61\2\2\u01c5\u01c6\3\2\2\2\u01c6"+ + "\u01c7\bA\2\2\u01c7\u0082\3\2\2\2\35\2\u0117\u011d\u011f\u0128\u0135\u0139"+ + "\u013e\u0145\u014a\u0151\u0156\u015d\u0164\u0169\u0170\u0175\u017c\u0182"+ + "\u0184\u0189\u0190\u0195\u01a1\u01ab\u01b5\u01c0\3\b\2\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens index 774f0b0b7..52e9cc928 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens +++ b/src/main/java/dk/camelot64/kickc/parser/KickCLexer.tokens @@ -42,20 +42,21 @@ T__40=41 T__41=42 SIMPLETYPE=43 STRING=44 -BOOLEAN=45 -NUMBER=46 -NUMFLOAT=47 -BINFLOAT=48 -DECFLOAT=49 -HEXFLOAT=50 -NUMINT=51 -BININTEGER=52 -DECINTEGER=53 -HEXINTEGER=54 -NAME=55 -WS=56 -COMMENT_LINE=57 -COMMENT_BLOCK=58 +CHAR=45 +BOOLEAN=46 +NUMBER=47 +NUMFLOAT=48 +BINFLOAT=49 +DECFLOAT=50 +HEXFLOAT=51 +NUMINT=52 +BININTEGER=53 +DECINTEGER=54 +HEXINTEGER=55 +NAME=56 +WS=57 +COMMENT_LINE=58 +COMMENT_BLOCK=59 '{'=1 '}'=2 '('=3 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java index a6e468ad4..60757eec2 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCListener.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCListener.java @@ -311,30 +311,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitLvaluePar(KickCParser.LvalueParContext ctx); - /** - * Enter a parse tree produced by the {@code exprCast} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprCast(KickCParser.ExprCastContext ctx); - /** - * Exit a parse tree produced by the {@code exprCast} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprCast(KickCParser.ExprCastContext ctx); - /** - * Enter a parse tree produced by the {@code exprCall} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprCall(KickCParser.ExprCallContext ctx); - /** - * Exit a parse tree produced by the {@code exprCall} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprCall(KickCParser.ExprCallContext ctx); /** * Enter a parse tree produced by the {@code exprPreMod} * labeled alternative in {@link KickCParser#expr}. @@ -359,6 +335,78 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprBinary(KickCParser.ExprBinaryContext ctx); + /** + * Enter a parse tree produced by the {@code exprPostMod} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprPostMod(KickCParser.ExprPostModContext ctx); + /** + * Exit a parse tree produced by the {@code exprPostMod} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprPostMod(KickCParser.ExprPostModContext ctx); + /** + * Enter a parse tree produced by the {@code exprUnary} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprUnary(KickCParser.ExprUnaryContext ctx); + /** + * Exit a parse tree produced by the {@code exprUnary} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprUnary(KickCParser.ExprUnaryContext ctx); + /** + * Enter a parse tree produced by the {@code exprNumber} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprNumber(KickCParser.ExprNumberContext ctx); + /** + * Exit a parse tree produced by the {@code exprNumber} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprNumber(KickCParser.ExprNumberContext ctx); + /** + * Enter a parse tree produced by the {@code exprChar} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprChar(KickCParser.ExprCharContext ctx); + /** + * Exit a parse tree produced by the {@code exprChar} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprChar(KickCParser.ExprCharContext ctx); + /** + * Enter a parse tree produced by the {@code exprCast} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprCast(KickCParser.ExprCastContext ctx); + /** + * Exit a parse tree produced by the {@code exprCast} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprCast(KickCParser.ExprCastContext ctx); + /** + * Enter a parse tree produced by the {@code exprCall} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void enterExprCall(KickCParser.ExprCallContext ctx); + /** + * Exit a parse tree produced by the {@code exprCall} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + */ + void exitExprCall(KickCParser.ExprCallContext ctx); /** * Enter a parse tree produced by the {@code exprPar} * labeled alternative in {@link KickCParser#expr}. @@ -395,18 +443,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprBool(KickCParser.ExprBoolContext ctx); - /** - * Enter a parse tree produced by the {@code exprPostMod} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprPostMod(KickCParser.ExprPostModContext ctx); - /** - * Exit a parse tree produced by the {@code exprPostMod} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprPostMod(KickCParser.ExprPostModContext ctx); /** * Enter a parse tree produced by the {@code exprId} * labeled alternative in {@link KickCParser#expr}. @@ -419,30 +455,6 @@ public interface KickCListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExprId(KickCParser.ExprIdContext ctx); - /** - * Enter a parse tree produced by the {@code exprUnary} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprUnary(KickCParser.ExprUnaryContext ctx); - /** - * Exit a parse tree produced by the {@code exprUnary} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprUnary(KickCParser.ExprUnaryContext ctx); - /** - * Enter a parse tree produced by the {@code exprNumber} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void enterExprNumber(KickCParser.ExprNumberContext ctx); - /** - * Exit a parse tree produced by the {@code exprNumber} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - */ - void exitExprNumber(KickCParser.ExprNumberContext ctx); /** * Enter a parse tree produced by the {@code exprArray} * labeled alternative in {@link KickCParser#expr}. diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 7f68e2594..71f9af6d3 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -22,10 +22,10 @@ public class KickCParser extends Parser { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, T__28=29, T__29=30, T__30=31, T__31=32, T__32=33, T__33=34, T__34=35, T__35=36, T__36=37, T__37=38, - T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, BOOLEAN=45, - NUMBER=46, NUMFLOAT=47, BINFLOAT=48, DECFLOAT=49, HEXFLOAT=50, NUMINT=51, - BININTEGER=52, DECINTEGER=53, HEXINTEGER=54, NAME=55, WS=56, COMMENT_LINE=57, - COMMENT_BLOCK=58; + T__38=39, T__39=40, T__40=41, T__41=42, SIMPLETYPE=43, STRING=44, CHAR=45, + BOOLEAN=46, NUMBER=47, NUMFLOAT=48, BINFLOAT=49, DECFLOAT=50, HEXFLOAT=51, + NUMINT=52, BININTEGER=53, DECINTEGER=54, HEXINTEGER=55, NAME=56, WS=57, + COMMENT_LINE=58, COMMENT_BLOCK=59; public static final int RULE_file = 0, RULE_stmtSeq = 1, RULE_stmt = 2, RULE_forDeclaration = 3, RULE_forIteration = 4, RULE_parameterListDecl = 5, RULE_parameterDecl = 6, @@ -47,9 +47,10 @@ public class KickCParser extends Parser { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, - null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "BOOLEAN", - "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", "BININTEGER", - "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", "COMMENT_BLOCK" + null, null, null, null, null, null, null, "SIMPLETYPE", "STRING", "CHAR", + "BOOLEAN", "NUMBER", "NUMFLOAT", "BINFLOAT", "DECFLOAT", "HEXFLOAT", "NUMINT", + "BININTEGER", "DECINTEGER", "HEXINTEGER", "NAME", "WS", "COMMENT_LINE", + "COMMENT_BLOCK" }; public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); @@ -193,7 +194,7 @@ public class KickCParser extends Parser { setState(30); _errHandler.sync(this); _la = _input.LA(1); - } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) ); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0) ); } } catch (RecognitionException re) { @@ -458,7 +459,7 @@ public class KickCParser extends Parser { setState(34); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(33); stmtSeq(); @@ -496,7 +497,7 @@ public class KickCParser extends Parser { setState(46); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__2) | (1L << T__4) | (1L << T__7) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << SIMPLETYPE) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(45); stmtSeq(); @@ -662,7 +663,7 @@ public class KickCParser extends Parser { setState(102); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(101); expr(0); @@ -843,7 +844,7 @@ public class KickCParser extends Parser { setState(119); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(118); expr(0); @@ -1121,7 +1122,7 @@ public class KickCParser extends Parser { setState(147); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(146); expr(0); @@ -1223,6 +1224,7 @@ public class KickCParser extends Parser { case T__24: case T__25: case STRING: + case CHAR: case BOOLEAN: case NUMBER: case NAME: @@ -1471,6 +1473,119 @@ public class KickCParser extends Parser { super.copyFrom(ctx); } } + public static class ExprPreModContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ExprPreModContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPreMod(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPreMod(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprPreMod(this); + else return visitor.visitChildren(this); + } + } + public static class ExprBinaryContext extends ExprContext { + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public ExprBinaryContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprBinary(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprBinary(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprBinary(this); + else return visitor.visitChildren(this); + } + } + public static class ExprPostModContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ExprPostModContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPostMod(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPostMod(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprPostMod(this); + else return visitor.visitChildren(this); + } + } + public static class ExprUnaryContext extends ExprContext { + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ExprUnaryContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprUnary(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprUnary(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprUnary(this); + else return visitor.visitChildren(this); + } + } + public static class ExprNumberContext extends ExprContext { + public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } + public ExprNumberContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprNumber(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprNumber(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprNumber(this); + else return visitor.visitChildren(this); + } + } + public static class ExprCharContext extends ExprContext { + public TerminalNode CHAR() { return getToken(KickCParser.CHAR, 0); } + public ExprCharContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprChar(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprChar(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprChar(this); + else return visitor.visitChildren(this); + } + } public static class ExprCastContext extends ExprContext { public TypeDeclContext typeDecl() { return getRuleContext(TypeDeclContext.class,0); @@ -1513,47 +1628,6 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } - public static class ExprPreModContext extends ExprContext { - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public ExprPreModContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPreMod(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPreMod(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprPreMod(this); - else return visitor.visitChildren(this); - } - } - public static class ExprBinaryContext extends ExprContext { - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public ExprBinaryContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprBinary(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprBinary(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprBinary(this); - else return visitor.visitChildren(this); - } - } public static class ExprParContext extends ExprContext { public ExprContext expr() { return getRuleContext(ExprContext.class,0); @@ -1607,25 +1681,6 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } - public static class ExprPostModContext extends ExprContext { - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public ExprPostModContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprPostMod(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprPostMod(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprPostMod(this); - else return visitor.visitChildren(this); - } - } public static class ExprIdContext extends ExprContext { public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } public ExprIdContext(ExprContext ctx) { copyFrom(ctx); } @@ -1643,42 +1698,6 @@ public class KickCParser extends Parser { else return visitor.visitChildren(this); } } - public static class ExprUnaryContext extends ExprContext { - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public ExprUnaryContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprUnary(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprUnary(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprUnary(this); - else return visitor.visitChildren(this); - } - } - public static class ExprNumberContext extends ExprContext { - public TerminalNode NUMBER() { return getToken(KickCParser.NUMBER, 0); } - public ExprNumberContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).enterExprNumber(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof KickCListener ) ((KickCListener)listener).exitExprNumber(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof KickCVisitor ) return ((KickCVisitor)visitor).visitExprNumber(this); - else return visitor.visitChildren(this); - } - } public static class ExprArrayContext extends ExprContext { public List expr() { return getRuleContexts(ExprContext.class); @@ -1718,7 +1737,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(213); + setState(214); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: @@ -1747,7 +1766,7 @@ public class KickCParser extends Parser { setState(197); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__2) | (1L << T__16) | (1L << T__19) | (1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23) | (1L << T__24) | (1L << T__25) | (1L << STRING) | (1L << CHAR) | (1L << BOOLEAN) | (1L << NUMBER) | (1L << NAME))) != 0)) { { setState(196); parameterList(); @@ -1770,7 +1789,7 @@ public class KickCParser extends Parser { setState(202); match(T__3); setState(203); - expr(15); + expr(16); } break; case 4: @@ -1789,7 +1808,7 @@ public class KickCParser extends Parser { consume(); } setState(206); - expr(13); + expr(14); } break; case 5: @@ -1808,7 +1827,7 @@ public class KickCParser extends Parser { consume(); } setState(208); - expr(11); + expr(12); } break; case 6: @@ -1840,16 +1859,25 @@ public class KickCParser extends Parser { break; case 9: { - _localctx = new ExprBoolContext(_localctx); + _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(212); + match(CHAR); + } + break; + case 10: + { + _localctx = new ExprBoolContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(213); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(242); + setState(243); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,25,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -1857,16 +1885,16 @@ public class KickCParser extends Parser { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(240); + setState(241); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,24,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(215); - if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); setState(216); + if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); + setState(217); _la = _input.LA(1); if ( !(_la==T__26 || _la==T__27) ) { _errHandler.recoverInline(this); @@ -1876,17 +1904,17 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(217); - expr(11); + setState(218); + expr(12); } break; case 2: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(218); - if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); setState(219); + if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); + setState(220); _la = _input.LA(1); if ( !(_la==T__16 || _la==T__28) ) { _errHandler.recoverInline(this); @@ -1896,17 +1924,17 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(220); - expr(10); + setState(221); + expr(11); } break; case 3: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(221); - if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); setState(222); + if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); + setState(223); _la = _input.LA(1); if ( !(_la==T__21 || _la==T__22) ) { _errHandler.recoverInline(this); @@ -1916,17 +1944,17 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(223); - expr(9); + setState(224); + expr(10); } break; case 4: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(224); - if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); setState(225); + if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); + setState(226); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__29) | (1L << T__30) | (1L << T__31) | (1L << T__32) | (1L << T__33) | (1L << T__34) | (1L << T__35) | (1L << T__36) | (1L << T__37))) != 0)) ) { _errHandler.recoverInline(this); @@ -1936,17 +1964,17 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(226); - expr(8); + setState(227); + expr(9); } break; case 5: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(227); - if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); setState(228); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(229); _la = _input.LA(1); if ( !(_la==T__38 || _la==T__39) ) { _errHandler.recoverInline(this); @@ -1956,17 +1984,17 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(229); - expr(7); + setState(230); + expr(8); } break; case 6: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(230); - if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); setState(231); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(232); _la = _input.LA(1); if ( !(_la==T__40 || _la==T__41) ) { _errHandler.recoverInline(this); @@ -1976,21 +2004,21 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(232); - expr(6); + setState(233); + expr(7); } break; case 7: { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(233); - if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); setState(234); - match(T__17); + if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); setState(235); - expr(0); + match(T__17); setState(236); + expr(0); + setState(237); match(T__18); } break; @@ -1998,9 +2026,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(238); - if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); setState(239); + if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); + setState(240); _la = _input.LA(1); if ( !(_la==T__19 || _la==T__20) ) { _errHandler.recoverInline(this); @@ -2015,7 +2043,7 @@ public class KickCParser extends Parser { } } } - setState(244); + setState(245); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,25,_ctx); } @@ -2065,21 +2093,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(245); + setState(246); expr(0); - setState(250); + setState(251); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__15) { { { - setState(246); - match(T__15); setState(247); + match(T__15); + setState(248); expr(0); } } - setState(252); + setState(253); _errHandler.sync(this); _la = _input.LA(1); } @@ -2126,27 +2154,27 @@ public class KickCParser extends Parser { private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { case 3: - return precpred(_ctx, 10); + return precpred(_ctx, 11); case 4: - return precpred(_ctx, 9); + return precpred(_ctx, 10); case 5: - return precpred(_ctx, 8); + return precpred(_ctx, 9); case 6: - return precpred(_ctx, 7); + return precpred(_ctx, 8); case 7: - return precpred(_ctx, 6); + return precpred(_ctx, 7); case 8: - return precpred(_ctx, 5); + return precpred(_ctx, 6); case 9: - return precpred(_ctx, 14); + return precpred(_ctx, 15); case 10: - return precpred(_ctx, 12); + return precpred(_ctx, 13); } return true; } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3<\u0100\4\2\t\2\4"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3=\u0101\4\2\t\2\4"+ "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+ "\13\4\f\t\f\4\r\t\r\3\2\3\2\3\2\3\3\6\3\37\n\3\r\3\16\3 \3\4\3\4\5\4%"+ "\n\4\3\4\3\4\3\4\3\4\3\4\5\4,\n\4\3\4\3\4\3\4\5\4\61\n\4\3\4\3\4\3\4\5"+ @@ -2160,21 +2188,21 @@ public class KickCParser extends Parser { "\n\u00a3\n\n\f\n\16\n\u00a6\13\n\3\n\3\n\5\n\u00aa\n\n\3\13\3\13\3\13"+ "\3\13\3\13\3\13\3\13\3\13\5\13\u00b4\n\13\3\13\3\13\3\13\3\13\3\13\7\13"+ "\u00bb\n\13\f\13\16\13\u00be\13\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f"+ - "\u00c8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\5\f"+ - "\u00d8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ - "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u00f3\n\f\f\f\16\f\u00f6"+ - "\13\f\3\r\3\r\3\r\7\r\u00fb\n\r\f\r\16\r\u00fe\13\r\3\r\2\5\20\24\26\16"+ + "\u00c8\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ + "\5\f\u00d9\n\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f"+ + "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\7\f\u00f4\n\f\f\f\16\f\u00f7"+ + "\13\f\3\r\3\r\3\r\7\r\u00fc\n\r\f\r\16\r\u00ff\13\r\3\r\2\5\20\24\26\16"+ "\2\4\6\b\n\f\16\20\22\24\26\30\2\n\3\2\26\27\4\2\23\23\30\34\3\2\35\36"+ - "\4\2\23\23\37\37\3\2\30\31\3\2 (\3\2)*\3\2+,\2\u0124\2\32\3\2\2\2\4\36"+ + "\4\2\23\23\37\37\3\2\30\31\3\2 (\3\2)*\3\2+,\2\u0126\2\32\3\2\2\2\4\36"+ "\3\2\2\2\6k\3\2\2\2\bn\3\2\2\2\n\u0080\3\2\2\2\f\u0082\3\2\2\2\16\u008a"+ - "\3\2\2\2\20\u008d\3\2\2\2\22\u00a9\3\2\2\2\24\u00b3\3\2\2\2\26\u00d7\3"+ - "\2\2\2\30\u00f7\3\2\2\2\32\33\5\4\3\2\33\34\7\2\2\3\34\3\3\2\2\2\35\37"+ + "\3\2\2\2\20\u008d\3\2\2\2\22\u00a9\3\2\2\2\24\u00b3\3\2\2\2\26\u00d8\3"+ + "\2\2\2\30\u00f8\3\2\2\2\32\33\5\4\3\2\33\34\7\2\2\3\34\3\3\2\2\2\35\37"+ "\5\6\4\2\36\35\3\2\2\2\37 \3\2\2\2 \36\3\2\2\2 !\3\2\2\2!\5\3\2\2\2\""+ "$\7\3\2\2#%\5\4\3\2$#\3\2\2\2$%\3\2\2\2%&\3\2\2\2&l\7\4\2\2\'(\5\20\t"+ - "\2()\79\2\2)+\7\5\2\2*,\5\f\7\2+*\3\2\2\2+,\3\2\2\2,-\3\2\2\2-.\7\6\2"+ + "\2()\7:\2\2)+\7\5\2\2*,\5\f\7\2+*\3\2\2\2+,\3\2\2\2,-\3\2\2\2-.\7\6\2"+ "\2.\60\7\3\2\2/\61\5\4\3\2\60/\3\2\2\2\60\61\3\2\2\2\61\62\3\2\2\2\62"+ "\63\7\4\2\2\63l\3\2\2\2\64\66\7\7\2\2\65\64\3\2\2\2\65\66\3\2\2\2\66\67"+ - "\3\2\2\2\678\5\20\t\28;\79\2\29:\7\b\2\2:<\5\22\n\2;9\3\2\2\2;<\3\2\2"+ + "\3\2\2\2\678\5\20\t\28;\7:\2\29:\7\b\2\2:<\5\22\n\2;9\3\2\2\2;<\3\2\2"+ "\2<=\3\2\2\2=>\7\t\2\2>l\3\2\2\2?@\5\24\13\2@A\7\b\2\2AB\5\26\f\2BC\7"+ "\t\2\2Cl\3\2\2\2DE\5\26\f\2EF\7\t\2\2Fl\3\2\2\2GH\7\n\2\2HI\7\5\2\2IJ"+ "\5\26\f\2JK\7\6\2\2KN\5\6\4\2LM\7\13\2\2MO\5\6\4\2NL\3\2\2\2NO\3\2\2\2"+ @@ -2184,14 +2212,14 @@ public class KickCParser extends Parser { "\5\n\6\2cd\7\6\2\2de\5\6\4\2el\3\2\2\2fh\7\17\2\2gi\5\26\f\2hg\3\2\2\2"+ "hi\3\2\2\2ij\3\2\2\2jl\7\t\2\2k\"\3\2\2\2k\'\3\2\2\2k\65\3\2\2\2k?\3\2"+ "\2\2kD\3\2\2\2kG\3\2\2\2kP\3\2\2\2kV\3\2\2\2k]\3\2\2\2kf\3\2\2\2l\7\3"+ - "\2\2\2mo\5\20\t\2nm\3\2\2\2no\3\2\2\2op\3\2\2\2ps\79\2\2qr\7\b\2\2rt\5"+ + "\2\2\2mo\5\20\t\2nm\3\2\2\2no\3\2\2\2op\3\2\2\2ps\7:\2\2qr\7\b\2\2rt\5"+ "\22\n\2sq\3\2\2\2st\3\2\2\2t\t\3\2\2\2uv\7\t\2\2vw\5\26\f\2wy\7\t\2\2"+ "xz\5\26\f\2yx\3\2\2\2yz\3\2\2\2z\u0081\3\2\2\2{|\7\20\2\2|}\5\26\f\2}"+ "~\7\21\2\2~\177\5\26\f\2\177\u0081\3\2\2\2\u0080u\3\2\2\2\u0080{\3\2\2"+ "\2\u0081\13\3\2\2\2\u0082\u0087\5\16\b\2\u0083\u0084\7\22\2\2\u0084\u0086"+ "\5\16\b\2\u0085\u0083\3\2\2\2\u0086\u0089\3\2\2\2\u0087\u0085\3\2\2\2"+ "\u0087\u0088\3\2\2\2\u0088\r\3\2\2\2\u0089\u0087\3\2\2\2\u008a\u008b\5"+ - "\20\t\2\u008b\u008c\79\2\2\u008c\17\3\2\2\2\u008d\u008e\b\t\1\2\u008e"+ + "\20\t\2\u008b\u008c\7:\2\2\u008c\17\3\2\2\2\u008d\u008e\b\t\1\2\u008e"+ "\u008f\7-\2\2\u008f\u009a\3\2\2\2\u0090\u0091\f\4\2\2\u0091\u0099\7\23"+ "\2\2\u0092\u0093\f\3\2\2\u0093\u0095\7\24\2\2\u0094\u0096\5\26\f\2\u0095"+ "\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\3\2\2\2\u0097\u0099\7\25"+ @@ -2203,36 +2231,37 @@ public class KickCParser extends Parser { "\u00a4\3\2\2\2\u00a7\u00a8\7\4\2\2\u00a8\u00aa\3\2\2\2\u00a9\u009d\3\2"+ "\2\2\u00a9\u009e\3\2\2\2\u00aa\23\3\2\2\2\u00ab\u00ac\b\13\1\2\u00ac\u00ad"+ "\7\5\2\2\u00ad\u00ae\5\24\13\2\u00ae\u00af\7\6\2\2\u00af\u00b4\3\2\2\2"+ - "\u00b0\u00b4\79\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b4\5\24\13\4\u00b3\u00ab"+ + "\u00b0\u00b4\7:\2\2\u00b1\u00b2\7\23\2\2\u00b2\u00b4\5\24\13\4\u00b3\u00ab"+ "\3\2\2\2\u00b3\u00b0\3\2\2\2\u00b3\u00b1\3\2\2\2\u00b4\u00bc\3\2\2\2\u00b5"+ "\u00b6\f\3\2\2\u00b6\u00b7\7\24\2\2\u00b7\u00b8\5\26\f\2\u00b8\u00b9\7"+ "\25\2\2\u00b9\u00bb\3\2\2\2\u00ba\u00b5\3\2\2\2\u00bb\u00be\3\2\2\2\u00bc"+ "\u00ba\3\2\2\2\u00bc\u00bd\3\2\2\2\u00bd\25\3\2\2\2\u00be\u00bc\3\2\2"+ "\2\u00bf\u00c0\b\f\1\2\u00c0\u00c1\7\5\2\2\u00c1\u00c2\5\26\f\2\u00c2"+ - "\u00c3\7\6\2\2\u00c3\u00d8\3\2\2\2\u00c4\u00c5\79\2\2\u00c5\u00c7\7\5"+ + "\u00c3\7\6\2\2\u00c3\u00d9\3\2\2\2\u00c4\u00c5\7:\2\2\u00c5\u00c7\7\5"+ "\2\2\u00c6\u00c8\5\30\r\2\u00c7\u00c6\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8"+ - "\u00c9\3\2\2\2\u00c9\u00d8\7\6\2\2\u00ca\u00cb\7\5\2\2\u00cb\u00cc\5\20"+ - "\t\2\u00cc\u00cd\7\6\2\2\u00cd\u00ce\5\26\f\21\u00ce\u00d8\3\2\2\2\u00cf"+ - "\u00d0\t\2\2\2\u00d0\u00d8\5\26\f\17\u00d1\u00d2\t\3\2\2\u00d2\u00d8\5"+ - "\26\f\r\u00d3\u00d8\79\2\2\u00d4\u00d8\7\60\2\2\u00d5\u00d8\7.\2\2\u00d6"+ - "\u00d8\7/\2\2\u00d7\u00bf\3\2\2\2\u00d7\u00c4\3\2\2\2\u00d7\u00ca\3\2"+ - "\2\2\u00d7\u00cf\3\2\2\2\u00d7\u00d1\3\2\2\2\u00d7\u00d3\3\2\2\2\u00d7"+ - "\u00d4\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d7\u00d6\3\2\2\2\u00d8\u00f4\3\2"+ - "\2\2\u00d9\u00da\f\f\2\2\u00da\u00db\t\4\2\2\u00db\u00f3\5\26\f\r\u00dc"+ - "\u00dd\f\13\2\2\u00dd\u00de\t\5\2\2\u00de\u00f3\5\26\f\f\u00df\u00e0\f"+ - "\n\2\2\u00e0\u00e1\t\6\2\2\u00e1\u00f3\5\26\f\13\u00e2\u00e3\f\t\2\2\u00e3"+ - "\u00e4\t\7\2\2\u00e4\u00f3\5\26\f\n\u00e5\u00e6\f\b\2\2\u00e6\u00e7\t"+ - "\b\2\2\u00e7\u00f3\5\26\f\t\u00e8\u00e9\f\7\2\2\u00e9\u00ea\t\t\2\2\u00ea"+ - "\u00f3\5\26\f\b\u00eb\u00ec\f\20\2\2\u00ec\u00ed\7\24\2\2\u00ed\u00ee"+ - "\5\26\f\2\u00ee\u00ef\7\25\2\2\u00ef\u00f3\3\2\2\2\u00f0\u00f1\f\16\2"+ - "\2\u00f1\u00f3\t\2\2\2\u00f2\u00d9\3\2\2\2\u00f2\u00dc\3\2\2\2\u00f2\u00df"+ - "\3\2\2\2\u00f2\u00e2\3\2\2\2\u00f2\u00e5\3\2\2\2\u00f2\u00e8\3\2\2\2\u00f2"+ - "\u00eb\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4\u00f2\3\2"+ - "\2\2\u00f4\u00f5\3\2\2\2\u00f5\27\3\2\2\2\u00f6\u00f4\3\2\2\2\u00f7\u00fc"+ - "\5\26\f\2\u00f8\u00f9\7\22\2\2\u00f9\u00fb\5\26\f\2\u00fa\u00f8\3\2\2"+ - "\2\u00fb\u00fe\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd\31"+ - "\3\2\2\2\u00fe\u00fc\3\2\2\2\35 $+\60\65;N`hknsy\u0080\u0087\u0095\u0098"+ - "\u009a\u00a4\u00a9\u00b3\u00bc\u00c7\u00d7\u00f2\u00f4\u00fc"; + "\u00c9\3\2\2\2\u00c9\u00d9\7\6\2\2\u00ca\u00cb\7\5\2\2\u00cb\u00cc\5\20"+ + "\t\2\u00cc\u00cd\7\6\2\2\u00cd\u00ce\5\26\f\22\u00ce\u00d9\3\2\2\2\u00cf"+ + "\u00d0\t\2\2\2\u00d0\u00d9\5\26\f\20\u00d1\u00d2\t\3\2\2\u00d2\u00d9\5"+ + "\26\f\16\u00d3\u00d9\7:\2\2\u00d4\u00d9\7\61\2\2\u00d5\u00d9\7.\2\2\u00d6"+ + "\u00d9\7/\2\2\u00d7\u00d9\7\60\2\2\u00d8\u00bf\3\2\2\2\u00d8\u00c4\3\2"+ + "\2\2\u00d8\u00ca\3\2\2\2\u00d8\u00cf\3\2\2\2\u00d8\u00d1\3\2\2\2\u00d8"+ + "\u00d3\3\2\2\2\u00d8\u00d4\3\2\2\2\u00d8\u00d5\3\2\2\2\u00d8\u00d6\3\2"+ + "\2\2\u00d8\u00d7\3\2\2\2\u00d9\u00f5\3\2\2\2\u00da\u00db\f\r\2\2\u00db"+ + "\u00dc\t\4\2\2\u00dc\u00f4\5\26\f\16\u00dd\u00de\f\f\2\2\u00de\u00df\t"+ + "\5\2\2\u00df\u00f4\5\26\f\r\u00e0\u00e1\f\13\2\2\u00e1\u00e2\t\6\2\2\u00e2"+ + "\u00f4\5\26\f\f\u00e3\u00e4\f\n\2\2\u00e4\u00e5\t\7\2\2\u00e5\u00f4\5"+ + "\26\f\13\u00e6\u00e7\f\t\2\2\u00e7\u00e8\t\b\2\2\u00e8\u00f4\5\26\f\n"+ + "\u00e9\u00ea\f\b\2\2\u00ea\u00eb\t\t\2\2\u00eb\u00f4\5\26\f\t\u00ec\u00ed"+ + "\f\21\2\2\u00ed\u00ee\7\24\2\2\u00ee\u00ef\5\26\f\2\u00ef\u00f0\7\25\2"+ + "\2\u00f0\u00f4\3\2\2\2\u00f1\u00f2\f\17\2\2\u00f2\u00f4\t\2\2\2\u00f3"+ + "\u00da\3\2\2\2\u00f3\u00dd\3\2\2\2\u00f3\u00e0\3\2\2\2\u00f3\u00e3\3\2"+ + "\2\2\u00f3\u00e6\3\2\2\2\u00f3\u00e9\3\2\2\2\u00f3\u00ec\3\2\2\2\u00f3"+ + "\u00f1\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f6\3\2"+ + "\2\2\u00f6\27\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f8\u00fd\5\26\f\2\u00f9\u00fa"+ + "\7\22\2\2\u00fa\u00fc\5\26\f\2\u00fb\u00f9\3\2\2\2\u00fc\u00ff\3\2\2\2"+ + "\u00fd\u00fb\3\2\2\2\u00fd\u00fe\3\2\2\2\u00fe\31\3\2\2\2\u00ff\u00fd"+ + "\3\2\2\2\35 $+\60\65;N`hknsy\u0080\u0087\u0095\u0098\u009a\u00a4\u00a9"+ + "\u00b3\u00bc\u00c7\u00d8\u00f3\u00f5\u00fd"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java index 00d3dce9f..121a2547f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCVisitor.java @@ -188,20 +188,6 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLvaluePar(KickCParser.LvalueParContext ctx); - /** - * Visit a parse tree produced by the {@code exprCast} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExprCast(KickCParser.ExprCastContext ctx); - /** - * Visit a parse tree produced by the {@code exprCall} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExprCall(KickCParser.ExprCallContext ctx); /** * Visit a parse tree produced by the {@code exprPreMod} * labeled alternative in {@link KickCParser#expr}. @@ -216,6 +202,48 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExprBinary(KickCParser.ExprBinaryContext ctx); + /** + * Visit a parse tree produced by the {@code exprPostMod} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprPostMod(KickCParser.ExprPostModContext ctx); + /** + * Visit a parse tree produced by the {@code exprUnary} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprUnary(KickCParser.ExprUnaryContext ctx); + /** + * Visit a parse tree produced by the {@code exprNumber} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprNumber(KickCParser.ExprNumberContext ctx); + /** + * Visit a parse tree produced by the {@code exprChar} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprChar(KickCParser.ExprCharContext ctx); + /** + * Visit a parse tree produced by the {@code exprCast} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprCast(KickCParser.ExprCastContext ctx); + /** + * Visit a parse tree produced by the {@code exprCall} + * labeled alternative in {@link KickCParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExprCall(KickCParser.ExprCallContext ctx); /** * Visit a parse tree produced by the {@code exprPar} * labeled alternative in {@link KickCParser#expr}. @@ -237,13 +265,6 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExprBool(KickCParser.ExprBoolContext ctx); - /** - * Visit a parse tree produced by the {@code exprPostMod} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExprPostMod(KickCParser.ExprPostModContext ctx); /** * Visit a parse tree produced by the {@code exprId} * labeled alternative in {@link KickCParser#expr}. @@ -251,20 +272,6 @@ public interface KickCVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExprId(KickCParser.ExprIdContext ctx); - /** - * Visit a parse tree produced by the {@code exprUnary} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExprUnary(KickCParser.ExprUnaryContext ctx); - /** - * Visit a parse tree produced by the {@code exprNumber} - * labeled alternative in {@link KickCParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitExprNumber(KickCParser.ExprNumberContext ctx); /** * Visit a parse tree produced by the {@code exprArray} * labeled alternative in {@link KickCParser#expr}. diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java index 5d6ee8b8f..7e44885df 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java @@ -496,6 +496,11 @@ public class Pass1GenerateStatementSequence extends KickCBaseVisitor { return new ConstantBool(Boolean.valueOf(bool)); } + @Override + public Object visitExprChar(KickCParser.ExprCharContext ctx) { + return new ConstantChar(ctx.getText().charAt(1)); + } + @Override public RValue visitExprBinary(KickCParser.ExprBinaryContext ctx) { RValue left = (RValue) this.visit(ctx.expr(0)); diff --git a/src/main/java/dk/camelot64/kickc/test/TestCompilationOutput.java b/src/main/java/dk/camelot64/kickc/test/TestCompilationOutput.java index c162f3ba0..c82f60b5c 100644 --- a/src/main/java/dk/camelot64/kickc/test/TestCompilationOutput.java +++ b/src/main/java/dk/camelot64/kickc/test/TestCompilationOutput.java @@ -24,6 +24,10 @@ public class TestCompilationOutput extends TestCase { helper = new ReferenceHelper("dk/camelot64/kickc/test/ref/"); } + public void testLiterals() throws IOException, URISyntaxException { + compileAndCompare("literals"); + } + public void testIncD020() throws IOException, URISyntaxException { compileAndCompare("incd020"); } diff --git a/src/main/java/dk/camelot64/kickc/test/literals.kc b/src/main/java/dk/camelot64/kickc/test/literals.kc new file mode 100644 index 000000000..1a77a53b9 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/literals.kc @@ -0,0 +1,16 @@ +byte* SCREEN = $0400; + +byte char = 'a'; +byte num = 1; +byte[] str = "bcd"; +byte[] nums = { 2, 3, 4}; + +main(); +void main() { + SCREEN[0] = char; + SCREEN[2] = num; + for(byte i : 0..2) { + SCREEN[4+i] = str[i]; + SCREEN[8+i] = nums[i]; + } +} \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/test/ref/literals.asm b/src/main/java/dk/camelot64/kickc/test/ref/literals.asm new file mode 100644 index 000000000..4909d8316 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/ref/literals.asm @@ -0,0 +1,22 @@ + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 + jsr main +main: { + lda #char + sta SCREEN+0 + lda #num + sta SCREEN+2 + ldx #0 + b1: + lda str,x + sta SCREEN+4,x + lda nums,x + sta SCREEN+8,x + inx + cpx #3 + bne b1 + rts +} diff --git a/src/main/java/dk/camelot64/kickc/test/ref/literals.cfg b/src/main/java/dk/camelot64/kickc/test/ref/literals.cfg new file mode 100644 index 000000000..a7734ebc5 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/ref/literals.cfg @@ -0,0 +1,20 @@ +@begin: scope:[] from + [0] call main param-assignment [ ] + to:@end +@end: scope:[] from @begin +main: scope:[main] from @begin + [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] + [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] + to:main::@1 +main::@1: scope:[main] from main main::@1 + [3] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] + [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] + [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] + [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] + [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] + [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] + [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] + to:main::@return +main::@return: scope:[main] from main::@1 + [10] return [ ] + to:@return diff --git a/src/main/java/dk/camelot64/kickc/test/ref/literals.log b/src/main/java/dk/camelot64/kickc/test/ref/literals.log new file mode 100644 index 000000000..8155864d8 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/ref/literals.log @@ -0,0 +1,1092 @@ +byte* SCREEN = $0400; + +byte char = 'a'; +byte num = 1; +byte[] str = "bcd"; +byte[] nums = { 2, 3, 4}; + +main(); +void main() { + SCREEN[0] = char; + SCREEN[2] = num; + for(byte i : 0..2) { + SCREEN[4+i] = str[i]; + SCREEN[8+i] = nums[i]; + } +} +PROGRAM + (byte*) SCREEN ← (word) 1024 + (byte) char ← (byte) 'a' + (byte) num ← (byte) 1 + (byte[]) str ← (string) "bcd" + (byte[]) nums ← { (byte) 2, (byte) 3, (byte) 4 } + (void~) $0 ← call main +proc (void()) main() + *((byte*) SCREEN + (byte) 0) ← (byte) char + *((byte*) SCREEN + (byte) 2) ← (byte) num + (byte) main::i ← (byte) 0 +main::@1: + (byte~) main::$0 ← (byte) 4 + (byte) main::i + (byte~) main::$1 ← (byte[]) str *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i + (byte~) main::$3 ← (byte[]) nums *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$4 ← (byte) main::i != (byte) 3 + if((boolean~) main::$4) goto main::@1 +main::@return: + return +endproc // main() + +SYMBOLS +(void~) $0 +(byte*) SCREEN +(byte) char +(void()) main() +(byte~) main::$0 +(byte~) main::$1 +(byte~) main::$2 +(byte~) main::$3 +(boolean~) main::$4 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) num +(byte[]) nums +(byte[]) str + +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN ← (word) 1024 + (byte) char ← (byte) 'a' + (byte) num ← (byte) 1 + (byte[]) str ← (string) "bcd" + (byte[]) nums ← { (byte) 2, (byte) 3, (byte) 4 } + (void~) $0 ← call main + to:@1 +main: scope:[main] from + *((byte*) SCREEN + (byte) 0) ← (byte) char + *((byte*) SCREEN + (byte) 2) ← (byte) num + (byte) main::i ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte~) main::$0 ← (byte) 4 + (byte) main::i + (byte~) main::$1 ← (byte[]) str *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i + (byte~) main::$3 ← (byte[]) nums *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$4 ← (byte) main::i != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@2 +main::@2: scope:[main] from main::@1 + to:main::@return +main::@return: scope:[main] from main::@2 + return + to:@return +@1: scope:[] from @begin + to:@end +@end: scope:[] from @1 + +Removing empty block main::@2 +Removing empty block @1 +CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN ← (word) 1024 + (byte) char ← (byte) 'a' + (byte) num ← (byte) 1 + (byte[]) str ← (string) "bcd" + (byte[]) nums ← { (byte) 2, (byte) 3, (byte) 4 } + (void~) $0 ← call main + to:@end +main: scope:[main] from + *((byte*) SCREEN + (byte) 0) ← (byte) char + *((byte*) SCREEN + (byte) 2) ← (byte) num + (byte) main::i ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte~) main::$0 ← (byte) 4 + (byte) main::i + (byte~) main::$1 ← (byte[]) str *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i + (byte~) main::$3 ← (byte[]) nums *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$4 ← (byte) main::i != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +PROCEDURE MODIFY VARIABLE ANALYSIS + +CONTROL FLOW GRAPH WITH ASSIGNMENT CALL +@begin: scope:[] from + (byte*) SCREEN ← (word) 1024 + (byte) char ← (byte) 'a' + (byte) num ← (byte) 1 + (byte[]) str ← (string) "bcd" + (byte[]) nums ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@2 +@2: scope:[] from @begin + to:@end +main: scope:[main] from @begin + *((byte*) SCREEN + (byte) 0) ← (byte) char + *((byte*) SCREEN + (byte) 2) ← (byte) num + (byte) main::i ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte~) main::$0 ← (byte) 4 + (byte) main::i + (byte~) main::$1 ← (byte[]) str *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i + (byte~) main::$3 ← (byte[]) nums *idx (byte) main::i + *((byte*) SCREEN + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i ← ++ (byte) main::i + (boolean~) main::$4 ← (byte) main::i != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @2 + +Completing Phi functions... +Completing Phi functions... +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@2 +@2: scope:[] from @begin + to:@end +main: scope:[main] from @begin + (byte[]) nums#2 ← phi( @begin/(byte[]) nums#0 ) + (byte[]) str#2 ← phi( @begin/(byte[]) str#0 ) + (byte) num#1 ← phi( @begin/(byte) num#0 ) + (byte*) SCREEN#1 ← phi( @begin/(byte*) SCREEN#0 ) + (byte) char#1 ← phi( @begin/(byte) char#0 ) + *((byte*) SCREEN#1 + (byte) 0) ← (byte) char#1 + *((byte*) SCREEN#1 + (byte) 2) ← (byte) num#1 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) + (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + (boolean~) main::$4 ← (byte) main::i#1 != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @2 + +CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@2 +@2: scope:[] from @begin + to:@end +main: scope:[main] from @begin + (byte[]) nums#2 ← phi( @begin/(byte[]) nums#0 ) + (byte[]) str#2 ← phi( @begin/(byte[]) str#0 ) + (byte) num#1 ← phi( @begin/(byte) num#0 ) + (byte*) SCREEN#1 ← phi( @begin/(byte*) SCREEN#0 ) + (byte) char#1 ← phi( @begin/(byte) char#0 ) + *((byte*) SCREEN#1 + (byte) 0) ← (byte) char#1 + *((byte*) SCREEN#1 + (byte) 2) ← (byte) num#1 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) + (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + (boolean~) main::$4 ← (byte) main::i#1 != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @2 + +INITIAL SSA SYMBOL TABLE +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(byte*) SCREEN#1 +(byte*) SCREEN#2 +(byte) char +(byte) char#0 +(byte) char#1 +(void()) main() +(byte~) main::$0 +(byte~) main::$1 +(byte~) main::$2 +(byte~) main::$3 +(boolean~) main::$4 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte) num +(byte) num#0 +(byte) num#1 +(byte[]) nums +(byte[]) nums#0 +(byte[]) nums#1 +(byte[]) nums#2 +(byte[]) str +(byte[]) str#0 +(byte[]) str#1 +(byte[]) str#2 + +Culled Empty Block (label) @2 +Succesful SSA optimization Pass2CullEmptyBlocks +CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@end +main: scope:[main] from @begin + (byte[]) nums#2 ← phi( @begin/(byte[]) nums#0 ) + (byte[]) str#2 ← phi( @begin/(byte[]) str#0 ) + (byte) num#1 ← phi( @begin/(byte) num#0 ) + (byte*) SCREEN#1 ← phi( @begin/(byte*) SCREEN#0 ) + (byte) char#1 ← phi( @begin/(byte) char#0 ) + *((byte*) SCREEN#1 + (byte) 0) ← (byte) char#1 + *((byte*) SCREEN#1 + (byte) 2) ← (byte) num#1 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) + (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + (boolean~) main::$4 ← (byte) main::i#1 != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Alias (byte) char#0 = (byte) char#1 +Alias (byte*) SCREEN#0 = (byte*) SCREEN#1 +Alias (byte) num#0 = (byte) num#1 +Alias (byte[]) str#0 = (byte[]) str#2 +Alias (byte[]) nums#0 = (byte[]) nums#2 +Succesful SSA optimization Pass2AliasElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@end +main: scope:[main] from @begin + *((byte*) SCREEN#0 + (byte) 0) ← (byte) char#0 + *((byte*) SCREEN#0 + (byte) 2) ← (byte) num#0 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#0 main::@1/(byte[]) nums#1 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#0 main::@1/(byte*) SCREEN#2 ) + (byte[]) str#1 ← phi( main/(byte[]) str#0 main::@1/(byte[]) str#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + (boolean~) main::$4 ← (byte) main::i#1 != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Self Phi Eliminated (byte[]) str#1 +Self Phi Eliminated (byte*) SCREEN#2 +Self Phi Eliminated (byte[]) nums#1 +Succesful SSA optimization Pass2SelfPhiElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@end +main: scope:[main] from @begin + *((byte*) SCREEN#0 + (byte) 0) ← (byte) char#0 + *((byte*) SCREEN#0 + (byte) 2) ← (byte) num#0 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#0 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#0 ) + (byte[]) str#1 ← phi( main/(byte[]) str#0 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + (boolean~) main::$4 ← (byte) main::i#1 != (byte) 3 + if((boolean~) main::$4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Simple Condition (boolean~) main::$4 if((byte) main::i#1!=(byte) 3) goto main::@1 +Succesful SSA optimization Pass2ConditionalJumpSimplification +CONTROL FLOW GRAPH +@begin: scope:[] from + (byte*) SCREEN#0 ← (word) 1024 + (byte) char#0 ← (byte) 'a' + (byte) num#0 ← (byte) 1 + (byte[]) str#0 ← (string) "bcd" + (byte[]) nums#0 ← { (byte) 2, (byte) 3, (byte) 4 } + call main param-assignment + to:@end +main: scope:[main] from @begin + *((byte*) SCREEN#0 + (byte) 0) ← (byte) char#0 + *((byte*) SCREEN#0 + (byte) 2) ← (byte) num#0 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(byte[]) nums#0 ) + (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#0 ) + (byte[]) str#1 ← phi( main/(byte[]) str#0 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Constant (const byte*) SCREEN#0 = 1024 +Constant (const byte) char#0 = 'a' +Constant (const byte) num#0 = 1 +Constant (const byte[]) str#0 = "bcd" +Constant (const byte[]) nums#0 = { 2, 3, 4 } +Constant (const byte) main::i#0 = 0 +Succesful SSA optimization Pass2ConstantIdentification +CONTROL FLOW GRAPH +@begin: scope:[] from + call main param-assignment + to:@end +main: scope:[main] from @begin + *((const byte*) SCREEN#0 + (byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0 + (byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte[]) nums#1 ← phi( main/(const byte[]) nums#0 ) + (byte*) SCREEN#2 ← phi( main/(const byte*) SCREEN#0 ) + (byte[]) str#1 ← phi( main/(const byte[]) str#0 ) + (byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (byte[]) str#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (byte[]) nums#1 *idx (byte) main::i#2 + *((byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Constant (const byte[]) str#1 = str#0 +Constant (const byte*) SCREEN#2 = SCREEN#0 +Constant (const byte[]) nums#1 = nums#0 +Succesful SSA optimization Pass2ConstantIdentification +CONTROL FLOW GRAPH +@begin: scope:[] from + call main param-assignment + to:@end +main: scope:[main] from @begin + *((const byte*) SCREEN#0 + (byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0 + (byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) 4 + (byte) main::i#2 + (byte~) main::$1 ← (const byte[]) str#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) 8 + (byte) main::i#2 + (byte~) main::$3 ← (const byte[]) nums#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Consolidated assigned array index constant in assignment *(SCREEN#0+0) +Consolidated assigned array index constant in assignment *(SCREEN#0+2) +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Consolidated assigned array index constant in assignment *(SCREEN#2+4 + main::$0) +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Consolidated assigned array index constant in assignment *(SCREEN#2+8 + main::$2) +Succesful SSA optimization Pass2ConstantAdditionElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + call main param-assignment + to:@end +main: scope:[main] from @begin + *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$0 ← (byte) main::i#2 + (byte~) main::$1 ← (const byte[]) str#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2+(byte) 4 + (byte~) main::$0) ← (byte~) main::$1 + (byte~) main::$2 ← (byte) main::i#2 + (byte~) main::$3 ← (const byte[]) nums#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2+(byte) 8 + (byte~) main::$2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$2 +Succesful SSA optimization Pass2AliasElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + call main param-assignment + to:@end +main: scope:[main] from @begin + *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 ) + (byte~) main::$1 ← (const byte[]) str#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 + (byte~) main::$3 ← (const byte[]) nums#1 *idx (byte) main::i#2 + *((const byte*) SCREEN#2+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Constant inlined SCREEN#2 = (const byte*) SCREEN#0 +Constant inlined str#1 = (const byte[]) str#0 +Constant inlined main::i#0 = (byte) 0 +Constant inlined nums#1 = (const byte[]) nums#0 +Succesful SSA optimization Pass2ConstantInlining +CONTROL FLOW GRAPH +@begin: scope:[] from + call main param-assignment + to:@end +main: scope:[main] from @begin + *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 + *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 + (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 + *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@end: scope:[] from @begin + +FINAL SYMBOL TABLE +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 = (word) 1024 +(byte) char +(const byte) char#0 = (byte) 'a' +(void()) main() +(byte~) main::$1 +(byte~) main::$3 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#1 +(byte) main::i#2 +(byte) num +(const byte) num#0 = (byte) 1 +(byte[]) nums +(const byte[]) nums#0 = { (byte) 2, (byte) 3, (byte) 4 } +(byte[]) str +(const byte[]) str#0 = (string) "bcd" + +Block Sequence Planned @begin @end main main::@1 main::@return +Added new block during phi lifting main::@3(between main::@1 and main::@1) +Block Sequence Planned @begin @end main main::@1 main::@return main::@3 +CONTROL FLOW GRAPH - PHI LIFTED +@begin: scope:[] from + call main param-assignment + to:@end +@end: scope:[] from @begin +main: scope:[main] from @begin + *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 + *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 + to:main::@1 +main::@1: scope:[main] from main main::@3 + (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte~) main::i#3 ) + (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 + *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 + (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 + *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte) 3) goto main::@3 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +main::@3: scope:[main] from main::@1 + (byte~) main::i#3 ← (byte) main::i#1 + to:main::@1 + +CALL GRAPH +Calls in [] to 0:main + +Propagating live ranges... +Propagating live ranges... +CONTROL FLOW GRAPH - LIVE RANGES FOUND +@begin: scope:[] from + [0] call main param-assignment [ ] + to:@end +@end: scope:[] from @begin +main: scope:[main] from @begin + [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] + [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] + to:main::@1 +main::@1: scope:[main] from main main::@3 + [3] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ] + [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] + [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] + [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] + [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] + [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] + [9] if((byte) main::i#1!=(byte) 3) goto main::@3 [ main::i#1 ] + to:main::@return +main::@return: scope:[main] from main::@1 + [10] return [ ] + to:@return +main::@3: scope:[main] from main::@1 + [11] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ] + to:main::@1 + +Created 1 initial phi equivalence classes +Coalesced [11] main::i#3 ← main::i#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block (label) main::@3 +Block Sequence Planned @begin @end main main::@1 main::@return +Propagating live ranges... +Propagating live ranges... +CONTROL FLOW GRAPH - PHI MEM COALESCED +@begin: scope:[] from + [0] call main param-assignment [ ] + to:@end +@end: scope:[] from @begin +main: scope:[main] from @begin + [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] + [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] + to:main::@1 +main::@1: scope:[main] from main main::@1 + [3] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] + [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] + [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] + [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] + [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] + [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] + [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] + to:main::@return +main::@return: scope:[main] from main::@1 + [10] return [ ] + to:@return + +DOMINATORS +@begin dominated by @begin +@end dominated by @end @begin +main dominated by @begin main +main::@1 dominated by @begin main::@1 main +main::@return dominated by main::@return @begin main::@1 main + +Found back edge: Loop head: main::@1 tails: main::@1 blocks: null +Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1 +NATURAL LOOPS +Loop head: main::@1 tails: main::@1 blocks: main::@1 + +Found 0 loops in scope [] +Found 1 loops in scope [main] + Loop head: main::@1 tails: main::@1 blocks: main::@1 +NATURAL LOOPS WITH DEPTH +Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1 + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(byte) char +(void()) main() +(byte~) main::$1 22.0 +(byte~) main::$3 22.0 +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 13.2 +(byte) num +(byte[]) nums +(byte[]) str + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Added variable main::$1 to zero page equivalence class [ main::$1 ] +Added variable main::$3 to zero page equivalence class [ main::$3 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ main::$1 ] +[ main::$3 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::$1 ] +Allocated zp ZP_BYTE:4 [ main::$3 ] +INITIAL ASM +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +bbegin: +//SEG2 [0] call main param-assignment [ ] + jsr main + jmp bend +//SEG3 @end +bend: +//SEG4 main +main: { + .label _1 = 3 + .label _3 = 4 + .label i = 2 + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + b1_from_main: + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- zpby1=coby1 + lda #0 + sta i + jmp b1 + //SEG9 [3] phi from main::@1 to main::@1 + b1_from_b1: + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + jmp b1 + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- zpby1=cowo1_staridx_zpby2 + ldx i + lda str,x + sta _1 + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_zpby1=zpby2 + lda _1 + ldx i + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- zpby1=cowo1_staridx_zpby2 + ldx i + lda nums,x + sta _3 + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_zpby1=zpby2 + lda _3 + ldx i + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- zpby1=_inc_zpby1 + inc i + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- zpby1_neq_coby1_then_la1 + lda i + cmp #3 + bne b1_from_b1 + jmp breturn + //SEG18 main::@return + breturn: + //SEG19 [10] return [ ] + rts +} + +Statement [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] always clobbers reg byte a +Statement [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] always clobbers reg byte a +Statement [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] always clobbers reg byte a +Statement [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] always clobbers reg byte a +REGISTER UPLIFT POTENTIAL REGISTERS +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::$3 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 29.7: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:3 [ main::$1 ] 22: zp ZP_BYTE:4 [ main::$3 ] +Uplift Scope [] + +Uplifting [main] best 392 combination reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$1 ] reg byte a [ main::$3 ] +Uplifting [] best 392 combination +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +ASSEMBLER +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +bbegin: +//SEG2 [0] call main param-assignment [ ] + jsr main +//SEG3 @end +bend: +//SEG4 main +main: { + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + b1_from_main: + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1 + ldx #0 + jmp b1 + //SEG9 [3] phi from main::@1 to main::@1 + b1_from_b1: + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby + lda str,x + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- aby=cowo1_staridx_xby + lda nums,x + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby + inx + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- xby_neq_coby1_then_la1 + cpx #3 + bne b1_from_b1 + //SEG18 main::@return + breturn: + //SEG19 [10] return [ ] + rts +} + +Replacing label b1_from_b1 with b1 +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +ASSEMBLER +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +bbegin: +//SEG2 [0] call main param-assignment [ ] + jsr main +//SEG3 @end +bend: +//SEG4 main +main: { + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + b1_from_main: + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1 + ldx #0 + jmp b1 + //SEG9 [3] phi from main::@1 to main::@1 + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby + lda str,x + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- aby=cowo1_staridx_xby + lda nums,x + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby + inx + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- xby_neq_coby1_then_la1 + cpx #3 + bne b1 + //SEG18 main::@return + breturn: + //SEG19 [10] return [ ] + rts +} + +Removing instruction bbegin: +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +ASSEMBLER +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +//SEG2 [0] call main param-assignment [ ] + jsr main +//SEG3 @end +//SEG4 main +main: { + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1 + ldx #0 + jmp b1 + //SEG9 [3] phi from main::@1 to main::@1 + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby + lda str,x + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- aby=cowo1_staridx_xby + lda nums,x + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby + inx + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- xby_neq_coby1_then_la1 + cpx #3 + bne b1 + //SEG18 main::@return + //SEG19 [10] return [ ] + rts +} + +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +ASSEMBLER +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +//SEG2 [0] call main param-assignment [ ] + jsr main +//SEG3 @end +//SEG4 main +main: { + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1 + ldx #0 + //SEG9 [3] phi from main::@1 to main::@1 + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby + lda str,x + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- aby=cowo1_staridx_xby + lda nums,x + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby + inx + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- xby_neq_coby1_then_la1 + cpx #3 + bne b1 + //SEG18 main::@return + //SEG19 [10] return [ ] + rts +} + +FINAL SYMBOL TABLE +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (word) 1024 +(byte) char +(const byte) char#0 char = (byte) 'a' +(void()) main() +(byte~) main::$1 reg byte a 22.0 +(byte~) main::$3 reg byte a 22.0 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 13.2 +(byte) num +(const byte) num#0 num = (byte) 1 +(byte[]) nums +(const byte[]) nums#0 nums = { (byte) 2, (byte) 3, (byte) 4 } +(byte[]) str +(const byte[]) str#0 str = (string) "bcd" + +reg byte x [ main::i#2 main::i#1 ] +reg byte a [ main::$1 ] +reg byte a [ main::$3 ] + +FINAL CODE +//SEG0 Global Constants & labels + .const SCREEN = $400 + .const char = 'a' + .const num = 1 + str: .text "bcd" + nums: .byte 2, 3, 4 +//SEG1 @begin +//SEG2 [0] call main param-assignment [ ] + jsr main +//SEG3 @end +//SEG4 main +main: { + //SEG5 [1] *((const byte*) SCREEN#0+(byte) 0) ← (const byte) char#0 [ ] -- _star_cowo1=coby2 + lda #char + sta SCREEN+0 + //SEG6 [2] *((const byte*) SCREEN#0+(byte) 2) ← (const byte) num#0 [ ] -- _star_cowo1=coby2 + lda #num + sta SCREEN+2 + //SEG7 [3] phi from main to main::@1 + //SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1 + ldx #0 + //SEG9 [3] phi from main::@1 to main::@1 + //SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy + //SEG11 main::@1 + b1: + //SEG12 [4] (byte~) main::$1 ← (const byte[]) str#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby + lda str,x + //SEG13 [5] *((const byte*) SCREEN#0+(byte) 4 + (byte) main::i#2) ← (byte~) main::$1 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+4,x + //SEG14 [6] (byte~) main::$3 ← (const byte[]) nums#0 *idx (byte) main::i#2 [ main::i#2 main::$3 ] -- aby=cowo1_staridx_xby + lda nums,x + //SEG15 [7] *((const byte*) SCREEN#0+(byte) 8 + (byte) main::i#2) ← (byte~) main::$3 [ main::i#2 ] -- cowo1_staridx_xby=aby + sta SCREEN+8,x + //SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby + inx + //SEG17 [9] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 ] -- xby_neq_coby1_then_la1 + cpx #3 + bne b1 + //SEG18 main::@return + //SEG19 [10] return [ ] + rts +} + diff --git a/src/main/java/dk/camelot64/kickc/test/ref/literals.sym b/src/main/java/dk/camelot64/kickc/test/ref/literals.sym new file mode 100644 index 000000000..956c2175a --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/test/ref/literals.sym @@ -0,0 +1,24 @@ +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (word) 1024 +(byte) char +(const byte) char#0 char = (byte) 'a' +(void()) main() +(byte~) main::$1 reg byte a 22.0 +(byte~) main::$3 reg byte a 22.0 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 13.2 +(byte) num +(const byte) num#0 num = (byte) 1 +(byte[]) nums +(const byte[]) nums#0 nums = { (byte) 2, (byte) 3, (byte) 4 } +(byte[]) str +(const byte[]) str#0 str = (string) "bcd" + +reg byte x [ main::i#2 main::i#1 ] +reg byte a [ main::$1 ] +reg byte a [ main::$3 ] diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scroll.asm b/src/main/java/dk/camelot64/kickc/test/ref/scroll.asm index 53a53c7d9..e76bcec2b 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/scroll.asm +++ b/src/main/java/dk/camelot64/kickc/test/ref/scroll.asm @@ -2,8 +2,7 @@ .const RASTER = $d012 .const BGCOL = $d020 .const SCROLL = $d016 - TEXT: .text "this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. " - STOP: .byte 0 + TEXT: .text "-= this is rex of camelot testing a scroller created in kickc. kickc is an optimizing c-compiler for 6502 assembler. =- @" jsr main main: { .const line = SCREEN+$28 @@ -38,7 +37,7 @@ main: { bne b5 ldy #0 lda (nxt),y - cmp #0 + cmp #'@' bne b6 lda #=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] + [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@12 findcol::@12: scope:[findcol] from findcol::@2 - [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] + [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] to:findcol::@5 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 - [76] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] - [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] + [70] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] + [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] to:findcol::@14 findcol::@14: scope:[findcol] from findcol::@5 - [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] - [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] + [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] + [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 - [80] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] - [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] + [74] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] + [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] to:findcol::@16 findcol::@16: scope:[findcol] from findcol::@7 - [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] + [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] to:findcol::@8 findcol::@8: scope:[findcol] from findcol::@16 findcol::@21 - [83] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [83] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] + [77] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [77] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] + [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] to:findcol::@return findcol::@19: scope:[findcol] from findcol::@8 - [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] + [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] to:findcol::@1 findcol::@21: scope:[findcol] from findcol::@7 - [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] + [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 - [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] - [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] + [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] + [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] to:findcol::@7 findcol::@4: scope:[findcol] from findcol::@2 - [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] + [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] to:findcol::@5 -initscreen: scope:[initscreen] from main::@8 - [91] phi() [ ] +initscreen: scope:[initscreen] from main + [85] phi() [ ] to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 - [92] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ] - [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] - [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] - [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] + [86] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ] + [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] + [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] + [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] to:initscreen::@return initscreen::@return: scope:[initscreen] from initscreen::@1 - [96] return [ ] - to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - [97] (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [98] *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] - [99] *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 [ numpoints#19 addpoint::c#6 ] - [100] *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] - [101] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ numpoints#1 ] - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - [102] return [ numpoints#1 ] + [90] return [ ] to:@return diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log index de7b09dd8..ddd8bb6ea 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -5,22 +5,16 @@ byte *COLORS = $D800; byte FILL = 230; // The total number of voronoi points -byte numpoints = 0; +byte numpoints = 6; // Points to create the Voronoi from -byte[$100] XPOS = $1000; -byte[$100] YPOS = $1100; -byte[$100] COLS = $1200; +byte[] XPOS = {5, 15, 6, 34, 21 ,31}; +byte[] YPOS = {5, 8, 14, 2, 17, 22}; +byte[] COLS = {1, 2, 3, 4, 5, 7}; main(); void main() { - addpoint(5, 5, 1); - addpoint(15, 8, 2); - addpoint(6, 14, 3); - addpoint(34, 2, 4); - addpoint(21, 17, 5); - addpoint(31, 22, 7); initscreen(); do { render(); @@ -55,13 +49,6 @@ void animate() { } } -void addpoint(byte x, byte y, byte c) { - XPOS[numpoints] = x; - YPOS[numpoints] = y; - COLS[numpoints] = c; - numpoints++; -} - void initscreen() { for( byte* screen = SCREEN; screen= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 - (byte~) animate::$30 ← (byte[256]) XPOS *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$31 animate::@6: animate::@5: animate::@return: return endproc // animate() -proc (void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) - *((byte[256]) XPOS + (byte) numpoints) ← (byte) addpoint::x - *((byte[256]) YPOS + (byte) numpoints) ← (byte) addpoint::y - *((byte[256]) COLS + (byte) numpoints) ← (byte) addpoint::c - (byte) numpoints ← ++ (byte) numpoints -addpoint::@return: - return -endproc // addpoint() proc (void()) initscreen() (byte*) initscreen::screen ← (byte*) SCREEN initscreen::@1: @@ -242,9 +214,9 @@ proc (byte()) findcol((byte) findcol::x , (byte) findcol::y) (byte) findcol::mincol ← (byte) 0 (byte) findcol::i ← (byte) 0 findcol::@1: - (byte~) findcol::$0 ← (byte[256]) XPOS *idx (byte) findcol::i + (byte~) findcol::$0 ← (byte[]) XPOS *idx (byte) findcol::i (byte) findcol::xp ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS *idx (byte) findcol::i + (byte~) findcol::$1 ← (byte[]) YPOS *idx (byte) findcol::i (byte) findcol::yp ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x == (byte) findcol::xp (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -282,7 +254,7 @@ findcol::@7: (boolean~) findcol::$17 ← ! (boolean~) findcol::$16 if((boolean~) findcol::$17) goto findcol::@8 (byte) findcol::mindiff ← (byte) findcol::diff - (byte~) findcol::$18 ← (byte[256]) COLS *idx (byte) findcol::i + (byte~) findcol::$18 ← (byte[]) COLS *idx (byte) findcol::i (byte) findcol::mincol ← (byte~) findcol::$18 findcol::@8: (byte) findcol::i ← ++ (byte) findcol::i @@ -298,16 +270,11 @@ endproc // findcol() SYMBOLS (void~) $0 (byte*) COLORS -(byte[256]) COLS +(byte[]) COLS (byte) FILL (byte*) SCREEN -(byte[256]) XPOS -(byte[256]) YPOS -(void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) -(label) addpoint::@return -(byte) addpoint::c -(byte) addpoint::x -(byte) addpoint::y +(byte[]) XPOS +(byte[]) YPOS (void()) animate() (byte~) animate::$0 (byte~) animate::$1 @@ -397,12 +364,6 @@ SYMBOLS (void~) main::$0 (void~) main::$1 (void~) main::$2 -(void~) main::$3 -(void~) main::$4 -(void~) main::$5 -(void~) main::$6 -(void~) main::$7 -(void~) main::$8 (label) main::@1 (label) main::@return (byte) numpoints @@ -424,24 +385,18 @@ INITIAL CONTROL FLOW GRAPH (byte*) SCREEN ← (word) 1024 (byte*) COLORS ← (word) 55296 (byte) FILL ← (byte) 230 - (byte) numpoints ← (byte) 0 - (byte[256]) XPOS ← (word) 4096 - (byte[256]) YPOS ← (word) 4352 - (byte[256]) COLS ← (word) 4608 + (byte) numpoints ← (byte) 6 + (byte[]) XPOS ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } (void~) $0 ← call main to:@1 main: scope:[main] from - (void~) main::$0 ← call addpoint (byte) 5 (byte) 5 (byte) 1 - (void~) main::$1 ← call addpoint (byte) 15 (byte) 8 (byte) 2 - (void~) main::$2 ← call addpoint (byte) 6 (byte) 14 (byte) 3 - (void~) main::$3 ← call addpoint (byte) 34 (byte) 2 (byte) 4 - (void~) main::$4 ← call addpoint (byte) 21 (byte) 17 (byte) 5 - (void~) main::$5 ← call addpoint (byte) 31 (byte) 22 (byte) 7 - (void~) main::$6 ← call initscreen + (void~) main::$0 ← call initscreen to:main::@1 main::@1: scope:[main] from main main::@1 - (void~) main::$7 ← call render - (void~) main::$8 ← call animate + (void~) main::$1 ← call render + (void~) main::$2 ← call animate if(true) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 @@ -452,70 +407,70 @@ main::@return: scope:[main] from main::@2 @1: scope:[] from @begin to:@2 animate: scope:[animate] from - (byte~) animate::$0 ← (byte[256]) XPOS *idx (byte) 0 + (byte~) animate::$0 ← (byte[]) XPOS *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS *idx (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS *idx (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS + (byte) 0) ← (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS *idx (byte) 1 + *((byte[]) XPOS + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS + (byte) 0) ← (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS *idx (byte) 2 + *((byte[]) YPOS + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS + (byte) 1) ← (byte) 40 + *((byte[]) XPOS + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@5 to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS + (byte) 2) ← (byte) 0 + *((byte[]) YPOS + (byte) 2) ← (byte) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 animate::@6 to:animate::@return animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 @@ -523,26 +478,15 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 animate::@12 to:animate::@5 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$31 to:animate::@6 animate::@return: scope:[animate] from animate::@5 return to:@return @2: scope:[] from @1 to:@3 -addpoint: scope:[addpoint] from - *((byte[256]) XPOS + (byte) numpoints) ← (byte) addpoint::x - *((byte[256]) YPOS + (byte) numpoints) ← (byte) addpoint::y - *((byte[256]) COLS + (byte) numpoints) ← (byte) addpoint::c - (byte) numpoints ← ++ (byte) numpoints - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -@3: scope:[] from @2 - to:@4 initscreen: scope:[initscreen] from (byte*) initscreen::screen ← (byte*) SCREEN to:initscreen::@1 @@ -558,8 +502,8 @@ initscreen::@2: scope:[initscreen] from initscreen::@1 initscreen::@return: scope:[initscreen] from initscreen::@2 return to:@return -@4: scope:[] from @3 - to:@5 +@3: scope:[] from @2 + to:@4 render: scope:[render] from (byte*) render::colline ← (byte*) COLORS (byte) render::y ← (byte) 0 @@ -587,17 +531,17 @@ render::@4: scope:[render] from render::@3 render::@return: scope:[render] from render::@4 return to:@return -@5: scope:[] from @4 - to:@6 +@4: scope:[] from @3 + to:@5 findcol: scope:[findcol] from (byte) findcol::mindiff ← (byte) 255 (byte) findcol::mincol ← (byte) 0 (byte) findcol::i ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 - (byte~) findcol::$0 ← (byte[256]) XPOS *idx (byte) findcol::i + (byte~) findcol::$0 ← (byte[]) XPOS *idx (byte) findcol::i (byte) findcol::xp ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS *idx (byte) findcol::i + (byte~) findcol::$1 ← (byte[]) YPOS *idx (byte) findcol::i (byte) findcol::yp ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x == (byte) findcol::xp (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -663,7 +607,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::mindiff ← (byte) findcol::diff - (byte~) findcol::$18 ← (byte[256]) COLS *idx (byte) findcol::i + (byte~) findcol::$18 ← (byte[]) COLS *idx (byte) findcol::i (byte) findcol::mincol ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 @@ -671,116 +615,109 @@ findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return findcol::@18: scope:[findcol] from to:findcol::@return -@6: scope:[] from @5 +@5: scope:[] from @4 to:@end -@end: scope:[] from @6 +@end: scope:[] from @5 Removing empty block main::@2 Removing empty block @1 Removing empty block @2 -Removing empty block @3 Removing empty block initscreen::@2 -Removing empty block @4 +Removing empty block @3 Removing empty block render::@4 -Removing empty block @5 +Removing empty block @4 Removing empty block findcol::@11 Removing empty block findcol::@13 Removing empty block findcol::@15 Removing empty block findcol::@18 -Removing empty block @6 +Removing empty block @5 CONTROL FLOW GRAPH @begin: scope:[] from (byte*) SCREEN ← (word) 1024 (byte*) COLORS ← (word) 55296 (byte) FILL ← (byte) 230 - (byte) numpoints ← (byte) 0 - (byte[256]) XPOS ← (word) 4096 - (byte[256]) YPOS ← (word) 4352 - (byte[256]) COLS ← (word) 4608 + (byte) numpoints ← (byte) 6 + (byte[]) XPOS ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } (void~) $0 ← call main to:@end main: scope:[main] from - (void~) main::$0 ← call addpoint (byte) 5 (byte) 5 (byte) 1 - (void~) main::$1 ← call addpoint (byte) 15 (byte) 8 (byte) 2 - (void~) main::$2 ← call addpoint (byte) 6 (byte) 14 (byte) 3 - (void~) main::$3 ← call addpoint (byte) 34 (byte) 2 (byte) 4 - (void~) main::$4 ← call addpoint (byte) 21 (byte) 17 (byte) 5 - (void~) main::$5 ← call addpoint (byte) 31 (byte) 22 (byte) 7 - (void~) main::$6 ← call initscreen + (void~) main::$0 ← call initscreen to:main::@1 main::@1: scope:[main] from main main::@1 - (void~) main::$7 ← call render - (void~) main::$8 ← call animate + (void~) main::$1 ← call render + (void~) main::$2 ← call animate if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@1 return to:@return animate: scope:[animate] from - (byte~) animate::$0 ← (byte[256]) XPOS *idx (byte) 0 + (byte~) animate::$0 ← (byte[]) XPOS *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS *idx (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS *idx (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS + (byte) 0) ← (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS *idx (byte) 1 + *((byte[]) XPOS + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS + (byte) 0) ← (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS *idx (byte) 2 + *((byte[]) YPOS + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS + (byte) 1) ← (byte) 40 + *((byte[]) XPOS + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@5 to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS + (byte) 2) ← (byte) 0 + *((byte[]) YPOS + (byte) 2) ← (byte) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 @@ -788,22 +725,13 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 to:animate::@return animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return to:@return -addpoint: scope:[addpoint] from - *((byte[256]) XPOS + (byte) numpoints) ← (byte) addpoint::x - *((byte[256]) YPOS + (byte) numpoints) ← (byte) addpoint::y - *((byte[256]) COLS + (byte) numpoints) ← (byte) addpoint::c - (byte) numpoints ← ++ (byte) numpoints - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return initscreen: scope:[initscreen] from (byte*) initscreen::screen ← (byte*) SCREEN to:initscreen::@1 @@ -848,9 +776,9 @@ findcol: scope:[findcol] from (byte) findcol::i ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 - (byte~) findcol::$0 ← (byte[256]) XPOS *idx (byte) findcol::i + (byte~) findcol::$0 ← (byte[]) XPOS *idx (byte) findcol::i (byte) findcol::xp ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS *idx (byte) findcol::i + (byte~) findcol::$1 ← (byte[]) YPOS *idx (byte) findcol::i (byte) findcol::yp ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x == (byte) findcol::xp (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -910,7 +838,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::mindiff ← (byte) findcol::diff - (byte~) findcol::$18 ← (byte[256]) COLS *idx (byte) findcol::i + (byte~) findcol::$18 ← (byte[]) COLS *idx (byte) findcol::i (byte) findcol::mincol ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 @@ -919,148 +847,102 @@ findcol::@17: scope:[findcol] from findcol::@8 @end: scope:[] from @begin PROCEDURE MODIFY VARIABLE ANALYSIS -main modifies numpoints -addpoint modifies numpoints CONTROL FLOW GRAPH WITH ASSIGNMENT CALL @begin: scope:[] from (byte*) SCREEN ← (word) 1024 (byte*) COLORS ← (word) 55296 (byte) FILL ← (byte) 230 - (byte) numpoints ← (byte) 0 - (byte[256]) XPOS ← (word) 4096 - (byte[256]) YPOS ← (word) 4352 - (byte[256]) COLS ← (word) 4608 + (byte) numpoints ← (byte) 6 + (byte[]) XPOS ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin - (byte) numpoints ← (byte) numpoints + to:@6 +@6: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte) addpoint::x ← (byte) 5 - (byte) addpoint::y ← (byte) 5 - (byte) addpoint::c ← (byte) 1 - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte) numpoints ← (byte) numpoints - (byte) addpoint::x ← (byte) 15 - (byte) addpoint::y ← (byte) 8 - (byte) addpoint::c ← (byte) 2 - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte) numpoints ← (byte) numpoints - (byte) addpoint::x ← (byte) 6 - (byte) addpoint::y ← (byte) 14 - (byte) addpoint::c ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte) numpoints ← (byte) numpoints - (byte) addpoint::x ← (byte) 34 - (byte) addpoint::y ← (byte) 2 - (byte) addpoint::c ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte) numpoints ← (byte) numpoints - (byte) addpoint::x ← (byte) 21 - (byte) addpoint::y ← (byte) 17 - (byte) addpoint::c ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte) numpoints ← (byte) numpoints - (byte) addpoint::x ← (byte) 31 - (byte) addpoint::y ← (byte) 22 - (byte) addpoint::c ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - (byte) numpoints ← (byte) numpoints - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 - (byte) numpoints ← (byte) numpoints +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS *idx (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS *idx (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS + (byte) 0) ← (byte) 0 + *((byte[]) XPOS + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS *idx (byte) 1 + *((byte[]) XPOS + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS + (byte) 0) ← (byte) 0 + *((byte[]) YPOS + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS *idx (byte) 2 + *((byte[]) YPOS + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS + (byte) 1) ← (byte) 40 + *((byte[]) XPOS + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@5 to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS + (byte) 2) ← (byte) 0 + *((byte[]) YPOS + (byte) 2) ← (byte) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) YPOS + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS *idx (byte) 3 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 @@ -1068,24 +950,14 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 to:animate::@return animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - *((byte[256]) XPOS + (byte) numpoints) ← (byte) addpoint::x - *((byte[256]) YPOS + (byte) numpoints) ← (byte) addpoint::y - *((byte[256]) COLS + (byte) numpoints) ← (byte) addpoint::c - (byte) numpoints ← ++ (byte) numpoints - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - (byte) numpoints ← (byte) numpoints - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen ← (byte*) SCREEN to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -1134,9 +1006,9 @@ findcol: scope:[findcol] from render::@2 (byte) findcol::i ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 - (byte~) findcol::$0 ← (byte[256]) XPOS *idx (byte) findcol::i + (byte~) findcol::$0 ← (byte[]) XPOS *idx (byte) findcol::i (byte) findcol::xp ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS *idx (byte) findcol::i + (byte~) findcol::$1 ← (byte[]) YPOS *idx (byte) findcol::i (byte) findcol::yp ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x == (byte) findcol::xp (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -1196,13 +1068,13 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::mindiff ← (byte) findcol::diff - (byte~) findcol::$18 ← (byte[256]) COLS *idx (byte) findcol::i + (byte~) findcol::$18 ← (byte[]) COLS *idx (byte) findcol::i (byte) findcol::mincol ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 (byte) findcol::return ← (byte) findcol::mincol to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @6 Completing Phi functions... Completing Phi functions... @@ -1223,231 +1095,143 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin - (byte) numpoints#11 ← phi( @begin/(byte) numpoints#0 ) - (byte) numpoints#1 ← (byte) numpoints#11 + to:@6 +@6: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte*) COLORS#12 ← phi( @begin/(byte*) COLORS#0 ) - (byte) FILL#9 ← phi( @begin/(byte) FILL#0 ) - (byte*) SCREEN#9 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[256]) COLS#3 ← phi( @begin/(byte[256]) COLS#0 ) - (byte[256]) YPOS#13 ← phi( @begin/(byte[256]) YPOS#0 ) - (byte[256]) XPOS#13 ← phi( @begin/(byte[256]) XPOS#0 ) + (byte[]) COLS#22 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#22 ← phi( @begin/(byte) numpoints#0 ) - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + (byte[]) YPOS#28 ← phi( @begin/(byte[]) YPOS#0 ) + (byte[]) XPOS#26 ← phi( @begin/(byte[]) XPOS#0 ) + (byte*) COLORS#5 ← phi( @begin/(byte*) COLORS#0 ) + (byte) FILL#3 ← phi( @begin/(byte) FILL#0 ) + (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte*) COLORS#11 ← phi( main/(byte*) COLORS#12 ) - (byte) FILL#8 ← phi( main/(byte) FILL#9 ) - (byte*) SCREEN#8 ← phi( main/(byte*) SCREEN#9 ) - (byte[256]) COLS#4 ← phi( main/(byte[256]) COLS#3 ) - (byte[256]) YPOS#14 ← phi( main/(byte[256]) YPOS#13 ) - (byte[256]) XPOS#14 ← phi( main/(byte[256]) XPOS#13 ) - (byte) numpoints#12 ← phi( main/(byte) numpoints#22 ) - (byte) numpoints#2 ← (byte) numpoints#12 - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + (byte[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) + (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) + (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) + (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) + (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) + (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) + (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) + (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#21 ) + (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#4 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) COLORS#10 ← phi( main::@3/(byte*) COLORS#11 ) - (byte) FILL#7 ← phi( main::@3/(byte) FILL#8 ) - (byte*) SCREEN#7 ← phi( main::@3/(byte*) SCREEN#8 ) - (byte[256]) COLS#5 ← phi( main::@3/(byte[256]) COLS#4 ) - (byte[256]) YPOS#15 ← phi( main::@3/(byte[256]) YPOS#14 ) - (byte[256]) XPOS#15 ← phi( main::@3/(byte[256]) XPOS#14 ) - (byte) numpoints#13 ← phi( main::@3/(byte) numpoints#2 ) - (byte) numpoints#3 ← (byte) numpoints#13 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + (byte[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) + (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) + (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte*) COLORS#9 ← phi( main::@4/(byte*) COLORS#10 ) - (byte) FILL#6 ← phi( main::@4/(byte) FILL#7 ) - (byte*) SCREEN#6 ← phi( main::@4/(byte*) SCREEN#7 ) - (byte[256]) COLS#6 ← phi( main::@4/(byte[256]) COLS#5 ) - (byte[256]) YPOS#16 ← phi( main::@4/(byte[256]) YPOS#15 ) - (byte[256]) XPOS#16 ← phi( main::@4/(byte[256]) XPOS#15 ) - (byte) numpoints#14 ← phi( main::@4/(byte) numpoints#3 ) - (byte) numpoints#4 ← (byte) numpoints#14 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte*) COLORS#8 ← phi( main::@5/(byte*) COLORS#9 ) - (byte) FILL#5 ← phi( main::@5/(byte) FILL#6 ) - (byte*) SCREEN#5 ← phi( main::@5/(byte*) SCREEN#6 ) - (byte[256]) COLS#7 ← phi( main::@5/(byte[256]) COLS#6 ) - (byte[256]) YPOS#17 ← phi( main::@5/(byte[256]) YPOS#16 ) - (byte[256]) XPOS#17 ← phi( main::@5/(byte[256]) XPOS#16 ) - (byte) numpoints#15 ← phi( main::@5/(byte) numpoints#4 ) - (byte) numpoints#5 ← (byte) numpoints#15 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte*) COLORS#7 ← phi( main::@6/(byte*) COLORS#8 ) - (byte) FILL#4 ← phi( main::@6/(byte) FILL#5 ) - (byte*) SCREEN#4 ← phi( main::@6/(byte*) SCREEN#5 ) - (byte[256]) COLS#8 ← phi( main::@6/(byte[256]) COLS#7 ) - (byte[256]) YPOS#18 ← phi( main::@6/(byte[256]) YPOS#17 ) - (byte[256]) XPOS#18 ← phi( main::@6/(byte[256]) XPOS#17 ) - (byte) numpoints#16 ← phi( main::@6/(byte) numpoints#5 ) - (byte) numpoints#6 ← (byte) numpoints#16 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - (byte[256]) COLS#29 ← phi( main::@7/(byte[256]) COLS#8 ) - (byte[256]) YPOS#35 ← phi( main::@7/(byte[256]) YPOS#18 ) - (byte[256]) XPOS#33 ← phi( main::@7/(byte[256]) XPOS#18 ) - (byte*) COLORS#5 ← phi( main::@7/(byte*) COLORS#7 ) - (byte) FILL#3 ← phi( main::@7/(byte) FILL#4 ) - (byte*) SCREEN#3 ← phi( main::@7/(byte*) SCREEN#4 ) - (byte) numpoints#17 ← phi( main::@7/(byte) numpoints#6 ) - (byte) numpoints#7 ← (byte) numpoints#17 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - (byte[256]) COLS#28 ← phi( main::@8/(byte[256]) COLS#29 ) - (byte[256]) YPOS#31 ← phi( main::@8/(byte[256]) YPOS#35 ) - (byte) numpoints#31 ← phi( main::@8/(byte) numpoints#7 ) - (byte[256]) XPOS#28 ← phi( main::@8/(byte[256]) XPOS#33 ) - (byte*) COLORS#4 ← phi( main::@8/(byte*) COLORS#5 ) - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#26 ← phi( main::@11/(byte[256]) COLS#27 main::@9/(byte[256]) COLS#28 ) - (byte[256]) YPOS#25 ← phi( main::@11/(byte[256]) YPOS#30 main::@9/(byte[256]) YPOS#31 ) - (byte) numpoints#29 ← phi( main::@11/(byte) numpoints#23 main::@9/(byte) numpoints#31 ) - (byte[256]) XPOS#21 ← phi( main::@11/(byte[256]) XPOS#27 main::@9/(byte[256]) XPOS#28 ) - (byte*) COLORS#2 ← phi( main::@11/(byte*) COLORS#3 main::@9/(byte*) COLORS#4 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - (byte[256]) COLS#30 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[256]) YPOS#21 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte) numpoints#26 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) XPOS#9 ← phi( main::@1/(byte[256]) XPOS#21 ) - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - (byte[256]) COLS#27 ← phi( main::@10/(byte[256]) COLS#30 ) - (byte[256]) YPOS#30 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#27 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte*) COLORS#3 ← phi( main::@10/(byte*) COLORS#6 ) - (byte) numpoints#23 ← phi( main::@10/(byte) numpoints#26 ) + (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) + (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) + (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 - (byte) numpoints#18 ← phi( main::@11/(byte) numpoints#23 ) - (byte) numpoints#8 ← (byte) numpoints#18 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte[256]) YPOS#9 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#1 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[256]) XPOS#10 ← phi( animate/(byte[256]) XPOS#1 animate::@7/(byte[256]) XPOS#2 ) - (byte[256]) YPOS#1 ← phi( animate/(byte[256]) YPOS#9 animate::@7/(byte[256]) YPOS#10 ) - (byte~) animate::$5 ← (byte[256]) YPOS#1 *idx (byte) 0 + (byte[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) + (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) + (byte~) animate::$5 ← (byte[]) YPOS#1 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#1 *idx (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#1 *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[256]) YPOS#10 ← phi( animate/(byte[256]) YPOS#9 ) - (byte[256]) XPOS#2 ← phi( animate/(byte[256]) XPOS#1 ) - *((byte[256]) XPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) + (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) + *((byte[]) XPOS#2 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[256]) YPOS#11 ← phi( animate::@1/(byte[256]) YPOS#1 animate::@8/(byte[256]) YPOS#2 ) - (byte[256]) XPOS#3 ← phi( animate::@1/(byte[256]) XPOS#10 animate::@8/(byte[256]) XPOS#11 ) - (byte~) animate::$10 ← (byte[256]) XPOS#3 *idx (byte) 1 + (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) + (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) + (byte~) animate::$10 ← (byte[]) XPOS#3 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#3 *idx (byte) 1 + *((byte[]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#3 *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - (byte[256]) XPOS#11 ← phi( animate::@1/(byte[256]) XPOS#10 ) - (byte[256]) YPOS#2 ← phi( animate::@1/(byte[256]) YPOS#1 ) - *((byte[256]) YPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) + (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) + *((byte[]) YPOS#2 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[256]) XPOS#23 ← phi( animate::@2/(byte[256]) XPOS#3 animate::@9/(byte[256]) XPOS#4 ) - (byte[256]) YPOS#3 ← phi( animate::@2/(byte[256]) YPOS#11 animate::@9/(byte[256]) YPOS#12 ) - (byte~) animate::$15 ← (byte[256]) YPOS#3 *idx (byte) 2 + (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) + (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) + (byte~) animate::$15 ← (byte[]) YPOS#3 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#3 *idx (byte) 2 + *((byte[]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#3 *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - (byte[256]) YPOS#12 ← phi( animate::@2/(byte[256]) YPOS#11 ) - (byte[256]) XPOS#4 ← phi( animate::@2/(byte[256]) XPOS#3 ) - *((byte[256]) XPOS#4 + (byte) 1) ← (byte) 40 + (byte[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) + (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) + *((byte[]) XPOS#4 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[256]) XPOS#12 ← phi( animate::@10/(byte[256]) XPOS#22 animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#4 ← phi( animate::@10/(byte[256]) YPOS#5 animate::@3/(byte[256]) YPOS#3 ) - (byte~) animate::$20 ← (byte[256]) YPOS#4 *idx (byte) 3 + (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) + (byte~) animate::$20 ← (byte[]) YPOS#4 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#4 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#4 *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@5 to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[256]) XPOS#22 ← phi( animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#5 ← phi( animate::@3/(byte[256]) YPOS#3 ) - *((byte[256]) YPOS#5 + (byte) 2) ← (byte) 0 + (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) + *((byte[]) YPOS#5 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - (byte[256]) XPOS#5 ← phi( animate::@4/(byte[256]) XPOS#12 ) - (byte[256]) YPOS#6 ← phi( animate::@4/(byte[256]) YPOS#4 ) - *((byte[256]) YPOS#6 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#5 *idx (byte) 3 + (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) + (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) + *((byte[]) YPOS#6 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#5 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#5 *idx (byte) 3 + *((byte[]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#5 *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 @@ -1455,35 +1239,17 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 to:animate::@return animate::@12: scope:[animate] from animate::@11 - (byte[256]) XPOS#6 ← phi( animate::@11/(byte[256]) XPOS#5 ) - (byte~) animate::$30 ← (byte[256]) XPOS#6 *idx (byte) 3 + (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) + (byte~) animate::$30 ← (byte[]) XPOS#6 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte[256]) COLS#1 ← phi( main/(byte[256]) COLS#3 main::@3/(byte[256]) COLS#4 main::@4/(byte[256]) COLS#5 main::@5/(byte[256]) COLS#6 main::@6/(byte[256]) COLS#7 main::@7/(byte[256]) COLS#8 ) - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte[256]) YPOS#7 ← phi( main/(byte[256]) YPOS#13 main::@3/(byte[256]) YPOS#14 main::@4/(byte[256]) YPOS#15 main::@5/(byte[256]) YPOS#16 main::@6/(byte[256]) YPOS#17 main::@7/(byte[256]) YPOS#18 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#22 main::@3/(byte) numpoints#2 main::@4/(byte) numpoints#3 main::@5/(byte) numpoints#4 main::@6/(byte) numpoints#5 main::@7/(byte) numpoints#6 ) - (byte[256]) XPOS#7 ← phi( main/(byte[256]) XPOS#13 main::@3/(byte[256]) XPOS#14 main::@4/(byte[256]) XPOS#15 main::@5/(byte[256]) XPOS#16 main::@6/(byte[256]) XPOS#17 main::@7/(byte[256]) XPOS#18 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#7 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#7 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#1 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#9 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - (byte) numpoints#20 ← phi( addpoint/(byte) numpoints#9 ) - (byte) numpoints#10 ← (byte) numpoints#20 - return - to:@return -initscreen: scope:[initscreen] from main::@8 - (byte) FILL#2 ← phi( main::@8/(byte) FILL#3 ) - (byte*) SCREEN#1 ← phi( main::@8/(byte*) SCREEN#3 ) +initscreen: scope:[initscreen] from main + (byte) FILL#2 ← phi( main/(byte) FILL#3 ) + (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#3 ) (byte*) initscreen::screen#0 ← (byte*) SCREEN#1 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -1500,28 +1266,28 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[256]) COLS#24 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte) numpoints#42 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) YPOS#32 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte[256]) XPOS#34 ← phi( main::@1/(byte[256]) XPOS#21 ) + (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) + (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (byte*) COLORS#1 ← phi( main::@1/(byte*) COLORS#2 ) (byte*) render::colline#0 ← (byte*) COLORS#1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#25 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#42 render::@3/(byte) numpoints#43 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#32 render::@3/(byte[256]) YPOS#33 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#34 render::@3/(byte[256]) XPOS#35 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#21 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#39 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#22 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#24 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) + (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#5 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -1530,10 +1296,10 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← call findcol param-assignment to:render::@5 render::@5: scope:[render] from render::@2 - (byte[256]) COLS#23 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#41 ← phi( render::@2/(byte) numpoints#39 ) - (byte[256]) YPOS#27 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#30 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) + (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) render::y#5 ← phi( render::@2/(byte) render::y#2 ) (byte) render::x#3 ← phi( render::@2/(byte) render::x#2 ) (byte*) render::colline#2 ← phi( render::@2/(byte*) render::colline#4 ) @@ -1546,10 +1312,10 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[256]) COLS#25 ← phi( render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#43 ← phi( render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#33 ← phi( render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#35 ← phi( render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) + (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (byte) render::y#3 ← phi( render::@5/(byte) render::y#5 ) (byte*) render::colline#3 ← phi( render::@5/(byte*) render::colline#2 ) (byte*~) render::$2 ← (byte*) render::colline#3 + (byte) 40 @@ -1562,29 +1328,29 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[256]) COLS#18 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#37 ← phi( render::@2/(byte) numpoints#39 ) + (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#12 ← phi( render::@2/(byte) numpoints#14 ) (byte) findcol::y#8 ← phi( render::@2/(byte) findcol::y#0 ) (byte) findcol::x#5 ← phi( render::@2/(byte) findcol::x#0 ) - (byte[256]) YPOS#19 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#19 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte) 255 (byte) findcol::mincol#0 ← (byte) 0 (byte) findcol::i#0 ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#3 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#19 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#21 ) + (byte[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#9 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#5 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#9 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#6 ) - (byte[256]) YPOS#8 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#20 ) + (byte[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#8 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#20 ) - (byte~) findcol::$0 ← (byte[256]) XPOS#8 *idx (byte) findcol::i#2 + (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) + (byte~) findcol::$0 ← (byte[]) XPOS#7 *idx (byte) findcol::i#2 (byte) findcol::xp#0 ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS#8 *idx (byte) findcol::i#2 + (byte~) findcol::$1 ← (byte[]) YPOS#7 *idx (byte) findcol::i#2 (byte) findcol::yp#0 ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x#1 == (byte) findcol::xp#0 (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -1592,10 +1358,10 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#12 ) - (byte[256]) YPOS#38 ← phi( findcol::@1/(byte[256]) YPOS#8 findcol::@3/(byte[256]) YPOS#39 ) - (byte[256]) XPOS#39 ← phi( findcol::@1/(byte[256]) XPOS#8 findcol::@3/(byte[256]) XPOS#40 ) - (byte[256]) COLS#15 ← phi( findcol::@1/(byte[256]) COLS#16 findcol::@3/(byte[256]) COLS#17 ) - (byte) numpoints#34 ← phi( findcol::@1/(byte) numpoints#35 findcol::@3/(byte) numpoints#36 ) + (byte[]) YPOS#31 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#32 ) + (byte[]) XPOS#32 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#33 ) + (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) + (byte) numpoints#9 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#11 ) (byte) findcol::i#11 ← phi( findcol::@1/(byte) findcol::i#2 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#8 ← phi( findcol::@1/(byte) findcol::mindiff#9 findcol::@3/(byte) findcol::mindiff#10 ) (byte) findcol::yp#7 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#8 ) @@ -1608,10 +1374,10 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[256]) YPOS#40 ← phi( findcol::@1/(byte[256]) YPOS#8 ) - (byte[256]) XPOS#41 ← phi( findcol::@1/(byte[256]) XPOS#8 ) - (byte[256]) COLS#20 ← phi( findcol::@1/(byte[256]) COLS#16 ) - (byte) numpoints#38 ← phi( findcol::@1/(byte) numpoints#35 ) + (byte[]) YPOS#33 ← phi( findcol::@1/(byte[]) YPOS#7 ) + (byte[]) XPOS#34 ← phi( findcol::@1/(byte[]) XPOS#7 ) + (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) + (byte) numpoints#13 ← phi( findcol::@1/(byte) numpoints#10 ) (byte) findcol::i#13 ← phi( findcol::@1/(byte) findcol::i#2 ) (byte) findcol::mindiff#12 ← phi( findcol::@1/(byte) findcol::mindiff#9 ) (byte) findcol::xp#5 ← phi( findcol::@1/(byte) findcol::xp#0 ) @@ -1624,10 +1390,10 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[256]) YPOS#39 ← phi( findcol::@9/(byte[256]) YPOS#40 ) - (byte[256]) XPOS#40 ← phi( findcol::@9/(byte[256]) XPOS#41 ) - (byte[256]) COLS#17 ← phi( findcol::@9/(byte[256]) COLS#20 ) - (byte) numpoints#36 ← phi( findcol::@9/(byte) numpoints#38 ) + (byte[]) YPOS#32 ← phi( findcol::@9/(byte[]) YPOS#33 ) + (byte[]) XPOS#33 ← phi( findcol::@9/(byte[]) XPOS#34 ) + (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#13 ) + (byte) numpoints#11 ← phi( findcol::@9/(byte) numpoints#13 ) (byte) findcol::i#12 ← phi( findcol::@9/(byte) findcol::i#13 ) (byte) findcol::mindiff#10 ← phi( findcol::@9/(byte) findcol::mindiff#12 ) (byte) findcol::yp#8 ← phi( findcol::@9/(byte) findcol::yp#1 ) @@ -1645,10 +1411,10 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#37 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#38 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#14 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#33 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#8 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#10 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#7 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#6 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -1660,10 +1426,10 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#36 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#37 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#13 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#32 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#30 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#7 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#9 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#6 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#5 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -1676,10 +1442,10 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 ) (byte) findcol::x#13 ← phi( findcol::@12/(byte) findcol::x#4 findcol::@4/(byte) findcol::x#3 ) - (byte[256]) YPOS#34 ← phi( findcol::@12/(byte[256]) YPOS#36 findcol::@4/(byte[256]) YPOS#37 ) - (byte[256]) XPOS#36 ← phi( findcol::@12/(byte[256]) XPOS#37 findcol::@4/(byte[256]) XPOS#38 ) - (byte[256]) COLS#12 ← phi( findcol::@12/(byte[256]) COLS#13 findcol::@4/(byte[256]) COLS#14 ) - (byte) numpoints#30 ← phi( findcol::@12/(byte) numpoints#32 findcol::@4/(byte) numpoints#33 ) + (byte[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) + (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#30 findcol::@4/(byte[]) XPOS#31 ) + (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) + (byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 ) (byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 ) (byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) @@ -1692,10 +1458,10 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 findcol::@6: scope:[findcol] from findcol::@5 (byte) findcol::mincol#6 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#12 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#29 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#32 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#11 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#28 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -1708,10 +1474,10 @@ findcol::@6: scope:[findcol] from findcol::@5 findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#11 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#28 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#31 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#10 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#27 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -1725,10 +1491,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#6 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#12 ) - (byte[256]) YPOS#24 ← phi( findcol::@14/(byte[256]) YPOS#28 findcol::@6/(byte[256]) YPOS#29 ) - (byte[256]) XPOS#26 ← phi( findcol::@14/(byte[256]) XPOS#31 findcol::@6/(byte[256]) XPOS#32 ) - (byte[256]) COLS#9 ← phi( findcol::@14/(byte[256]) COLS#10 findcol::@6/(byte[256]) COLS#11 ) - (byte) numpoints#25 ← phi( findcol::@14/(byte) numpoints#27 findcol::@6/(byte) numpoints#28 ) + (byte[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) + (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) + (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) + (byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 ) (byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 ) (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) @@ -1737,268 +1503,180 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$17) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[256]) COLS#19 ← phi( findcol::@16/(byte[256]) COLS#2 findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::mindiff#1 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#13 ) (byte) findcol::mincol#3 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#9 findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#20 ← phi( findcol::@16/(byte[256]) YPOS#23 findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#20 ← phi( findcol::@16/(byte[256]) XPOS#25 findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#21 ← phi( findcol::@16/(byte) numpoints#24 findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#5 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#21 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#1 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::y#12 ← phi( findcol::@7/(byte) findcol::y#13 ) (byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#23 ← phi( findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#25 ← phi( findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#24 ← phi( findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[256]) COLS#2 ← phi( findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 ) (byte) findcol::mindiff#1 ← (byte) findcol::diff#7 - (byte~) findcol::$18 ← (byte[256]) COLS#2 *idx (byte) findcol::i#4 + (byte~) findcol::$18 ← (byte[]) COLS#1 *idx (byte) findcol::i#4 (byte) findcol::mincol#1 ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 (byte) findcol::mincol#2 ← phi( findcol::@8/(byte) findcol::mincol#3 ) (byte) findcol::return#3 ← (byte) findcol::mincol#2 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @6 CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin - (byte) numpoints#11 ← phi( @begin/(byte) numpoints#8 ) - (byte) numpoints#1 ← (byte) numpoints#11 + to:@6 +@6: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte*) COLORS#12 ← phi( @begin/(byte*) COLORS#0 ) - (byte) FILL#9 ← phi( @begin/(byte) FILL#0 ) - (byte*) SCREEN#9 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[256]) COLS#3 ← phi( @begin/(byte[256]) COLS#0 ) - (byte[256]) YPOS#13 ← phi( @begin/(byte[256]) YPOS#0 ) - (byte[256]) XPOS#13 ← phi( @begin/(byte[256]) XPOS#0 ) + (byte[]) COLS#22 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#22 ← phi( @begin/(byte) numpoints#0 ) - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + (byte[]) YPOS#28 ← phi( @begin/(byte[]) YPOS#0 ) + (byte[]) XPOS#26 ← phi( @begin/(byte[]) XPOS#0 ) + (byte*) COLORS#5 ← phi( @begin/(byte*) COLORS#0 ) + (byte) FILL#3 ← phi( @begin/(byte) FILL#0 ) + (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte*) COLORS#11 ← phi( main/(byte*) COLORS#12 ) - (byte) FILL#8 ← phi( main/(byte) FILL#9 ) - (byte*) SCREEN#8 ← phi( main/(byte*) SCREEN#9 ) - (byte[256]) COLS#4 ← phi( main/(byte[256]) COLS#3 ) - (byte[256]) YPOS#14 ← phi( main/(byte[256]) YPOS#13 ) - (byte[256]) XPOS#14 ← phi( main/(byte[256]) XPOS#13 ) - (byte) numpoints#12 ← phi( main/(byte) numpoints#10 ) - (byte) numpoints#2 ← (byte) numpoints#12 - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + (byte[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) + (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) + (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) + (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) + (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) + (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) + (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) + (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#21 ) + (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#4 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) COLORS#10 ← phi( main::@3/(byte*) COLORS#11 ) - (byte) FILL#7 ← phi( main::@3/(byte) FILL#8 ) - (byte*) SCREEN#7 ← phi( main::@3/(byte*) SCREEN#8 ) - (byte[256]) COLS#5 ← phi( main::@3/(byte[256]) COLS#4 ) - (byte[256]) YPOS#15 ← phi( main::@3/(byte[256]) YPOS#14 ) - (byte[256]) XPOS#15 ← phi( main::@3/(byte[256]) XPOS#14 ) - (byte) numpoints#13 ← phi( main::@3/(byte) numpoints#10 ) - (byte) numpoints#3 ← (byte) numpoints#13 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + (byte[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) + (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) + (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte*) COLORS#9 ← phi( main::@4/(byte*) COLORS#10 ) - (byte) FILL#6 ← phi( main::@4/(byte) FILL#7 ) - (byte*) SCREEN#6 ← phi( main::@4/(byte*) SCREEN#7 ) - (byte[256]) COLS#6 ← phi( main::@4/(byte[256]) COLS#5 ) - (byte[256]) YPOS#16 ← phi( main::@4/(byte[256]) YPOS#15 ) - (byte[256]) XPOS#16 ← phi( main::@4/(byte[256]) XPOS#15 ) - (byte) numpoints#14 ← phi( main::@4/(byte) numpoints#10 ) - (byte) numpoints#4 ← (byte) numpoints#14 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte*) COLORS#8 ← phi( main::@5/(byte*) COLORS#9 ) - (byte) FILL#5 ← phi( main::@5/(byte) FILL#6 ) - (byte*) SCREEN#5 ← phi( main::@5/(byte*) SCREEN#6 ) - (byte[256]) COLS#7 ← phi( main::@5/(byte[256]) COLS#6 ) - (byte[256]) YPOS#17 ← phi( main::@5/(byte[256]) YPOS#16 ) - (byte[256]) XPOS#17 ← phi( main::@5/(byte[256]) XPOS#16 ) - (byte) numpoints#15 ← phi( main::@5/(byte) numpoints#10 ) - (byte) numpoints#5 ← (byte) numpoints#15 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte*) COLORS#7 ← phi( main::@6/(byte*) COLORS#8 ) - (byte) FILL#4 ← phi( main::@6/(byte) FILL#5 ) - (byte*) SCREEN#4 ← phi( main::@6/(byte*) SCREEN#5 ) - (byte[256]) COLS#8 ← phi( main::@6/(byte[256]) COLS#7 ) - (byte[256]) YPOS#18 ← phi( main::@6/(byte[256]) YPOS#17 ) - (byte[256]) XPOS#18 ← phi( main::@6/(byte[256]) XPOS#17 ) - (byte) numpoints#16 ← phi( main::@6/(byte) numpoints#10 ) - (byte) numpoints#6 ← (byte) numpoints#16 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - (byte[256]) COLS#29 ← phi( main::@7/(byte[256]) COLS#8 ) - (byte[256]) YPOS#35 ← phi( main::@7/(byte[256]) YPOS#18 ) - (byte[256]) XPOS#33 ← phi( main::@7/(byte[256]) XPOS#18 ) - (byte*) COLORS#5 ← phi( main::@7/(byte*) COLORS#7 ) - (byte) FILL#3 ← phi( main::@7/(byte) FILL#4 ) - (byte*) SCREEN#3 ← phi( main::@7/(byte*) SCREEN#4 ) - (byte) numpoints#17 ← phi( main::@7/(byte) numpoints#10 ) - (byte) numpoints#7 ← (byte) numpoints#17 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - (byte[256]) COLS#28 ← phi( main::@8/(byte[256]) COLS#29 ) - (byte[256]) YPOS#31 ← phi( main::@8/(byte[256]) YPOS#35 ) - (byte) numpoints#31 ← phi( main::@8/(byte) numpoints#7 ) - (byte[256]) XPOS#28 ← phi( main::@8/(byte[256]) XPOS#33 ) - (byte*) COLORS#4 ← phi( main::@8/(byte*) COLORS#5 ) - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#26 ← phi( main::@11/(byte[256]) COLS#27 main::@9/(byte[256]) COLS#28 ) - (byte[256]) YPOS#25 ← phi( main::@11/(byte[256]) YPOS#30 main::@9/(byte[256]) YPOS#31 ) - (byte) numpoints#29 ← phi( main::@11/(byte) numpoints#23 main::@9/(byte) numpoints#31 ) - (byte[256]) XPOS#21 ← phi( main::@11/(byte[256]) XPOS#27 main::@9/(byte[256]) XPOS#28 ) - (byte*) COLORS#2 ← phi( main::@11/(byte*) COLORS#3 main::@9/(byte*) COLORS#4 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - (byte[256]) COLS#30 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[256]) YPOS#21 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte) numpoints#26 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) XPOS#9 ← phi( main::@1/(byte[256]) XPOS#21 ) - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - (byte[256]) COLS#27 ← phi( main::@10/(byte[256]) COLS#30 ) - (byte[256]) YPOS#30 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#27 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte*) COLORS#3 ← phi( main::@10/(byte*) COLORS#6 ) - (byte) numpoints#23 ← phi( main::@10/(byte) numpoints#26 ) + (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) + (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) + (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 - (byte) numpoints#18 ← phi( main::@11/(byte) numpoints#23 ) - (byte) numpoints#8 ← (byte) numpoints#18 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte[256]) YPOS#9 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#1 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[256]) XPOS#10 ← phi( animate/(byte[256]) XPOS#1 animate::@7/(byte[256]) XPOS#2 ) - (byte[256]) YPOS#1 ← phi( animate/(byte[256]) YPOS#9 animate::@7/(byte[256]) YPOS#10 ) - (byte~) animate::$5 ← (byte[256]) YPOS#1 *idx (byte) 0 + (byte[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) + (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) + (byte~) animate::$5 ← (byte[]) YPOS#1 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#1 *idx (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#1 *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[256]) YPOS#10 ← phi( animate/(byte[256]) YPOS#9 ) - (byte[256]) XPOS#2 ← phi( animate/(byte[256]) XPOS#1 ) - *((byte[256]) XPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) + (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) + *((byte[]) XPOS#2 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[256]) YPOS#11 ← phi( animate::@1/(byte[256]) YPOS#1 animate::@8/(byte[256]) YPOS#2 ) - (byte[256]) XPOS#3 ← phi( animate::@1/(byte[256]) XPOS#10 animate::@8/(byte[256]) XPOS#11 ) - (byte~) animate::$10 ← (byte[256]) XPOS#3 *idx (byte) 1 + (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) + (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) + (byte~) animate::$10 ← (byte[]) XPOS#3 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#3 *idx (byte) 1 + *((byte[]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#3 *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - (byte[256]) XPOS#11 ← phi( animate::@1/(byte[256]) XPOS#10 ) - (byte[256]) YPOS#2 ← phi( animate::@1/(byte[256]) YPOS#1 ) - *((byte[256]) YPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) + (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) + *((byte[]) YPOS#2 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[256]) XPOS#23 ← phi( animate::@2/(byte[256]) XPOS#3 animate::@9/(byte[256]) XPOS#4 ) - (byte[256]) YPOS#3 ← phi( animate::@2/(byte[256]) YPOS#11 animate::@9/(byte[256]) YPOS#12 ) - (byte~) animate::$15 ← (byte[256]) YPOS#3 *idx (byte) 2 + (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) + (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) + (byte~) animate::$15 ← (byte[]) YPOS#3 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#3 *idx (byte) 2 + *((byte[]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#3 *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - (byte[256]) YPOS#12 ← phi( animate::@2/(byte[256]) YPOS#11 ) - (byte[256]) XPOS#4 ← phi( animate::@2/(byte[256]) XPOS#3 ) - *((byte[256]) XPOS#4 + (byte) 1) ← (byte) 40 + (byte[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) + (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) + *((byte[]) XPOS#4 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[256]) XPOS#12 ← phi( animate::@10/(byte[256]) XPOS#22 animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#4 ← phi( animate::@10/(byte[256]) YPOS#5 animate::@3/(byte[256]) YPOS#3 ) - (byte~) animate::$20 ← (byte[256]) YPOS#4 *idx (byte) 3 + (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) + (byte~) animate::$20 ← (byte[]) YPOS#4 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#4 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#4 *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@5 to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[256]) XPOS#22 ← phi( animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#5 ← phi( animate::@3/(byte[256]) YPOS#3 ) - *((byte[256]) YPOS#5 + (byte) 2) ← (byte) 0 + (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) + *((byte[]) YPOS#5 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - (byte[256]) XPOS#5 ← phi( animate::@4/(byte[256]) XPOS#12 ) - (byte[256]) YPOS#6 ← phi( animate::@4/(byte[256]) YPOS#4 ) - *((byte[256]) YPOS#6 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#5 *idx (byte) 3 + (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) + (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) + *((byte[]) YPOS#6 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#5 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#5 *idx (byte) 3 + *((byte[]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#5 *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@6 @@ -2006,35 +1684,17 @@ animate::@11: scope:[animate] from animate::@4 animate::@6: scope:[animate] from animate::@11 to:animate::@return animate::@12: scope:[animate] from animate::@11 - (byte[256]) XPOS#6 ← phi( animate::@11/(byte[256]) XPOS#5 ) - (byte~) animate::$30 ← (byte[256]) XPOS#6 *idx (byte) 3 + (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) + (byte~) animate::$30 ← (byte[]) XPOS#6 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte[256]) COLS#1 ← phi( main/(byte[256]) COLS#3 main::@3/(byte[256]) COLS#4 main::@4/(byte[256]) COLS#5 main::@5/(byte[256]) COLS#6 main::@6/(byte[256]) COLS#7 main::@7/(byte[256]) COLS#8 ) - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte[256]) YPOS#7 ← phi( main/(byte[256]) YPOS#13 main::@3/(byte[256]) YPOS#14 main::@4/(byte[256]) YPOS#15 main::@5/(byte[256]) YPOS#16 main::@6/(byte[256]) YPOS#17 main::@7/(byte[256]) YPOS#18 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#22 main::@3/(byte) numpoints#2 main::@4/(byte) numpoints#3 main::@5/(byte) numpoints#4 main::@6/(byte) numpoints#5 main::@7/(byte) numpoints#6 ) - (byte[256]) XPOS#7 ← phi( main/(byte[256]) XPOS#13 main::@3/(byte[256]) XPOS#14 main::@4/(byte[256]) XPOS#15 main::@5/(byte[256]) XPOS#16 main::@6/(byte[256]) XPOS#17 main::@7/(byte[256]) XPOS#18 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#7 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#7 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#1 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#9 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - (byte) numpoints#20 ← phi( addpoint/(byte) numpoints#9 ) - (byte) numpoints#10 ← (byte) numpoints#20 - return - to:@return -initscreen: scope:[initscreen] from main::@8 - (byte) FILL#2 ← phi( main::@8/(byte) FILL#3 ) - (byte*) SCREEN#1 ← phi( main::@8/(byte*) SCREEN#3 ) +initscreen: scope:[initscreen] from main + (byte) FILL#2 ← phi( main/(byte) FILL#3 ) + (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#3 ) (byte*) initscreen::screen#0 ← (byte*) SCREEN#1 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -2051,28 +1711,28 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[256]) COLS#24 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte) numpoints#42 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) YPOS#32 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte[256]) XPOS#34 ← phi( main::@1/(byte[256]) XPOS#21 ) + (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) + (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (byte*) COLORS#1 ← phi( main::@1/(byte*) COLORS#2 ) (byte*) render::colline#0 ← (byte*) COLORS#1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#25 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#42 render::@3/(byte) numpoints#43 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#32 render::@3/(byte[256]) YPOS#33 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#34 render::@3/(byte[256]) XPOS#35 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#21 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#39 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#22 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#24 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) + (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#5 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -2082,10 +1742,10 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[256]) COLS#23 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#41 ← phi( render::@2/(byte) numpoints#39 ) - (byte[256]) YPOS#27 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#30 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) + (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) render::y#5 ← phi( render::@2/(byte) render::y#2 ) (byte) render::x#3 ← phi( render::@2/(byte) render::x#2 ) (byte*) render::colline#2 ← phi( render::@2/(byte*) render::colline#4 ) @@ -2098,10 +1758,10 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[256]) COLS#25 ← phi( render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#43 ← phi( render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#33 ← phi( render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#35 ← phi( render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) + (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (byte) render::y#3 ← phi( render::@5/(byte) render::y#5 ) (byte*) render::colline#3 ← phi( render::@5/(byte*) render::colline#2 ) (byte*~) render::$2 ← (byte*) render::colline#3 + (byte) 40 @@ -2114,29 +1774,29 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[256]) COLS#18 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#37 ← phi( render::@2/(byte) numpoints#39 ) + (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#12 ← phi( render::@2/(byte) numpoints#14 ) (byte) findcol::y#8 ← phi( render::@2/(byte) findcol::y#0 ) (byte) findcol::x#5 ← phi( render::@2/(byte) findcol::x#0 ) - (byte[256]) YPOS#19 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#19 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte) 255 (byte) findcol::mincol#0 ← (byte) 0 (byte) findcol::i#0 ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#3 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#19 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#21 ) + (byte[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#9 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#5 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#9 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#6 ) - (byte[256]) YPOS#8 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#20 ) + (byte[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#8 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#20 ) - (byte~) findcol::$0 ← (byte[256]) XPOS#8 *idx (byte) findcol::i#2 + (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) + (byte~) findcol::$0 ← (byte[]) XPOS#7 *idx (byte) findcol::i#2 (byte) findcol::xp#0 ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS#8 *idx (byte) findcol::i#2 + (byte~) findcol::$1 ← (byte[]) YPOS#7 *idx (byte) findcol::i#2 (byte) findcol::yp#0 ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x#1 == (byte) findcol::xp#0 (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -2144,10 +1804,10 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#12 ) - (byte[256]) YPOS#38 ← phi( findcol::@1/(byte[256]) YPOS#8 findcol::@3/(byte[256]) YPOS#39 ) - (byte[256]) XPOS#39 ← phi( findcol::@1/(byte[256]) XPOS#8 findcol::@3/(byte[256]) XPOS#40 ) - (byte[256]) COLS#15 ← phi( findcol::@1/(byte[256]) COLS#16 findcol::@3/(byte[256]) COLS#17 ) - (byte) numpoints#34 ← phi( findcol::@1/(byte) numpoints#35 findcol::@3/(byte) numpoints#36 ) + (byte[]) YPOS#31 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#32 ) + (byte[]) XPOS#32 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#33 ) + (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) + (byte) numpoints#9 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#11 ) (byte) findcol::i#11 ← phi( findcol::@1/(byte) findcol::i#2 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#8 ← phi( findcol::@1/(byte) findcol::mindiff#9 findcol::@3/(byte) findcol::mindiff#10 ) (byte) findcol::yp#7 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#8 ) @@ -2160,10 +1820,10 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[256]) YPOS#40 ← phi( findcol::@1/(byte[256]) YPOS#8 ) - (byte[256]) XPOS#41 ← phi( findcol::@1/(byte[256]) XPOS#8 ) - (byte[256]) COLS#20 ← phi( findcol::@1/(byte[256]) COLS#16 ) - (byte) numpoints#38 ← phi( findcol::@1/(byte) numpoints#35 ) + (byte[]) YPOS#33 ← phi( findcol::@1/(byte[]) YPOS#7 ) + (byte[]) XPOS#34 ← phi( findcol::@1/(byte[]) XPOS#7 ) + (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) + (byte) numpoints#13 ← phi( findcol::@1/(byte) numpoints#10 ) (byte) findcol::i#13 ← phi( findcol::@1/(byte) findcol::i#2 ) (byte) findcol::mindiff#12 ← phi( findcol::@1/(byte) findcol::mindiff#9 ) (byte) findcol::xp#5 ← phi( findcol::@1/(byte) findcol::xp#0 ) @@ -2176,10 +1836,10 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[256]) YPOS#39 ← phi( findcol::@9/(byte[256]) YPOS#40 ) - (byte[256]) XPOS#40 ← phi( findcol::@9/(byte[256]) XPOS#41 ) - (byte[256]) COLS#17 ← phi( findcol::@9/(byte[256]) COLS#20 ) - (byte) numpoints#36 ← phi( findcol::@9/(byte) numpoints#38 ) + (byte[]) YPOS#32 ← phi( findcol::@9/(byte[]) YPOS#33 ) + (byte[]) XPOS#33 ← phi( findcol::@9/(byte[]) XPOS#34 ) + (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#13 ) + (byte) numpoints#11 ← phi( findcol::@9/(byte) numpoints#13 ) (byte) findcol::i#12 ← phi( findcol::@9/(byte) findcol::i#13 ) (byte) findcol::mindiff#10 ← phi( findcol::@9/(byte) findcol::mindiff#12 ) (byte) findcol::yp#8 ← phi( findcol::@9/(byte) findcol::yp#1 ) @@ -2197,10 +1857,10 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#37 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#38 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#14 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#33 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#8 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#10 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#7 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#6 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -2212,10 +1872,10 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#36 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#37 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#13 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#32 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#30 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#7 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#9 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#6 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#5 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -2228,10 +1888,10 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 ) (byte) findcol::x#13 ← phi( findcol::@12/(byte) findcol::x#4 findcol::@4/(byte) findcol::x#3 ) - (byte[256]) YPOS#34 ← phi( findcol::@12/(byte[256]) YPOS#36 findcol::@4/(byte[256]) YPOS#37 ) - (byte[256]) XPOS#36 ← phi( findcol::@12/(byte[256]) XPOS#37 findcol::@4/(byte[256]) XPOS#38 ) - (byte[256]) COLS#12 ← phi( findcol::@12/(byte[256]) COLS#13 findcol::@4/(byte[256]) COLS#14 ) - (byte) numpoints#30 ← phi( findcol::@12/(byte) numpoints#32 findcol::@4/(byte) numpoints#33 ) + (byte[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) + (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#30 findcol::@4/(byte[]) XPOS#31 ) + (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) + (byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 ) (byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 ) (byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) @@ -2244,10 +1904,10 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 findcol::@6: scope:[findcol] from findcol::@5 (byte) findcol::mincol#6 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#12 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#29 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#32 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#11 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#28 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -2260,10 +1920,10 @@ findcol::@6: scope:[findcol] from findcol::@5 findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#11 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#28 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#31 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#10 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#27 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -2277,10 +1937,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#6 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#12 ) - (byte[256]) YPOS#24 ← phi( findcol::@14/(byte[256]) YPOS#28 findcol::@6/(byte[256]) YPOS#29 ) - (byte[256]) XPOS#26 ← phi( findcol::@14/(byte[256]) XPOS#31 findcol::@6/(byte[256]) XPOS#32 ) - (byte[256]) COLS#9 ← phi( findcol::@14/(byte[256]) COLS#10 findcol::@6/(byte[256]) COLS#11 ) - (byte) numpoints#25 ← phi( findcol::@14/(byte) numpoints#27 findcol::@6/(byte) numpoints#28 ) + (byte[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) + (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) + (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) + (byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 ) (byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 ) (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) @@ -2289,221 +1949,156 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$17) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[256]) COLS#19 ← phi( findcol::@16/(byte[256]) COLS#2 findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::mindiff#1 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#13 ) (byte) findcol::mincol#3 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#9 findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#20 ← phi( findcol::@16/(byte[256]) YPOS#23 findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#20 ← phi( findcol::@16/(byte[256]) XPOS#25 findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#21 ← phi( findcol::@16/(byte) numpoints#24 findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#5 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#21 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#1 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::y#12 ← phi( findcol::@7/(byte) findcol::y#13 ) (byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#23 ← phi( findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#25 ← phi( findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#24 ← phi( findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[256]) COLS#2 ← phi( findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 ) (byte) findcol::mindiff#1 ← (byte) findcol::diff#7 - (byte~) findcol::$18 ← (byte[256]) COLS#2 *idx (byte) findcol::i#4 + (byte~) findcol::$18 ← (byte[]) COLS#1 *idx (byte) findcol::i#4 (byte) findcol::mincol#1 ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 (byte) findcol::mincol#2 ← phi( findcol::@8/(byte) findcol::mincol#3 ) (byte) findcol::return#3 ← (byte) findcol::mincol#2 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @6 INITIAL SSA SYMBOL TABLE -(label) @7 +(label) @6 (label) @begin (label) @end (byte*) COLORS (byte*) COLORS#0 (byte*) COLORS#1 -(byte*) COLORS#10 -(byte*) COLORS#11 -(byte*) COLORS#12 (byte*) COLORS#2 (byte*) COLORS#3 (byte*) COLORS#4 (byte*) COLORS#5 (byte*) COLORS#6 -(byte*) COLORS#7 -(byte*) COLORS#8 -(byte*) COLORS#9 -(byte[256]) COLS -(byte[256]) COLS#0 -(byte[256]) COLS#1 -(byte[256]) COLS#10 -(byte[256]) COLS#11 -(byte[256]) COLS#12 -(byte[256]) COLS#13 -(byte[256]) COLS#14 -(byte[256]) COLS#15 -(byte[256]) COLS#16 -(byte[256]) COLS#17 -(byte[256]) COLS#18 -(byte[256]) COLS#19 -(byte[256]) COLS#2 -(byte[256]) COLS#20 -(byte[256]) COLS#21 -(byte[256]) COLS#22 -(byte[256]) COLS#23 -(byte[256]) COLS#24 -(byte[256]) COLS#25 -(byte[256]) COLS#26 -(byte[256]) COLS#27 -(byte[256]) COLS#28 -(byte[256]) COLS#29 -(byte[256]) COLS#3 -(byte[256]) COLS#30 -(byte[256]) COLS#4 -(byte[256]) COLS#5 -(byte[256]) COLS#6 -(byte[256]) COLS#7 -(byte[256]) COLS#8 -(byte[256]) COLS#9 +(byte[]) COLS +(byte[]) COLS#0 +(byte[]) COLS#1 +(byte[]) COLS#10 +(byte[]) COLS#11 +(byte[]) COLS#12 +(byte[]) COLS#13 +(byte[]) COLS#14 +(byte[]) COLS#15 +(byte[]) COLS#16 +(byte[]) COLS#17 +(byte[]) COLS#18 +(byte[]) COLS#19 +(byte[]) COLS#2 +(byte[]) COLS#20 +(byte[]) COLS#21 +(byte[]) COLS#22 +(byte[]) COLS#23 +(byte[]) COLS#3 +(byte[]) COLS#4 +(byte[]) COLS#5 +(byte[]) COLS#6 +(byte[]) COLS#7 +(byte[]) COLS#8 +(byte[]) COLS#9 (byte) FILL (byte) FILL#0 (byte) FILL#1 (byte) FILL#2 (byte) FILL#3 -(byte) FILL#4 -(byte) FILL#5 -(byte) FILL#6 -(byte) FILL#7 -(byte) FILL#8 -(byte) FILL#9 (byte*) SCREEN (byte*) SCREEN#0 (byte*) SCREEN#1 (byte*) SCREEN#2 (byte*) SCREEN#3 -(byte*) SCREEN#4 -(byte*) SCREEN#5 -(byte*) SCREEN#6 -(byte*) SCREEN#7 -(byte*) SCREEN#8 -(byte*) SCREEN#9 -(byte[256]) XPOS -(byte[256]) XPOS#0 -(byte[256]) XPOS#1 -(byte[256]) XPOS#10 -(byte[256]) XPOS#11 -(byte[256]) XPOS#12 -(byte[256]) XPOS#13 -(byte[256]) XPOS#14 -(byte[256]) XPOS#15 -(byte[256]) XPOS#16 -(byte[256]) XPOS#17 -(byte[256]) XPOS#18 -(byte[256]) XPOS#19 -(byte[256]) XPOS#2 -(byte[256]) XPOS#20 -(byte[256]) XPOS#21 -(byte[256]) XPOS#22 -(byte[256]) XPOS#23 -(byte[256]) XPOS#24 -(byte[256]) XPOS#25 -(byte[256]) XPOS#26 -(byte[256]) XPOS#27 -(byte[256]) XPOS#28 -(byte[256]) XPOS#29 -(byte[256]) XPOS#3 -(byte[256]) XPOS#30 -(byte[256]) XPOS#31 -(byte[256]) XPOS#32 -(byte[256]) XPOS#33 -(byte[256]) XPOS#34 -(byte[256]) XPOS#35 -(byte[256]) XPOS#36 -(byte[256]) XPOS#37 -(byte[256]) XPOS#38 -(byte[256]) XPOS#39 -(byte[256]) XPOS#4 -(byte[256]) XPOS#40 -(byte[256]) XPOS#41 -(byte[256]) XPOS#5 -(byte[256]) XPOS#6 -(byte[256]) XPOS#7 -(byte[256]) XPOS#8 -(byte[256]) XPOS#9 -(byte[256]) YPOS -(byte[256]) YPOS#0 -(byte[256]) YPOS#1 -(byte[256]) YPOS#10 -(byte[256]) YPOS#11 -(byte[256]) YPOS#12 -(byte[256]) YPOS#13 -(byte[256]) YPOS#14 -(byte[256]) YPOS#15 -(byte[256]) YPOS#16 -(byte[256]) YPOS#17 -(byte[256]) YPOS#18 -(byte[256]) YPOS#19 -(byte[256]) YPOS#2 -(byte[256]) YPOS#20 -(byte[256]) YPOS#21 -(byte[256]) YPOS#22 -(byte[256]) YPOS#23 -(byte[256]) YPOS#24 -(byte[256]) YPOS#25 -(byte[256]) YPOS#26 -(byte[256]) YPOS#27 -(byte[256]) YPOS#28 -(byte[256]) YPOS#29 -(byte[256]) YPOS#3 -(byte[256]) YPOS#30 -(byte[256]) YPOS#31 -(byte[256]) YPOS#32 -(byte[256]) YPOS#33 -(byte[256]) YPOS#34 -(byte[256]) YPOS#35 -(byte[256]) YPOS#36 -(byte[256]) YPOS#37 -(byte[256]) YPOS#38 -(byte[256]) YPOS#39 -(byte[256]) YPOS#4 -(byte[256]) YPOS#40 -(byte[256]) YPOS#5 -(byte[256]) YPOS#6 -(byte[256]) YPOS#7 -(byte[256]) YPOS#8 -(byte[256]) YPOS#9 -(void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) -(label) addpoint::@return -(byte) addpoint::c -(byte) addpoint::c#0 -(byte) addpoint::c#1 -(byte) addpoint::c#2 -(byte) addpoint::c#3 -(byte) addpoint::c#4 -(byte) addpoint::c#5 -(byte) addpoint::c#6 -(byte) addpoint::x -(byte) addpoint::x#0 -(byte) addpoint::x#1 -(byte) addpoint::x#2 -(byte) addpoint::x#3 -(byte) addpoint::x#4 -(byte) addpoint::x#5 -(byte) addpoint::x#6 -(byte) addpoint::y -(byte) addpoint::y#0 -(byte) addpoint::y#1 -(byte) addpoint::y#2 -(byte) addpoint::y#3 -(byte) addpoint::y#4 -(byte) addpoint::y#5 -(byte) addpoint::y#6 +(byte[]) XPOS +(byte[]) XPOS#0 +(byte[]) XPOS#1 +(byte[]) XPOS#10 +(byte[]) XPOS#11 +(byte[]) XPOS#12 +(byte[]) XPOS#13 +(byte[]) XPOS#14 +(byte[]) XPOS#15 +(byte[]) XPOS#16 +(byte[]) XPOS#17 +(byte[]) XPOS#18 +(byte[]) XPOS#19 +(byte[]) XPOS#2 +(byte[]) XPOS#20 +(byte[]) XPOS#21 +(byte[]) XPOS#22 +(byte[]) XPOS#23 +(byte[]) XPOS#24 +(byte[]) XPOS#25 +(byte[]) XPOS#26 +(byte[]) XPOS#27 +(byte[]) XPOS#28 +(byte[]) XPOS#29 +(byte[]) XPOS#3 +(byte[]) XPOS#30 +(byte[]) XPOS#31 +(byte[]) XPOS#32 +(byte[]) XPOS#33 +(byte[]) XPOS#34 +(byte[]) XPOS#4 +(byte[]) XPOS#5 +(byte[]) XPOS#6 +(byte[]) XPOS#7 +(byte[]) XPOS#8 +(byte[]) XPOS#9 +(byte[]) YPOS +(byte[]) YPOS#0 +(byte[]) YPOS#1 +(byte[]) YPOS#10 +(byte[]) YPOS#11 +(byte[]) YPOS#12 +(byte[]) YPOS#13 +(byte[]) YPOS#14 +(byte[]) YPOS#15 +(byte[]) YPOS#16 +(byte[]) YPOS#17 +(byte[]) YPOS#18 +(byte[]) YPOS#19 +(byte[]) YPOS#2 +(byte[]) YPOS#20 +(byte[]) YPOS#21 +(byte[]) YPOS#22 +(byte[]) YPOS#23 +(byte[]) YPOS#24 +(byte[]) YPOS#25 +(byte[]) YPOS#26 +(byte[]) YPOS#27 +(byte[]) YPOS#28 +(byte[]) YPOS#29 +(byte[]) YPOS#3 +(byte[]) YPOS#30 +(byte[]) YPOS#31 +(byte[]) YPOS#32 +(byte[]) YPOS#33 +(byte[]) YPOS#4 +(byte[]) YPOS#5 +(byte[]) YPOS#6 +(byte[]) YPOS#7 +(byte[]) YPOS#8 +(byte[]) YPOS#9 (void()) animate() (byte~) animate::$0 (byte~) animate::$1 @@ -2705,15 +2300,9 @@ INITIAL SSA SYMBOL TABLE (byte*) initscreen::screen#2 (void()) main() (label) main::@1 -(label) main::@10 -(label) main::@11 (label) main::@3 (label) main::@4 (label) main::@5 -(label) main::@6 -(label) main::@7 -(label) main::@8 -(label) main::@9 (label) main::@return (byte) numpoints (byte) numpoints#0 @@ -2733,28 +2322,8 @@ INITIAL SSA SYMBOL TABLE (byte) numpoints#21 (byte) numpoints#22 (byte) numpoints#23 -(byte) numpoints#24 -(byte) numpoints#25 -(byte) numpoints#26 -(byte) numpoints#27 -(byte) numpoints#28 -(byte) numpoints#29 (byte) numpoints#3 -(byte) numpoints#30 -(byte) numpoints#31 -(byte) numpoints#32 -(byte) numpoints#33 -(byte) numpoints#34 -(byte) numpoints#35 -(byte) numpoints#36 -(byte) numpoints#37 -(byte) numpoints#38 -(byte) numpoints#39 (byte) numpoints#4 -(byte) numpoints#40 -(byte) numpoints#41 -(byte) numpoints#42 -(byte) numpoints#43 (byte) numpoints#5 (byte) numpoints#6 (byte) numpoints#7 @@ -2792,6 +2361,7 @@ INITIAL SSA SYMBOL TABLE (byte) render::y#4 (byte) render::y#5 +Culled Empty Block (label) @6 Culled Empty Block (label) animate::@5 Culled Empty Block (label) animate::@6 Succesful SSA optimization Pass2CullEmptyBlocks @@ -2800,263 +2370,155 @@ CONTROL FLOW GRAPH (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin - (byte) numpoints#11 ← phi( @begin/(byte) numpoints#8 ) - (byte) numpoints#1 ← (byte) numpoints#11 to:@end main: scope:[main] from @begin - (byte*) COLORS#12 ← phi( @begin/(byte*) COLORS#0 ) - (byte) FILL#9 ← phi( @begin/(byte) FILL#0 ) - (byte*) SCREEN#9 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[256]) COLS#3 ← phi( @begin/(byte[256]) COLS#0 ) - (byte[256]) YPOS#13 ← phi( @begin/(byte[256]) YPOS#0 ) - (byte[256]) XPOS#13 ← phi( @begin/(byte[256]) XPOS#0 ) + (byte[]) COLS#22 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#22 ← phi( @begin/(byte) numpoints#0 ) - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + (byte[]) YPOS#28 ← phi( @begin/(byte[]) YPOS#0 ) + (byte[]) XPOS#26 ← phi( @begin/(byte[]) XPOS#0 ) + (byte*) COLORS#5 ← phi( @begin/(byte*) COLORS#0 ) + (byte) FILL#3 ← phi( @begin/(byte) FILL#0 ) + (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte*) COLORS#11 ← phi( main/(byte*) COLORS#12 ) - (byte) FILL#8 ← phi( main/(byte) FILL#9 ) - (byte*) SCREEN#8 ← phi( main/(byte*) SCREEN#9 ) - (byte[256]) COLS#4 ← phi( main/(byte[256]) COLS#3 ) - (byte[256]) YPOS#14 ← phi( main/(byte[256]) YPOS#13 ) - (byte[256]) XPOS#14 ← phi( main/(byte[256]) XPOS#13 ) - (byte) numpoints#12 ← phi( main/(byte) numpoints#10 ) - (byte) numpoints#2 ← (byte) numpoints#12 - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + (byte[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) + (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) + (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) + (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) + (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) + (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) + (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) + (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#21 ) + (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#4 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) COLORS#10 ← phi( main::@3/(byte*) COLORS#11 ) - (byte) FILL#7 ← phi( main::@3/(byte) FILL#8 ) - (byte*) SCREEN#7 ← phi( main::@3/(byte*) SCREEN#8 ) - (byte[256]) COLS#5 ← phi( main::@3/(byte[256]) COLS#4 ) - (byte[256]) YPOS#15 ← phi( main::@3/(byte[256]) YPOS#14 ) - (byte[256]) XPOS#15 ← phi( main::@3/(byte[256]) XPOS#14 ) - (byte) numpoints#13 ← phi( main::@3/(byte) numpoints#10 ) - (byte) numpoints#3 ← (byte) numpoints#13 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + (byte[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) + (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) + (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte*) COLORS#9 ← phi( main::@4/(byte*) COLORS#10 ) - (byte) FILL#6 ← phi( main::@4/(byte) FILL#7 ) - (byte*) SCREEN#6 ← phi( main::@4/(byte*) SCREEN#7 ) - (byte[256]) COLS#6 ← phi( main::@4/(byte[256]) COLS#5 ) - (byte[256]) YPOS#16 ← phi( main::@4/(byte[256]) YPOS#15 ) - (byte[256]) XPOS#16 ← phi( main::@4/(byte[256]) XPOS#15 ) - (byte) numpoints#14 ← phi( main::@4/(byte) numpoints#10 ) - (byte) numpoints#4 ← (byte) numpoints#14 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte*) COLORS#8 ← phi( main::@5/(byte*) COLORS#9 ) - (byte) FILL#5 ← phi( main::@5/(byte) FILL#6 ) - (byte*) SCREEN#5 ← phi( main::@5/(byte*) SCREEN#6 ) - (byte[256]) COLS#7 ← phi( main::@5/(byte[256]) COLS#6 ) - (byte[256]) YPOS#17 ← phi( main::@5/(byte[256]) YPOS#16 ) - (byte[256]) XPOS#17 ← phi( main::@5/(byte[256]) XPOS#16 ) - (byte) numpoints#15 ← phi( main::@5/(byte) numpoints#10 ) - (byte) numpoints#5 ← (byte) numpoints#15 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte*) COLORS#7 ← phi( main::@6/(byte*) COLORS#8 ) - (byte) FILL#4 ← phi( main::@6/(byte) FILL#5 ) - (byte*) SCREEN#4 ← phi( main::@6/(byte*) SCREEN#5 ) - (byte[256]) COLS#8 ← phi( main::@6/(byte[256]) COLS#7 ) - (byte[256]) YPOS#18 ← phi( main::@6/(byte[256]) YPOS#17 ) - (byte[256]) XPOS#18 ← phi( main::@6/(byte[256]) XPOS#17 ) - (byte) numpoints#16 ← phi( main::@6/(byte) numpoints#10 ) - (byte) numpoints#6 ← (byte) numpoints#16 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - (byte[256]) COLS#29 ← phi( main::@7/(byte[256]) COLS#8 ) - (byte[256]) YPOS#35 ← phi( main::@7/(byte[256]) YPOS#18 ) - (byte[256]) XPOS#33 ← phi( main::@7/(byte[256]) XPOS#18 ) - (byte*) COLORS#5 ← phi( main::@7/(byte*) COLORS#7 ) - (byte) FILL#3 ← phi( main::@7/(byte) FILL#4 ) - (byte*) SCREEN#3 ← phi( main::@7/(byte*) SCREEN#4 ) - (byte) numpoints#17 ← phi( main::@7/(byte) numpoints#10 ) - (byte) numpoints#7 ← (byte) numpoints#17 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - (byte[256]) COLS#28 ← phi( main::@8/(byte[256]) COLS#29 ) - (byte[256]) YPOS#31 ← phi( main::@8/(byte[256]) YPOS#35 ) - (byte) numpoints#31 ← phi( main::@8/(byte) numpoints#7 ) - (byte[256]) XPOS#28 ← phi( main::@8/(byte[256]) XPOS#33 ) - (byte*) COLORS#4 ← phi( main::@8/(byte*) COLORS#5 ) - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#26 ← phi( main::@11/(byte[256]) COLS#27 main::@9/(byte[256]) COLS#28 ) - (byte[256]) YPOS#25 ← phi( main::@11/(byte[256]) YPOS#30 main::@9/(byte[256]) YPOS#31 ) - (byte) numpoints#29 ← phi( main::@11/(byte) numpoints#23 main::@9/(byte) numpoints#31 ) - (byte[256]) XPOS#21 ← phi( main::@11/(byte[256]) XPOS#27 main::@9/(byte[256]) XPOS#28 ) - (byte*) COLORS#2 ← phi( main::@11/(byte*) COLORS#3 main::@9/(byte*) COLORS#4 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - (byte[256]) COLS#30 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[256]) YPOS#21 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte) numpoints#26 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) XPOS#9 ← phi( main::@1/(byte[256]) XPOS#21 ) - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - (byte[256]) COLS#27 ← phi( main::@10/(byte[256]) COLS#30 ) - (byte[256]) YPOS#30 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#27 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte*) COLORS#3 ← phi( main::@10/(byte*) COLORS#6 ) - (byte) numpoints#23 ← phi( main::@10/(byte) numpoints#26 ) + (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) + (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) + (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 - (byte) numpoints#18 ← phi( main::@11/(byte) numpoints#23 ) - (byte) numpoints#8 ← (byte) numpoints#18 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte[256]) YPOS#9 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#1 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 (boolean~) animate::$4 ← ! (boolean~) animate::$3 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[256]) XPOS#10 ← phi( animate/(byte[256]) XPOS#1 animate::@7/(byte[256]) XPOS#2 ) - (byte[256]) YPOS#1 ← phi( animate/(byte[256]) YPOS#9 animate::@7/(byte[256]) YPOS#10 ) - (byte~) animate::$5 ← (byte[256]) YPOS#1 *idx (byte) 0 + (byte[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) + (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) + (byte~) animate::$5 ← (byte[]) YPOS#1 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#1 *idx (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#1 *idx (byte) 0 (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 (boolean~) animate::$9 ← ! (boolean~) animate::$8 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[256]) YPOS#10 ← phi( animate/(byte[256]) YPOS#9 ) - (byte[256]) XPOS#2 ← phi( animate/(byte[256]) XPOS#1 ) - *((byte[256]) XPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) + (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) + *((byte[]) XPOS#2 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[256]) YPOS#11 ← phi( animate::@1/(byte[256]) YPOS#1 animate::@8/(byte[256]) YPOS#2 ) - (byte[256]) XPOS#3 ← phi( animate::@1/(byte[256]) XPOS#10 animate::@8/(byte[256]) XPOS#11 ) - (byte~) animate::$10 ← (byte[256]) XPOS#3 *idx (byte) 1 + (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) + (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) + (byte~) animate::$10 ← (byte[]) XPOS#3 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#3 *idx (byte) 1 + *((byte[]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#3 *idx (byte) 1 (boolean~) animate::$13 ← (byte~) animate::$12 == (byte) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - (byte[256]) XPOS#11 ← phi( animate::@1/(byte[256]) XPOS#10 ) - (byte[256]) YPOS#2 ← phi( animate::@1/(byte[256]) YPOS#1 ) - *((byte[256]) YPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) + (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) + *((byte[]) YPOS#2 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[256]) XPOS#23 ← phi( animate::@2/(byte[256]) XPOS#3 animate::@9/(byte[256]) XPOS#4 ) - (byte[256]) YPOS#3 ← phi( animate::@2/(byte[256]) YPOS#11 animate::@9/(byte[256]) YPOS#12 ) - (byte~) animate::$15 ← (byte[256]) YPOS#3 *idx (byte) 2 + (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) + (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) + (byte~) animate::$15 ← (byte[]) YPOS#3 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#3 *idx (byte) 2 + *((byte[]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#3 *idx (byte) 2 (boolean~) animate::$18 ← (byte~) animate::$17 == (byte) 25 (boolean~) animate::$19 ← ! (boolean~) animate::$18 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - (byte[256]) YPOS#12 ← phi( animate::@2/(byte[256]) YPOS#11 ) - (byte[256]) XPOS#4 ← phi( animate::@2/(byte[256]) XPOS#3 ) - *((byte[256]) XPOS#4 + (byte) 1) ← (byte) 40 + (byte[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) + (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) + *((byte[]) XPOS#4 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[256]) XPOS#12 ← phi( animate::@10/(byte[256]) XPOS#22 animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#4 ← phi( animate::@10/(byte[256]) YPOS#5 animate::@3/(byte[256]) YPOS#3 ) - (byte~) animate::$20 ← (byte[256]) YPOS#4 *idx (byte) 3 + (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) + (byte~) animate::$20 ← (byte[]) YPOS#4 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#4 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#4 *idx (byte) 3 (boolean~) animate::$23 ← (byte~) animate::$22 == (byte) 255 (boolean~) animate::$24 ← ! (boolean~) animate::$23 if((boolean~) animate::$24) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[256]) XPOS#22 ← phi( animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#5 ← phi( animate::@3/(byte[256]) YPOS#3 ) - *((byte[256]) YPOS#5 + (byte) 2) ← (byte) 0 + (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) + *((byte[]) YPOS#5 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - (byte[256]) XPOS#5 ← phi( animate::@4/(byte[256]) XPOS#12 ) - (byte[256]) YPOS#6 ← phi( animate::@4/(byte[256]) YPOS#4 ) - *((byte[256]) YPOS#6 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#5 *idx (byte) 3 + (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) + (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) + *((byte[]) YPOS#6 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#5 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#5 *idx (byte) 3 + *((byte[]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#5 *idx (byte) 3 (boolean~) animate::$28 ← (byte~) animate::$27 >= (byte) 40 (boolean~) animate::$29 ← ! (boolean~) animate::$28 if((boolean~) animate::$29) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte[256]) XPOS#6 ← phi( animate::@11/(byte[256]) XPOS#5 ) - (byte~) animate::$30 ← (byte[256]) XPOS#6 *idx (byte) 3 + (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) + (byte~) animate::$30 ← (byte[]) XPOS#6 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte[256]) COLS#1 ← phi( main/(byte[256]) COLS#3 main::@3/(byte[256]) COLS#4 main::@4/(byte[256]) COLS#5 main::@5/(byte[256]) COLS#6 main::@6/(byte[256]) COLS#7 main::@7/(byte[256]) COLS#8 ) - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte[256]) YPOS#7 ← phi( main/(byte[256]) YPOS#13 main::@3/(byte[256]) YPOS#14 main::@4/(byte[256]) YPOS#15 main::@5/(byte[256]) YPOS#16 main::@6/(byte[256]) YPOS#17 main::@7/(byte[256]) YPOS#18 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#22 main::@3/(byte) numpoints#2 main::@4/(byte) numpoints#3 main::@5/(byte) numpoints#4 main::@6/(byte) numpoints#5 main::@7/(byte) numpoints#6 ) - (byte[256]) XPOS#7 ← phi( main/(byte[256]) XPOS#13 main::@3/(byte[256]) XPOS#14 main::@4/(byte[256]) XPOS#15 main::@5/(byte[256]) XPOS#16 main::@6/(byte[256]) XPOS#17 main::@7/(byte[256]) XPOS#18 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#7 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#7 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#1 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#9 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - (byte) numpoints#20 ← phi( addpoint/(byte) numpoints#9 ) - (byte) numpoints#10 ← (byte) numpoints#20 - return - to:@return -initscreen: scope:[initscreen] from main::@8 - (byte) FILL#2 ← phi( main::@8/(byte) FILL#3 ) - (byte*) SCREEN#1 ← phi( main::@8/(byte*) SCREEN#3 ) +initscreen: scope:[initscreen] from main + (byte) FILL#2 ← phi( main/(byte) FILL#3 ) + (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#3 ) (byte*) initscreen::screen#0 ← (byte*) SCREEN#1 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -3073,28 +2535,28 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[256]) COLS#24 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte) numpoints#42 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) YPOS#32 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte[256]) XPOS#34 ← phi( main::@1/(byte[256]) XPOS#21 ) + (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) + (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (byte*) COLORS#1 ← phi( main::@1/(byte*) COLORS#2 ) (byte*) render::colline#0 ← (byte*) COLORS#1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#25 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#42 render::@3/(byte) numpoints#43 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#32 render::@3/(byte[256]) YPOS#33 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#34 render::@3/(byte[256]) XPOS#35 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#21 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#39 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#22 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#24 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) + (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#5 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -3104,10 +2566,10 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[256]) COLS#23 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#41 ← phi( render::@2/(byte) numpoints#39 ) - (byte[256]) YPOS#27 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#30 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) + (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) render::y#5 ← phi( render::@2/(byte) render::y#2 ) (byte) render::x#3 ← phi( render::@2/(byte) render::x#2 ) (byte*) render::colline#2 ← phi( render::@2/(byte*) render::colline#4 ) @@ -3120,10 +2582,10 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[256]) COLS#25 ← phi( render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#43 ← phi( render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#33 ← phi( render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#35 ← phi( render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) + (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (byte) render::y#3 ← phi( render::@5/(byte) render::y#5 ) (byte*) render::colline#3 ← phi( render::@5/(byte*) render::colline#2 ) (byte*~) render::$2 ← (byte*) render::colline#3 + (byte) 40 @@ -3136,29 +2598,29 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[256]) COLS#18 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#37 ← phi( render::@2/(byte) numpoints#39 ) + (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#12 ← phi( render::@2/(byte) numpoints#14 ) (byte) findcol::y#8 ← phi( render::@2/(byte) findcol::y#0 ) (byte) findcol::x#5 ← phi( render::@2/(byte) findcol::x#0 ) - (byte[256]) YPOS#19 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#19 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte) 255 (byte) findcol::mincol#0 ← (byte) 0 (byte) findcol::i#0 ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#3 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#19 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#21 ) + (byte[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#9 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#5 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#9 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#6 ) - (byte[256]) YPOS#8 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#20 ) + (byte[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#8 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#20 ) - (byte~) findcol::$0 ← (byte[256]) XPOS#8 *idx (byte) findcol::i#2 + (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) + (byte~) findcol::$0 ← (byte[]) XPOS#7 *idx (byte) findcol::i#2 (byte) findcol::xp#0 ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS#8 *idx (byte) findcol::i#2 + (byte~) findcol::$1 ← (byte[]) YPOS#7 *idx (byte) findcol::i#2 (byte) findcol::yp#0 ← (byte~) findcol::$1 (boolean~) findcol::$2 ← (byte) findcol::x#1 == (byte) findcol::xp#0 (boolean~) findcol::$3 ← ! (boolean~) findcol::$2 @@ -3166,10 +2628,10 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#12 ) - (byte[256]) YPOS#38 ← phi( findcol::@1/(byte[256]) YPOS#8 findcol::@3/(byte[256]) YPOS#39 ) - (byte[256]) XPOS#39 ← phi( findcol::@1/(byte[256]) XPOS#8 findcol::@3/(byte[256]) XPOS#40 ) - (byte[256]) COLS#15 ← phi( findcol::@1/(byte[256]) COLS#16 findcol::@3/(byte[256]) COLS#17 ) - (byte) numpoints#34 ← phi( findcol::@1/(byte) numpoints#35 findcol::@3/(byte) numpoints#36 ) + (byte[]) YPOS#31 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#32 ) + (byte[]) XPOS#32 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#33 ) + (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) + (byte) numpoints#9 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#11 ) (byte) findcol::i#11 ← phi( findcol::@1/(byte) findcol::i#2 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#8 ← phi( findcol::@1/(byte) findcol::mindiff#9 findcol::@3/(byte) findcol::mindiff#10 ) (byte) findcol::yp#7 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#8 ) @@ -3182,10 +2644,10 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[256]) YPOS#40 ← phi( findcol::@1/(byte[256]) YPOS#8 ) - (byte[256]) XPOS#41 ← phi( findcol::@1/(byte[256]) XPOS#8 ) - (byte[256]) COLS#20 ← phi( findcol::@1/(byte[256]) COLS#16 ) - (byte) numpoints#38 ← phi( findcol::@1/(byte) numpoints#35 ) + (byte[]) YPOS#33 ← phi( findcol::@1/(byte[]) YPOS#7 ) + (byte[]) XPOS#34 ← phi( findcol::@1/(byte[]) XPOS#7 ) + (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) + (byte) numpoints#13 ← phi( findcol::@1/(byte) numpoints#10 ) (byte) findcol::i#13 ← phi( findcol::@1/(byte) findcol::i#2 ) (byte) findcol::mindiff#12 ← phi( findcol::@1/(byte) findcol::mindiff#9 ) (byte) findcol::xp#5 ← phi( findcol::@1/(byte) findcol::xp#0 ) @@ -3198,10 +2660,10 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[256]) YPOS#39 ← phi( findcol::@9/(byte[256]) YPOS#40 ) - (byte[256]) XPOS#40 ← phi( findcol::@9/(byte[256]) XPOS#41 ) - (byte[256]) COLS#17 ← phi( findcol::@9/(byte[256]) COLS#20 ) - (byte) numpoints#36 ← phi( findcol::@9/(byte) numpoints#38 ) + (byte[]) YPOS#32 ← phi( findcol::@9/(byte[]) YPOS#33 ) + (byte[]) XPOS#33 ← phi( findcol::@9/(byte[]) XPOS#34 ) + (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#13 ) + (byte) numpoints#11 ← phi( findcol::@9/(byte) numpoints#13 ) (byte) findcol::i#12 ← phi( findcol::@9/(byte) findcol::i#13 ) (byte) findcol::mindiff#10 ← phi( findcol::@9/(byte) findcol::mindiff#12 ) (byte) findcol::yp#8 ← phi( findcol::@9/(byte) findcol::yp#1 ) @@ -3219,10 +2681,10 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#37 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#38 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#14 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#33 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#8 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#10 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#7 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#6 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -3234,10 +2696,10 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#36 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#37 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#13 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#32 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#30 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#7 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#9 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#6 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#5 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -3250,10 +2712,10 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 ) (byte) findcol::x#13 ← phi( findcol::@12/(byte) findcol::x#4 findcol::@4/(byte) findcol::x#3 ) - (byte[256]) YPOS#34 ← phi( findcol::@12/(byte[256]) YPOS#36 findcol::@4/(byte[256]) YPOS#37 ) - (byte[256]) XPOS#36 ← phi( findcol::@12/(byte[256]) XPOS#37 findcol::@4/(byte[256]) XPOS#38 ) - (byte[256]) COLS#12 ← phi( findcol::@12/(byte[256]) COLS#13 findcol::@4/(byte[256]) COLS#14 ) - (byte) numpoints#30 ← phi( findcol::@12/(byte) numpoints#32 findcol::@4/(byte) numpoints#33 ) + (byte[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) + (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#30 findcol::@4/(byte[]) XPOS#31 ) + (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) + (byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 ) (byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 ) (byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) @@ -3266,10 +2728,10 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 findcol::@6: scope:[findcol] from findcol::@5 (byte) findcol::mincol#6 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#12 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#29 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#32 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#11 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#28 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -3282,10 +2744,10 @@ findcol::@6: scope:[findcol] from findcol::@5 findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#11 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#28 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#31 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#10 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#27 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -3299,10 +2761,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#6 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#12 ) - (byte[256]) YPOS#24 ← phi( findcol::@14/(byte[256]) YPOS#28 findcol::@6/(byte[256]) YPOS#29 ) - (byte[256]) XPOS#26 ← phi( findcol::@14/(byte[256]) XPOS#31 findcol::@6/(byte[256]) XPOS#32 ) - (byte[256]) COLS#9 ← phi( findcol::@14/(byte[256]) COLS#10 findcol::@6/(byte[256]) COLS#11 ) - (byte) numpoints#25 ← phi( findcol::@14/(byte) numpoints#27 findcol::@6/(byte) numpoints#28 ) + (byte[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) + (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) + (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) + (byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 ) (byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 ) (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) @@ -3311,37 +2773,37 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$17) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[256]) COLS#19 ← phi( findcol::@16/(byte[256]) COLS#2 findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::mindiff#1 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#13 ) (byte) findcol::mincol#3 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#9 findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#20 ← phi( findcol::@16/(byte[256]) YPOS#23 findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#20 ← phi( findcol::@16/(byte[256]) XPOS#25 findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#21 ← phi( findcol::@16/(byte) numpoints#24 findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#5 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#21 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#1 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::y#12 ← phi( findcol::@7/(byte) findcol::y#13 ) (byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#23 ← phi( findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#25 ← phi( findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#24 ← phi( findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[256]) COLS#2 ← phi( findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 ) (byte) findcol::mindiff#1 ← (byte) findcol::diff#7 - (byte~) findcol::$18 ← (byte[256]) COLS#2 *idx (byte) findcol::i#4 + (byte~) findcol::$18 ← (byte[]) COLS#1 *idx (byte) findcol::i#4 (byte) findcol::mincol#1 ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 (byte) findcol::mincol#2 ← phi( findcol::@8/(byte) findcol::mincol#3 ) (byte) findcol::return#3 ← (byte) findcol::mincol#2 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Inversing boolean not (boolean~) animate::$4 ← (byte~) animate::$2 != (byte) 40 from (boolean~) animate::$3 ← (byte~) animate::$2 == (byte) 40 Inversing boolean not (boolean~) animate::$9 ← (byte~) animate::$7 != (byte) 25 from (boolean~) animate::$8 ← (byte~) animate::$7 == (byte) 25 @@ -3360,257 +2822,149 @@ CONTROL FLOW GRAPH (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin - (byte) numpoints#11 ← phi( @begin/(byte) numpoints#8 ) - (byte) numpoints#1 ← (byte) numpoints#11 to:@end main: scope:[main] from @begin - (byte*) COLORS#12 ← phi( @begin/(byte*) COLORS#0 ) - (byte) FILL#9 ← phi( @begin/(byte) FILL#0 ) - (byte*) SCREEN#9 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[256]) COLS#3 ← phi( @begin/(byte[256]) COLS#0 ) - (byte[256]) YPOS#13 ← phi( @begin/(byte[256]) YPOS#0 ) - (byte[256]) XPOS#13 ← phi( @begin/(byte[256]) XPOS#0 ) + (byte[]) COLS#22 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#22 ← phi( @begin/(byte) numpoints#0 ) - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + (byte[]) YPOS#28 ← phi( @begin/(byte[]) YPOS#0 ) + (byte[]) XPOS#26 ← phi( @begin/(byte[]) XPOS#0 ) + (byte*) COLORS#5 ← phi( @begin/(byte*) COLORS#0 ) + (byte) FILL#3 ← phi( @begin/(byte) FILL#0 ) + (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte*) COLORS#11 ← phi( main/(byte*) COLORS#12 ) - (byte) FILL#8 ← phi( main/(byte) FILL#9 ) - (byte*) SCREEN#8 ← phi( main/(byte*) SCREEN#9 ) - (byte[256]) COLS#4 ← phi( main/(byte[256]) COLS#3 ) - (byte[256]) YPOS#14 ← phi( main/(byte[256]) YPOS#13 ) - (byte[256]) XPOS#14 ← phi( main/(byte[256]) XPOS#13 ) - (byte) numpoints#12 ← phi( main/(byte) numpoints#10 ) - (byte) numpoints#2 ← (byte) numpoints#12 - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + (byte[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) + (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) + (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) + (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) + (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) + (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) + (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) + (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#21 ) + (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#4 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte*) COLORS#10 ← phi( main::@3/(byte*) COLORS#11 ) - (byte) FILL#7 ← phi( main::@3/(byte) FILL#8 ) - (byte*) SCREEN#7 ← phi( main::@3/(byte*) SCREEN#8 ) - (byte[256]) COLS#5 ← phi( main::@3/(byte[256]) COLS#4 ) - (byte[256]) YPOS#15 ← phi( main::@3/(byte[256]) YPOS#14 ) - (byte[256]) XPOS#15 ← phi( main::@3/(byte[256]) XPOS#14 ) - (byte) numpoints#13 ← phi( main::@3/(byte) numpoints#10 ) - (byte) numpoints#3 ← (byte) numpoints#13 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + (byte[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) + (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) + (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte*) COLORS#9 ← phi( main::@4/(byte*) COLORS#10 ) - (byte) FILL#6 ← phi( main::@4/(byte) FILL#7 ) - (byte*) SCREEN#6 ← phi( main::@4/(byte*) SCREEN#7 ) - (byte[256]) COLS#6 ← phi( main::@4/(byte[256]) COLS#5 ) - (byte[256]) YPOS#16 ← phi( main::@4/(byte[256]) YPOS#15 ) - (byte[256]) XPOS#16 ← phi( main::@4/(byte[256]) XPOS#15 ) - (byte) numpoints#14 ← phi( main::@4/(byte) numpoints#10 ) - (byte) numpoints#4 ← (byte) numpoints#14 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte*) COLORS#8 ← phi( main::@5/(byte*) COLORS#9 ) - (byte) FILL#5 ← phi( main::@5/(byte) FILL#6 ) - (byte*) SCREEN#5 ← phi( main::@5/(byte*) SCREEN#6 ) - (byte[256]) COLS#7 ← phi( main::@5/(byte[256]) COLS#6 ) - (byte[256]) YPOS#17 ← phi( main::@5/(byte[256]) YPOS#16 ) - (byte[256]) XPOS#17 ← phi( main::@5/(byte[256]) XPOS#16 ) - (byte) numpoints#15 ← phi( main::@5/(byte) numpoints#10 ) - (byte) numpoints#5 ← (byte) numpoints#15 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte*) COLORS#7 ← phi( main::@6/(byte*) COLORS#8 ) - (byte) FILL#4 ← phi( main::@6/(byte) FILL#5 ) - (byte*) SCREEN#4 ← phi( main::@6/(byte*) SCREEN#5 ) - (byte[256]) COLS#8 ← phi( main::@6/(byte[256]) COLS#7 ) - (byte[256]) YPOS#18 ← phi( main::@6/(byte[256]) YPOS#17 ) - (byte[256]) XPOS#18 ← phi( main::@6/(byte[256]) XPOS#17 ) - (byte) numpoints#16 ← phi( main::@6/(byte) numpoints#10 ) - (byte) numpoints#6 ← (byte) numpoints#16 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - (byte[256]) COLS#29 ← phi( main::@7/(byte[256]) COLS#8 ) - (byte[256]) YPOS#35 ← phi( main::@7/(byte[256]) YPOS#18 ) - (byte[256]) XPOS#33 ← phi( main::@7/(byte[256]) XPOS#18 ) - (byte*) COLORS#5 ← phi( main::@7/(byte*) COLORS#7 ) - (byte) FILL#3 ← phi( main::@7/(byte) FILL#4 ) - (byte*) SCREEN#3 ← phi( main::@7/(byte*) SCREEN#4 ) - (byte) numpoints#17 ← phi( main::@7/(byte) numpoints#10 ) - (byte) numpoints#7 ← (byte) numpoints#17 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - (byte[256]) COLS#28 ← phi( main::@8/(byte[256]) COLS#29 ) - (byte[256]) YPOS#31 ← phi( main::@8/(byte[256]) YPOS#35 ) - (byte) numpoints#31 ← phi( main::@8/(byte) numpoints#7 ) - (byte[256]) XPOS#28 ← phi( main::@8/(byte[256]) XPOS#33 ) - (byte*) COLORS#4 ← phi( main::@8/(byte*) COLORS#5 ) - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#26 ← phi( main::@11/(byte[256]) COLS#27 main::@9/(byte[256]) COLS#28 ) - (byte[256]) YPOS#25 ← phi( main::@11/(byte[256]) YPOS#30 main::@9/(byte[256]) YPOS#31 ) - (byte) numpoints#29 ← phi( main::@11/(byte) numpoints#23 main::@9/(byte) numpoints#31 ) - (byte[256]) XPOS#21 ← phi( main::@11/(byte[256]) XPOS#27 main::@9/(byte[256]) XPOS#28 ) - (byte*) COLORS#2 ← phi( main::@11/(byte*) COLORS#3 main::@9/(byte*) COLORS#4 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - (byte[256]) COLS#30 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[256]) YPOS#21 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte) numpoints#26 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) XPOS#9 ← phi( main::@1/(byte[256]) XPOS#21 ) - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - (byte[256]) COLS#27 ← phi( main::@10/(byte[256]) COLS#30 ) - (byte[256]) YPOS#30 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#27 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte*) COLORS#3 ← phi( main::@10/(byte*) COLORS#6 ) - (byte) numpoints#23 ← phi( main::@10/(byte) numpoints#26 ) + (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) + (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) + (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 - (byte) numpoints#18 ← phi( main::@11/(byte) numpoints#23 ) - (byte) numpoints#8 ← (byte) numpoints#18 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte[256]) YPOS#9 ← phi( main::@10/(byte[256]) YPOS#21 ) - (byte[256]) XPOS#1 ← phi( main::@10/(byte[256]) XPOS#9 ) - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$4 ← (byte~) animate::$2 != (byte) 40 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[256]) XPOS#10 ← phi( animate/(byte[256]) XPOS#1 animate::@7/(byte[256]) XPOS#2 ) - (byte[256]) YPOS#1 ← phi( animate/(byte[256]) YPOS#9 animate::@7/(byte[256]) YPOS#10 ) - (byte~) animate::$5 ← (byte[256]) YPOS#1 *idx (byte) 0 + (byte[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) + (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) + (byte~) animate::$5 ← (byte[]) YPOS#1 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#1 *idx (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#1 *idx (byte) 0 (boolean~) animate::$9 ← (byte~) animate::$7 != (byte) 25 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[256]) YPOS#10 ← phi( animate/(byte[256]) YPOS#9 ) - (byte[256]) XPOS#2 ← phi( animate/(byte[256]) XPOS#1 ) - *((byte[256]) XPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) + (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) + *((byte[]) XPOS#2 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[256]) YPOS#11 ← phi( animate::@1/(byte[256]) YPOS#1 animate::@8/(byte[256]) YPOS#2 ) - (byte[256]) XPOS#3 ← phi( animate::@1/(byte[256]) XPOS#10 animate::@8/(byte[256]) XPOS#11 ) - (byte~) animate::$10 ← (byte[256]) XPOS#3 *idx (byte) 1 + (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) + (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) + (byte~) animate::$10 ← (byte[]) XPOS#3 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#3 *idx (byte) 1 + *((byte[]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#3 *idx (byte) 1 (boolean~) animate::$14 ← (byte~) animate::$12 != (byte) 255 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - (byte[256]) XPOS#11 ← phi( animate::@1/(byte[256]) XPOS#10 ) - (byte[256]) YPOS#2 ← phi( animate::@1/(byte[256]) YPOS#1 ) - *((byte[256]) YPOS#2 + (byte) 0) ← (byte) 0 + (byte[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) + (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) + *((byte[]) YPOS#2 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[256]) XPOS#23 ← phi( animate::@2/(byte[256]) XPOS#3 animate::@9/(byte[256]) XPOS#4 ) - (byte[256]) YPOS#3 ← phi( animate::@2/(byte[256]) YPOS#11 animate::@9/(byte[256]) YPOS#12 ) - (byte~) animate::$15 ← (byte[256]) YPOS#3 *idx (byte) 2 + (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) + (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) + (byte~) animate::$15 ← (byte[]) YPOS#3 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#3 *idx (byte) 2 + *((byte[]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#3 *idx (byte) 2 (boolean~) animate::$19 ← (byte~) animate::$17 != (byte) 25 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - (byte[256]) YPOS#12 ← phi( animate::@2/(byte[256]) YPOS#11 ) - (byte[256]) XPOS#4 ← phi( animate::@2/(byte[256]) XPOS#3 ) - *((byte[256]) XPOS#4 + (byte) 1) ← (byte) 40 + (byte[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) + (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) + *((byte[]) XPOS#4 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[256]) XPOS#12 ← phi( animate::@10/(byte[256]) XPOS#22 animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#4 ← phi( animate::@10/(byte[256]) YPOS#5 animate::@3/(byte[256]) YPOS#3 ) - (byte~) animate::$20 ← (byte[256]) YPOS#4 *idx (byte) 3 + (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) + (byte~) animate::$20 ← (byte[]) YPOS#4 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#4 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#4 *idx (byte) 3 (boolean~) animate::$24 ← (byte~) animate::$22 != (byte) 255 if((boolean~) animate::$24) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[256]) XPOS#22 ← phi( animate::@3/(byte[256]) XPOS#23 ) - (byte[256]) YPOS#5 ← phi( animate::@3/(byte[256]) YPOS#3 ) - *((byte[256]) YPOS#5 + (byte) 2) ← (byte) 0 + (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) + (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) + *((byte[]) YPOS#5 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - (byte[256]) XPOS#5 ← phi( animate::@4/(byte[256]) XPOS#12 ) - (byte[256]) YPOS#6 ← phi( animate::@4/(byte[256]) YPOS#4 ) - *((byte[256]) YPOS#6 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#5 *idx (byte) 3 + (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) + (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) + *((byte[]) YPOS#6 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#5 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#5 *idx (byte) 3 + *((byte[]) XPOS#5 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#5 *idx (byte) 3 (boolean~) animate::$29 ← (byte~) animate::$27 < (byte) 40 if((boolean~) animate::$29) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte[256]) XPOS#6 ← phi( animate::@11/(byte[256]) XPOS#5 ) - (byte~) animate::$30 ← (byte[256]) XPOS#6 *idx (byte) 3 + (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) + (byte~) animate::$30 ← (byte[]) XPOS#6 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#6 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte[256]) COLS#1 ← phi( main/(byte[256]) COLS#3 main::@3/(byte[256]) COLS#4 main::@4/(byte[256]) COLS#5 main::@5/(byte[256]) COLS#6 main::@6/(byte[256]) COLS#7 main::@7/(byte[256]) COLS#8 ) - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte[256]) YPOS#7 ← phi( main/(byte[256]) YPOS#13 main::@3/(byte[256]) YPOS#14 main::@4/(byte[256]) YPOS#15 main::@5/(byte[256]) YPOS#16 main::@6/(byte[256]) YPOS#17 main::@7/(byte[256]) YPOS#18 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#22 main::@3/(byte) numpoints#2 main::@4/(byte) numpoints#3 main::@5/(byte) numpoints#4 main::@6/(byte) numpoints#5 main::@7/(byte) numpoints#6 ) - (byte[256]) XPOS#7 ← phi( main/(byte[256]) XPOS#13 main::@3/(byte[256]) XPOS#14 main::@4/(byte[256]) XPOS#15 main::@5/(byte[256]) XPOS#16 main::@6/(byte[256]) XPOS#17 main::@7/(byte[256]) XPOS#18 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#7 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#7 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#1 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#9 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - (byte) numpoints#20 ← phi( addpoint/(byte) numpoints#9 ) - (byte) numpoints#10 ← (byte) numpoints#20 - return - to:@return -initscreen: scope:[initscreen] from main::@8 - (byte) FILL#2 ← phi( main::@8/(byte) FILL#3 ) - (byte*) SCREEN#1 ← phi( main::@8/(byte*) SCREEN#3 ) +initscreen: scope:[initscreen] from main + (byte) FILL#2 ← phi( main/(byte) FILL#3 ) + (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#3 ) (byte*) initscreen::screen#0 ← (byte*) SCREEN#1 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -3627,28 +2981,28 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[256]) COLS#24 ← phi( main::@1/(byte[256]) COLS#26 ) - (byte) numpoints#42 ← phi( main::@1/(byte) numpoints#29 ) - (byte[256]) YPOS#32 ← phi( main::@1/(byte[256]) YPOS#25 ) - (byte[256]) XPOS#34 ← phi( main::@1/(byte[256]) XPOS#21 ) + (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) + (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) + (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) + (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (byte*) COLORS#1 ← phi( main::@1/(byte*) COLORS#2 ) (byte*) render::colline#0 ← (byte*) COLORS#1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#25 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#42 render::@3/(byte) numpoints#43 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#32 render::@3/(byte[256]) YPOS#33 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#34 render::@3/(byte[256]) XPOS#35 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#21 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#39 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#22 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#24 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) + (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#5 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -3658,10 +3012,10 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[256]) COLS#23 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#41 ← phi( render::@2/(byte) numpoints#39 ) - (byte[256]) YPOS#27 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#30 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) + (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) render::y#5 ← phi( render::@2/(byte) render::y#2 ) (byte) render::x#3 ← phi( render::@2/(byte) render::x#2 ) (byte*) render::colline#2 ← phi( render::@2/(byte*) render::colline#4 ) @@ -3674,10 +3028,10 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[256]) COLS#25 ← phi( render::@5/(byte[256]) COLS#23 ) - (byte) numpoints#43 ← phi( render::@5/(byte) numpoints#41 ) - (byte[256]) YPOS#33 ← phi( render::@5/(byte[256]) YPOS#27 ) - (byte[256]) XPOS#35 ← phi( render::@5/(byte[256]) XPOS#30 ) + (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) + (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) + (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) + (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (byte) render::y#3 ← phi( render::@5/(byte) render::y#5 ) (byte*) render::colline#3 ← phi( render::@5/(byte*) render::colline#2 ) (byte*~) render::$2 ← (byte*) render::colline#3 + (byte) 40 @@ -3690,39 +3044,39 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[256]) COLS#18 ← phi( render::@2/(byte[256]) COLS#21 ) - (byte) numpoints#37 ← phi( render::@2/(byte) numpoints#39 ) + (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) + (byte) numpoints#12 ← phi( render::@2/(byte) numpoints#14 ) (byte) findcol::y#8 ← phi( render::@2/(byte) findcol::y#0 ) (byte) findcol::x#5 ← phi( render::@2/(byte) findcol::x#0 ) - (byte[256]) YPOS#19 ← phi( render::@2/(byte[256]) YPOS#22 ) - (byte[256]) XPOS#19 ← phi( render::@2/(byte[256]) XPOS#24 ) + (byte[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) + (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte) 255 (byte) findcol::mincol#0 ← (byte) 0 (byte) findcol::i#0 ← (byte) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#3 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#19 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#21 ) + (byte[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#9 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#5 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#9 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#6 ) - (byte[256]) YPOS#8 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#20 ) + (byte[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#8 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#20 ) - (byte~) findcol::$0 ← (byte[256]) XPOS#8 *idx (byte) findcol::i#2 + (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) + (byte~) findcol::$0 ← (byte[]) XPOS#7 *idx (byte) findcol::i#2 (byte) findcol::xp#0 ← (byte~) findcol::$0 - (byte~) findcol::$1 ← (byte[256]) YPOS#8 *idx (byte) findcol::i#2 + (byte~) findcol::$1 ← (byte[]) YPOS#7 *idx (byte) findcol::i#2 (byte) findcol::yp#0 ← (byte~) findcol::$1 (boolean~) findcol::$3 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$3) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#12 ) - (byte[256]) YPOS#38 ← phi( findcol::@1/(byte[256]) YPOS#8 findcol::@3/(byte[256]) YPOS#39 ) - (byte[256]) XPOS#39 ← phi( findcol::@1/(byte[256]) XPOS#8 findcol::@3/(byte[256]) XPOS#40 ) - (byte[256]) COLS#15 ← phi( findcol::@1/(byte[256]) COLS#16 findcol::@3/(byte[256]) COLS#17 ) - (byte) numpoints#34 ← phi( findcol::@1/(byte) numpoints#35 findcol::@3/(byte) numpoints#36 ) + (byte[]) YPOS#31 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#32 ) + (byte[]) XPOS#32 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#33 ) + (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) + (byte) numpoints#9 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#11 ) (byte) findcol::i#11 ← phi( findcol::@1/(byte) findcol::i#2 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#8 ← phi( findcol::@1/(byte) findcol::mindiff#9 findcol::@3/(byte) findcol::mindiff#10 ) (byte) findcol::yp#7 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#8 ) @@ -3734,10 +3088,10 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[256]) YPOS#40 ← phi( findcol::@1/(byte[256]) YPOS#8 ) - (byte[256]) XPOS#41 ← phi( findcol::@1/(byte[256]) XPOS#8 ) - (byte[256]) COLS#20 ← phi( findcol::@1/(byte[256]) COLS#16 ) - (byte) numpoints#38 ← phi( findcol::@1/(byte) numpoints#35 ) + (byte[]) YPOS#33 ← phi( findcol::@1/(byte[]) YPOS#7 ) + (byte[]) XPOS#34 ← phi( findcol::@1/(byte[]) XPOS#7 ) + (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) + (byte) numpoints#13 ← phi( findcol::@1/(byte) numpoints#10 ) (byte) findcol::i#13 ← phi( findcol::@1/(byte) findcol::i#2 ) (byte) findcol::mindiff#12 ← phi( findcol::@1/(byte) findcol::mindiff#9 ) (byte) findcol::xp#5 ← phi( findcol::@1/(byte) findcol::xp#0 ) @@ -3749,10 +3103,10 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[256]) YPOS#39 ← phi( findcol::@9/(byte[256]) YPOS#40 ) - (byte[256]) XPOS#40 ← phi( findcol::@9/(byte[256]) XPOS#41 ) - (byte[256]) COLS#17 ← phi( findcol::@9/(byte[256]) COLS#20 ) - (byte) numpoints#36 ← phi( findcol::@9/(byte) numpoints#38 ) + (byte[]) YPOS#32 ← phi( findcol::@9/(byte[]) YPOS#33 ) + (byte[]) XPOS#33 ← phi( findcol::@9/(byte[]) XPOS#34 ) + (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#13 ) + (byte) numpoints#11 ← phi( findcol::@9/(byte) numpoints#13 ) (byte) findcol::i#12 ← phi( findcol::@9/(byte) findcol::i#13 ) (byte) findcol::mindiff#10 ← phi( findcol::@9/(byte) findcol::mindiff#12 ) (byte) findcol::yp#8 ← phi( findcol::@9/(byte) findcol::yp#1 ) @@ -3770,10 +3124,10 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#37 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#38 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#14 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#33 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#8 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#10 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#7 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#6 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -3785,10 +3139,10 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[256]) YPOS#36 ← phi( findcol::@2/(byte[256]) YPOS#38 ) - (byte[256]) XPOS#37 ← phi( findcol::@2/(byte[256]) XPOS#39 ) - (byte[256]) COLS#13 ← phi( findcol::@2/(byte[256]) COLS#15 ) - (byte) numpoints#32 ← phi( findcol::@2/(byte) numpoints#34 ) + (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#31 ) + (byte[]) XPOS#30 ← phi( findcol::@2/(byte[]) XPOS#32 ) + (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) + (byte) numpoints#7 ← phi( findcol::@2/(byte) numpoints#9 ) (byte) findcol::i#9 ← phi( findcol::@2/(byte) findcol::i#11 ) (byte) findcol::mindiff#6 ← phi( findcol::@2/(byte) findcol::mindiff#8 ) (byte) findcol::yp#5 ← phi( findcol::@2/(byte) findcol::yp#7 ) @@ -3801,10 +3155,10 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 ) (byte) findcol::x#13 ← phi( findcol::@12/(byte) findcol::x#4 findcol::@4/(byte) findcol::x#3 ) - (byte[256]) YPOS#34 ← phi( findcol::@12/(byte[256]) YPOS#36 findcol::@4/(byte[256]) YPOS#37 ) - (byte[256]) XPOS#36 ← phi( findcol::@12/(byte[256]) XPOS#37 findcol::@4/(byte[256]) XPOS#38 ) - (byte[256]) COLS#12 ← phi( findcol::@12/(byte[256]) COLS#13 findcol::@4/(byte[256]) COLS#14 ) - (byte) numpoints#30 ← phi( findcol::@12/(byte) numpoints#32 findcol::@4/(byte) numpoints#33 ) + (byte[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) + (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#30 findcol::@4/(byte[]) XPOS#31 ) + (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) + (byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 ) (byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 ) (byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) @@ -3816,10 +3170,10 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 findcol::@6: scope:[findcol] from findcol::@5 (byte) findcol::mincol#6 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#12 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#29 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#32 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#11 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#28 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -3832,10 +3186,10 @@ findcol::@6: scope:[findcol] from findcol::@5 findcol::@14: scope:[findcol] from findcol::@5 (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 ) (byte) findcol::x#11 ← phi( findcol::@5/(byte) findcol::x#13 ) - (byte[256]) YPOS#28 ← phi( findcol::@5/(byte[256]) YPOS#34 ) - (byte[256]) XPOS#31 ← phi( findcol::@5/(byte[256]) XPOS#36 ) - (byte[256]) COLS#10 ← phi( findcol::@5/(byte[256]) COLS#12 ) - (byte) numpoints#27 ← phi( findcol::@5/(byte) numpoints#30 ) + (byte[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) + (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) + (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) + (byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 ) (byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 ) (byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 ) (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 ) @@ -3849,10 +3203,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#6 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#12 ) - (byte[256]) YPOS#24 ← phi( findcol::@14/(byte[256]) YPOS#28 findcol::@6/(byte[256]) YPOS#29 ) - (byte[256]) XPOS#26 ← phi( findcol::@14/(byte[256]) XPOS#31 findcol::@6/(byte[256]) XPOS#32 ) - (byte[256]) COLS#9 ← phi( findcol::@14/(byte[256]) COLS#10 findcol::@6/(byte[256]) COLS#11 ) - (byte) numpoints#25 ← phi( findcol::@14/(byte) numpoints#27 findcol::@6/(byte) numpoints#28 ) + (byte[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) + (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) + (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) + (byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 ) (byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 ) (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) @@ -3860,72 +3214,71 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$17) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[256]) COLS#19 ← phi( findcol::@16/(byte[256]) COLS#2 findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::mindiff#1 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#13 ) (byte) findcol::mincol#3 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#9 findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#20 ← phi( findcol::@16/(byte[256]) YPOS#23 findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#20 ← phi( findcol::@16/(byte[256]) XPOS#25 findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#21 ← phi( findcol::@16/(byte) numpoints#24 findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#5 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#21 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#1 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 (byte) findcol::y#12 ← phi( findcol::@7/(byte) findcol::y#13 ) (byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#23 ← phi( findcol::@7/(byte[256]) YPOS#24 ) - (byte[256]) XPOS#25 ← phi( findcol::@7/(byte[256]) XPOS#26 ) - (byte) numpoints#24 ← phi( findcol::@7/(byte) numpoints#25 ) + (byte[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) + (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) + (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[256]) COLS#2 ← phi( findcol::@7/(byte[256]) COLS#9 ) + (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 ) (byte) findcol::mindiff#1 ← (byte) findcol::diff#7 - (byte~) findcol::$18 ← (byte[256]) COLS#2 *idx (byte) findcol::i#4 + (byte~) findcol::$18 ← (byte[]) COLS#1 *idx (byte) findcol::i#4 (byte) findcol::mincol#1 ← (byte~) findcol::$18 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 (byte) findcol::mincol#2 ← phi( findcol::@8/(byte) findcol::mincol#3 ) (byte) findcol::return#3 ← (byte) findcol::mincol#2 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Not aliassing across scopes: initscreen::screen#0 SCREEN#1 Not aliassing across scopes: render::colline#0 COLORS#1 Not aliassing across scopes: findcol::x#0 render::x#2 Not aliassing across scopes: findcol::y#0 render::y#2 Not aliassing across scopes: render::$0 findcol::return#4 -Alias (byte) numpoints#1 = (byte) numpoints#11 (byte) numpoints#8 (byte) numpoints#26 (byte) numpoints#29 (byte) numpoints#23 (byte) numpoints#18 (byte) numpoints#42 -Alias (byte) numpoints#0 = (byte) numpoints#22 -Alias (byte[256]) XPOS#0 = (byte[256]) XPOS#13 (byte[256]) XPOS#14 (byte[256]) XPOS#15 (byte[256]) XPOS#16 (byte[256]) XPOS#17 (byte[256]) XPOS#18 (byte[256]) XPOS#33 (byte[256]) XPOS#28 -Alias (byte[256]) YPOS#0 = (byte[256]) YPOS#13 (byte[256]) YPOS#14 (byte[256]) YPOS#15 (byte[256]) YPOS#16 (byte[256]) YPOS#17 (byte[256]) YPOS#18 (byte[256]) YPOS#35 (byte[256]) YPOS#31 -Alias (byte[256]) COLS#0 = (byte[256]) COLS#3 (byte[256]) COLS#4 (byte[256]) COLS#5 (byte[256]) COLS#6 (byte[256]) COLS#7 (byte[256]) COLS#8 (byte[256]) COLS#29 (byte[256]) COLS#28 -Alias (byte*) SCREEN#0 = (byte*) SCREEN#9 (byte*) SCREEN#8 (byte*) SCREEN#7 (byte*) SCREEN#6 (byte*) SCREEN#5 (byte*) SCREEN#4 (byte*) SCREEN#3 (byte*) SCREEN#1 -Alias (byte) FILL#0 = (byte) FILL#9 (byte) FILL#8 (byte) FILL#7 (byte) FILL#6 (byte) FILL#5 (byte) FILL#4 (byte) FILL#3 (byte) FILL#2 -Alias (byte*) COLORS#0 = (byte*) COLORS#12 (byte*) COLORS#11 (byte*) COLORS#10 (byte*) COLORS#9 (byte*) COLORS#8 (byte*) COLORS#7 (byte*) COLORS#5 (byte*) COLORS#4 -Alias (byte) numpoints#10 = (byte) numpoints#12 (byte) numpoints#2 (byte) numpoints#13 (byte) numpoints#3 (byte) numpoints#14 (byte) numpoints#4 (byte) numpoints#15 (byte) numpoints#5 (byte) numpoints#16 (byte) numpoints#6 (byte) numpoints#17 (byte) numpoints#7 (byte) numpoints#31 (byte) numpoints#20 (byte) numpoints#9 -Alias (byte[256]) XPOS#1 = (byte[256]) XPOS#9 (byte[256]) XPOS#21 (byte[256]) XPOS#27 (byte[256]) XPOS#2 (byte[256]) XPOS#34 -Alias (byte[256]) YPOS#10 = (byte[256]) YPOS#21 (byte[256]) YPOS#25 (byte[256]) YPOS#30 (byte[256]) YPOS#9 (byte[256]) YPOS#32 -Alias (byte*) COLORS#1 = (byte*) COLORS#6 (byte*) COLORS#2 (byte*) COLORS#3 -Alias (byte[256]) COLS#24 = (byte[256]) COLS#30 (byte[256]) COLS#26 (byte[256]) COLS#27 -Alias (byte[256]) YPOS#1 = (byte[256]) YPOS#2 -Alias (byte[256]) XPOS#10 = (byte[256]) XPOS#11 -Alias (byte[256]) XPOS#3 = (byte[256]) XPOS#4 -Alias (byte[256]) YPOS#11 = (byte[256]) YPOS#12 -Alias (byte[256]) YPOS#3 = (byte[256]) YPOS#5 -Alias (byte[256]) XPOS#22 = (byte[256]) XPOS#23 -Alias (byte[256]) YPOS#4 = (byte[256]) YPOS#6 -Alias (byte[256]) XPOS#12 = (byte[256]) XPOS#5 (byte[256]) XPOS#6 +Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 (byte*) SCREEN#1 +Alias (byte) FILL#0 = (byte) FILL#3 (byte) FILL#2 +Alias (byte*) COLORS#0 = (byte*) COLORS#5 (byte*) COLORS#3 +Alias (byte[]) XPOS#0 = (byte[]) XPOS#26 (byte[]) XPOS#20 +Alias (byte[]) YPOS#0 = (byte[]) YPOS#28 (byte[]) YPOS#23 +Alias (byte) numpoints#0 = (byte) numpoints#22 (byte) numpoints#20 +Alias (byte[]) COLS#0 = (byte[]) COLS#22 (byte[]) COLS#20 +Alias (byte[]) XPOS#1 = (byte[]) XPOS#8 (byte[]) XPOS#14 (byte[]) XPOS#21 (byte[]) XPOS#2 (byte[]) XPOS#27 +Alias (byte[]) YPOS#14 = (byte[]) YPOS#18 (byte[]) YPOS#24 (byte[]) YPOS#8 (byte[]) YPOS#9 (byte[]) YPOS#25 +Alias (byte*) COLORS#1 = (byte*) COLORS#6 (byte*) COLORS#2 (byte*) COLORS#4 +Alias (byte) numpoints#17 = (byte) numpoints#23 (byte) numpoints#19 (byte) numpoints#21 +Alias (byte[]) COLS#17 = (byte[]) COLS#23 (byte[]) COLS#19 (byte[]) COLS#21 +Alias (byte[]) YPOS#1 = (byte[]) YPOS#2 +Alias (byte[]) XPOS#10 = (byte[]) XPOS#9 +Alias (byte[]) XPOS#3 = (byte[]) XPOS#4 +Alias (byte[]) YPOS#10 = (byte[]) YPOS#11 +Alias (byte[]) YPOS#3 = (byte[]) YPOS#5 +Alias (byte[]) XPOS#15 = (byte[]) XPOS#16 +Alias (byte[]) YPOS#4 = (byte[]) YPOS#6 +Alias (byte[]) XPOS#11 = (byte[]) XPOS#5 (byte[]) XPOS#6 Alias (byte) findcol::return#0 = (byte) findcol::return#2 (byte) findcol::return#4 (byte) findcol::return#5 Alias (byte*) render::colline#2 = (byte*) render::colline#4 (byte*) render::colline#3 Alias (byte) render::x#2 = (byte) render::x#3 Alias (byte) render::y#2 = (byte) render::y#5 (byte) render::y#3 -Alias (byte[256]) XPOS#19 = (byte[256]) XPOS#30 (byte[256]) XPOS#24 (byte[256]) XPOS#35 -Alias (byte[256]) YPOS#19 = (byte[256]) YPOS#27 (byte[256]) YPOS#22 (byte[256]) YPOS#33 -Alias (byte) numpoints#37 = (byte) numpoints#41 (byte) numpoints#39 (byte) numpoints#43 -Alias (byte[256]) COLS#18 = (byte[256]) COLS#23 (byte[256]) COLS#21 (byte[256]) COLS#25 +Alias (byte[]) XPOS#12 = (byte[]) XPOS#23 (byte[]) XPOS#17 (byte[]) XPOS#28 +Alias (byte[]) YPOS#12 = (byte[]) YPOS#20 (byte[]) YPOS#15 (byte[]) YPOS#26 +Alias (byte) numpoints#12 = (byte) numpoints#16 (byte) numpoints#14 (byte) numpoints#18 +Alias (byte[]) COLS#11 = (byte[]) COLS#16 (byte[]) COLS#14 (byte[]) COLS#18 Alias (byte) render::col#0 = (byte~) render::$0 Alias (byte*) render::colline#1 = (byte*~) render::$2 Alias (byte) findcol::x#0 = (byte) findcol::x#5 @@ -3936,10 +3289,10 @@ Alias (byte) findcol::y#1 = (byte) findcol::y#5 (byte) findcol::y#11 Alias (byte) findcol::x#1 = (byte) findcol::x#8 (byte) findcol::x#7 Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#12 (byte) findcol::mindiff#9 Alias (byte) findcol::i#12 = (byte) findcol::i#13 (byte) findcol::i#2 -Alias (byte) numpoints#35 = (byte) numpoints#38 (byte) numpoints#36 -Alias (byte[256]) COLS#16 = (byte[256]) COLS#20 (byte[256]) COLS#17 -Alias (byte[256]) XPOS#40 = (byte[256]) XPOS#41 (byte[256]) XPOS#8 -Alias (byte[256]) YPOS#39 = (byte[256]) YPOS#40 (byte[256]) YPOS#8 +Alias (byte) numpoints#10 = (byte) numpoints#13 (byte) numpoints#11 +Alias (byte[]) COLS#10 = (byte[]) COLS#13 (byte[]) COLS#9 +Alias (byte[]) XPOS#33 = (byte[]) XPOS#34 (byte[]) XPOS#7 +Alias (byte[]) YPOS#32 = (byte[]) YPOS#33 (byte[]) YPOS#7 Alias (byte) findcol::mincol#11 = (byte) findcol::mincol#13 (byte) findcol::mincol#12 Alias (byte) findcol::x#2 = (byte) findcol::x#3 (byte) findcol::x#4 Alias (byte) findcol::xp#1 = (byte) findcol::xp#2 (byte) findcol::xp#3 @@ -3947,10 +3300,10 @@ Alias (byte) findcol::y#10 = (byte) findcol::y#7 (byte) findcol::y#6 Alias (byte) findcol::yp#5 = (byte) findcol::yp#6 (byte) findcol::yp#7 Alias (byte) findcol::mindiff#6 = (byte) findcol::mindiff#7 (byte) findcol::mindiff#8 Alias (byte) findcol::i#10 = (byte) findcol::i#11 (byte) findcol::i#9 -Alias (byte) numpoints#32 = (byte) numpoints#33 (byte) numpoints#34 -Alias (byte[256]) COLS#13 = (byte[256]) COLS#14 (byte[256]) COLS#15 -Alias (byte[256]) XPOS#37 = (byte[256]) XPOS#38 (byte[256]) XPOS#39 -Alias (byte[256]) YPOS#36 = (byte[256]) YPOS#37 (byte[256]) YPOS#38 +Alias (byte) numpoints#7 = (byte) numpoints#8 (byte) numpoints#9 +Alias (byte[]) COLS#6 = (byte[]) COLS#7 (byte[]) COLS#8 +Alias (byte[]) XPOS#30 = (byte[]) XPOS#31 (byte[]) XPOS#32 +Alias (byte[]) YPOS#29 = (byte[]) YPOS#30 (byte[]) YPOS#31 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#9 (byte) findcol::mincol#8 Alias (byte) findcol::diff#0 = (byte~) findcol::$9 Alias (byte) findcol::diff#1 = (byte~) findcol::$8 @@ -3959,20 +3312,20 @@ Alias (byte) findcol::yp#2 = (byte) findcol::yp#3 (byte) findcol::yp#4 Alias (byte) findcol::diff#4 = (byte) findcol::diff#8 (byte) findcol::diff#5 Alias (byte) findcol::mindiff#3 = (byte) findcol::mindiff#4 (byte) findcol::mindiff#5 Alias (byte) findcol::i#6 = (byte) findcol::i#7 (byte) findcol::i#8 -Alias (byte) numpoints#27 = (byte) numpoints#28 (byte) numpoints#30 -Alias (byte[256]) COLS#10 = (byte[256]) COLS#11 (byte[256]) COLS#12 -Alias (byte[256]) XPOS#31 = (byte[256]) XPOS#32 (byte[256]) XPOS#36 -Alias (byte[256]) YPOS#28 = (byte[256]) YPOS#29 (byte[256]) YPOS#34 +Alias (byte) numpoints#4 = (byte) numpoints#5 (byte) numpoints#6 +Alias (byte[]) COLS#3 = (byte[]) COLS#4 (byte[]) COLS#5 +Alias (byte[]) XPOS#24 = (byte[]) XPOS#25 (byte[]) XPOS#29 +Alias (byte[]) YPOS#21 = (byte[]) YPOS#22 (byte[]) YPOS#27 Alias (byte) findcol::x#11 = (byte) findcol::x#12 (byte) findcol::x#13 Alias (byte) findcol::mincol#5 = (byte) findcol::mincol#6 (byte) findcol::mincol#7 Alias (byte) findcol::diff#2 = (byte~) findcol::$15 Alias (byte) findcol::diff#3 = (byte~) findcol::$13 Alias (byte) findcol::diff#6 = (byte) findcol::diff#7 (byte) findcol::mindiff#1 -Alias (byte[256]) COLS#2 = (byte[256]) COLS#9 +Alias (byte[]) COLS#1 = (byte[]) COLS#2 Alias (byte) findcol::i#4 = (byte) findcol::i#5 -Alias (byte) numpoints#24 = (byte) numpoints#25 -Alias (byte[256]) XPOS#25 = (byte[256]) XPOS#26 -Alias (byte[256]) YPOS#23 = (byte[256]) YPOS#24 +Alias (byte) numpoints#2 = (byte) numpoints#3 +Alias (byte[]) XPOS#18 = (byte[]) XPOS#19 +Alias (byte[]) YPOS#16 = (byte[]) YPOS#17 Alias (byte) findcol::x#10 = (byte) findcol::x#9 Alias (byte) findcol::y#12 = (byte) findcol::y#13 Alias (byte) findcol::mincol#1 = (byte~) findcol::$18 @@ -3983,166 +3336,112 @@ CONTROL FLOW GRAPH (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#17 ← phi( main::@3/(byte[]) COLS#0 main::@5/(byte[]) COLS#17 ) + (byte) numpoints#17 ← phi( main::@3/(byte) numpoints#0 main::@5/(byte) numpoints#17 ) + (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#0 main::@5/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@3/(byte[]) XPOS#0 main::@5/(byte[]) XPOS#1 ) + (byte*) COLORS#1 ← phi( main::@3/(byte*) COLORS#0 main::@5/(byte*) COLORS#1 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#24 ← phi( main::@11/(byte[256]) COLS#24 main::@9/(byte[256]) COLS#0 ) - (byte[256]) YPOS#10 ← phi( main::@11/(byte[256]) YPOS#10 main::@9/(byte[256]) YPOS#0 ) - (byte) numpoints#1 ← phi( main::@11/(byte) numpoints#1 main::@9/(byte) numpoints#10 ) - (byte[256]) XPOS#1 ← phi( main::@11/(byte[256]) XPOS#1 main::@9/(byte[256]) XPOS#0 ) - (byte*) COLORS#1 ← phi( main::@11/(byte*) COLORS#1 main::@9/(byte*) COLORS#0 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$4 ← (byte~) animate::$2 != (byte) 40 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[256]) XPOS#10 ← phi( animate/(byte[256]) XPOS#1 animate::@7/(byte[256]) XPOS#1 ) - (byte[256]) YPOS#1 ← phi( animate/(byte[256]) YPOS#10 animate::@7/(byte[256]) YPOS#10 ) - (byte~) animate::$5 ← (byte[256]) YPOS#1 *idx (byte) 0 + (byte[]) XPOS#10 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#1 ) + (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#14 animate::@7/(byte[]) YPOS#14 ) + (byte~) animate::$5 ← (byte[]) YPOS#1 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#1 *idx (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#1 *idx (byte) 0 (boolean~) animate::$9 ← (byte~) animate::$7 != (byte) 25 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[256]) YPOS#11 ← phi( animate::@1/(byte[256]) YPOS#1 animate::@8/(byte[256]) YPOS#1 ) - (byte[256]) XPOS#3 ← phi( animate::@1/(byte[256]) XPOS#10 animate::@8/(byte[256]) XPOS#10 ) - (byte~) animate::$10 ← (byte[256]) XPOS#3 *idx (byte) 1 + (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#1 ) + (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#10 animate::@8/(byte[]) XPOS#10 ) + (byte~) animate::$10 ← (byte[]) XPOS#3 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#3 *idx (byte) 1 + *((byte[]) XPOS#3 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#3 *idx (byte) 1 (boolean~) animate::$14 ← (byte~) animate::$12 != (byte) 255 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) YPOS#1 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[256]) XPOS#22 ← phi( animate::@2/(byte[256]) XPOS#3 animate::@9/(byte[256]) XPOS#3 ) - (byte[256]) YPOS#3 ← phi( animate::@2/(byte[256]) YPOS#11 animate::@9/(byte[256]) YPOS#11 ) - (byte~) animate::$15 ← (byte[256]) YPOS#3 *idx (byte) 2 + (byte[]) XPOS#15 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#3 ) + (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#10 ) + (byte~) animate::$15 ← (byte[]) YPOS#3 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#3 *idx (byte) 2 + *((byte[]) YPOS#3 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#3 *idx (byte) 2 (boolean~) animate::$19 ← (byte~) animate::$17 != (byte) 25 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS#3 + (byte) 1) ← (byte) 40 + *((byte[]) XPOS#3 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[256]) XPOS#12 ← phi( animate::@10/(byte[256]) XPOS#22 animate::@3/(byte[256]) XPOS#22 ) - (byte[256]) YPOS#4 ← phi( animate::@10/(byte[256]) YPOS#3 animate::@3/(byte[256]) YPOS#3 ) - (byte~) animate::$20 ← (byte[256]) YPOS#4 *idx (byte) 3 + (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#15 ) + (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#3 animate::@3/(byte[]) YPOS#3 ) + (byte~) animate::$20 ← (byte[]) YPOS#4 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#4 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#4 *idx (byte) 3 (boolean~) animate::$24 ← (byte~) animate::$22 != (byte) 255 if((boolean~) animate::$24) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS#3 + (byte) 2) ← (byte) 0 + *((byte[]) YPOS#3 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS#4 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#12 *idx (byte) 3 + *((byte[]) YPOS#4 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#11 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#12 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#12 *idx (byte) 3 + *((byte[]) XPOS#11 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#11 *idx (byte) 3 (boolean~) animate::$29 ← (byte~) animate::$27 < (byte) 40 if((boolean~) animate::$29) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS#12 *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS#11 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#12 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#11 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte[256]) COLS#1 ← phi( main/(byte[256]) COLS#0 main::@3/(byte[256]) COLS#0 main::@4/(byte[256]) COLS#0 main::@5/(byte[256]) COLS#0 main::@6/(byte[256]) COLS#0 main::@7/(byte[256]) COLS#0 ) - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte[256]) YPOS#7 ← phi( main/(byte[256]) YPOS#0 main::@3/(byte[256]) YPOS#0 main::@4/(byte[256]) YPOS#0 main::@5/(byte[256]) YPOS#0 main::@6/(byte[256]) YPOS#0 main::@7/(byte[256]) YPOS#0 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte[256]) XPOS#7 ← phi( main/(byte[256]) XPOS#0 main::@3/(byte[256]) XPOS#0 main::@4/(byte[256]) XPOS#0 main::@5/(byte[256]) XPOS#0 main::@6/(byte[256]) XPOS#0 main::@7/(byte[256]) XPOS#0 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#7 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#7 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#1 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen#0 ← (byte*) SCREEN#0 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -4163,19 +3462,19 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#18 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#37 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#19 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#11 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#12 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#12 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#12 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#2 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -4206,25 +3505,25 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#19 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#21 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 findcol::@8/(byte) findcol::y#9 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 findcol::@8/(byte) findcol::x#6 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#20 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#12 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#20 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 (boolean~) findcol::$3 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$3) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#11 ) - (byte[256]) YPOS#36 ← phi( findcol::@1/(byte[256]) YPOS#39 findcol::@3/(byte[256]) YPOS#39 ) - (byte[256]) XPOS#37 ← phi( findcol::@1/(byte[256]) XPOS#40 findcol::@3/(byte[256]) XPOS#40 ) - (byte[256]) COLS#13 ← phi( findcol::@1/(byte[256]) COLS#16 findcol::@3/(byte[256]) COLS#16 ) - (byte) numpoints#32 ← phi( findcol::@1/(byte) numpoints#35 findcol::@3/(byte) numpoints#35 ) + (byte[]) YPOS#29 ← phi( findcol::@1/(byte[]) YPOS#32 findcol::@3/(byte[]) YPOS#32 ) + (byte[]) XPOS#30 ← phi( findcol::@1/(byte[]) XPOS#33 findcol::@3/(byte[]) XPOS#33 ) + (byte[]) COLS#6 ← phi( findcol::@1/(byte[]) COLS#10 findcol::@3/(byte[]) COLS#10 ) + (byte) numpoints#7 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#10 ) (byte) findcol::i#10 ← phi( findcol::@1/(byte) findcol::i#12 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#6 ← phi( findcol::@1/(byte) findcol::mindiff#10 findcol::@3/(byte) findcol::mindiff#10 ) (byte) findcol::yp#5 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#0 ) @@ -4256,10 +3555,10 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#5 ← phi( findcol::@12/(byte) findcol::mincol#10 findcol::@4/(byte) findcol::mincol#10 ) (byte) findcol::x#11 ← phi( findcol::@12/(byte) findcol::x#2 findcol::@4/(byte) findcol::x#2 ) - (byte[256]) YPOS#28 ← phi( findcol::@12/(byte[256]) YPOS#36 findcol::@4/(byte[256]) YPOS#36 ) - (byte[256]) XPOS#31 ← phi( findcol::@12/(byte[256]) XPOS#37 findcol::@4/(byte[256]) XPOS#37 ) - (byte[256]) COLS#10 ← phi( findcol::@12/(byte[256]) COLS#13 findcol::@4/(byte[256]) COLS#13 ) - (byte) numpoints#27 ← phi( findcol::@12/(byte) numpoints#32 findcol::@4/(byte) numpoints#32 ) + (byte[]) YPOS#21 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#29 ) + (byte[]) XPOS#24 ← phi( findcol::@12/(byte[]) XPOS#30 findcol::@4/(byte[]) XPOS#30 ) + (byte[]) COLS#3 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#6 ) + (byte) numpoints#4 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#7 ) (byte) findcol::i#6 ← phi( findcol::@12/(byte) findcol::i#10 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#3 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#6 ) (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) @@ -4280,10 +3579,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#12 ← phi( findcol::@14/(byte) findcol::y#2 findcol::@6/(byte) findcol::y#2 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#5 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#11 ) - (byte[256]) YPOS#23 ← phi( findcol::@14/(byte[256]) YPOS#28 findcol::@6/(byte[256]) YPOS#28 ) - (byte[256]) XPOS#25 ← phi( findcol::@14/(byte[256]) XPOS#31 findcol::@6/(byte[256]) XPOS#31 ) - (byte[256]) COLS#2 ← phi( findcol::@14/(byte[256]) COLS#10 findcol::@6/(byte[256]) COLS#10 ) - (byte) numpoints#24 ← phi( findcol::@14/(byte) numpoints#27 findcol::@6/(byte) numpoints#27 ) + (byte[]) YPOS#16 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#21 ) + (byte[]) XPOS#18 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#24 ) + (byte[]) COLS#1 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#3 ) + (byte) numpoints#2 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#4 ) (byte) findcol::i#4 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#6 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#3 ) (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) @@ -4291,234 +3590,180 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$17) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[256]) COLS#19 ← phi( findcol::@16/(byte[256]) COLS#2 findcol::@7/(byte[256]) COLS#2 ) + (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#1 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#12 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#10 findcol::@7/(byte) findcol::x#10 ) - (byte[256]) YPOS#20 ← phi( findcol::@16/(byte[256]) YPOS#23 findcol::@7/(byte[256]) YPOS#23 ) - (byte[256]) XPOS#20 ← phi( findcol::@16/(byte[256]) XPOS#25 findcol::@7/(byte[256]) XPOS#25 ) - (byte) numpoints#21 ← phi( findcol::@16/(byte) numpoints#24 findcol::@7/(byte) numpoints#24 ) + (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#16 ) + (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#18 ) + (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#2 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#4 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#21 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#1 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#2 *idx (byte) findcol::i#4 + (byte) findcol::mincol#1 ← (byte[]) COLS#1 *idx (byte) findcol::i#4 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Not aliassing across scopes: initscreen::screen#0 SCREEN#0 Not aliassing across scopes: render::colline#0 COLORS#1 Not aliassing across scopes: findcol::x#0 render::x#2 Not aliassing across scopes: findcol::y#0 render::y#2 Not aliassing across scopes: render::col#0 findcol::return#0 -Redundant Phi (byte[256]) YPOS#1 (byte[256]) YPOS#10 -Redundant Phi (byte[256]) XPOS#10 (byte[256]) XPOS#1 -Redundant Phi (byte[256]) XPOS#3 (byte[256]) XPOS#10 -Redundant Phi (byte[256]) YPOS#11 (byte[256]) YPOS#1 -Redundant Phi (byte[256]) YPOS#3 (byte[256]) YPOS#11 -Redundant Phi (byte[256]) XPOS#22 (byte[256]) XPOS#3 -Redundant Phi (byte[256]) YPOS#4 (byte[256]) YPOS#3 -Redundant Phi (byte[256]) XPOS#12 (byte[256]) XPOS#22 -Redundant Phi (byte[256]) XPOS#7 (byte[256]) XPOS#0 -Redundant Phi (byte[256]) YPOS#7 (byte[256]) YPOS#0 -Redundant Phi (byte[256]) COLS#1 (byte[256]) COLS#0 +Redundant Phi (byte[]) YPOS#1 (byte[]) YPOS#14 +Redundant Phi (byte[]) XPOS#10 (byte[]) XPOS#1 +Redundant Phi (byte[]) XPOS#3 (byte[]) XPOS#10 +Redundant Phi (byte[]) YPOS#10 (byte[]) YPOS#1 +Redundant Phi (byte[]) YPOS#3 (byte[]) YPOS#10 +Redundant Phi (byte[]) XPOS#15 (byte[]) XPOS#3 +Redundant Phi (byte[]) YPOS#4 (byte[]) YPOS#3 +Redundant Phi (byte[]) XPOS#11 (byte[]) XPOS#15 Redundant Phi (byte) findcol::x#2 (byte) findcol::x#1 Redundant Phi (byte) findcol::xp#1 (byte) findcol::xp#0 Redundant Phi (byte) findcol::y#10 (byte) findcol::y#1 Redundant Phi (byte) findcol::yp#5 (byte) findcol::yp#0 Redundant Phi (byte) findcol::mindiff#6 (byte) findcol::mindiff#10 Redundant Phi (byte) findcol::i#10 (byte) findcol::i#12 -Redundant Phi (byte) numpoints#32 (byte) numpoints#35 -Redundant Phi (byte[256]) COLS#13 (byte[256]) COLS#16 -Redundant Phi (byte[256]) XPOS#37 (byte[256]) XPOS#40 -Redundant Phi (byte[256]) YPOS#36 (byte[256]) YPOS#39 +Redundant Phi (byte) numpoints#7 (byte) numpoints#10 +Redundant Phi (byte[]) COLS#6 (byte[]) COLS#10 +Redundant Phi (byte[]) XPOS#30 (byte[]) XPOS#33 +Redundant Phi (byte[]) YPOS#29 (byte[]) YPOS#32 Redundant Phi (byte) findcol::mincol#10 (byte) findcol::mincol#11 Redundant Phi (byte) findcol::y#2 (byte) findcol::y#10 Redundant Phi (byte) findcol::yp#2 (byte) findcol::yp#5 Redundant Phi (byte) findcol::mindiff#3 (byte) findcol::mindiff#6 Redundant Phi (byte) findcol::i#6 (byte) findcol::i#10 -Redundant Phi (byte) numpoints#27 (byte) numpoints#32 -Redundant Phi (byte[256]) COLS#10 (byte[256]) COLS#13 -Redundant Phi (byte[256]) XPOS#31 (byte[256]) XPOS#37 -Redundant Phi (byte[256]) YPOS#28 (byte[256]) YPOS#36 +Redundant Phi (byte) numpoints#4 (byte) numpoints#7 +Redundant Phi (byte[]) COLS#3 (byte[]) COLS#6 +Redundant Phi (byte[]) XPOS#24 (byte[]) XPOS#30 +Redundant Phi (byte[]) YPOS#21 (byte[]) YPOS#29 Redundant Phi (byte) findcol::x#11 (byte) findcol::x#2 Redundant Phi (byte) findcol::mincol#5 (byte) findcol::mincol#10 Redundant Phi (byte) findcol::mindiff#2 (byte) findcol::mindiff#3 Redundant Phi (byte) findcol::i#4 (byte) findcol::i#6 -Redundant Phi (byte) numpoints#24 (byte) numpoints#27 -Redundant Phi (byte[256]) COLS#2 (byte[256]) COLS#10 -Redundant Phi (byte[256]) XPOS#25 (byte[256]) XPOS#31 -Redundant Phi (byte[256]) YPOS#23 (byte[256]) YPOS#28 +Redundant Phi (byte) numpoints#2 (byte) numpoints#4 +Redundant Phi (byte[]) COLS#1 (byte[]) COLS#3 +Redundant Phi (byte[]) XPOS#18 (byte[]) XPOS#24 +Redundant Phi (byte[]) YPOS#16 (byte[]) YPOS#21 Redundant Phi (byte) findcol::x#10 (byte) findcol::x#11 Redundant Phi (byte) findcol::mincol#4 (byte) findcol::mincol#5 Redundant Phi (byte) findcol::y#12 (byte) findcol::y#2 Redundant Phi (byte) findcol::i#3 (byte) findcol::i#4 -Redundant Phi (byte) numpoints#21 (byte) numpoints#24 -Redundant Phi (byte[256]) XPOS#20 (byte[256]) XPOS#25 -Redundant Phi (byte[256]) YPOS#20 (byte[256]) YPOS#23 +Redundant Phi (byte) numpoints#1 (byte) numpoints#2 +Redundant Phi (byte[]) XPOS#13 (byte[]) XPOS#18 +Redundant Phi (byte[]) YPOS#13 (byte[]) YPOS#16 Redundant Phi (byte) findcol::x#6 (byte) findcol::x#10 Redundant Phi (byte) findcol::y#9 (byte) findcol::y#12 -Redundant Phi (byte[256]) COLS#19 (byte[256]) COLS#2 +Redundant Phi (byte[]) COLS#12 (byte[]) COLS#1 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#17 ← phi( main::@3/(byte[]) COLS#0 main::@5/(byte[]) COLS#17 ) + (byte) numpoints#17 ← phi( main::@3/(byte) numpoints#0 main::@5/(byte) numpoints#17 ) + (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#0 main::@5/(byte[]) YPOS#14 ) + (byte[]) XPOS#1 ← phi( main::@3/(byte[]) XPOS#0 main::@5/(byte[]) XPOS#1 ) + (byte*) COLORS#1 ← phi( main::@3/(byte*) COLORS#0 main::@5/(byte*) COLORS#1 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#24 ← phi( main::@11/(byte[256]) COLS#24 main::@9/(byte[256]) COLS#0 ) - (byte[256]) YPOS#10 ← phi( main::@11/(byte[256]) YPOS#10 main::@9/(byte[256]) YPOS#0 ) - (byte) numpoints#1 ← phi( main::@11/(byte) numpoints#1 main::@9/(byte) numpoints#10 ) - (byte[256]) XPOS#1 ← phi( main::@11/(byte[256]) XPOS#1 main::@9/(byte[256]) XPOS#0 ) - (byte*) COLORS#1 ← phi( main::@11/(byte*) COLORS#1 main::@9/(byte*) COLORS#0 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$4 ← (byte~) animate::$2 != (byte) 40 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#10 *idx (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#14 *idx (byte) 0 (boolean~) animate::$9 ← (byte~) animate::$7 != (byte) 25 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#1 *idx (byte) 1 + *((byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#1 *idx (byte) 1 (boolean~) animate::$14 ← (byte~) animate::$12 != (byte) 255 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#10 *idx (byte) 2 + *((byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#14 *idx (byte) 2 (boolean~) animate::$19 ← (byte~) animate::$17 != (byte) 25 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#10 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#14 *idx (byte) 3 (boolean~) animate::$24 ← (byte~) animate::$22 != (byte) 255 if((boolean~) animate::$24) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#1 *idx (byte) 3 (boolean~) animate::$29 ← (byte~) animate::$27 < (byte) 40 if((boolean~) animate::$29) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen#0 ← (byte*) SCREEN#0 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -4539,19 +3784,19 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 render::@5/(byte[256]) COLS#18 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 render::@5/(byte) numpoints#37 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 render::@5/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 render::@5/(byte[256]) XPOS#19 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#11 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#12 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#12 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#12 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#2 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -4582,16 +3827,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 findcol::@8/(byte[256]) COLS#16 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 findcol::@8/(byte) numpoints#35 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#10 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#10 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 findcol::@8/(byte) findcol::y#1 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 findcol::@8/(byte) findcol::x#1 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 findcol::@8/(byte[256]) YPOS#39 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#32 ) (byte) findcol::i#12 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 findcol::@8/(byte[256]) XPOS#40 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#33 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 (boolean~) findcol::$3 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$3) goto findcol::@2 to:findcol::@9 @@ -4640,190 +3885,139 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#35 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#10 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Self Phi Eliminated (byte*) COLORS#1 -Self Phi Eliminated (byte[256]) XPOS#1 -Self Phi Eliminated (byte) numpoints#1 -Self Phi Eliminated (byte[256]) YPOS#10 -Self Phi Eliminated (byte[256]) COLS#24 +Self Phi Eliminated (byte[]) XPOS#1 +Self Phi Eliminated (byte[]) YPOS#14 +Self Phi Eliminated (byte) numpoints#17 +Self Phi Eliminated (byte[]) COLS#17 Self Phi Eliminated (byte) FILL#1 Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte) render::y#2 Self Phi Eliminated (byte*) render::colline#2 -Self Phi Eliminated (byte[256]) XPOS#19 -Self Phi Eliminated (byte[256]) YPOS#19 -Self Phi Eliminated (byte) numpoints#37 -Self Phi Eliminated (byte[256]) COLS#18 -Self Phi Eliminated (byte[256]) XPOS#40 -Self Phi Eliminated (byte[256]) YPOS#39 +Self Phi Eliminated (byte[]) XPOS#12 +Self Phi Eliminated (byte[]) YPOS#12 +Self Phi Eliminated (byte) numpoints#12 +Self Phi Eliminated (byte[]) COLS#11 +Self Phi Eliminated (byte[]) XPOS#33 +Self Phi Eliminated (byte[]) YPOS#32 Self Phi Eliminated (byte) findcol::x#1 Self Phi Eliminated (byte) findcol::y#1 -Self Phi Eliminated (byte) numpoints#35 -Self Phi Eliminated (byte[256]) COLS#16 +Self Phi Eliminated (byte) numpoints#10 +Self Phi Eliminated (byte[]) COLS#10 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#17 ← phi( main::@3/(byte[]) COLS#0 ) + (byte) numpoints#17 ← phi( main::@3/(byte) numpoints#0 ) + (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#0 ) + (byte[]) XPOS#1 ← phi( main::@3/(byte[]) XPOS#0 ) + (byte*) COLORS#1 ← phi( main::@3/(byte*) COLORS#0 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#24 ← phi( main::@9/(byte[256]) COLS#0 ) - (byte[256]) YPOS#10 ← phi( main::@9/(byte[256]) YPOS#0 ) - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - (byte[256]) XPOS#1 ← phi( main::@9/(byte[256]) XPOS#0 ) - (byte*) COLORS#1 ← phi( main::@9/(byte*) COLORS#0 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 (boolean~) animate::$4 ← (byte~) animate::$2 != (byte) 40 if((boolean~) animate::$4) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#10 *idx (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#14 *idx (byte) 0 (boolean~) animate::$9 ← (byte~) animate::$7 != (byte) 25 if((boolean~) animate::$9) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#1 *idx (byte) 1 + *((byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#1 *idx (byte) 1 (boolean~) animate::$14 ← (byte~) animate::$12 != (byte) 255 if((boolean~) animate::$14) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#10 *idx (byte) 2 + *((byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#14 *idx (byte) 2 (boolean~) animate::$19 ← (byte~) animate::$17 != (byte) 25 if((boolean~) animate::$19) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#10 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#14 *idx (byte) 3 (boolean~) animate::$24 ← (byte~) animate::$22 != (byte) 255 if((boolean~) animate::$24) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#1 *idx (byte) 3 (boolean~) animate::$29 ← (byte~) animate::$27 < (byte) 40 if((boolean~) animate::$29) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen#0 ← (byte*) SCREEN#0 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -4844,19 +4038,19 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -4887,16 +4081,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 (boolean~) findcol::$3 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$3) goto findcol::@2 to:findcol::@9 @@ -4945,15 +4139,15 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#35 + (boolean~) findcol::$19 ← (byte) findcol::i#1 < (byte) numpoints#10 if((boolean~) findcol::$19) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Simple Condition (boolean~) animate::$4 if((byte~) animate::$2!=(byte) 40) goto animate::@1 Simple Condition (boolean~) animate::$9 if((byte~) animate::$7!=(byte) 25) goto animate::@2 @@ -4969,156 +4163,105 @@ Simple Condition (boolean~) findcol::$7 if((byte) findcol::x#1>=(byte) findcol:: Simple Condition (boolean~) findcol::$5 if((byte) findcol::y#1!=(byte) findcol::yp#0) goto findcol::@3 Simple Condition (boolean~) findcol::$11 if((byte) findcol::y#1>=(byte) findcol::yp#0) goto findcol::@6 Simple Condition (boolean~) findcol::$17 if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@8 -Simple Condition (boolean~) findcol::$19 if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 +Simple Condition (boolean~) findcol::$19 if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification CONTROL FLOW GRAPH @begin: scope:[] from (byte*) SCREEN#0 ← (word) 1024 (byte*) COLORS#0 ← (word) 55296 (byte) FILL#0 ← (byte) 230 - (byte) numpoints#0 ← (byte) 0 - (byte[256]) XPOS#0 ← (word) 4096 - (byte[256]) YPOS#0 ← (word) 4352 - (byte[256]) COLS#0 ← (word) 4608 + (byte) numpoints#0 ← (byte) 6 + (byte[]) XPOS#0 ← { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } + (byte[]) YPOS#0 ← { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } + (byte[]) COLS#0 ← { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - (byte) addpoint::x#0 ← (byte) 5 - (byte) addpoint::y#0 ← (byte) 5 - (byte) addpoint::c#0 ← (byte) 1 - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - (byte) addpoint::x#1 ← (byte) 15 - (byte) addpoint::y#1 ← (byte) 8 - (byte) addpoint::c#1 ← (byte) 2 - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#17 ← phi( main::@3/(byte[]) COLS#0 ) + (byte) numpoints#17 ← phi( main::@3/(byte) numpoints#0 ) + (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#0 ) + (byte[]) XPOS#1 ← phi( main::@3/(byte[]) XPOS#0 ) + (byte*) COLORS#1 ← phi( main::@3/(byte*) COLORS#0 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - (byte) addpoint::x#2 ← (byte) 6 - (byte) addpoint::y#2 ← (byte) 14 - (byte) addpoint::c#2 ← (byte) 3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte) addpoint::x#3 ← (byte) 34 - (byte) addpoint::y#3 ← (byte) 2 - (byte) addpoint::c#3 ← (byte) 4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte) addpoint::x#4 ← (byte) 21 - (byte) addpoint::y#4 ← (byte) 17 - (byte) addpoint::c#4 ← (byte) 5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte) addpoint::x#5 ← (byte) 31 - (byte) addpoint::y#5 ← (byte) 22 - (byte) addpoint::c#5 ← (byte) 7 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#24 ← phi( main::@9/(byte[256]) COLS#0 ) - (byte[256]) YPOS#10 ← phi( main::@9/(byte[256]) YPOS#0 ) - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - (byte[256]) XPOS#1 ← phi( main::@9/(byte[256]) XPOS#0 ) - (byte*) COLORS#1 ← phi( main::@9/(byte*) COLORS#0 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#10 *idx (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#14 *idx (byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#1 *idx (byte) 1 + *((byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#1 *idx (byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#10 *idx (byte) 2 + *((byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#14 *idx (byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#10 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#14 *idx (byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#1 *idx (byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(byte) addpoint::c#0 main::@3/(byte) addpoint::c#1 main::@4/(byte) addpoint::c#2 main::@5/(byte) addpoint::c#3 main::@6/(byte) addpoint::c#4 main::@7/(byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(byte) addpoint::y#0 main::@3/(byte) addpoint::y#1 main::@4/(byte) addpoint::y#2 main::@5/(byte) addpoint::y#3 main::@6/(byte) addpoint::y#4 main::@7/(byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(byte) addpoint::x#0 main::@3/(byte) addpoint::x#1 main::@4/(byte) addpoint::x#2 main::@5/(byte) addpoint::x#3 main::@6/(byte) addpoint::x#4 main::@7/(byte) addpoint::x#5 ) - *((byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen#0 ← (byte*) SCREEN#0 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -5138,19 +4281,19 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -5179,16 +4322,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -5232,40 +4375,22 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Constant (const byte*) SCREEN#0 = 1024 Constant (const byte*) COLORS#0 = 55296 Constant (const byte) FILL#0 = 230 -Constant (const byte) numpoints#0 = 0 -Constant (const byte[256]) XPOS#0 = 4096 -Constant (const byte[256]) YPOS#0 = 4352 -Constant (const byte[256]) COLS#0 = 4608 -Constant (const byte) addpoint::x#0 = 5 -Constant (const byte) addpoint::y#0 = 5 -Constant (const byte) addpoint::c#0 = 1 -Constant (const byte) addpoint::x#1 = 15 -Constant (const byte) addpoint::y#1 = 8 -Constant (const byte) addpoint::c#1 = 2 -Constant (const byte) addpoint::x#2 = 6 -Constant (const byte) addpoint::y#2 = 14 -Constant (const byte) addpoint::c#2 = 3 -Constant (const byte) addpoint::x#3 = 34 -Constant (const byte) addpoint::y#3 = 2 -Constant (const byte) addpoint::c#3 = 4 -Constant (const byte) addpoint::x#4 = 21 -Constant (const byte) addpoint::y#4 = 17 -Constant (const byte) addpoint::c#4 = 5 -Constant (const byte) addpoint::x#5 = 31 -Constant (const byte) addpoint::y#5 = 22 -Constant (const byte) addpoint::c#5 = 7 +Constant (const byte) numpoints#0 = 6 +Constant (const byte[]) XPOS#0 = { 5, 15, 6, 34, 21, 31 } +Constant (const byte[]) YPOS#0 = { 5, 8, 14, 2, 17, 22 } +Constant (const byte[]) COLS#0 = { 1, 2, 3, 4, 5, 7 } Constant (const byte) render::y#0 = 0 Constant (const byte) render::x#0 = 0 Constant (const byte) findcol::mindiff#0 = 255 @@ -5276,126 +4401,93 @@ Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + (byte[]) COLS#17 ← phi( main::@3/(const byte[]) COLS#0 ) + (byte) numpoints#17 ← phi( main::@3/(const byte) numpoints#0 ) + (byte[]) YPOS#14 ← phi( main::@3/(const byte[]) YPOS#0 ) + (byte[]) XPOS#1 ← phi( main::@3/(const byte[]) XPOS#0 ) + (byte*) COLORS#1 ← phi( main::@3/(const byte*) COLORS#0 ) + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) COLS#24 ← phi( main::@9/(const byte[256]) COLS#0 ) - (byte[256]) YPOS#10 ← phi( main::@9/(const byte[256]) YPOS#0 ) - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - (byte[256]) XPOS#1 ← phi( main::@9/(const byte[256]) XPOS#0 ) - (byte*) COLORS#1 ← phi( main::@9/(const byte*) COLORS#0 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (byte[256]) XPOS#1 *idx (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (byte[]) XPOS#1 *idx (byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (byte[256]) YPOS#10 *idx (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (byte[]) YPOS#14 *idx (byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (byte[256]) XPOS#1 *idx (byte) 1 + *((byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (byte[]) XPOS#1 *idx (byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (byte[256]) YPOS#10 *idx (byte) 2 + *((byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (byte[]) YPOS#14 *idx (byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (byte[256]) YPOS#10 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (byte[]) YPOS#14 *idx (byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (byte[256]) XPOS#1 *idx (byte) 3 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (byte[]) XPOS#1 *idx (byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main (byte*) initscreen::screen#0 ← (const byte*) SCREEN#0 to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 @@ -5414,18 +4506,18 @@ render: scope:[render] from main::@1 (byte*) render::colline#0 ← (byte*) COLORS#1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -5451,16 +4543,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -5503,19 +4595,20 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Constant (const byte*) COLORS#1 = COLORS#0 -Constant (const byte[256]) XPOS#1 = XPOS#0 -Constant (const byte[256]) YPOS#10 = YPOS#0 -Constant (const byte[256]) COLS#24 = COLS#0 +Constant (const byte[]) XPOS#1 = XPOS#0 +Constant (const byte[]) YPOS#14 = YPOS#0 +Constant (const byte) numpoints#17 = numpoints#0 +Constant (const byte[]) COLS#17 = COLS#0 Constant (const byte*) initscreen::screen#0 = SCREEN#0 Constant (const byte) FILL#1 = FILL#0 Constant (const byte*) SCREEN#2 = SCREEN#0 @@ -5523,122 +4616,88 @@ Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (const byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (const byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (const byte[256]) XPOS#1 *idx (byte) 0 + *((const byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (const byte[]) XPOS#1 *idx (byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (const byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (const byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (const byte[256]) YPOS#10 *idx (byte) 0 + *((const byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (const byte[]) YPOS#14 *idx (byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (const byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (const byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (const byte[256]) XPOS#1 *idx (byte) 1 + *((const byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (const byte[]) XPOS#1 *idx (byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (const byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (const byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (const byte[256]) YPOS#10 *idx (byte) 2 + *((const byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (const byte[]) YPOS#14 *idx (byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (const byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (const byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (const byte[256]) YPOS#10 *idx (byte) 3 + *((const byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (const byte[]) YPOS#14 *idx (byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (const byte[256]) XPOS#1 *idx (byte) 3 + *((const byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (const byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (const byte[256]) XPOS#1 *idx (byte) 3 + *((const byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (const byte[]) XPOS#1 *idx (byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (const byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (const byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -5654,18 +4713,18 @@ render: scope:[render] from main::@1 (byte*) render::colline#0 ← (const byte*) COLORS#1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(const byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(const byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(const byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(const byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -5691,16 +4750,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -5743,14 +4802,14 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Constant (const byte*) initscreen::$0 = SCREEN#2+1000 Constant (const byte*) render::colline#0 = COLORS#1 @@ -5758,122 +4817,88 @@ Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← (const byte[256]) XPOS#1 *idx (byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← (const byte[]) XPOS#1 *idx (byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← (const byte[256]) XPOS#1 *idx (byte) 0 + *((const byte[]) XPOS#1 + (byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← (const byte[]) XPOS#1 *idx (byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← (const byte[256]) YPOS#10 *idx (byte) 0 + (byte~) animate::$5 ← (const byte[]) YPOS#14 *idx (byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← (const byte[256]) YPOS#10 *idx (byte) 0 + *((const byte[]) YPOS#14 + (byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← (const byte[]) YPOS#14 *idx (byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1 + (byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1 + (byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← (const byte[256]) XPOS#1 *idx (byte) 1 + (byte~) animate::$10 ← (const byte[]) XPOS#1 *idx (byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← (const byte[256]) XPOS#1 *idx (byte) 1 + *((const byte[]) XPOS#1 + (byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← (const byte[]) XPOS#1 *idx (byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10 + (byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14 + (byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← (const byte[256]) YPOS#10 *idx (byte) 2 + (byte~) animate::$15 ← (const byte[]) YPOS#14 *idx (byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← (const byte[256]) YPOS#10 *idx (byte) 2 + *((const byte[]) YPOS#14 + (byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← (const byte[]) YPOS#14 *idx (byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1 + (byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1 + (byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← (const byte[256]) YPOS#10 *idx (byte) 3 + (byte~) animate::$20 ← (const byte[]) YPOS#14 *idx (byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10 + (byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← (const byte[256]) YPOS#10 *idx (byte) 3 + *((const byte[]) YPOS#14 + (byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← (const byte[]) YPOS#14 *idx (byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10 + (byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14 + (byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10 + (byte) 3) ← (byte) 25 - (byte~) animate::$25 ← (const byte[256]) XPOS#1 *idx (byte) 3 + *((const byte[]) YPOS#14 + (byte) 3) ← (byte) 25 + (byte~) animate::$25 ← (const byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← (const byte[256]) XPOS#1 *idx (byte) 3 + *((const byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← (const byte[]) XPOS#1 *idx (byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← (const byte[256]) XPOS#1 *idx (byte) 3 + (byte~) animate::$30 ← (const byte[]) XPOS#1 *idx (byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1 + (byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -5887,18 +4912,18 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(const byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(const byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(const byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(const byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -5924,16 +4949,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -5976,35 +5001,35 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin Consolidated referenced array index constant in assignment animate::$0 Consolidated assigned array index constant in assignment *(XPOS#1+0) Consolidated referenced array index constant in assignment animate::$2 Consolidated referenced array index constant in assignment animate::$5 -Consolidated assigned array index constant in assignment *(YPOS#10+0) +Consolidated assigned array index constant in assignment *(YPOS#14+0) Consolidated referenced array index constant in assignment animate::$7 Consolidated assigned array index constant in assignment *(XPOS#1+0) Consolidated referenced array index constant in assignment animate::$10 Consolidated assigned array index constant in assignment *(XPOS#1+1) Consolidated referenced array index constant in assignment animate::$12 -Consolidated assigned array index constant in assignment *(YPOS#10+0) +Consolidated assigned array index constant in assignment *(YPOS#14+0) Consolidated referenced array index constant in assignment animate::$15 -Consolidated assigned array index constant in assignment *(YPOS#10+2) +Consolidated assigned array index constant in assignment *(YPOS#14+2) Consolidated referenced array index constant in assignment animate::$17 Consolidated assigned array index constant in assignment *(XPOS#1+1) Consolidated referenced array index constant in assignment animate::$20 -Consolidated assigned array index constant in assignment *(YPOS#10+3) +Consolidated assigned array index constant in assignment *(YPOS#14+3) Consolidated referenced array index constant in assignment animate::$22 -Consolidated assigned array index constant in assignment *(YPOS#10+2) -Consolidated assigned array index constant in assignment *(YPOS#10+3) +Consolidated assigned array index constant in assignment *(YPOS#14+2) +Consolidated assigned array index constant in assignment *(YPOS#14+3) Consolidated referenced array index constant in assignment animate::$25 Consolidated assigned array index constant in assignment *(XPOS#1+3) Consolidated referenced array index constant in assignment animate::$27 @@ -6014,122 +5039,88 @@ Succesful SSA optimization Pass2ConstantAdditionElimination CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment - to:@7 -@7: scope:[] from @begin to:@end main: scope:[main] from @begin - call addpoint param-assignment + call initscreen param-assignment to:main::@3 main::@3: scope:[main] from main - call addpoint param-assignment + to:main::@1 +main::@1: scope:[main] from main::@3 main::@5 + call render param-assignment to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment +main::@4: scope:[main] from main::@1 + call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@9 -main::@9: scope:[main] from main::@8 - to:main::@1 -main::@1: scope:[main] from main::@11 main::@9 - (byte) numpoints#1 ← phi( main::@9/(byte) numpoints#10 ) - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#1+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#1+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#14+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#14+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#1+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 + *((const byte[]) XPOS#1+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#1+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#14+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 + *((const byte[]) YPOS#14+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#14+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#14+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#14+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#1+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -6143,18 +5134,18 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(const byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(const byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(const byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(const byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -6180,16 +5171,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -6232,17 +5223,16 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return -@end: scope:[] from @7 +@end: scope:[] from @begin -Culled Empty Block (label) @7 -Culled Empty Block (label) main::@9 +Culled Empty Block (label) main::@3 Culled Empty Block (label) findcol::@3 Culled Empty Block (label) findcol::@10 Culled Empty Block (label) findcol::@17 @@ -6252,116 +5242,84 @@ CONTROL FLOW GRAPH call main param-assignment to:@end main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 - (byte) numpoints#1 ← phi( main::@8/(byte) numpoints#10 ) +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#1+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#1+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#14+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#14+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#1+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 + *((const byte[]) XPOS#1+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#1+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#14+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 + *((const byte[]) YPOS#14+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#14+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#14+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#14+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#1+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#10 main::@4/(byte) numpoints#10 main::@5/(byte) numpoints#10 main::@6/(byte) numpoints#10 main::@7/(byte) numpoints#10 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#10 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -6375,18 +5333,18 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#22 ← phi( render/(const byte[256]) COLS#24 render::@3/(byte[256]) COLS#18 ) - (byte) numpoints#40 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#37 ) - (byte[256]) YPOS#26 ← phi( render/(const byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#29 ← phi( render/(const byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#17 render::@3/(byte[]) COLS#11 ) + (byte) numpoints#15 ← phi( render/(const byte) numpoints#17 render::@3/(byte) numpoints#12 ) + (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[256]) COLS#18 ← phi( render::@1/(byte[256]) COLS#22 ) - (byte) numpoints#37 ← phi( render::@1/(byte) numpoints#40 ) - (byte[256]) YPOS#19 ← phi( render::@1/(byte[256]) YPOS#26 ) - (byte[256]) XPOS#19 ← phi( render::@1/(byte[256]) XPOS#29 ) + (byte[]) COLS#11 ← phi( render::@1/(byte[]) COLS#15 ) + (byte) numpoints#12 ← phi( render::@1/(byte) numpoints#15 ) + (byte[]) YPOS#12 ← phi( render::@1/(byte[]) YPOS#19 ) + (byte[]) XPOS#12 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -6412,16 +5370,16 @@ findcol: scope:[findcol] from render::@2 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[256]) COLS#16 ← phi( findcol/(byte[256]) COLS#18 ) - (byte) numpoints#35 ← phi( findcol/(byte) numpoints#37 ) + (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 ) + (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#0 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#0 ) - (byte[256]) YPOS#39 ← phi( findcol/(byte[256]) YPOS#19 ) + (byte[]) YPOS#32 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[256]) XPOS#40 ← phi( findcol/(byte[256]) XPOS#19 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#40 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#39 *idx (byte) findcol::i#12 + (byte[]) XPOS#33 ← phi( findcol/(byte[]) XPOS#12 ) + (byte) findcol::xp#0 ← (byte[]) XPOS#33 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#32 *idx (byte) findcol::i#12 if((byte) findcol::x#1!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -6460,23 +5418,22 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 @end: scope:[] from @begin Not aliassing across scopes: findcol::x#0 render::x#2 Not aliassing across scopes: findcol::y#0 render::y#2 Not aliassing across scopes: render::col#0 findcol::return#0 -Alias (byte) numpoints#1 = (byte) numpoints#10 Alias (byte) render::y#2 = (byte) render::y#4 Alias (byte*) render::colline#2 = (byte*) render::colline#5 -Alias (byte[256]) XPOS#19 = (byte[256]) XPOS#29 (byte[256]) XPOS#40 -Alias (byte[256]) YPOS#19 = (byte[256]) YPOS#26 (byte[256]) YPOS#39 -Alias (byte) numpoints#35 = (byte) numpoints#37 (byte) numpoints#40 -Alias (byte[256]) COLS#16 = (byte[256]) COLS#18 (byte[256]) COLS#22 +Alias (byte[]) XPOS#12 = (byte[]) XPOS#22 (byte[]) XPOS#33 +Alias (byte[]) YPOS#12 = (byte[]) YPOS#19 (byte[]) YPOS#32 +Alias (byte) numpoints#10 = (byte) numpoints#12 (byte) numpoints#15 +Alias (byte[]) COLS#10 = (byte[]) COLS#11 (byte[]) COLS#15 Alias (byte) findcol::x#0 = (byte) findcol::x#1 Alias (byte) findcol::y#0 = (byte) findcol::y#1 Succesful SSA optimization Pass2AliasElimination @@ -6485,115 +5442,84 @@ CONTROL FLOW GRAPH call main param-assignment to:@end main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#1+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#1+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#14+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#14+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#1+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 + *((const byte[]) XPOS#1+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#1+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#14+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 + *((const byte[]) YPOS#14+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#14+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#14+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#14+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#1+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -6607,10 +5533,10 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#16 ← phi( render/(const byte[256]) COLS#24 render::@3/(byte[256]) COLS#16 ) - (byte) numpoints#35 ← phi( render/(byte) numpoints#1 render::@3/(byte) numpoints#35 ) - (byte[256]) YPOS#19 ← phi( render/(const byte[256]) YPOS#10 render::@3/(byte[256]) YPOS#19 ) - (byte[256]) XPOS#19 ← phi( render/(const byte[256]) XPOS#1 render::@3/(byte[256]) XPOS#19 ) + (byte[]) COLS#10 ← phi( render/(const byte[]) COLS#17 render::@3/(byte[]) COLS#10 ) + (byte) numpoints#10 ← phi( render/(const byte) numpoints#17 render::@3/(byte) numpoints#10 ) + (byte[]) YPOS#12 ← phi( render/(const byte[]) YPOS#14 render::@3/(byte[]) YPOS#12 ) + (byte[]) XPOS#12 ← phi( render/(const byte[]) XPOS#1 render::@3/(byte[]) XPOS#12 ) (byte*) render::colline#2 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#2 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -6640,8 +5566,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#19 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#19 *idx (byte) findcol::i#12 + (byte) findcol::xp#0 ← (byte[]) XPOS#12 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#12 *idx (byte) findcol::i#12 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -6680,135 +5606,104 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 @end: scope:[] from @begin Not aliassing across scopes: findcol::x#0 render::x#2 Not aliassing across scopes: findcol::y#0 render::y#2 Not aliassing across scopes: render::col#0 findcol::return#0 -Self Phi Eliminated (byte[256]) XPOS#19 -Self Phi Eliminated (byte[256]) YPOS#19 -Self Phi Eliminated (byte) numpoints#35 -Self Phi Eliminated (byte[256]) COLS#16 +Self Phi Eliminated (byte[]) XPOS#12 +Self Phi Eliminated (byte[]) YPOS#12 +Self Phi Eliminated (byte) numpoints#10 +Self Phi Eliminated (byte[]) COLS#10 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment to:@end main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#1+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#1+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#14+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#14+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#1+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 + *((const byte[]) XPOS#1+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#1+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#14+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 + *((const byte[]) YPOS#14+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#14+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#14+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#14+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#1+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -6822,10 +5717,10 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[256]) COLS#16 ← phi( render/(const byte[256]) COLS#24 ) - (byte) numpoints#35 ← phi( render/(byte) numpoints#1 ) - (byte[256]) YPOS#19 ← phi( render/(const byte[256]) YPOS#10 ) - (byte[256]) XPOS#19 ← phi( render/(const byte[256]) XPOS#1 ) + (byte[]) COLS#10 ← phi( render/(const byte[]) COLS#17 ) + (byte) numpoints#10 ← phi( render/(const byte) numpoints#17 ) + (byte[]) YPOS#12 ← phi( render/(const byte[]) YPOS#14 ) + (byte[]) XPOS#12 ← phi( render/(const byte[]) XPOS#1 ) (byte*) render::colline#2 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#2 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -6855,8 +5750,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← (byte[256]) XPOS#19 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (byte[256]) YPOS#19 *idx (byte) findcol::i#12 + (byte) findcol::xp#0 ← (byte[]) XPOS#12 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (byte[]) YPOS#12 *idx (byte) findcol::i#12 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -6895,343 +5790,101 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 + if((byte) findcol::i#1<(byte) numpoints#10) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 @end: scope:[] from @begin -Constant (const byte[256]) XPOS#19 = XPOS#1 -Constant (const byte[256]) YPOS#19 = YPOS#10 -Constant (const byte[256]) COLS#16 = COLS#24 +Constant (const byte[]) XPOS#12 = XPOS#1 +Constant (const byte[]) YPOS#12 = YPOS#14 +Constant (const byte) numpoints#10 = numpoints#17 +Constant (const byte[]) COLS#10 = COLS#17 Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH @begin: scope:[] from call main param-assignment to:@end main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#1+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#1+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#14+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#14+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#1+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#1+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 + *((const byte[]) XPOS#1+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#1+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#14+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 + *((const byte[]) YPOS#14+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#14+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#1+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#14+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#14+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#14+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) YPOS#14+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#1+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#1+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#1+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 - to:initscreen::@1 -initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 - (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) - *((byte*) initscreen::screen#2) ← (const byte) FILL#1 - (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 - if((byte*) initscreen::screen#1<(const byte*) initscreen::$0) goto initscreen::@1 - to:initscreen::@return -initscreen::@return: scope:[initscreen] from initscreen::@1 - return - to:@return -render: scope:[render] from main::@1 - to:render::@1 -render::@1: scope:[render] from render render::@3 - (byte) numpoints#35 ← phi( render/(byte) numpoints#1 ) - (byte*) render::colline#2 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) - (byte) render::y#2 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) - to:render::@2 -render::@2: scope:[render] from render::@1 render::@5 - (byte) render::x#2 ← phi( render::@1/(const byte) render::x#0 render::@5/(byte) render::x#1 ) - (byte) findcol::x#0 ← (byte) render::x#2 - (byte) findcol::y#0 ← (byte) render::y#2 - call findcol param-assignment - to:render::@5 -render::@5: scope:[render] from render::@2 - (byte) render::col#0 ← (byte) findcol::return#0 - *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 - (byte) render::x#1 ← ++ (byte) render::x#2 - if((byte) render::x#1!=(byte) 40) goto render::@2 - to:render::@3 -render::@3: scope:[render] from render::@5 - (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 - (byte) render::y#1 ← ++ (byte) render::y#2 - if((byte) render::y#1!=(byte) 25) goto render::@1 - to:render::@return -render::@return: scope:[render] from render::@3 - return - to:@return -findcol: scope:[findcol] from render::@2 - to:findcol::@1 -findcol::@1: scope:[findcol] from findcol findcol::@8 - (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) - (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← (const byte[256]) XPOS#19 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (const byte[256]) YPOS#19 *idx (byte) findcol::i#12 - if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 - to:findcol::@9 -findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 - if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 - to:findcol::@12 -findcol::@9: scope:[findcol] from findcol::@1 - if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 - to:findcol::@return -findcol::@return: scope:[findcol] from findcol::@8 findcol::@9 - (byte) findcol::return#0 ← phi( findcol::@9/(const byte) findcol::return#1 findcol::@8/(byte) findcol::mincol#2 ) - return - to:@return -findcol::@4: scope:[findcol] from findcol::@2 - (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 - to:findcol::@5 -findcol::@12: scope:[findcol] from findcol::@2 - (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 - to:findcol::@5 -findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 - (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) - if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 - to:findcol::@14 -findcol::@6: scope:[findcol] from findcol::@5 - (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 - (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 - to:findcol::@7 -findcol::@14: scope:[findcol] from findcol::@5 - (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 - (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 - to:findcol::@7 -findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 - (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) - if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@8 - to:findcol::@16 -findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) - (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) - (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#35) goto findcol::@1 - to:findcol::@return -findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (const byte[256]) COLS#16 *idx (byte) findcol::i#12 - to:findcol::@8 -@end: scope:[] from @begin - -Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 -Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 -Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 -Not aliassing across scopes: findcol::x#0 render::x#2 -Not aliassing across scopes: findcol::y#0 render::y#2 -Not aliassing across scopes: render::col#0 findcol::return#0 -Alias (byte) numpoints#1 = (byte) numpoints#35 -Succesful SSA optimization Pass2AliasElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - call main param-assignment - to:@end -main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 - call initscreen param-assignment - to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 - call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 - call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - if(true) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@11 - return - to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#1+(byte) 0 - (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#1+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#1+(byte) 0 - if((byte~) animate::$2!=(byte) 40) goto animate::@1 - to:animate::@7 -animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#10+(byte) 0 - (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#10+(byte) 0 - if((byte~) animate::$7!=(byte) 25) goto animate::@2 - to:animate::@8 -animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#1+(byte) 0) ← (byte) 0 - to:animate::@1 -animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#1+(byte) 1 - (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#1+(byte) 1 - if((byte~) animate::$12!=(byte) 255) goto animate::@3 - to:animate::@9 -animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#10+(byte) 0) ← (byte) 0 - to:animate::@2 -animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#10+(byte) 2 - (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#10+(byte) 2 - if((byte~) animate::$17!=(byte) 25) goto animate::@4 - to:animate::@10 -animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#1+(byte) 1) ← (byte) 40 - to:animate::@3 -animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#10+(byte) 3 - (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#10+(byte) 3 - if((byte~) animate::$22!=(byte) 255) goto animate::@return - to:animate::@11 -animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#10+(byte) 2) ← (byte) 0 - to:animate::@4 -animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#10+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#1+(byte) 3 - (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#1+(byte) 3 - if((byte~) animate::$27<(byte) 40) goto animate::@return - to:animate::@12 -animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#1+(byte) 3 - (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#1+(byte) 3) ← (byte~) animate::$31 - to:animate::@return -animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 - return - to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(const byte) addpoint::c#0 main::@3/(const byte) addpoint::c#1 main::@4/(const byte) addpoint::c#2 main::@5/(const byte) addpoint::c#3 main::@6/(const byte) addpoint::c#4 main::@7/(const byte) addpoint::c#5 ) - (byte) addpoint::y#6 ← phi( main/(const byte) addpoint::y#0 main::@3/(const byte) addpoint::y#1 main::@4/(const byte) addpoint::y#2 main::@5/(const byte) addpoint::y#3 main::@6/(const byte) addpoint::y#4 main::@7/(const byte) addpoint::y#5 ) - (byte) numpoints#19 ← phi( main/(const byte) numpoints#0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) - (byte) addpoint::x#6 ← phi( main/(const byte) addpoint::x#0 main::@3/(const byte) addpoint::x#1 main::@4/(const byte) addpoint::x#2 main::@5/(const byte) addpoint::x#3 main::@6/(const byte) addpoint::x#4 main::@7/(const byte) addpoint::x#5 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -7274,8 +5927,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#12 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← (const byte[256]) XPOS#19 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (const byte[256]) YPOS#19 *idx (byte) findcol::i#12 + (byte) findcol::xp#0 ← (const byte[]) XPOS#12 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (const byte[]) YPOS#12 *idx (byte) findcol::i#12 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -7314,16 +5967,13 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@1 + if((byte) findcol::i#1<(const byte) numpoints#10) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (const byte[256]) COLS#16 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (const byte[]) COLS#10 *idx (byte) findcol::i#12 to:findcol::@8 @end: scope:[] from @begin -Not aliassing across scopes: findcol::x#0 render::x#2 -Not aliassing across scopes: findcol::y#0 render::y#2 -Not aliassing across scopes: render::col#0 findcol::return#0 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 @@ -7333,41 +5983,24 @@ Not aliassing across scopes: render::col#0 findcol::return#0 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 Multiple usages for variable. Not optimizing sub-constant (byte) findcol::i#12 -Constant inlined FILL#1 = (const byte) FILL#0 -Constant inlined numpoints#0 = (byte) 0 -Constant inlined XPOS#1 = (const byte[256]) XPOS#0 -Constant inlined render::colline#0 = (const byte*) COLORS#0 -Constant inlined YPOS#10 = (const byte[256]) YPOS#0 -Constant inlined addpoint::y#0 = (byte) 5 -Constant inlined addpoint::x#1 = (byte) 15 -Constant inlined addpoint::x#0 = (byte) 5 -Constant inlined initscreen::$0 = (const byte*) SCREEN#0+(word) 1000 -Constant inlined initscreen::screen#0 = (const byte*) SCREEN#0 -Constant inlined COLS#16 = (const byte[256]) COLS#0 -Constant inlined COLORS#1 = (const byte*) COLORS#0 -Constant inlined YPOS#19 = (const byte[256]) YPOS#0 -Constant inlined addpoint::y#5 = (byte) 22 -Constant inlined addpoint::x#5 = (byte) 31 -Constant inlined addpoint::y#4 = (byte) 17 -Constant inlined addpoint::x#4 = (byte) 21 -Constant inlined addpoint::y#3 = (byte) 2 -Constant inlined addpoint::y#2 = (byte) 14 -Constant inlined addpoint::x#3 = (byte) 34 -Constant inlined addpoint::y#1 = (byte) 8 -Constant inlined addpoint::x#2 = (byte) 6 -Constant inlined addpoint::c#0 = (byte) 1 +Constant inlined YPOS#12 = (const byte[]) YPOS#0 +Constant inlined numpoints#10 = (const byte) numpoints#0 Constant inlined findcol::mincol#0 = (byte) 0 -Constant inlined addpoint::c#2 = (byte) 3 Constant inlined SCREEN#2 = (const byte*) SCREEN#0 -Constant inlined addpoint::c#1 = (byte) 2 -Constant inlined addpoint::c#4 = (byte) 5 -Constant inlined XPOS#19 = (const byte[256]) XPOS#0 -Constant inlined addpoint::c#3 = (byte) 4 -Constant inlined addpoint::c#5 = (byte) 7 +Constant inlined YPOS#14 = (const byte[]) YPOS#0 +Constant inlined XPOS#12 = (const byte[]) XPOS#0 +Constant inlined numpoints#17 = (const byte) numpoints#0 +Constant inlined FILL#1 = (const byte) FILL#0 Constant inlined findcol::return#1 = (byte) 0 Constant inlined render::x#0 = (byte) 0 +Constant inlined XPOS#1 = (const byte[]) XPOS#0 +Constant inlined render::colline#0 = (const byte*) COLORS#0 Constant inlined findcol::mindiff#0 = (byte) 255 -Constant inlined COLS#24 = (const byte[256]) COLS#0 +Constant inlined COLS#10 = (const byte[]) COLS#0 +Constant inlined initscreen::$0 = (const byte*) SCREEN#0+(word) 1000 +Constant inlined initscreen::screen#0 = (const byte*) SCREEN#0 +Constant inlined COLORS#1 = (const byte*) COLORS#0 +Constant inlined COLS#17 = (const byte[]) COLS#0 Constant inlined findcol::i#0 = (byte) 0 Constant inlined render::y#0 = (byte) 0 Succesful SSA optimization Pass2ConstantInlining @@ -7376,115 +6009,84 @@ CONTROL FLOW GRAPH call main param-assignment to:@end main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 + *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 + *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 + *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 + *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 + *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 + *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 + *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) - (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) - (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) - (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) @@ -7527,8 +6129,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 + (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -7567,10 +6169,10 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#10 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#11 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@1 + if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 to:findcol::@8 @end: scope:[] from @begin @@ -7579,24 +6181,16 @@ FINAL SYMBOL TABLE (label) @end (byte*) COLORS (const byte*) COLORS#0 = (word) 55296 -(byte[256]) COLS -(const byte[256]) COLS#0 = (word) 4608 +(byte[]) COLS +(const byte[]) COLS#0 = { (byte) 1, (byte) 2, (byte) 3, (byte) 4, (byte) 5, (byte) 7 } (byte) FILL (const byte) FILL#0 = (byte) 230 (byte*) SCREEN (const byte*) SCREEN#0 = (word) 1024 -(byte[256]) XPOS -(const byte[256]) XPOS#0 = (word) 4096 -(byte[256]) YPOS -(const byte[256]) YPOS#0 = (word) 4352 -(void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) -(label) addpoint::@return -(byte) addpoint::c -(byte) addpoint::c#6 -(byte) addpoint::x -(byte) addpoint::x#6 -(byte) addpoint::y -(byte) addpoint::y#6 +(byte[]) XPOS +(const byte[]) XPOS#0 = { (byte) 5, (byte) 15, (byte) 6, (byte) 34, (byte) 21, (byte) 31 } +(byte[]) YPOS +(const byte[]) YPOS#0 = { (byte) 5, (byte) 8, (byte) 14, (byte) 2, (byte) 17, (byte) 22 } (void()) animate() (byte~) animate::$0 (byte~) animate::$1 @@ -7679,18 +6273,11 @@ FINAL SYMBOL TABLE (byte*) initscreen::screen#2 (void()) main() (label) main::@1 -(label) main::@10 -(label) main::@11 -(label) main::@3 (label) main::@4 (label) main::@5 -(label) main::@6 -(label) main::@7 -(label) main::@8 (label) main::@return (byte) numpoints -(byte) numpoints#1 -(byte) numpoints#19 +(const byte) numpoints#0 = (byte) 6 (void()) render() (label) render::@1 (label) render::@2 @@ -7709,116 +6296,93 @@ FINAL SYMBOL TABLE (byte) render::y#1 (byte) render::y#2 -Block Sequence Planned @begin @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@1 main::@10 main::@11 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return addpoint addpoint::@return +Block Sequence Planned @begin @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return Added new block during phi lifting render::@6(between render::@3 and render::@1) Added new block during phi lifting render::@7(between render::@5 and render::@2) Added new block during phi lifting findcol::@19(between findcol::@8 and findcol::@1) Added new block during phi lifting findcol::@20(between findcol::@8 and findcol::@return) Added new block during phi lifting findcol::@21(between findcol::@7 and findcol::@8) Added new block during phi lifting initscreen::@3(between initscreen::@1 and initscreen::@1) -Block Sequence Planned @begin @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@1 main::@10 main::@11 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return render::@6 render::@7 findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@20 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return initscreen::@3 addpoint addpoint::@return +Block Sequence Planned @begin @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return render::@6 render::@7 findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@20 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return initscreen::@3 CONTROL FLOW GRAPH - PHI LIFTED @begin: scope:[] from call main param-assignment to:@end @end: scope:[] from @begin main: scope:[main] from @begin - call addpoint param-assignment - to:main::@3 -main::@3: scope:[main] from main - (byte~) numpoints#44 ← (byte) numpoints#1 - call addpoint param-assignment - to:main::@4 -main::@4: scope:[main] from main::@3 - (byte~) numpoints#45 ← (byte) numpoints#1 - call addpoint param-assignment - to:main::@5 -main::@5: scope:[main] from main::@4 - (byte~) numpoints#46 ← (byte) numpoints#1 - call addpoint param-assignment - to:main::@6 -main::@6: scope:[main] from main::@5 - (byte~) numpoints#47 ← (byte) numpoints#1 - call addpoint param-assignment - to:main::@7 -main::@7: scope:[main] from main::@6 - (byte~) numpoints#48 ← (byte) numpoints#1 - call addpoint param-assignment - to:main::@8 -main::@8: scope:[main] from main::@7 call initscreen param-assignment to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 +main::@1: scope:[main] from main main::@5 call render param-assignment - to:main::@10 -main::@10: scope:[main] from main::@1 + to:main::@4 +main::@4: scope:[main] from main::@1 call animate param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 + to:main::@5 +main::@5: scope:[main] from main::@4 if(true) goto main::@1 to:main::@return -main::@return: scope:[main] from main::@11 +main::@return: scope:[main] from main::@5 return to:@return -animate: scope:[animate] from main::@10 - (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 +animate: scope:[animate] from main::@4 + (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 - *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 - (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 + *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 + (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 if((byte~) animate::$2!=(byte) 40) goto animate::@1 to:animate::@7 animate::@7: scope:[animate] from animate - *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 + *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 to:animate::@1 animate::@1: scope:[animate] from animate animate::@7 - (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 + (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 - *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 - (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 + *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 + (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 if((byte~) animate::$7!=(byte) 25) goto animate::@2 to:animate::@8 animate::@8: scope:[animate] from animate::@1 - *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 + *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 to:animate::@2 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 + (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 - *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 - (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 + *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 + (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 if((byte~) animate::$12!=(byte) 255) goto animate::@3 to:animate::@9 animate::@9: scope:[animate] from animate::@2 - *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 + *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 to:animate::@3 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 + (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 - *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 - (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 + *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 + (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 if((byte~) animate::$17!=(byte) 25) goto animate::@4 to:animate::@10 animate::@10: scope:[animate] from animate::@3 - *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 + *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 to:animate::@4 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 + (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 - *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 - (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 + *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 + (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 if((byte~) animate::$22!=(byte) 255) goto animate::@return to:animate::@11 animate::@11: scope:[animate] from animate::@4 - *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 - (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 + *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 + (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 - *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 - (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 + *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 + (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 if((byte~) animate::$27<(byte) 40) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 + (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 - *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 + *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -7862,8 +6426,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@19 (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::mincol#14 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::i#14 ) - (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 - (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 + (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 + (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@9: scope:[findcol] from findcol::@1 @@ -7894,7 +6458,7 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 to:findcol::@16 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 + (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 (byte~) findcol::mincol#16 ← (byte) findcol::mincol#1 (byte~) findcol::diff#13 ← (byte) findcol::diff#6 to:findcol::@8 @@ -7902,7 +6466,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@21 (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte~) findcol::diff#13 findcol::@21/(byte~) findcol::mindiff#14 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte~) findcol::mincol#16 findcol::@21/(byte~) findcol::mincol#17 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#12 - if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 + if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 to:findcol::@20 findcol::@20: scope:[findcol] from findcol::@8 (byte~) findcol::mincol#15 ← (byte) findcol::mincol#2 @@ -7925,7 +6489,7 @@ findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 (byte~) findcol::diff#10 ← (byte) findcol::diff#0 to:findcol::@5 -initscreen: scope:[initscreen] from main::@8 +initscreen: scope:[initscreen] from main to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@3 (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@3/(byte*~) initscreen::screen#3 ) @@ -7939,19 +6503,6 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 initscreen::@3: scope:[initscreen] from initscreen::@1 (byte*~) initscreen::screen#3 ← (byte*) initscreen::screen#1 to:initscreen::@1 -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) - (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) - (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte~) numpoints#44 main::@4/(byte~) numpoints#45 main::@5/(byte~) numpoints#46 main::@6/(byte~) numpoints#47 main::@7/(byte~) numpoints#48 ) - (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) - *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 - *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 - *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 - (byte) numpoints#1 ← ++ (byte) numpoints#19 - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - return - to:@return Adding NOP phi() at start of main Adding NOP phi() at start of render @@ -7959,8 +6510,8 @@ Adding NOP phi() at start of findcol Adding NOP phi() at start of initscreen CALL GRAPH Calls in [] to 0:main -Calls in [main] to 2:addpoint 4:addpoint 6:addpoint 8:addpoint 10:addpoint 12:addpoint 13:initscreen 14:render 15:animate -Calls in [render] to 62:findcol +Calls in [main] to 2:initscreen 3:render 4:animate +Calls in [render] to 51:findcol Propagating live ranges... Propagating live ranges... @@ -7980,15 +6531,6 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... CONTROL FLOW GRAPH - LIVE RANGES FOUND @begin: scope:[] from [0] call main param-assignment [ ] @@ -7996,267 +6538,226 @@ CONTROL FLOW GRAPH - LIVE RANGES FOUND @end: scope:[] from @begin main: scope:[main] from @begin [1] phi() [ ] - [2] call addpoint param-assignment [ numpoints#1 ] - to:main::@3 -main::@3: scope:[main] from main - [3] (byte~) numpoints#44 ← (byte) numpoints#1 [ numpoints#44 ] - [4] call addpoint param-assignment [ numpoints#1 ] + [2] call initscreen param-assignment [ ] + to:main::@1 +main::@1: scope:[main] from main main::@5 + [3] call render param-assignment [ ] to:main::@4 -main::@4: scope:[main] from main::@3 - [5] (byte~) numpoints#45 ← (byte) numpoints#1 [ numpoints#45 ] - [6] call addpoint param-assignment [ numpoints#1 ] +main::@4: scope:[main] from main::@1 + [4] call animate param-assignment [ ] to:main::@5 main::@5: scope:[main] from main::@4 - [7] (byte~) numpoints#46 ← (byte) numpoints#1 [ numpoints#46 ] - [8] call addpoint param-assignment [ numpoints#1 ] - to:main::@6 -main::@6: scope:[main] from main::@5 - [9] (byte~) numpoints#47 ← (byte) numpoints#1 [ numpoints#47 ] - [10] call addpoint param-assignment [ numpoints#1 ] - to:main::@7 -main::@7: scope:[main] from main::@6 - [11] (byte~) numpoints#48 ← (byte) numpoints#1 [ numpoints#48 ] - [12] call addpoint param-assignment [ numpoints#1 ] - to:main::@8 -main::@8: scope:[main] from main::@7 - [13] call initscreen param-assignment [ numpoints#1 ] - to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 - [14] call render param-assignment [ numpoints#1 ] - to:main::@10 -main::@10: scope:[main] from main::@1 - [15] call animate param-assignment [ numpoints#1 ] - to:main::@11 -main::@11: scope:[main] from main::@10 - [16] if(true) goto main::@1 [ numpoints#1 ] + [5] if(true) goto main::@1 [ ] to:main::@return -main::@return: scope:[main] from main::@11 - [17] return [ ] +main::@return: scope:[main] from main::@5 + [6] return [ ] to:@return -animate: scope:[animate] from main::@10 - [18] (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$0 ] - [19] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] - [20] *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] - [21] (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$2 ] - [22] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] +animate: scope:[animate] from main::@4 + [7] (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$0 ] + [8] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] + [9] *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] + [10] (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$2 ] + [11] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] to:animate::@7 animate::@7: scope:[animate] from animate - [23] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] + [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] to:animate::@1 animate::@1: scope:[animate] from animate animate::@7 - [24] (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$5 ] - [25] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] - [26] *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] - [27] (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$7 ] - [28] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] + [13] (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$5 ] + [14] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] + [15] *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] + [16] (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$7 ] + [17] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] to:animate::@8 animate::@8: scope:[animate] from animate::@1 - [29] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] + [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] to:animate::@2 animate::@2: scope:[animate] from animate::@1 animate::@8 - [30] (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$10 ] - [31] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] - [32] *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] - [33] (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$12 ] - [34] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] + [19] (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$10 ] + [20] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] + [21] *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] + [22] (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$12 ] + [23] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] to:animate::@9 animate::@9: scope:[animate] from animate::@2 - [35] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] + [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] to:animate::@3 animate::@3: scope:[animate] from animate::@2 animate::@9 - [36] (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$15 ] - [37] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] - [38] *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] - [39] (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$17 ] - [40] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] + [25] (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$15 ] + [26] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] + [27] *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] + [28] (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$17 ] + [29] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] to:animate::@10 animate::@10: scope:[animate] from animate::@3 - [41] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] + [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] to:animate::@4 animate::@4: scope:[animate] from animate::@10 animate::@3 - [42] (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$20 ] - [43] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] - [44] *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] - [45] (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$22 ] - [46] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] + [31] (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$20 ] + [32] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] + [33] *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] + [34] (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$22 ] + [35] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] to:animate::@11 animate::@11: scope:[animate] from animate::@4 - [47] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] - [48] (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$25 ] - [49] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] - [50] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] - [51] (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$27 ] - [52] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] + [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] + [37] (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$25 ] + [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] + [39] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] + [40] (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$27 ] + [41] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] to:animate::@12 animate::@12: scope:[animate] from animate::@11 - [53] (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$30 ] - [54] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] - [55] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] + [42] (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$30 ] + [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] + [44] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 - [56] return [ ] + [45] return [ ] to:@return render: scope:[render] from main::@1 - [57] phi() [ numpoints#1 ] + [46] phi() [ ] to:render::@1 render::@1: scope:[render] from render render::@6 - [58] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@6/(byte*~) render::colline#6 ) [ numpoints#1 render::y#2 render::colline#2 ] - [58] (byte) render::y#2 ← phi( render/(byte) 0 render::@6/(byte~) render::y#6 ) [ numpoints#1 render::y#2 render::colline#2 ] + [47] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@6/(byte*~) render::colline#6 ) [ render::y#2 render::colline#2 ] + [47] (byte) render::y#2 ← phi( render/(byte) 0 render::@6/(byte~) render::y#6 ) [ render::y#2 render::colline#2 ] to:render::@2 render::@2: scope:[render] from render::@1 render::@7 - [59] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@7/(byte~) render::x#4 ) [ numpoints#1 render::y#2 render::colline#2 render::x#2 ] - [60] (byte) findcol::x#0 ← (byte) render::x#2 [ numpoints#1 render::y#2 render::colline#2 render::x#2 findcol::x#0 ] - [61] (byte) findcol::y#0 ← (byte) render::y#2 [ numpoints#1 render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] - [62] call findcol param-assignment [ numpoints#1 render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + [48] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@7/(byte~) render::x#4 ) [ render::y#2 render::colline#2 render::x#2 ] + [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] + [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] + [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] to:render::@5 render::@5: scope:[render] from render::@2 - [63] (byte) render::col#0 ← (byte) findcol::return#0 [ numpoints#1 render::y#2 render::colline#2 render::x#2 render::col#0 ] - [64] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ numpoints#1 render::y#2 render::colline#2 render::x#2 ] - [65] (byte) render::x#1 ← ++ (byte) render::x#2 [ numpoints#1 render::y#2 render::colline#2 render::x#1 ] - [66] if((byte) render::x#1!=(byte) 40) goto render::@7 [ numpoints#1 render::y#2 render::colline#2 render::x#1 ] + [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] + [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] + [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] + [55] if((byte) render::x#1!=(byte) 40) goto render::@7 [ render::y#2 render::colline#2 render::x#1 ] to:render::@3 render::@3: scope:[render] from render::@5 - [67] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ numpoints#1 render::y#2 render::colline#1 ] - [68] (byte) render::y#1 ← ++ (byte) render::y#2 [ numpoints#1 render::colline#1 render::y#1 ] - [69] if((byte) render::y#1!=(byte) 25) goto render::@6 [ numpoints#1 render::colline#1 render::y#1 ] + [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] + [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::colline#1 render::y#1 ] + [58] if((byte) render::y#1!=(byte) 25) goto render::@6 [ render::colline#1 render::y#1 ] to:render::@return render::@return: scope:[render] from render::@3 - [70] return [ numpoints#1 ] + [59] return [ ] to:@return render::@6: scope:[render] from render::@3 - [71] (byte~) render::y#6 ← (byte) render::y#1 [ numpoints#1 render::y#6 render::colline#1 ] - [72] (byte*~) render::colline#6 ← (byte*) render::colline#1 [ numpoints#1 render::y#6 render::colline#6 ] + [60] (byte~) render::y#6 ← (byte) render::y#1 [ render::y#6 render::colline#1 ] + [61] (byte*~) render::colline#6 ← (byte*) render::colline#1 [ render::y#6 render::colline#6 ] to:render::@1 render::@7: scope:[render] from render::@5 - [73] (byte~) render::x#4 ← (byte) render::x#1 [ numpoints#1 render::y#2 render::colline#2 render::x#4 ] + [62] (byte~) render::x#4 ← (byte) render::x#1 [ render::y#2 render::colline#2 render::x#4 ] to:render::@2 findcol: scope:[findcol] from render::@2 - [74] phi() [ numpoints#1 findcol::x#0 findcol::y#0 ] + [63] phi() [ findcol::x#0 findcol::y#0 ] to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@19 - [75] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::mincol#14 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] - [75] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] - [75] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::i#14 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] - [76] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] - [77] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] - [78] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] + [64] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::mincol#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [64] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [64] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte~) findcol::i#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [65] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] + [66] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] + [67] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@9 findcol::@9: scope:[findcol] from findcol::@1 - [79] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] + [68] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@return findcol::@return: scope:[findcol] from findcol::@20 findcol::@9 - [80] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@20/(byte~) findcol::mincol#15 ) [ numpoints#1 findcol::return#0 ] - [81] return [ numpoints#1 findcol::return#0 ] + [69] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@20/(byte~) findcol::mincol#15 ) [ findcol::return#0 ] + [70] return [ findcol::return#0 ] to:@return findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 - [82] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] + [71] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@12 findcol::@12: scope:[findcol] from findcol::@2 - [83] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] - [84] (byte~) findcol::diff#9 ← (byte) findcol::diff#1 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#9 ] + [72] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] + [73] (byte~) findcol::diff#9 ← (byte) findcol::diff#1 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#9 ] to:findcol::@5 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 - [85] (byte) findcol::diff#4 ← phi( findcol::@12/(byte~) findcol::diff#9 findcol::@4/(byte~) findcol::diff#10 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] - [86] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] + [74] (byte) findcol::diff#4 ← phi( findcol::@12/(byte~) findcol::diff#9 findcol::@4/(byte~) findcol::diff#10 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] + [75] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] to:findcol::@14 findcol::@14: scope:[findcol] from findcol::@5 - [87] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] - [88] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] - [89] (byte~) findcol::diff#11 ← (byte) findcol::diff#3 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#11 ] + [76] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] + [77] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] + [78] (byte~) findcol::diff#11 ← (byte) findcol::diff#3 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#11 ] to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 - [90] (byte) findcol::diff#6 ← phi( findcol::@14/(byte~) findcol::diff#11 findcol::@6/(byte~) findcol::diff#12 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] - [91] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] + [79] (byte) findcol::diff#6 ← phi( findcol::@14/(byte~) findcol::diff#11 findcol::@6/(byte~) findcol::diff#12 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] + [80] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] to:findcol::@16 findcol::@16: scope:[findcol] from findcol::@7 - [92] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] - [93] (byte~) findcol::mincol#16 ← (byte) findcol::mincol#1 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#16 ] - [94] (byte~) findcol::diff#13 ← (byte) findcol::diff#6 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#16 findcol::diff#13 ] + [81] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] + [82] (byte~) findcol::mincol#16 ← (byte) findcol::mincol#1 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#16 ] + [83] (byte~) findcol::diff#13 ← (byte) findcol::diff#6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#16 findcol::diff#13 ] to:findcol::@8 findcol::@8: scope:[findcol] from findcol::@16 findcol::@21 - [95] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte~) findcol::diff#13 findcol::@21/(byte~) findcol::mindiff#14 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] - [95] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte~) findcol::mincol#16 findcol::@21/(byte~) findcol::mincol#17 ) [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] - [96] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::mincol#2 findcol::mindiff#11 findcol::i#1 ] - [97] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::mincol#2 findcol::mindiff#11 findcol::i#1 ] + [84] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte~) findcol::diff#13 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [84] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte~) findcol::mincol#16 findcol::@21/(byte~) findcol::mincol#17 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [85] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::mincol#2 findcol::mindiff#11 findcol::i#1 ] + [86] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::mincol#2 findcol::mindiff#11 findcol::i#1 ] to:findcol::@20 findcol::@20: scope:[findcol] from findcol::@8 - [98] (byte~) findcol::mincol#15 ← (byte) findcol::mincol#2 [ numpoints#1 findcol::mincol#15 ] + [87] (byte~) findcol::mincol#15 ← (byte) findcol::mincol#2 [ findcol::mincol#15 ] to:findcol::@return findcol::@19: scope:[findcol] from findcol::@8 - [99] (byte~) findcol::i#14 ← (byte) findcol::i#1 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#14 findcol::mincol#2 findcol::mindiff#11 ] - [100] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#14 findcol::mindiff#13 findcol::mincol#2 ] - [101] (byte~) findcol::mincol#14 ← (byte) findcol::mincol#2 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#14 findcol::mindiff#13 findcol::mincol#14 ] + [88] (byte~) findcol::i#14 ← (byte) findcol::i#1 [ findcol::x#0 findcol::y#0 findcol::i#14 findcol::mincol#2 findcol::mindiff#11 ] + [89] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#14 findcol::mindiff#13 findcol::mincol#2 ] + [90] (byte~) findcol::mincol#14 ← (byte) findcol::mincol#2 [ findcol::x#0 findcol::y#0 findcol::i#14 findcol::mindiff#13 findcol::mincol#14 ] to:findcol::@1 findcol::@21: scope:[findcol] from findcol::@7 - [102] (byte~) findcol::mincol#17 ← (byte) findcol::mincol#11 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#17 ] - [103] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#17 findcol::mindiff#14 ] + [91] (byte~) findcol::mincol#17 ← (byte) findcol::mincol#11 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#17 ] + [92] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#17 findcol::mindiff#14 ] to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 - [104] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] - [105] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] - [106] (byte~) findcol::diff#12 ← (byte) findcol::diff#2 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#12 ] + [93] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] + [94] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] + [95] (byte~) findcol::diff#12 ← (byte) findcol::diff#2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#12 ] to:findcol::@7 findcol::@4: scope:[findcol] from findcol::@2 - [107] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] - [108] (byte~) findcol::diff#10 ← (byte) findcol::diff#0 [ numpoints#1 findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#10 ] + [96] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] + [97] (byte~) findcol::diff#10 ← (byte) findcol::diff#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#10 ] to:findcol::@5 -initscreen: scope:[initscreen] from main::@8 - [109] phi() [ ] +initscreen: scope:[initscreen] from main + [98] phi() [ ] to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@3 - [110] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@3/(byte*~) initscreen::screen#3 ) [ initscreen::screen#2 ] - [111] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] - [112] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] - [113] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@3 [ initscreen::screen#1 ] + [99] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@3/(byte*~) initscreen::screen#3 ) [ initscreen::screen#2 ] + [100] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] + [101] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] + [102] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@3 [ initscreen::screen#1 ] to:initscreen::@return initscreen::@return: scope:[initscreen] from initscreen::@1 - [114] return [ ] + [103] return [ ] to:@return initscreen::@3: scope:[initscreen] from initscreen::@1 - [115] (byte*~) initscreen::screen#3 ← (byte*) initscreen::screen#1 [ initscreen::screen#3 ] + [104] (byte*~) initscreen::screen#3 ← (byte*) initscreen::screen#1 [ initscreen::screen#3 ] to:initscreen::@1 -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - [116] (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [116] (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [116] (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte~) numpoints#44 main::@4/(byte~) numpoints#45 main::@5/(byte~) numpoints#46 main::@6/(byte~) numpoints#47 main::@7/(byte~) numpoints#48 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [116] (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [117] *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] - [118] *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 [ numpoints#19 addpoint::c#6 ] - [119] *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] - [120] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ numpoints#1 ] - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - [121] return [ numpoints#1 ] - to:@return -Created 16 initial phi equivalence classes -Coalesced [3] numpoints#44 ← numpoints#1 -Coalesced (already) [5] numpoints#45 ← numpoints#1 -Coalesced (already) [7] numpoints#46 ← numpoints#1 -Coalesced (already) [9] numpoints#47 ← numpoints#1 -Coalesced (already) [11] numpoints#48 ← numpoints#1 -Coalesced [71] render::y#6 ← render::y#1 -Coalesced [72] render::colline#6 ← render::colline#1 -Coalesced [73] render::x#4 ← render::x#1 -Coalesced [84] findcol::diff#9 ← findcol::diff#1 -Coalesced [89] findcol::diff#11 ← findcol::diff#3 -Coalesced [93] findcol::mincol#16 ← findcol::mincol#1 -Coalesced [94] findcol::diff#13 ← findcol::diff#6 -Coalesced [98] findcol::mincol#15 ← findcol::mincol#2 -Coalesced [99] findcol::i#14 ← findcol::i#1 -Not coalescing [100] findcol::mindiff#13 ← findcol::mindiff#11 -Coalesced [101] findcol::mincol#14 ← findcol::mincol#2 -Coalesced (already) [102] findcol::mincol#17 ← findcol::mincol#11 -Not coalescing [103] findcol::mindiff#14 ← findcol::mindiff#10 -Coalesced [106] findcol::diff#12 ← findcol::diff#2 -Coalesced [108] findcol::diff#10 ← findcol::diff#0 -Coalesced [115] initscreen::screen#3 ← initscreen::screen#1 -Coalesced down to 13 phi equivalence classes +Created 12 initial phi equivalence classes +Coalesced [60] render::y#6 ← render::y#1 +Coalesced [61] render::colline#6 ← render::colline#1 +Coalesced [62] render::x#4 ← render::x#1 +Coalesced [73] findcol::diff#9 ← findcol::diff#1 +Coalesced [78] findcol::diff#11 ← findcol::diff#3 +Coalesced [82] findcol::mincol#16 ← findcol::mincol#1 +Coalesced [83] findcol::diff#13 ← findcol::diff#6 +Coalesced [87] findcol::mincol#15 ← findcol::mincol#2 +Coalesced [88] findcol::i#14 ← findcol::i#1 +Not coalescing [89] findcol::mindiff#13 ← findcol::mindiff#11 +Coalesced [90] findcol::mincol#14 ← findcol::mincol#2 +Coalesced (already) [91] findcol::mincol#17 ← findcol::mincol#11 +Not coalescing [92] findcol::mindiff#14 ← findcol::mindiff#10 +Coalesced [95] findcol::diff#12 ← findcol::diff#2 +Coalesced [97] findcol::diff#10 ← findcol::diff#0 +Coalesced [104] initscreen::screen#3 ← initscreen::screen#1 +Coalesced down to 9 phi equivalence classes Culled Empty Block (label) render::@6 Culled Empty Block (label) render::@7 Culled Empty Block (label) findcol::@20 Culled Empty Block (label) initscreen::@3 -Block Sequence Planned @begin @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@1 main::@10 main::@11 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return addpoint addpoint::@return +Block Sequence Planned @begin @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return Adding NOP phi() at start of main Adding NOP phi() at start of render Adding NOP phi() at start of findcol @@ -8274,16 +6775,6 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... CONTROL FLOW GRAPH - PHI MEM COALESCED @begin: scope:[] from [0] call main param-assignment [ ] @@ -8291,277 +6782,238 @@ CONTROL FLOW GRAPH - PHI MEM COALESCED @end: scope:[] from @begin main: scope:[main] from @begin [1] phi() [ ] - [2] call addpoint param-assignment [ ] - to:main::@3 -main::@3: scope:[main] from main - [3] call addpoint param-assignment [ numpoints#1 ] + [2] call initscreen param-assignment [ ] + to:main::@1 +main::@1: scope:[main] from main main::@5 + [3] call render param-assignment [ ] to:main::@4 -main::@4: scope:[main] from main::@3 - [4] call addpoint param-assignment [ numpoints#1 ] +main::@4: scope:[main] from main::@1 + [4] call animate param-assignment [ ] to:main::@5 main::@5: scope:[main] from main::@4 - [5] call addpoint param-assignment [ numpoints#1 ] - to:main::@6 -main::@6: scope:[main] from main::@5 - [6] call addpoint param-assignment [ numpoints#1 ] - to:main::@7 -main::@7: scope:[main] from main::@6 - [7] call addpoint param-assignment [ numpoints#1 ] - to:main::@8 -main::@8: scope:[main] from main::@7 - [8] call initscreen param-assignment [ numpoints#1 ] - to:main::@1 -main::@1: scope:[main] from main::@11 main::@8 - [9] call render param-assignment [ numpoints#1 ] - to:main::@10 -main::@10: scope:[main] from main::@1 - [10] call animate param-assignment [ numpoints#1 ] - to:main::@11 -main::@11: scope:[main] from main::@10 - [11] if(true) goto main::@1 [ numpoints#1 ] + [5] if(true) goto main::@1 [ ] to:main::@return -main::@return: scope:[main] from main::@11 - [12] return [ ] +main::@return: scope:[main] from main::@5 + [6] return [ ] to:@return -animate: scope:[animate] from main::@10 - [13] (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$0 ] - [14] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] - [15] *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] - [16] (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$2 ] - [17] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] +animate: scope:[animate] from main::@4 + [7] (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$0 ] + [8] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] + [9] *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] + [10] (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$2 ] + [11] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] to:animate::@7 animate::@7: scope:[animate] from animate - [18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] + [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] to:animate::@1 animate::@1: scope:[animate] from animate animate::@7 - [19] (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$5 ] - [20] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] - [21] *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] - [22] (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$7 ] - [23] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] + [13] (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$5 ] + [14] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] + [15] *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] + [16] (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$7 ] + [17] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] to:animate::@8 animate::@8: scope:[animate] from animate::@1 - [24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] + [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] to:animate::@2 animate::@2: scope:[animate] from animate::@1 animate::@8 - [25] (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$10 ] - [26] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] - [27] *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] - [28] (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$12 ] - [29] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] + [19] (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$10 ] + [20] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] + [21] *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] + [22] (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$12 ] + [23] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] to:animate::@9 animate::@9: scope:[animate] from animate::@2 - [30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] + [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] to:animate::@3 animate::@3: scope:[animate] from animate::@2 animate::@9 - [31] (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$15 ] - [32] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] - [33] *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] - [34] (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$17 ] - [35] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] + [25] (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$15 ] + [26] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] + [27] *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] + [28] (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$17 ] + [29] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] to:animate::@10 animate::@10: scope:[animate] from animate::@3 - [36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] + [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] to:animate::@4 animate::@4: scope:[animate] from animate::@10 animate::@3 - [37] (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$20 ] - [38] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] - [39] *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] - [40] (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$22 ] - [41] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] + [31] (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$20 ] + [32] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] + [33] *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] + [34] (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$22 ] + [35] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] to:animate::@11 animate::@11: scope:[animate] from animate::@4 - [42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] - [43] (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$25 ] - [44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] - [45] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] - [46] (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$27 ] - [47] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] + [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] + [37] (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$25 ] + [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] + [39] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] + [40] (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$27 ] + [41] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] to:animate::@12 animate::@12: scope:[animate] from animate::@11 - [48] (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$30 ] - [49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] - [50] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] + [42] (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$30 ] + [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] + [44] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 - [51] return [ ] + [45] return [ ] to:@return render: scope:[render] from main::@1 - [52] phi() [ numpoints#1 ] + [46] phi() [ ] to:render::@1 render::@1: scope:[render] from render render::@3 - [53] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@3/(byte*) render::colline#1 ) [ render::y#2 render::colline#2 numpoints#1 ] - [53] (byte) render::y#2 ← phi( render/(byte) 0 render::@3/(byte) render::y#1 ) [ render::y#2 render::colline#2 numpoints#1 ] + [47] (byte*) render::colline#2 ← phi( render/(const byte*) COLORS#0 render::@3/(byte*) render::colline#1 ) [ render::y#2 render::colline#2 ] + [47] (byte) render::y#2 ← phi( render/(byte) 0 render::@3/(byte) render::y#1 ) [ render::y#2 render::colline#2 ] to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - [54] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@5/(byte) render::x#1 ) [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] - [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] - [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] - [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] + [48] (byte) render::x#2 ← phi( render::@1/(byte) 0 render::@5/(byte) render::x#1 ) [ render::y#2 render::colline#2 render::x#2 ] + [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] + [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] + [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] to:render::@5 render::@5: scope:[render] from render::@2 - [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] - [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] - [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] - [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] + [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] + [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] + [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] + [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] to:render::@3 render::@3: scope:[render] from render::@5 - [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] - [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] - [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] + [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] + [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] + [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] to:render::@return render::@return: scope:[render] from render::@3 - [65] return [ numpoints#1 ] + [59] return [ ] to:@return findcol: scope:[findcol] from render::@2 - [66] phi() [ findcol::x#0 findcol::y#0 numpoints#1 ] + [60] phi() [ findcol::x#0 findcol::y#0 ] to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@19 - [67] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::mincol#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] - [67] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] - [67] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::i#1 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 numpoints#1 ] - [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] - [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] - [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] + [61] (byte) findcol::mincol#11 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::mincol#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [61] (byte) findcol::mindiff#10 ← phi( findcol/(byte) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [61] (byte) findcol::i#12 ← phi( findcol/(byte) 0 findcol::@19/(byte) findcol::i#1 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 ] + [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] + [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] + [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@9 findcol::@9: scope:[findcol] from findcol::@1 - [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] + [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@return findcol::@return: scope:[findcol] from findcol::@8 findcol::@9 - [72] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@8/(byte) findcol::mincol#2 ) [ findcol::return#0 numpoints#1 ] - [73] return [ findcol::return#0 numpoints#1 ] + [66] (byte) findcol::return#0 ← phi( findcol::@9/(byte) 0 findcol::@8/(byte) findcol::mincol#2 ) [ findcol::return#0 ] + [67] return [ findcol::return#0 ] to:@return findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 - [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] + [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] to:findcol::@12 findcol::@12: scope:[findcol] from findcol::@2 - [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] + [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] to:findcol::@5 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 - [76] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] - [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] + [70] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] + [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] to:findcol::@14 findcol::@14: scope:[findcol] from findcol::@5 - [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] - [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] + [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] + [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] to:findcol::@7 findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 - [80] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] - [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] + [74] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] + [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] to:findcol::@16 findcol::@16: scope:[findcol] from findcol::@7 - [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] + [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] to:findcol::@8 findcol::@8: scope:[findcol] from findcol::@16 findcol::@21 - [83] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [83] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] - [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] + [77] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#14 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [77] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#11 ) [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#2 findcol::mindiff#11 ] + [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] + [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] to:findcol::@return findcol::@19: scope:[findcol] from findcol::@8 - [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] + [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] to:findcol::@1 findcol::@21: scope:[findcol] from findcol::@7 - [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] + [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] to:findcol::@8 findcol::@6: scope:[findcol] from findcol::@5 - [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] - [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] + [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] + [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] to:findcol::@7 findcol::@4: scope:[findcol] from findcol::@2 - [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] + [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] to:findcol::@5 -initscreen: scope:[initscreen] from main::@8 - [91] phi() [ ] +initscreen: scope:[initscreen] from main + [85] phi() [ ] to:initscreen::@1 initscreen::@1: scope:[initscreen] from initscreen initscreen::@1 - [92] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ] - [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] - [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] - [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] + [86] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ] + [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] + [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] + [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] to:initscreen::@return initscreen::@return: scope:[initscreen] from initscreen::@1 - [96] return [ ] - to:@return -addpoint: scope:[addpoint] from main main::@3 main::@4 main::@5 main::@6 main::@7 - [97] (byte) addpoint::c#6 ← phi( main/(byte) 1 main::@3/(byte) 2 main::@4/(byte) 3 main::@5/(byte) 4 main::@6/(byte) 5 main::@7/(byte) 7 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) addpoint::y#6 ← phi( main/(byte) 5 main::@3/(byte) 8 main::@4/(byte) 14 main::@5/(byte) 2 main::@6/(byte) 17 main::@7/(byte) 22 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) numpoints#19 ← phi( main/(byte) 0 main::@3/(byte) numpoints#1 main::@4/(byte) numpoints#1 main::@5/(byte) numpoints#1 main::@6/(byte) numpoints#1 main::@7/(byte) numpoints#1 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [97] (byte) addpoint::x#6 ← phi( main/(byte) 5 main::@3/(byte) 15 main::@4/(byte) 6 main::@5/(byte) 34 main::@6/(byte) 21 main::@7/(byte) 31 ) [ addpoint::x#6 numpoints#19 addpoint::y#6 addpoint::c#6 ] - [98] *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] - [99] *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 [ numpoints#19 addpoint::c#6 ] - [100] *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] - [101] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ numpoints#1 ] - to:addpoint::@return -addpoint::@return: scope:[addpoint] from addpoint - [102] return [ numpoints#1 ] + [90] return [ ] to:@return DOMINATORS @begin dominated by @begin -@end dominated by @end @begin +@end dominated by @begin @end main dominated by @begin main -main::@3 dominated by @begin main::@3 main -main::@4 dominated by @begin main::@4 main::@3 main -main::@5 dominated by @begin main::@4 main::@3 main::@5 main -main::@6 dominated by @begin main::@4 main::@3 main::@6 main::@5 main -main::@7 dominated by @begin main::@4 main::@3 main::@6 main::@5 main::@7 main -main::@8 dominated by @begin main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -main::@1 dominated by @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -main::@10 dominated by main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -main::@11 dominated by main::@10 main::@11 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -main::@return dominated by main::@return main::@10 main::@11 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate dominated by animate main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@7 dominated by animate animate::@7 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@1 dominated by animate animate::@1 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@8 dominated by animate animate::@1 animate::@8 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@2 dominated by animate animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@9 dominated by animate animate::@1 animate::@2 animate::@9 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@3 dominated by animate animate::@3 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@10 dominated by animate animate::@10 animate::@3 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@4 dominated by animate animate::@3 animate::@4 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@11 dominated by animate animate::@11 animate::@3 animate::@4 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@12 dominated by animate animate::@11 animate::@12 animate::@3 animate::@4 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -animate::@return dominated by animate animate::@return animate::@3 animate::@4 animate::@1 animate::@2 main::@10 @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render dominated by render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render::@1 dominated by render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render::@2 dominated by render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render::@5 dominated by render::@2 render::@5 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render::@3 dominated by render::@3 render::@2 render::@5 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -render::@return dominated by render::@3 render::@2 render::@5 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 render::@return main -findcol dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -findcol::@1 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@1 main -findcol::@9 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@1 findcol::@9 main -findcol::@return dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@1 findcol::@return main -findcol::@2 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@2 findcol::@1 main -findcol::@12 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@2 findcol::@1 findcol::@12 main -findcol::@5 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@5 findcol::@2 findcol::@1 main -findcol::@14 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@5 findcol::@2 findcol::@1 findcol::@14 main -findcol::@7 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 findcol::@7 main::@8 findcol::@5 findcol::@2 findcol::@1 main -findcol::@16 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol::@16 main -findcol::@8 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 findcol::@8 main::@7 main::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 main -findcol::@19 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 findcol::@8 main::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol::@19 main -findcol::@21 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 main findcol::@21 -findcol::@6 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@6 findcol::@5 findcol::@2 findcol::@1 main -findcol::@4 dominated by findcol render::@2 render::@1 render @begin main::@1 main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 findcol::@4 findcol::@2 findcol::@1 main -initscreen dominated by @begin initscreen main::@4 main::@3 main::@6 main::@5 main::@7 main::@8 main -initscreen::@1 dominated by @begin main::@4 initscreen main::@3 main::@6 main::@5 main::@7 main::@8 main initscreen::@1 -initscreen::@return dominated by @begin main::@4 initscreen main::@3 main::@6 main::@5 main::@7 main::@8 initscreen::@return main initscreen::@1 -addpoint dominated by addpoint @begin main -addpoint::@return dominated by addpoint addpoint::@return @begin main +main::@1 dominated by @begin main::@1 main +main::@4 dominated by @begin main::@1 main::@4 main +main::@5 dominated by @begin main::@1 main::@4 main::@5 main +main::@return dominated by @begin main::@1 main::@4 main::@5 main main::@return +animate dominated by animate @begin main::@1 main::@4 main +animate::@7 dominated by animate @begin main::@1 main::@4 animate::@7 main +animate::@1 dominated by animate @begin main::@1 main::@4 animate::@1 main +animate::@8 dominated by animate @begin main::@1 main::@4 animate::@1 animate::@8 main +animate::@2 dominated by animate @begin main::@1 main::@4 animate::@1 animate::@2 main +animate::@9 dominated by animate @begin main::@1 main::@4 animate::@1 animate::@2 animate::@9 main +animate::@3 dominated by animate @begin main::@1 main::@4 animate::@3 animate::@1 animate::@2 main +animate::@10 dominated by animate @begin main::@1 main::@4 animate::@10 animate::@3 animate::@1 animate::@2 main +animate::@4 dominated by animate @begin main::@1 main::@4 animate::@3 animate::@4 animate::@1 animate::@2 main +animate::@11 dominated by animate @begin main::@1 main::@4 animate::@11 animate::@3 animate::@4 animate::@1 animate::@2 main +animate::@12 dominated by animate @begin main::@1 main::@4 animate::@11 animate::@12 animate::@3 animate::@4 animate::@1 animate::@2 main +animate::@return dominated by animate @begin animate::@return main::@1 main::@4 animate::@3 animate::@4 animate::@1 animate::@2 main +render dominated by @begin main::@1 render main +render::@1 dominated by @begin main::@1 render::@1 main render +render::@2 dominated by @begin main::@1 render::@2 render::@1 main render +render::@5 dominated by @begin main::@1 render::@2 render::@5 render::@1 main render +render::@3 dominated by @begin main::@1 render::@3 render::@2 render::@5 render::@1 main render +render::@return dominated by @begin main::@1 render::@3 render::@2 render::@5 render::@return render::@1 main render +findcol dominated by @begin main::@1 findcol render::@2 render::@1 main render +findcol::@1 dominated by @begin main::@1 findcol::@1 findcol render::@2 render::@1 main render +findcol::@9 dominated by @begin main::@1 findcol::@1 findcol render::@2 findcol::@9 render::@1 main render +findcol::@return dominated by @begin main::@1 findcol::@1 findcol render::@2 findcol::@return render::@1 main render +findcol::@2 dominated by @begin main::@1 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +findcol::@12 dominated by @begin main::@1 findcol::@2 findcol::@1 findcol::@12 findcol render::@2 render::@1 main render +findcol::@5 dominated by @begin main::@1 findcol::@5 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +findcol::@14 dominated by @begin main::@1 findcol::@5 findcol::@2 findcol::@1 findcol::@14 findcol render::@2 render::@1 main render +findcol::@7 dominated by @begin main::@1 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +findcol::@16 dominated by @begin main::@1 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol::@16 findcol render::@2 render::@1 main render +findcol::@8 dominated by @begin main::@1 findcol::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +findcol::@19 dominated by @begin main::@1 findcol::@8 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol findcol::@19 render::@2 render::@1 main render +findcol::@21 dominated by @begin main::@1 findcol::@7 findcol::@5 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render findcol::@21 +findcol::@6 dominated by @begin main::@1 findcol::@6 findcol::@5 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +findcol::@4 dominated by @begin main::@1 findcol::@4 findcol::@2 findcol::@1 findcol render::@2 render::@1 main render +initscreen dominated by @begin initscreen main +initscreen::@1 dominated by @begin initscreen main initscreen::@1 +initscreen::@return dominated by @begin initscreen initscreen::@return main initscreen::@1 -Found back edge: Loop head: main::@1 tails: main::@11 blocks: null +Found back edge: Loop head: main::@1 tails: main::@5 blocks: null Found back edge: Loop head: render::@2 tails: render::@5 blocks: null Found back edge: Loop head: render::@1 tails: render::@3 blocks: null Found back edge: Loop head: findcol::@1 tails: findcol::@19 blocks: null Found back edge: Loop head: initscreen::@1 tails: initscreen::@1 blocks: null -Populated: Loop head: main::@1 tails: main::@11 blocks: main::@11 main::@10 main::@1 +Populated: Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 Populated: Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 Populated: Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 Populated: Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 Populated: Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 NATURAL LOOPS -Loop head: main::@1 tails: main::@11 blocks: main::@11 main::@10 main::@1 +Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 @@ -8569,8 +7021,7 @@ Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 Found 0 loops in scope [] Found 1 loops in scope [main] - Loop head: main::@1 tails: main::@11 blocks: main::@11 main::@10 main::@1 -Found 0 loops in scope [addpoint] + Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 Found 1 loops in scope [initscreen] Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 Found 2 loops in scope [render] @@ -8580,7 +7031,7 @@ Found 0 loops in scope [animate] Found 1 loops in scope [findcol] Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 NATURAL LOOPS WITH DEPTH -Loop head: main::@1 tails: main::@11 blocks: main::@11 main::@10 main::@1 depth: 1 +Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 depth: 1 Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 depth: 3 Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 depth: 2 Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 depth: 4 @@ -8589,18 +7040,11 @@ Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 depth: 1 VARIABLE REGISTER WEIGHTS (byte*) COLORS -(byte[256]) COLS +(byte[]) COLS (byte) FILL (byte*) SCREEN -(byte[256]) XPOS -(byte[256]) YPOS -(void()) addpoint((byte) addpoint::x , (byte) addpoint::y , (byte) addpoint::c) -(byte) addpoint::c -(byte) addpoint::c#6 0.6666666666666666 -(byte) addpoint::x -(byte) addpoint::x#6 2.0 -(byte) addpoint::y -(byte) addpoint::y#6 1.0 +(byte[]) XPOS +(byte[]) YPOS (void()) animate() (byte~) animate::$0 4.0 (byte~) animate::$1 4.0 @@ -8660,8 +7104,6 @@ VARIABLE REGISTER WEIGHTS (byte*) initscreen::screen#2 16.5 (void()) main() (byte) numpoints -(byte) numpoints#1 200.25999999999996 -(byte) numpoints#19 4.5 (void()) render() (byte) render::col (byte) render::col#0 2002.0 @@ -8685,10 +7127,6 @@ Initial phi equivalence classes [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] [ initscreen::screen#2 initscreen::screen#1 ] -[ addpoint::x#6 ] -[ numpoints#19 numpoints#1 ] -[ addpoint::y#6 ] -[ addpoint::c#6 ] Added variable animate::$0 to zero page equivalence class [ animate::$0 ] Added variable animate::$1 to zero page equivalence class [ animate::$1 ] Added variable animate::$2 to zero page equivalence class [ animate::$2 ] @@ -8726,10 +7164,6 @@ Complete equivalence classes [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] [ initscreen::screen#2 initscreen::screen#1 ] -[ addpoint::x#6 ] -[ numpoints#19 numpoints#1 ] -[ addpoint::y#6 ] -[ addpoint::c#6 ] [ animate::$0 ] [ animate::$1 ] [ animate::$2 ] @@ -8766,46 +7200,42 @@ Allocated zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 Allocated zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] Allocated zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] Allocated zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] -Allocated zp ZP_BYTE:13 [ addpoint::x#6 ] -Allocated zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Allocated zp ZP_BYTE:15 [ addpoint::y#6 ] -Allocated zp ZP_BYTE:16 [ addpoint::c#6 ] -Allocated zp ZP_BYTE:17 [ animate::$0 ] -Allocated zp ZP_BYTE:18 [ animate::$1 ] -Allocated zp ZP_BYTE:19 [ animate::$2 ] -Allocated zp ZP_BYTE:20 [ animate::$5 ] -Allocated zp ZP_BYTE:21 [ animate::$6 ] -Allocated zp ZP_BYTE:22 [ animate::$7 ] -Allocated zp ZP_BYTE:23 [ animate::$10 ] -Allocated zp ZP_BYTE:24 [ animate::$11 ] -Allocated zp ZP_BYTE:25 [ animate::$12 ] -Allocated zp ZP_BYTE:26 [ animate::$15 ] -Allocated zp ZP_BYTE:27 [ animate::$16 ] -Allocated zp ZP_BYTE:28 [ animate::$17 ] -Allocated zp ZP_BYTE:29 [ animate::$20 ] -Allocated zp ZP_BYTE:30 [ animate::$21 ] -Allocated zp ZP_BYTE:31 [ animate::$22 ] -Allocated zp ZP_BYTE:32 [ animate::$25 ] -Allocated zp ZP_BYTE:33 [ animate::$26 ] -Allocated zp ZP_BYTE:34 [ animate::$27 ] -Allocated zp ZP_BYTE:35 [ animate::$30 ] -Allocated zp ZP_BYTE:36 [ animate::$31 ] -Allocated zp ZP_BYTE:37 [ findcol::x#0 ] -Allocated zp ZP_BYTE:38 [ findcol::y#0 ] -Allocated zp ZP_BYTE:39 [ render::col#0 ] -Allocated zp ZP_BYTE:40 [ findcol::xp#0 ] -Allocated zp ZP_BYTE:41 [ findcol::yp#0 ] -Allocated zp ZP_BYTE:42 [ findcol::$12 ] -Allocated zp ZP_BYTE:43 [ findcol::$14 ] +Allocated zp ZP_BYTE:13 [ animate::$0 ] +Allocated zp ZP_BYTE:14 [ animate::$1 ] +Allocated zp ZP_BYTE:15 [ animate::$2 ] +Allocated zp ZP_BYTE:16 [ animate::$5 ] +Allocated zp ZP_BYTE:17 [ animate::$6 ] +Allocated zp ZP_BYTE:18 [ animate::$7 ] +Allocated zp ZP_BYTE:19 [ animate::$10 ] +Allocated zp ZP_BYTE:20 [ animate::$11 ] +Allocated zp ZP_BYTE:21 [ animate::$12 ] +Allocated zp ZP_BYTE:22 [ animate::$15 ] +Allocated zp ZP_BYTE:23 [ animate::$16 ] +Allocated zp ZP_BYTE:24 [ animate::$17 ] +Allocated zp ZP_BYTE:25 [ animate::$20 ] +Allocated zp ZP_BYTE:26 [ animate::$21 ] +Allocated zp ZP_BYTE:27 [ animate::$22 ] +Allocated zp ZP_BYTE:28 [ animate::$25 ] +Allocated zp ZP_BYTE:29 [ animate::$26 ] +Allocated zp ZP_BYTE:30 [ animate::$27 ] +Allocated zp ZP_BYTE:31 [ animate::$30 ] +Allocated zp ZP_BYTE:32 [ animate::$31 ] +Allocated zp ZP_BYTE:33 [ findcol::x#0 ] +Allocated zp ZP_BYTE:34 [ findcol::y#0 ] +Allocated zp ZP_BYTE:35 [ render::col#0 ] +Allocated zp ZP_BYTE:36 [ findcol::xp#0 ] +Allocated zp ZP_BYTE:37 [ findcol::yp#0 ] +Allocated zp ZP_BYTE:38 [ findcol::$12 ] +Allocated zp ZP_BYTE:39 [ findcol::$14 ] INITIAL ASM //SEG0 Global Constants & labels .const SCREEN = $400 .const COLORS = $d800 .const FILL = $e6 - .const XPOS = $1000 - .const YPOS = $1100 - .const COLS = $1200 - .label numpoints = 14 + .const numpoints = 6 + XPOS: .byte 5, $f, 6, $22, $15, $1f + YPOS: .byte 5, 8, $e, 2, $11, $16 + COLS: .byte 1, 2, 3, 4, 5, 7 //SEG1 @begin bbegin: //SEG2 [0] call main param-assignment [ ] @@ -8817,395 +7247,291 @@ main_from_bbegin: bend: //SEG5 main main: { - //SEG6 [2] call addpoint param-assignment [ ] - //SEG7 [97] phi from main to addpoint - addpoint_from_main: - //SEG8 [97] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 - lda #1 - sta addpoint.c - //SEG9 [97] phi (byte) addpoint::y#6 = (byte) 5 -- zpby1=coby1 - lda #5 - sta addpoint.y - //SEG10 [97] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 - lda #0 - sta numpoints - //SEG11 [97] phi (byte) addpoint::x#6 = (byte) 5 -- zpby1=coby1 - lda #5 - sta addpoint.x - jsr addpoint - jmp b3 - //SEG12 main::@3 - b3: - //SEG13 [3] call addpoint param-assignment [ numpoints#1 ] - //SEG14 [97] phi from main::@3 to addpoint - addpoint_from_b3: - //SEG15 [97] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 - lda #2 - sta addpoint.c - //SEG16 [97] phi (byte) addpoint::y#6 = (byte) 8 -- zpby1=coby1 - lda #8 - sta addpoint.y - //SEG17 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG18 [97] phi (byte) addpoint::x#6 = (byte) 15 -- zpby1=coby1 - lda #$f - sta addpoint.x - jsr addpoint - jmp b4 - //SEG19 main::@4 - b4: - //SEG20 [4] call addpoint param-assignment [ numpoints#1 ] - //SEG21 [97] phi from main::@4 to addpoint - addpoint_from_b4: - //SEG22 [97] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 - lda #3 - sta addpoint.c - //SEG23 [97] phi (byte) addpoint::y#6 = (byte) 14 -- zpby1=coby1 - lda #$e - sta addpoint.y - //SEG24 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG25 [97] phi (byte) addpoint::x#6 = (byte) 6 -- zpby1=coby1 - lda #6 - sta addpoint.x - jsr addpoint - jmp b5 - //SEG26 main::@5 - b5: - //SEG27 [5] call addpoint param-assignment [ numpoints#1 ] - //SEG28 [97] phi from main::@5 to addpoint - addpoint_from_b5: - //SEG29 [97] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 - lda #4 - sta addpoint.c - //SEG30 [97] phi (byte) addpoint::y#6 = (byte) 2 -- zpby1=coby1 - lda #2 - sta addpoint.y - //SEG31 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG32 [97] phi (byte) addpoint::x#6 = (byte) 34 -- zpby1=coby1 - lda #$22 - sta addpoint.x - jsr addpoint - jmp b6 - //SEG33 main::@6 - b6: - //SEG34 [6] call addpoint param-assignment [ numpoints#1 ] - //SEG35 [97] phi from main::@6 to addpoint - addpoint_from_b6: - //SEG36 [97] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 - lda #5 - sta addpoint.c - //SEG37 [97] phi (byte) addpoint::y#6 = (byte) 17 -- zpby1=coby1 - lda #$11 - sta addpoint.y - //SEG38 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG39 [97] phi (byte) addpoint::x#6 = (byte) 21 -- zpby1=coby1 - lda #$15 - sta addpoint.x - jsr addpoint - jmp b7 - //SEG40 main::@7 - b7: - //SEG41 [7] call addpoint param-assignment [ numpoints#1 ] - //SEG42 [97] phi from main::@7 to addpoint - addpoint_from_b7: - //SEG43 [97] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 - lda #7 - sta addpoint.c - //SEG44 [97] phi (byte) addpoint::y#6 = (byte) 22 -- zpby1=coby1 - lda #$16 - sta addpoint.y - //SEG45 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG46 [97] phi (byte) addpoint::x#6 = (byte) 31 -- zpby1=coby1 - lda #$1f - sta addpoint.x - jsr addpoint - jmp b8 - //SEG47 main::@8 - b8: - //SEG48 [8] call initscreen param-assignment [ numpoints#1 ] - //SEG49 [91] phi from main::@8 to initscreen - initscreen_from_b8: + //SEG6 [2] call initscreen param-assignment [ ] + //SEG7 [85] phi from main to initscreen + initscreen_from_main: jsr initscreen jmp b1 - //SEG50 main::@1 + //SEG8 main::@1 b1: - //SEG51 [9] call render param-assignment [ numpoints#1 ] - //SEG52 [52] phi from main::@1 to render + //SEG9 [3] call render param-assignment [ ] + //SEG10 [46] phi from main::@1 to render render_from_b1: jsr render - jmp b10 - //SEG53 main::@10 - b10: - //SEG54 [10] call animate param-assignment [ numpoints#1 ] + jmp b4 + //SEG11 main::@4 + b4: + //SEG12 [4] call animate param-assignment [ ] jsr animate - jmp b11 - //SEG55 main::@11 - b11: - //SEG56 [11] if(true) goto main::@1 [ numpoints#1 ] -- true_then_la1 + jmp b5 + //SEG13 main::@5 + b5: + //SEG14 [5] if(true) goto main::@1 [ ] -- true_then_la1 jmp b1 jmp breturn - //SEG57 main::@return + //SEG15 main::@return breturn: - //SEG58 [12] return [ ] + //SEG16 [6] return [ ] rts } -//SEG59 animate +//SEG17 animate animate: { - .label _0 = 17 - .label _1 = 18 - .label _2 = 19 - .label _5 = 20 - .label _6 = 21 - .label _7 = 22 - .label _10 = 23 - .label _11 = 24 - .label _12 = 25 - .label _15 = 26 - .label _16 = 27 - .label _17 = 28 - .label _20 = 29 - .label _21 = 30 - .label _22 = 31 - .label _25 = 32 - .label _26 = 33 - .label _27 = 34 - .label _30 = 35 - .label _31 = 36 - //SEG60 [13] (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$0 ] -- zpby1=_star_cowo1 + .label _0 = 13 + .label _1 = 14 + .label _2 = 15 + .label _5 = 16 + .label _6 = 17 + .label _7 = 18 + .label _10 = 19 + .label _11 = 20 + .label _12 = 21 + .label _15 = 22 + .label _16 = 23 + .label _17 = 24 + .label _20 = 25 + .label _21 = 26 + .label _22 = 27 + .label _25 = 28 + .label _26 = 29 + .label _27 = 30 + .label _30 = 31 + .label _31 = 32 + //SEG18 [7] (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$0 ] -- zpby1=_star_cowo1 lda XPOS+0 sta _0 - //SEG61 [14] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] -- zpby1=zpby2_plus_1 + //SEG19 [8] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] -- zpby1=zpby2_plus_1 lda _0 clc adc #1 sta _1 - //SEG62 [15] *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] -- _star_cowo1=zpby1 + //SEG20 [9] *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] -- _star_cowo1=zpby1 lda _1 sta XPOS+0 - //SEG63 [16] (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$2 ] -- zpby1=_star_cowo1 + //SEG21 [10] (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$2 ] -- zpby1=_star_cowo1 lda XPOS+0 sta _2 - //SEG64 [17] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] -- zpby1_neq_coby1_then_la1 + //SEG22 [11] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] -- zpby1_neq_coby1_then_la1 lda _2 cmp #$28 bne b1 jmp b7 - //SEG65 animate::@7 + //SEG23 animate::@7 b7: - //SEG66 [18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG24 [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta XPOS+0 jmp b1 - //SEG67 animate::@1 + //SEG25 animate::@1 b1: - //SEG68 [19] (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$5 ] -- zpby1=_star_cowo1 + //SEG26 [13] (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$5 ] -- zpby1=_star_cowo1 lda YPOS+0 sta _5 - //SEG69 [20] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] -- zpby1=zpby2_plus_1 + //SEG27 [14] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] -- zpby1=zpby2_plus_1 lda _5 clc adc #1 sta _6 - //SEG70 [21] *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] -- _star_cowo1=zpby1 + //SEG28 [15] *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] -- _star_cowo1=zpby1 lda _6 sta YPOS+0 - //SEG71 [22] (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$7 ] -- zpby1=_star_cowo1 + //SEG29 [16] (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$7 ] -- zpby1=_star_cowo1 lda YPOS+0 sta _7 - //SEG72 [23] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] -- zpby1_neq_coby1_then_la1 + //SEG30 [17] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] -- zpby1_neq_coby1_then_la1 lda _7 cmp #$19 bne b2 jmp b8 - //SEG73 animate::@8 + //SEG31 animate::@8 b8: - //SEG74 [24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG32 [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta YPOS+0 jmp b2 - //SEG75 animate::@2 + //SEG33 animate::@2 b2: - //SEG76 [25] (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$10 ] -- zpby1=_star_cowo1 + //SEG34 [19] (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$10 ] -- zpby1=_star_cowo1 lda XPOS+1 sta _10 - //SEG77 [26] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] -- zpby1=zpby2_minus_1 + //SEG35 [20] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] -- zpby1=zpby2_minus_1 lda _10 sec sbc #1 sta _11 - //SEG78 [27] *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] -- _star_cowo1=zpby1 + //SEG36 [21] *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] -- _star_cowo1=zpby1 lda _11 sta XPOS+1 - //SEG79 [28] (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$12 ] -- zpby1=_star_cowo1 + //SEG37 [22] (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$12 ] -- zpby1=_star_cowo1 lda XPOS+1 sta _12 - //SEG80 [29] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] -- zpby1_neq_coby1_then_la1 + //SEG38 [23] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] -- zpby1_neq_coby1_then_la1 lda _12 cmp #$ff bne b3 jmp b9 - //SEG81 animate::@9 + //SEG39 animate::@9 b9: - //SEG82 [30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] -- _star_cowo1=coby2 + //SEG40 [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] -- _star_cowo1=coby2 lda #$28 sta XPOS+1 jmp b3 - //SEG83 animate::@3 + //SEG41 animate::@3 b3: - //SEG84 [31] (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$15 ] -- zpby1=_star_cowo1 + //SEG42 [25] (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$15 ] -- zpby1=_star_cowo1 lda YPOS+2 sta _15 - //SEG85 [32] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] -- zpby1=zpby2_plus_1 + //SEG43 [26] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] -- zpby1=zpby2_plus_1 lda _15 clc adc #1 sta _16 - //SEG86 [33] *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] -- _star_cowo1=zpby1 + //SEG44 [27] *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] -- _star_cowo1=zpby1 lda _16 sta YPOS+2 - //SEG87 [34] (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$17 ] -- zpby1=_star_cowo1 + //SEG45 [28] (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$17 ] -- zpby1=_star_cowo1 lda YPOS+2 sta _17 - //SEG88 [35] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] -- zpby1_neq_coby1_then_la1 + //SEG46 [29] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] -- zpby1_neq_coby1_then_la1 lda _17 cmp #$19 bne b4 jmp b10 - //SEG89 animate::@10 + //SEG47 animate::@10 b10: - //SEG90 [36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG48 [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta YPOS+2 jmp b4 - //SEG91 animate::@4 + //SEG49 animate::@4 b4: - //SEG92 [37] (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$20 ] -- zpby1=_star_cowo1 + //SEG50 [31] (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$20 ] -- zpby1=_star_cowo1 lda YPOS+3 sta _20 - //SEG93 [38] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] -- zpby1=zpby2_minus_1 + //SEG51 [32] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] -- zpby1=zpby2_minus_1 lda _20 sec sbc #1 sta _21 - //SEG94 [39] *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] -- _star_cowo1=zpby1 + //SEG52 [33] *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] -- _star_cowo1=zpby1 lda _21 sta YPOS+3 - //SEG95 [40] (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$22 ] -- zpby1=_star_cowo1 + //SEG53 [34] (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$22 ] -- zpby1=_star_cowo1 lda YPOS+3 sta _22 - //SEG96 [41] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] -- zpby1_neq_coby1_then_la1 + //SEG54 [35] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] -- zpby1_neq_coby1_then_la1 lda _22 cmp #$ff bne breturn jmp b11 - //SEG97 animate::@11 + //SEG55 animate::@11 b11: - //SEG98 [42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] -- _star_cowo1=coby2 + //SEG56 [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] -- _star_cowo1=coby2 lda #$19 sta YPOS+3 - //SEG99 [43] (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$25 ] -- zpby1=_star_cowo1 + //SEG57 [37] (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$25 ] -- zpby1=_star_cowo1 lda XPOS+3 sta _25 - //SEG100 [44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] -- zpby1=zpby2_plus_coby1 + //SEG58 [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] -- zpby1=zpby2_plus_coby1 lda _25 clc adc #7 sta _26 - //SEG101 [45] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] -- _star_cowo1=zpby1 + //SEG59 [39] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] -- _star_cowo1=zpby1 lda _26 sta XPOS+3 - //SEG102 [46] (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$27 ] -- zpby1=_star_cowo1 + //SEG60 [40] (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$27 ] -- zpby1=_star_cowo1 lda XPOS+3 sta _27 - //SEG103 [47] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] -- zpby1_lt_coby1_then_la1 + //SEG61 [41] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] -- zpby1_lt_coby1_then_la1 lda _27 cmp #$28 bcc breturn jmp b12 - //SEG104 animate::@12 + //SEG62 animate::@12 b12: - //SEG105 [48] (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$30 ] -- zpby1=_star_cowo1 + //SEG63 [42] (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$30 ] -- zpby1=_star_cowo1 lda XPOS+3 sta _30 - //SEG106 [49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] -- zpby1=zpby2_minus_coby1 + //SEG64 [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] -- zpby1=zpby2_minus_coby1 lda _30 sec sbc #$28 sta _31 - //SEG107 [50] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] -- _star_cowo1=zpby1 + //SEG65 [44] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] -- _star_cowo1=zpby1 lda _31 sta XPOS+3 jmp breturn - //SEG108 animate::@return + //SEG66 animate::@return breturn: - //SEG109 [51] return [ ] + //SEG67 [45] return [ ] rts } -//SEG110 render +//SEG68 render render: { - .label col = 39 + .label col = 35 .label x = 5 .label colline = 3 .label y = 2 - //SEG111 [53] phi from render to render::@1 + //SEG69 [47] phi from render to render::@1 b1_from_render: - //SEG112 [53] phi (byte*) render::colline#2 = (const byte*) COLORS#0 -- zpptrby1=cowo1 + //SEG70 [47] phi (byte*) render::colline#2 = (const byte*) COLORS#0 -- zpptrby1=cowo1 lda #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y jmp b1 - //SEG114 [53] phi from render::@3 to render::@1 + //SEG72 [47] phi from render::@3 to render::@1 b1_from_b3: - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy jmp b1 - //SEG117 render::@1 + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 + //SEG76 [48] phi from render::@1 to render::@2 b2_from_b1: - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x jmp b2 - //SEG120 [54] phi from render::@5 to render::@2 + //SEG78 [48] phi from render::@5 to render::@2 b2_from_b5: - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy jmp b2 - //SEG122 render::@2 + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol findcol_from_b2: jsr findcol jmp b5 - //SEG127 render::@5 + //SEG85 render::@5 b5: - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- zpby1=zpby2 + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- zpby1=zpby2 lda findcol.return sta col - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=zpby2 + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=zpby2 lda col ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2_from_b5 jmp b3 - //SEG132 render::@3 + //SEG90 render::@3 b3: - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -9213,27 +7539,27 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1_from_b3 jmp breturn - //SEG136 render::@return + //SEG94 render::@return breturn: - //SEG137 [65] return [ numpoints#1 ] + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label _12 = 42 - .label _14 = 43 - .label x = 37 - .label y = 38 + .label _12 = 38 + .label _14 = 39 + .label x = 33 + .label y = 34 .label return = 8 - .label xp = 40 - .label yp = 41 + .label xp = 36 + .label yp = 37 .label diff = 9 .label diff_2 = 10 .label diff_3 = 10 @@ -9243,189 +7569,189 @@ findcol: { .label mindiff = 7 .label mindiff_11 = 10 .label mindiff_14 = 10 - //SEG139 [67] phi from findcol to findcol::@1 + //SEG97 [61] phi from findcol to findcol::@1 b1_from_findcol: - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- zpby1=coby1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- zpby1=coby1 lda #0 sta mincol - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- zpby1=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- zpby1=coby1 lda #0 sta i jmp b1 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_zpby2 + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_zpby2 ldx i lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_zpby2 + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_zpby2 ldx i lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 jmp b9 - //SEG147 findcol::@9 + //SEG105 findcol::@9 b9: - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return + //SEG107 [66] phi from findcol::@9 to findcol::@return breturn_from_b9: - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- zpby1=coby1 + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- zpby1=coby1 lda #0 sta return jmp breturn - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 jmp b12 - //SEG155 findcol::@12 + //SEG113 findcol::@12 b12: - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby2_minus_zpby3 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby2_minus_zpby3 lda xp sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 b5_from_b12: b5_from_b4: - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy jmp b5 - //SEG159 findcol::@5 + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 jmp b14 - //SEG161 findcol::@14 + //SEG119 findcol::@14 b14: - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- zpby1=zpby2_minus_zpby3 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- zpby1=zpby2_minus_zpby3 lda yp sec sbc y sta _12 - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- zpby1=zpby2_plus_zpby3 + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- zpby1=zpby2_plus_zpby3 lda diff clc adc _12 sta diff_3 - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 b7_from_b14: b7_from_b6: - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy jmp b7 - //SEG166 findcol::@7 + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- zpby1_ge_zpby2_then_la1 lda diff_6 cmp mindiff bcs b21 jmp b16 - //SEG168 findcol::@16 + //SEG126 findcol::@16 b16: - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- zpby1=cowo1_staridx_zpby2 + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- zpby1=cowo1_staridx_zpby2 ldx i lda COLS,x sta mincol - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 b8_from_b16: b8_from_b21: - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy jmp b8 - //SEG173 findcol::@8 + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- zpby1=_inc_zpby1 inc i - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- zpby1_lt_zpby2_then_la1 + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- zpby1_lt_coby1_then_la1 lda i - cmp numpoints + cmp #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return + //SEG134 [66] phi from findcol::@8 to findcol::@return breturn_from_b8: - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=zpby2 + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=zpby2 lda mindiff_11 sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 + //SEG138 [61] phi from findcol::@19 to findcol::@1 b1_from_b19: - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- zpby1=zpby2 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- zpby1=zpby2 lda mindiff sta mindiff_14 jmp b8_from_b21 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- zpby1=zpby2_minus_zpby3 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- zpby1=zpby2_minus_zpby3 lda y sec sbc yp sta _14 - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- zpby1=zpby2_plus_zpby3 + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- zpby1=zpby2_plus_zpby3 lda diff clc adc _14 sta diff_2 jmp b7_from_b6 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby3 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby3 lda x sec sbc xp sta diff jmp b5_from_b4 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 11 - //SEG192 [92] phi from initscreen to initscreen::@1 + //SEG150 [86] phi from initscreen to initscreen::@1 b1_from_initscreen: - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 jmp b1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 b1_from_b1: - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy jmp b1 - //SEG196 initscreen::@1 + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1_from_b1 @@ -9435,80 +7761,53 @@ initscreen: { bcc b1_from_b1 !: jmp breturn - //SEG200 initscreen::@return + //SEG158 initscreen::@return breturn: - //SEG201 [96] return [ ] - rts -} -//SEG202 addpoint -addpoint: { - .label x = 13 - .label y = 15 - .label c = 16 - //SEG203 [98] *((const byte[256]) XPOS#0 + (byte) numpoints#19) ← (byte) addpoint::x#6 [ numpoints#19 addpoint::y#6 addpoint::c#6 ] -- cowo1_staridx_zpby1=zpby2 - lda x - ldx numpoints - sta XPOS,x - //SEG204 [99] *((const byte[256]) YPOS#0 + (byte) numpoints#19) ← (byte) addpoint::y#6 [ numpoints#19 addpoint::c#6 ] -- cowo1_staridx_zpby1=zpby2 - lda y - ldx numpoints - sta YPOS,x - //SEG205 [100] *((const byte[256]) COLS#0 + (byte) numpoints#19) ← (byte) addpoint::c#6 [ numpoints#19 ] -- cowo1_staridx_zpby1=zpby2 - lda c - ldx numpoints - sta COLS,x - //SEG206 [101] (byte) numpoints#1 ← ++ (byte) numpoints#19 [ numpoints#1 ] -- zpby1=_inc_zpby1 - inc numpoints - jmp breturn - //SEG207 addpoint::@return - breturn: - //SEG208 [102] return [ numpoints#1 ] + //SEG159 [90] return [ ] rts } -Statement [18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Statement [24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a -Statement [30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] always clobbers reg byte a -Statement [36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] always clobbers reg byte a -Statement [42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] always clobbers reg byte a -Statement [44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] always clobbers reg byte a -Statement [49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] always clobbers reg byte a -Statement [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] always clobbers reg byte a +Statement [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a +Statement [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a +Statement [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] always clobbers reg byte a +Statement [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] always clobbers reg byte a +Statement [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] always clobbers reg byte a +Statement [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] always clobbers reg byte a +Statement [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] always clobbers reg byte a +Statement [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#2 render::y#1 ] -Statement [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ findcol::x#0 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ findcol::y#0 ] +Statement [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ findcol::x#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ findcol::y#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ findcol::yp#0 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ findcol::yp#0 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ render::x#2 render::x#1 ] -Statement [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] always clobbers reg byte a +Statement [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] -Statement [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] always clobbers reg byte a -Statement [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] always clobbers reg byte a -Statement [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Statement [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] always clobbers reg byte a -Statement [18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a -Statement [24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a -Statement [30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] always clobbers reg byte a -Statement [36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] always clobbers reg byte a -Statement [42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] always clobbers reg byte a -Statement [44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] always clobbers reg byte a -Statement [49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] always clobbers reg byte a -Statement [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] always clobbers reg byte a -Statement [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] always clobbers reg byte a -Statement [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] always clobbers reg byte a -Statement [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] always clobbers reg byte a -Statement [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] always clobbers reg byte a -Statement [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y -Statement [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] always clobbers reg byte a -Equivalence Class zp ZP_BYTE:17 [ animate::$0 ] has ALU potential. -Equivalence Class zp ZP_BYTE:20 [ animate::$5 ] has ALU potential. -Equivalence Class zp ZP_BYTE:26 [ animate::$15 ] has ALU potential. -Equivalence Class zp ZP_BYTE:32 [ animate::$25 ] has ALU potential. +Statement [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] always clobbers reg byte a +Statement [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] always clobbers reg byte a +Statement [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y +Statement [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] always clobbers reg byte a +Statement [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a +Statement [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a +Statement [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] always clobbers reg byte a +Statement [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] always clobbers reg byte a +Statement [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] always clobbers reg byte a +Statement [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] always clobbers reg byte a +Statement [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] always clobbers reg byte a +Statement [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] always clobbers reg byte a +Statement [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] always clobbers reg byte a +Statement [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] always clobbers reg byte a +Statement [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] always clobbers reg byte a +Statement [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] always clobbers reg byte a +Statement [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] always clobbers reg byte a reg byte y +Statement [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] always clobbers reg byte a +Equivalence Class zp ZP_BYTE:13 [ animate::$0 ] has ALU potential. +Equivalence Class zp ZP_BYTE:16 [ animate::$5 ] has ALU potential. +Equivalence Class zp ZP_BYTE:22 [ animate::$15 ] has ALU potential. +Equivalence Class zp ZP_BYTE:28 [ animate::$25 ] has ALU potential. REGISTER UPLIFT POTENTIAL REGISTERS Potential registers zp ZP_BYTE:2 [ render::y#2 render::y#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] : zp ZP_PTR_BYTE:3 , @@ -9519,134 +7818,116 @@ Potential registers zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol: Potential registers zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] : zp ZP_PTR_BYTE:11 , -Potential registers zp ZP_BYTE:13 [ addpoint::x#6 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] : zp ZP_BYTE:14 , reg byte x , -Potential registers zp ZP_BYTE:15 [ addpoint::y#6 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:16 [ addpoint::c#6 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:17 [ animate::$0 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:18 [ animate::$1 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:19 [ animate::$2 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:20 [ animate::$5 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:21 [ animate::$6 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ animate::$7 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:23 [ animate::$10 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:24 [ animate::$11 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:25 [ animate::$12 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 [ animate::$15 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:27 [ animate::$16 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:28 [ animate::$17 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:29 [ animate::$20 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:30 [ animate::$21 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:31 [ animate::$22 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:32 [ animate::$25 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:33 [ animate::$26 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:34 [ animate::$27 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:35 [ animate::$30 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:36 [ animate::$31 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:37 [ findcol::x#0 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:38 [ findcol::y#0 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:39 [ render::col#0 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:40 [ findcol::xp#0 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:41 [ findcol::yp#0 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:42 [ findcol::$12 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:43 [ findcol::$14 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:13 [ animate::$0 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:14 [ animate::$1 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:15 [ animate::$2 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:16 [ animate::$5 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:17 [ animate::$6 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:18 [ animate::$7 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:19 [ animate::$10 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ animate::$11 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:21 [ animate::$12 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:22 [ animate::$15 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:23 [ animate::$16 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ animate::$17 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ animate::$20 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ animate::$21 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:27 [ animate::$22 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ animate::$25 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:29 [ animate::$26 ] : zp ZP_BYTE:29 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:30 [ animate::$27 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:31 [ animate::$30 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ animate::$31 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ findcol::x#0 ] : zp ZP_BYTE:33 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:34 [ findcol::y#0 ] : zp ZP_BYTE:34 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:35 [ render::col#0 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:36 [ findcol::xp#0 ] : zp ZP_BYTE:36 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ findcol::yp#0 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:38 [ findcol::$12 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:39 [ findcol::$14 ] : zp ZP_BYTE:39 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:42 [ findcol::$12 ] 20,002: zp ZP_BYTE:43 [ findcol::$14 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] 10,001: zp ZP_BYTE:40 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:41 [ findcol::yp#0 ] 1,708.54: zp ZP_BYTE:38 [ findcol::y#0 ] 1,640.2: zp ZP_BYTE:37 [ findcol::x#0 ] -Uplift Scope [render] 2,168.83: zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 2,002: zp ZP_BYTE:39 [ render::col#0 ] 271.8: zp ZP_BYTE:2 [ render::y#2 render::y#1 ] 201: zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] -Uplift Scope [] 204.76: zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Uplift Scope [animate] 4: zp ZP_BYTE:17 [ animate::$0 ] 4: zp ZP_BYTE:18 [ animate::$1 ] 4: zp ZP_BYTE:19 [ animate::$2 ] 4: zp ZP_BYTE:20 [ animate::$5 ] 4: zp ZP_BYTE:21 [ animate::$6 ] 4: zp ZP_BYTE:22 [ animate::$7 ] 4: zp ZP_BYTE:23 [ animate::$10 ] 4: zp ZP_BYTE:24 [ animate::$11 ] 4: zp ZP_BYTE:25 [ animate::$12 ] 4: zp ZP_BYTE:26 [ animate::$15 ] 4: zp ZP_BYTE:27 [ animate::$16 ] 4: zp ZP_BYTE:28 [ animate::$17 ] 4: zp ZP_BYTE:29 [ animate::$20 ] 4: zp ZP_BYTE:30 [ animate::$21 ] 4: zp ZP_BYTE:31 [ animate::$22 ] 4: zp ZP_BYTE:32 [ animate::$25 ] 4: zp ZP_BYTE:33 [ animate::$26 ] 4: zp ZP_BYTE:34 [ animate::$27 ] 4: zp ZP_BYTE:35 [ animate::$30 ] 4: zp ZP_BYTE:36 [ animate::$31 ] +Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:38 [ findcol::$12 ] 20,002: zp ZP_BYTE:39 [ findcol::$14 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#12 findcol::i#1 ] 10,001: zp ZP_BYTE:36 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:37 [ findcol::yp#0 ] 1,708.54: zp ZP_BYTE:34 [ findcol::y#0 ] 1,640.2: zp ZP_BYTE:33 [ findcol::x#0 ] +Uplift Scope [render] 2,168.83: zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 2,002: zp ZP_BYTE:35 [ render::col#0 ] 271.8: zp ZP_BYTE:2 [ render::y#2 render::y#1 ] 201: zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] +Uplift Scope [animate] 4: zp ZP_BYTE:13 [ animate::$0 ] 4: zp ZP_BYTE:14 [ animate::$1 ] 4: zp ZP_BYTE:15 [ animate::$2 ] 4: zp ZP_BYTE:16 [ animate::$5 ] 4: zp ZP_BYTE:17 [ animate::$6 ] 4: zp ZP_BYTE:18 [ animate::$7 ] 4: zp ZP_BYTE:19 [ animate::$10 ] 4: zp ZP_BYTE:20 [ animate::$11 ] 4: zp ZP_BYTE:21 [ animate::$12 ] 4: zp ZP_BYTE:22 [ animate::$15 ] 4: zp ZP_BYTE:23 [ animate::$16 ] 4: zp ZP_BYTE:24 [ animate::$17 ] 4: zp ZP_BYTE:25 [ animate::$20 ] 4: zp ZP_BYTE:26 [ animate::$21 ] 4: zp ZP_BYTE:27 [ animate::$22 ] 4: zp ZP_BYTE:28 [ animate::$25 ] 4: zp ZP_BYTE:29 [ animate::$26 ] 4: zp ZP_BYTE:30 [ animate::$27 ] 4: zp ZP_BYTE:31 [ animate::$30 ] 4: zp ZP_BYTE:32 [ animate::$31 ] Uplift Scope [initscreen] 33: zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] -Uplift Scope [addpoint] 2: zp ZP_BYTE:13 [ addpoint::x#6 ] 1: zp ZP_BYTE:15 [ addpoint::y#6 ] 0.67: zp ZP_BYTE:16 [ addpoint::c#6 ] Uplift Scope [main] +Uplift Scope [] Uplift attempts [findcol] 10000/559872 (limiting to 10000) -Uplifting [findcol] best 1715225 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] reg byte x [ findcol::i#12 findcol::i#1 ] zp ZP_BYTE:40 [ findcol::xp#0 ] zp ZP_BYTE:41 [ findcol::yp#0 ] zp ZP_BYTE:38 [ findcol::y#0 ] zp ZP_BYTE:37 [ findcol::x#0 ] +Uplifting [findcol] best 1705029 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#14 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#0 findcol::mincol#11 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$12 ] reg byte a [ findcol::$14 ] reg byte x [ findcol::i#12 findcol::i#1 ] zp ZP_BYTE:36 [ findcol::xp#0 ] zp ZP_BYTE:37 [ findcol::yp#0 ] zp ZP_BYTE:34 [ findcol::y#0 ] zp ZP_BYTE:33 [ findcol::x#0 ] Limited combination testing to 10000 combinations of 559872 possible. -Uplifting [render] best 1711225 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#2 render::y#1 ] zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] -Uplifting [] best 1711225 combination zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Uplifting [initscreen] best 1711225 combination zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] -Uplifting [addpoint] best 1711185 combination reg byte a [ addpoint::x#6 ] reg byte y [ addpoint::y#6 ] zp ZP_BYTE:16 [ addpoint::c#6 ] -Uplifting [main] best 1711185 combination +Uplifting [render] best 1701029 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#2 render::y#1 ] zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] +Uplifting [initscreen] best 1701029 combination zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] +Uplifting [main] best 1701029 combination +Uplifting [] best 1701029 combination Attempting to uplift remaining variables inzp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] -Attempting to uplift remaining variables inzp ZP_BYTE:40 [ findcol::xp#0 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:40 [ findcol::xp#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ findcol::yp#0 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:41 [ findcol::yp#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ findcol::xp#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:36 [ findcol::xp#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:37 [ findcol::yp#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:37 [ findcol::yp#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render::x#2 render::x#1 ] -Uplifting [render] best 1711185 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:38 [ findcol::y#0 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:38 [ findcol::y#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:37 [ findcol::x#0 ] -Uplifting [findcol] best 1711185 combination zp ZP_BYTE:37 [ findcol::x#0 ] +Uplifting [render] best 1701029 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:34 [ findcol::y#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:34 [ findcol::y#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:33 [ findcol::x#0 ] +Uplifting [findcol] best 1701029 combination zp ZP_BYTE:33 [ findcol::x#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render::y#2 render::y#1 ] -Uplifting [render] best 1711185 combination zp ZP_BYTE:2 [ render::y#2 render::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Uplifting [] best 1711185 combination zp ZP_BYTE:14 [ numpoints#19 numpoints#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:17 [ animate::$0 ] -Uplifting [animate] best 1711179 combination reg byte a [ animate::$0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:18 [ animate::$1 ] -Uplifting [animate] best 1711173 combination reg byte a [ animate::$1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:19 [ animate::$2 ] -Uplifting [animate] best 1711167 combination reg byte a [ animate::$2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:20 [ animate::$5 ] -Uplifting [animate] best 1711161 combination reg byte a [ animate::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:21 [ animate::$6 ] -Uplifting [animate] best 1711155 combination reg byte a [ animate::$6 ] -Attempting to uplift remaining variables inzp ZP_BYTE:22 [ animate::$7 ] -Uplifting [animate] best 1711149 combination reg byte a [ animate::$7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:23 [ animate::$10 ] -Uplifting [animate] best 1711143 combination reg byte x [ animate::$10 ] -Attempting to uplift remaining variables inzp ZP_BYTE:24 [ animate::$11 ] -Uplifting [animate] best 1711135 combination reg byte x [ animate::$11 ] -Attempting to uplift remaining variables inzp ZP_BYTE:25 [ animate::$12 ] -Uplifting [animate] best 1711129 combination reg byte a [ animate::$12 ] -Attempting to uplift remaining variables inzp ZP_BYTE:26 [ animate::$15 ] -Uplifting [animate] best 1711123 combination reg byte a [ animate::$15 ] -Attempting to uplift remaining variables inzp ZP_BYTE:27 [ animate::$16 ] -Uplifting [animate] best 1711117 combination reg byte a [ animate::$16 ] -Attempting to uplift remaining variables inzp ZP_BYTE:28 [ animate::$17 ] -Uplifting [animate] best 1711111 combination reg byte a [ animate::$17 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ animate::$20 ] -Uplifting [animate] best 1711105 combination reg byte x [ animate::$20 ] -Attempting to uplift remaining variables inzp ZP_BYTE:30 [ animate::$21 ] -Uplifting [animate] best 1711097 combination reg byte x [ animate::$21 ] -Attempting to uplift remaining variables inzp ZP_BYTE:31 [ animate::$22 ] -Uplifting [animate] best 1711091 combination reg byte a [ animate::$22 ] -Attempting to uplift remaining variables inzp ZP_BYTE:32 [ animate::$25 ] -Uplifting [animate] best 1711085 combination reg byte a [ animate::$25 ] -Attempting to uplift remaining variables inzp ZP_BYTE:33 [ animate::$26 ] -Uplifting [animate] best 1711079 combination reg byte a [ animate::$26 ] -Attempting to uplift remaining variables inzp ZP_BYTE:34 [ animate::$27 ] -Uplifting [animate] best 1711073 combination reg byte a [ animate::$27 ] -Attempting to uplift remaining variables inzp ZP_BYTE:35 [ animate::$30 ] -Uplifting [animate] best 1711067 combination reg byte a [ animate::$30 ] -Attempting to uplift remaining variables inzp ZP_BYTE:36 [ animate::$31 ] -Uplifting [animate] best 1711061 combination reg byte a [ animate::$31 ] -Attempting to uplift remaining variables inzp ZP_BYTE:16 [ addpoint::c#6 ] -Uplifting [addpoint] best 1711061 combination zp ZP_BYTE:16 [ addpoint::c#6 ] -Coalescing zero page register [ zp ZP_BYTE:2 [ render::y#2 render::y#1 ] ] with [ zp ZP_BYTE:16 [ addpoint::c#6 ] ] +Uplifting [render] best 1701029 combination zp ZP_BYTE:2 [ render::y#2 render::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:13 [ animate::$0 ] +Uplifting [animate] best 1701023 combination reg byte a [ animate::$0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:14 [ animate::$1 ] +Uplifting [animate] best 1701017 combination reg byte a [ animate::$1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:15 [ animate::$2 ] +Uplifting [animate] best 1701011 combination reg byte a [ animate::$2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:16 [ animate::$5 ] +Uplifting [animate] best 1701005 combination reg byte a [ animate::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:17 [ animate::$6 ] +Uplifting [animate] best 1700999 combination reg byte a [ animate::$6 ] +Attempting to uplift remaining variables inzp ZP_BYTE:18 [ animate::$7 ] +Uplifting [animate] best 1700993 combination reg byte a [ animate::$7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:19 [ animate::$10 ] +Uplifting [animate] best 1700987 combination reg byte x [ animate::$10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:20 [ animate::$11 ] +Uplifting [animate] best 1700979 combination reg byte x [ animate::$11 ] +Attempting to uplift remaining variables inzp ZP_BYTE:21 [ animate::$12 ] +Uplifting [animate] best 1700973 combination reg byte a [ animate::$12 ] +Attempting to uplift remaining variables inzp ZP_BYTE:22 [ animate::$15 ] +Uplifting [animate] best 1700967 combination reg byte a [ animate::$15 ] +Attempting to uplift remaining variables inzp ZP_BYTE:23 [ animate::$16 ] +Uplifting [animate] best 1700961 combination reg byte a [ animate::$16 ] +Attempting to uplift remaining variables inzp ZP_BYTE:24 [ animate::$17 ] +Uplifting [animate] best 1700955 combination reg byte a [ animate::$17 ] +Attempting to uplift remaining variables inzp ZP_BYTE:25 [ animate::$20 ] +Uplifting [animate] best 1700949 combination reg byte x [ animate::$20 ] +Attempting to uplift remaining variables inzp ZP_BYTE:26 [ animate::$21 ] +Uplifting [animate] best 1700941 combination reg byte x [ animate::$21 ] +Attempting to uplift remaining variables inzp ZP_BYTE:27 [ animate::$22 ] +Uplifting [animate] best 1700935 combination reg byte a [ animate::$22 ] +Attempting to uplift remaining variables inzp ZP_BYTE:28 [ animate::$25 ] +Uplifting [animate] best 1700929 combination reg byte a [ animate::$25 ] +Attempting to uplift remaining variables inzp ZP_BYTE:29 [ animate::$26 ] +Uplifting [animate] best 1700923 combination reg byte a [ animate::$26 ] +Attempting to uplift remaining variables inzp ZP_BYTE:30 [ animate::$27 ] +Uplifting [animate] best 1700917 combination reg byte a [ animate::$27 ] +Attempting to uplift remaining variables inzp ZP_BYTE:31 [ animate::$30 ] +Uplifting [animate] best 1700911 combination reg byte a [ animate::$30 ] +Attempting to uplift remaining variables inzp ZP_BYTE:32 [ animate::$31 ] +Uplifting [animate] best 1700905 combination reg byte a [ animate::$31 ] Coalescing zero page register [ zp ZP_PTR_BYTE:3 [ render::colline#2 render::colline#1 ] ] with [ zp ZP_PTR_BYTE:11 [ initscreen::screen#2 initscreen::screen#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] ] with [ zp ZP_BYTE:40 [ findcol::xp#0 ] ] +Coalescing zero page register [ zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] ] with [ zp ZP_BYTE:36 [ findcol::xp#0 ] ] Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ] Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ] -Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:8 [ numpoints#19 numpoints#1 ] -Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:9 [ findcol::x#0 ] -Allocated (was zp ZP_BYTE:38) zp ZP_BYTE:10 [ findcol::y#0 ] -Allocated (was zp ZP_BYTE:41) zp ZP_BYTE:11 [ findcol::yp#0 ] +Allocated (was zp ZP_BYTE:33) zp ZP_BYTE:8 [ findcol::x#0 ] +Allocated (was zp ZP_BYTE:34) zp ZP_BYTE:9 [ findcol::y#0 ] +Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:10 [ findcol::yp#0 ] Removing instruction jmp bend -Removing instruction jmp b3 +Removing instruction jmp b1 Removing instruction jmp b4 Removing instruction jmp b5 -Removing instruction jmp b6 -Removing instruction jmp b7 -Removing instruction jmp b8 -Removing instruction jmp b1 -Removing instruction jmp b10 -Removing instruction jmp b11 Removing instruction jmp breturn Removing instruction jmp b7 Removing instruction jmp b1 @@ -9675,17 +7956,16 @@ Removing instruction jmp b16 Removing instruction jmp b8 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination ASSEMBLER //SEG0 Global Constants & labels .const SCREEN = $400 .const COLORS = $d800 .const FILL = $e6 - .const XPOS = $1000 - .const YPOS = $1100 - .const COLS = $1200 - .label numpoints = 8 + .const numpoints = 6 + XPOS: .byte 5, $f, 6, $22, $15, $1f + YPOS: .byte 5, 8, $e, 2, $11, $16 + COLS: .byte 1, 2, 3, 4, 5, 7 //SEG1 @begin bbegin: //SEG2 [0] call main param-assignment [ ] @@ -9696,293 +7976,207 @@ main_from_bbegin: bend: //SEG5 main main: { - //SEG6 [2] call addpoint param-assignment [ ] - //SEG7 [97] phi from main to addpoint - addpoint_from_main: - //SEG8 [97] phi (byte) addpoint::c#6 = (byte) 1 -- zpby1=coby1 - lda #1 - sta addpoint.c - //SEG9 [97] phi (byte) addpoint::y#6 = (byte) 5 -- yby=coby1 - ldy #5 - //SEG10 [97] phi (byte) numpoints#19 = (byte) 0 -- zpby1=coby1 - lda #0 - sta numpoints - //SEG11 [97] phi (byte) addpoint::x#6 = (byte) 5 -- aby=coby1 - lda #5 - jsr addpoint - //SEG12 main::@3 - b3: - //SEG13 [3] call addpoint param-assignment [ numpoints#1 ] - //SEG14 [97] phi from main::@3 to addpoint - addpoint_from_b3: - //SEG15 [97] phi (byte) addpoint::c#6 = (byte) 2 -- zpby1=coby1 - lda #2 - sta addpoint.c - //SEG16 [97] phi (byte) addpoint::y#6 = (byte) 8 -- yby=coby1 - ldy #8 - //SEG17 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG18 [97] phi (byte) addpoint::x#6 = (byte) 15 -- aby=coby1 - lda #$f - jsr addpoint - //SEG19 main::@4 - b4: - //SEG20 [4] call addpoint param-assignment [ numpoints#1 ] - //SEG21 [97] phi from main::@4 to addpoint - addpoint_from_b4: - //SEG22 [97] phi (byte) addpoint::c#6 = (byte) 3 -- zpby1=coby1 - lda #3 - sta addpoint.c - //SEG23 [97] phi (byte) addpoint::y#6 = (byte) 14 -- yby=coby1 - ldy #$e - //SEG24 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG25 [97] phi (byte) addpoint::x#6 = (byte) 6 -- aby=coby1 - lda #6 - jsr addpoint - //SEG26 main::@5 - b5: - //SEG27 [5] call addpoint param-assignment [ numpoints#1 ] - //SEG28 [97] phi from main::@5 to addpoint - addpoint_from_b5: - //SEG29 [97] phi (byte) addpoint::c#6 = (byte) 4 -- zpby1=coby1 - lda #4 - sta addpoint.c - //SEG30 [97] phi (byte) addpoint::y#6 = (byte) 2 -- yby=coby1 - ldy #2 - //SEG31 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG32 [97] phi (byte) addpoint::x#6 = (byte) 34 -- aby=coby1 - lda #$22 - jsr addpoint - //SEG33 main::@6 - b6: - //SEG34 [6] call addpoint param-assignment [ numpoints#1 ] - //SEG35 [97] phi from main::@6 to addpoint - addpoint_from_b6: - //SEG36 [97] phi (byte) addpoint::c#6 = (byte) 5 -- zpby1=coby1 - lda #5 - sta addpoint.c - //SEG37 [97] phi (byte) addpoint::y#6 = (byte) 17 -- yby=coby1 - ldy #$11 - //SEG38 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG39 [97] phi (byte) addpoint::x#6 = (byte) 21 -- aby=coby1 - lda #$15 - jsr addpoint - //SEG40 main::@7 - b7: - //SEG41 [7] call addpoint param-assignment [ numpoints#1 ] - //SEG42 [97] phi from main::@7 to addpoint - addpoint_from_b7: - //SEG43 [97] phi (byte) addpoint::c#6 = (byte) 7 -- zpby1=coby1 - lda #7 - sta addpoint.c - //SEG44 [97] phi (byte) addpoint::y#6 = (byte) 22 -- yby=coby1 - ldy #$16 - //SEG45 [97] phi (byte) numpoints#19 = (byte) numpoints#1 -- register_copy - //SEG46 [97] phi (byte) addpoint::x#6 = (byte) 31 -- aby=coby1 - lda #$1f - jsr addpoint - //SEG47 main::@8 - b8: - //SEG48 [8] call initscreen param-assignment [ numpoints#1 ] - //SEG49 [91] phi from main::@8 to initscreen - initscreen_from_b8: + //SEG6 [2] call initscreen param-assignment [ ] + //SEG7 [85] phi from main to initscreen + initscreen_from_main: jsr initscreen - //SEG50 main::@1 + //SEG8 main::@1 b1: - //SEG51 [9] call render param-assignment [ numpoints#1 ] - //SEG52 [52] phi from main::@1 to render + //SEG9 [3] call render param-assignment [ ] + //SEG10 [46] phi from main::@1 to render render_from_b1: jsr render - //SEG53 main::@10 - b10: - //SEG54 [10] call animate param-assignment [ numpoints#1 ] + //SEG11 main::@4 + b4: + //SEG12 [4] call animate param-assignment [ ] jsr animate - //SEG55 main::@11 - b11: - //SEG56 [11] if(true) goto main::@1 [ numpoints#1 ] -- true_then_la1 + //SEG13 main::@5 + b5: + //SEG14 [5] if(true) goto main::@1 [ ] -- true_then_la1 jmp b1 - //SEG57 main::@return + //SEG15 main::@return breturn: - //SEG58 [12] return [ ] + //SEG16 [6] return [ ] rts } -//SEG59 animate +//SEG17 animate animate: { - //SEG60 [13] (byte~) animate::$0 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$0 ] -- aby=_star_cowo1 + //SEG18 [7] (byte~) animate::$0 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$0 ] -- aby=_star_cowo1 lda XPOS+0 - //SEG61 [14] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] -- aby=aby_plus_1 + //SEG19 [8] (byte~) animate::$1 ← (byte~) animate::$0 + (byte) 1 [ animate::$1 ] -- aby=aby_plus_1 clc adc #1 - //SEG62 [15] *((const byte[256]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] -- _star_cowo1=aby + //SEG20 [9] *((const byte[]) XPOS#0+(byte) 0) ← (byte~) animate::$1 [ ] -- _star_cowo1=aby sta XPOS+0 - //SEG63 [16] (byte~) animate::$2 ← * (const byte[256]) XPOS#0+(byte) 0 [ animate::$2 ] -- aby=_star_cowo1 + //SEG21 [10] (byte~) animate::$2 ← * (const byte[]) XPOS#0+(byte) 0 [ animate::$2 ] -- aby=_star_cowo1 lda XPOS+0 - //SEG64 [17] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] -- aby_neq_coby1_then_la1 + //SEG22 [11] if((byte~) animate::$2!=(byte) 40) goto animate::@1 [ ] -- aby_neq_coby1_then_la1 cmp #$28 bne b1 - //SEG65 animate::@7 + //SEG23 animate::@7 b7: - //SEG66 [18] *((const byte[256]) XPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG24 [12] *((const byte[]) XPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta XPOS+0 - //SEG67 animate::@1 + //SEG25 animate::@1 b1: - //SEG68 [19] (byte~) animate::$5 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$5 ] -- aby=_star_cowo1 + //SEG26 [13] (byte~) animate::$5 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$5 ] -- aby=_star_cowo1 lda YPOS+0 - //SEG69 [20] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] -- aby=aby_plus_1 + //SEG27 [14] (byte~) animate::$6 ← (byte~) animate::$5 + (byte) 1 [ animate::$6 ] -- aby=aby_plus_1 clc adc #1 - //SEG70 [21] *((const byte[256]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] -- _star_cowo1=aby + //SEG28 [15] *((const byte[]) YPOS#0+(byte) 0) ← (byte~) animate::$6 [ ] -- _star_cowo1=aby sta YPOS+0 - //SEG71 [22] (byte~) animate::$7 ← * (const byte[256]) YPOS#0+(byte) 0 [ animate::$7 ] -- aby=_star_cowo1 + //SEG29 [16] (byte~) animate::$7 ← * (const byte[]) YPOS#0+(byte) 0 [ animate::$7 ] -- aby=_star_cowo1 lda YPOS+0 - //SEG72 [23] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] -- aby_neq_coby1_then_la1 + //SEG30 [17] if((byte~) animate::$7!=(byte) 25) goto animate::@2 [ ] -- aby_neq_coby1_then_la1 cmp #$19 bne b2 - //SEG73 animate::@8 + //SEG31 animate::@8 b8: - //SEG74 [24] *((const byte[256]) YPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG32 [18] *((const byte[]) YPOS#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta YPOS+0 - //SEG75 animate::@2 + //SEG33 animate::@2 b2: - //SEG76 [25] (byte~) animate::$10 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$10 ] -- xby=_star_cowo1 + //SEG34 [19] (byte~) animate::$10 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$10 ] -- xby=_star_cowo1 ldx XPOS+1 - //SEG77 [26] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] -- xby=xby_minus_1 + //SEG35 [20] (byte~) animate::$11 ← (byte~) animate::$10 - (byte) 1 [ animate::$11 ] -- xby=xby_minus_1 dex - //SEG78 [27] *((const byte[256]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] -- _star_cowo1=xby + //SEG36 [21] *((const byte[]) XPOS#0+(byte) 1) ← (byte~) animate::$11 [ ] -- _star_cowo1=xby stx XPOS+1 - //SEG79 [28] (byte~) animate::$12 ← * (const byte[256]) XPOS#0+(byte) 1 [ animate::$12 ] -- aby=_star_cowo1 + //SEG37 [22] (byte~) animate::$12 ← * (const byte[]) XPOS#0+(byte) 1 [ animate::$12 ] -- aby=_star_cowo1 lda XPOS+1 - //SEG80 [29] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] -- aby_neq_coby1_then_la1 + //SEG38 [23] if((byte~) animate::$12!=(byte) 255) goto animate::@3 [ ] -- aby_neq_coby1_then_la1 cmp #$ff bne b3 - //SEG81 animate::@9 + //SEG39 animate::@9 b9: - //SEG82 [30] *((const byte[256]) XPOS#0+(byte) 1) ← (byte) 40 [ ] -- _star_cowo1=coby2 + //SEG40 [24] *((const byte[]) XPOS#0+(byte) 1) ← (byte) 40 [ ] -- _star_cowo1=coby2 lda #$28 sta XPOS+1 - //SEG83 animate::@3 + //SEG41 animate::@3 b3: - //SEG84 [31] (byte~) animate::$15 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$15 ] -- aby=_star_cowo1 + //SEG42 [25] (byte~) animate::$15 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$15 ] -- aby=_star_cowo1 lda YPOS+2 - //SEG85 [32] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] -- aby=aby_plus_1 + //SEG43 [26] (byte~) animate::$16 ← (byte~) animate::$15 + (byte) 1 [ animate::$16 ] -- aby=aby_plus_1 clc adc #1 - //SEG86 [33] *((const byte[256]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] -- _star_cowo1=aby + //SEG44 [27] *((const byte[]) YPOS#0+(byte) 2) ← (byte~) animate::$16 [ ] -- _star_cowo1=aby sta YPOS+2 - //SEG87 [34] (byte~) animate::$17 ← * (const byte[256]) YPOS#0+(byte) 2 [ animate::$17 ] -- aby=_star_cowo1 + //SEG45 [28] (byte~) animate::$17 ← * (const byte[]) YPOS#0+(byte) 2 [ animate::$17 ] -- aby=_star_cowo1 lda YPOS+2 - //SEG88 [35] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] -- aby_neq_coby1_then_la1 + //SEG46 [29] if((byte~) animate::$17!=(byte) 25) goto animate::@4 [ ] -- aby_neq_coby1_then_la1 cmp #$19 bne b4 - //SEG89 animate::@10 + //SEG47 animate::@10 b10: - //SEG90 [36] *((const byte[256]) YPOS#0+(byte) 2) ← (byte) 0 [ ] -- _star_cowo1=coby2 + //SEG48 [30] *((const byte[]) YPOS#0+(byte) 2) ← (byte) 0 [ ] -- _star_cowo1=coby2 lda #0 sta YPOS+2 - //SEG91 animate::@4 + //SEG49 animate::@4 b4: - //SEG92 [37] (byte~) animate::$20 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$20 ] -- xby=_star_cowo1 + //SEG50 [31] (byte~) animate::$20 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$20 ] -- xby=_star_cowo1 ldx YPOS+3 - //SEG93 [38] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] -- xby=xby_minus_1 + //SEG51 [32] (byte~) animate::$21 ← (byte~) animate::$20 - (byte) 1 [ animate::$21 ] -- xby=xby_minus_1 dex - //SEG94 [39] *((const byte[256]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] -- _star_cowo1=xby + //SEG52 [33] *((const byte[]) YPOS#0+(byte) 3) ← (byte~) animate::$21 [ ] -- _star_cowo1=xby stx YPOS+3 - //SEG95 [40] (byte~) animate::$22 ← * (const byte[256]) YPOS#0+(byte) 3 [ animate::$22 ] -- aby=_star_cowo1 + //SEG53 [34] (byte~) animate::$22 ← * (const byte[]) YPOS#0+(byte) 3 [ animate::$22 ] -- aby=_star_cowo1 lda YPOS+3 - //SEG96 [41] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] -- aby_neq_coby1_then_la1 + //SEG54 [35] if((byte~) animate::$22!=(byte) 255) goto animate::@return [ ] -- aby_neq_coby1_then_la1 cmp #$ff bne breturn - //SEG97 animate::@11 + //SEG55 animate::@11 b11: - //SEG98 [42] *((const byte[256]) YPOS#0+(byte) 3) ← (byte) 25 [ ] -- _star_cowo1=coby2 + //SEG56 [36] *((const byte[]) YPOS#0+(byte) 3) ← (byte) 25 [ ] -- _star_cowo1=coby2 lda #$19 sta YPOS+3 - //SEG99 [43] (byte~) animate::$25 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$25 ] -- aby=_star_cowo1 + //SEG57 [37] (byte~) animate::$25 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$25 ] -- aby=_star_cowo1 lda XPOS+3 - //SEG100 [44] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] -- aby=aby_plus_coby1 + //SEG58 [38] (byte~) animate::$26 ← (byte~) animate::$25 + (byte) 7 [ animate::$26 ] -- aby=aby_plus_coby1 clc adc #7 - //SEG101 [45] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] -- _star_cowo1=aby + //SEG59 [39] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$26 [ ] -- _star_cowo1=aby sta XPOS+3 - //SEG102 [46] (byte~) animate::$27 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$27 ] -- aby=_star_cowo1 + //SEG60 [40] (byte~) animate::$27 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$27 ] -- aby=_star_cowo1 lda XPOS+3 - //SEG103 [47] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] -- aby_lt_coby1_then_la1 + //SEG61 [41] if((byte~) animate::$27<(byte) 40) goto animate::@return [ ] -- aby_lt_coby1_then_la1 cmp #$28 bcc breturn - //SEG104 animate::@12 + //SEG62 animate::@12 b12: - //SEG105 [48] (byte~) animate::$30 ← * (const byte[256]) XPOS#0+(byte) 3 [ animate::$30 ] -- aby=_star_cowo1 + //SEG63 [42] (byte~) animate::$30 ← * (const byte[]) XPOS#0+(byte) 3 [ animate::$30 ] -- aby=_star_cowo1 lda XPOS+3 - //SEG106 [49] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] -- aby=aby_minus_coby1 + //SEG64 [43] (byte~) animate::$31 ← (byte~) animate::$30 - (byte) 40 [ animate::$31 ] -- aby=aby_minus_coby1 sec sbc #$28 - //SEG107 [50] *((const byte[256]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] -- _star_cowo1=aby + //SEG65 [44] *((const byte[]) XPOS#0+(byte) 3) ← (byte~) animate::$31 [ ] -- _star_cowo1=aby sta XPOS+3 - //SEG108 animate::@return + //SEG66 animate::@return breturn: - //SEG109 [51] return [ ] + //SEG67 [45] return [ ] rts } -//SEG110 render +//SEG68 render render: { .label x = 5 .label colline = 3 .label y = 2 - //SEG111 [53] phi from render to render::@1 + //SEG69 [47] phi from render to render::@1 b1_from_render: - //SEG112 [53] phi (byte*) render::colline#2 = (const byte*) COLORS#0 -- zpptrby1=cowo1 + //SEG70 [47] phi (byte*) render::colline#2 = (const byte*) COLORS#0 -- zpptrby1=cowo1 lda #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y jmp b1 - //SEG114 [53] phi from render::@3 to render::@1 + //SEG72 [47] phi from render::@3 to render::@1 b1_from_b3: - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy - //SEG117 render::@1 + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 + //SEG76 [48] phi from render::@1 to render::@2 b2_from_b1: - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x jmp b2 - //SEG120 [54] phi from render::@5 to render::@2 + //SEG78 [48] phi from render::@5 to render::@2 b2_from_b5: - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy - //SEG122 render::@2 + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol findcol_from_b2: jsr findcol - //SEG127 render::@5 + //SEG85 render::@5 b5: - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- aby=yby + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- aby=yby tya - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=aby + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=aby ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2_from_b5 - //SEG132 render::@3 + //SEG90 render::@3 b3: - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -9990,181 +8184,181 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1_from_b3 - //SEG136 render::@return + //SEG94 render::@return breturn: - //SEG137 [65] return [ numpoints#1 ] + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label x = 9 - .label y = 10 + .label x = 8 + .label y = 9 .label xp = 7 - .label yp = 11 + .label yp = 10 .label diff = 7 .label mindiff = 6 - //SEG139 [67] phi from findcol to findcol::@1 + //SEG97 [61] phi from findcol to findcol::@1 b1_from_findcol: - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 ldy #0 - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 ldx #0 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_xby lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_xby lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 - //SEG147 findcol::@9 + //SEG105 findcol::@9 b9: - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return + //SEG107 [66] phi from findcol::@9 to findcol::@return breturn_from_b9: - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 ldy #0 - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 - //SEG155 findcol::@12 + //SEG113 findcol::@12 b12: - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby1_minus_zpby2 lda diff sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 b5_from_b12: b5_from_b4: - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy - //SEG159 findcol::@5 + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 - //SEG161 findcol::@14 + //SEG119 findcol::@14 b14: - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- aby=zpby1_minus_zpby2 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- aby=zpby1_minus_zpby2 lda yp sec sbc y - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- aby=zpby1_plus_aby clc adc diff - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 b7_from_b14: b7_from_b6: - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy - //SEG166 findcol::@7 + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- aby_ge_zpby1_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- aby_ge_zpby1_then_la1 cmp mindiff bcs b21 - //SEG168 findcol::@16 + //SEG126 findcol::@16 b16: - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- yby=cowo1_staridx_xby + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- yby=cowo1_staridx_xby ldy COLS,x - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 b8_from_b16: b8_from_b21: - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy - //SEG173 findcol::@8 + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby=_inc_xby + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby=_inc_xby inx - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby_lt_zpby1_then_la1 - cpx numpoints + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby_lt_coby1_then_la1 + cpx #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return + //SEG134 [66] phi from findcol::@8 to findcol::@return breturn_from_b8: - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=aby + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=aby sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 + //SEG138 [61] phi from findcol::@19 to findcol::@1 b1_from_b19: - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- aby=zpby1 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- aby=zpby1 lda mindiff jmp b8_from_b21 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- aby=zpby1_minus_zpby2 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- aby=zpby1_minus_zpby2 lda y sec sbc yp - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- aby=zpby1_plus_aby clc adc diff jmp b7_from_b6 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby1 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby1 lda x sec sbc diff sta diff jmp b5_from_b4 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 3 - //SEG192 [92] phi from initscreen to initscreen::@1 + //SEG150 [86] phi from initscreen to initscreen::@1 b1_from_initscreen: - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 jmp b1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 b1_from_b1: - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy - //SEG196 initscreen::@1 + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1_from_b1 @@ -10173,30 +8367,9 @@ initscreen: { cmp #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y jmp b1 - //SEG114 [53] phi from render::@3 to render::@1 - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy - //SEG117 render::@1 + //SEG72 [47] phi from render::@3 to render::@1 + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG76 [48] phi from render::@1 to render::@2 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x jmp b2 - //SEG120 [54] phi from render::@5 to render::@2 - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy - //SEG122 render::@2 + //SEG78 [48] phi from render::@5 to render::@2 + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol findcol_from_b2: jsr findcol - //SEG127 render::@5 + //SEG85 render::@5 b5: - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- aby=yby + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- aby=yby tya - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=aby + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=aby ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2 - //SEG132 render::@3 + //SEG90 render::@3 b3: - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -10528,174 +8615,174 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1 - //SEG136 render::@return + //SEG94 render::@return breturn: - //SEG137 [65] return [ numpoints#1 ] + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label x = 9 - .label y = 10 + .label x = 8 + .label y = 9 .label xp = 7 - .label yp = 11 + .label yp = 10 .label diff = 7 .label mindiff = 6 - //SEG139 [67] phi from findcol to findcol::@1 + //SEG97 [61] phi from findcol to findcol::@1 b1_from_findcol: - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 ldy #0 - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 ldx #0 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_xby lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_xby lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 - //SEG147 findcol::@9 + //SEG105 findcol::@9 b9: - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return + //SEG107 [66] phi from findcol::@9 to findcol::@return breturn_from_b9: - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 ldy #0 - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 - //SEG155 findcol::@12 + //SEG113 findcol::@12 b12: - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby1_minus_zpby2 lda diff sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy - //SEG159 findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 - //SEG161 findcol::@14 + //SEG119 findcol::@14 b14: - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- aby=zpby1_minus_zpby2 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- aby=zpby1_minus_zpby2 lda yp sec sbc y - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- aby=zpby1_plus_aby clc adc diff - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy - //SEG166 findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- aby_ge_zpby1_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- aby_ge_zpby1_then_la1 cmp mindiff bcs b21 - //SEG168 findcol::@16 + //SEG126 findcol::@16 b16: - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- yby=cowo1_staridx_xby + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- yby=cowo1_staridx_xby ldy COLS,x - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy - //SEG173 findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby=_inc_xby + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby=_inc_xby inx - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby_lt_zpby1_then_la1 - cpx numpoints + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby_lt_coby1_then_la1 + cpx #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return + //SEG134 [66] phi from findcol::@8 to findcol::@return breturn_from_b8: - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=aby + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=aby sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 + //SEG138 [61] phi from findcol::@19 to findcol::@1 b1_from_b19: - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- aby=zpby1 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- aby=zpby1 lda mindiff jmp b8 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- aby=zpby1_minus_zpby2 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- aby=zpby1_minus_zpby2 lda y sec sbc yp - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- aby=zpby1_plus_aby clc adc diff jmp b7 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby1 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby1 lda x sec sbc diff sta diff jmp b5 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 3 - //SEG192 [92] phi from initscreen to initscreen::@1 + //SEG150 [86] phi from initscreen to initscreen::@1 b1_from_initscreen: - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 jmp b1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy - //SEG196 initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1 @@ -10704,44 +8791,17 @@ initscreen: { cmp #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y jmp b1 - //SEG114 [53] phi from render::@3 to render::@1 - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy - //SEG117 render::@1 + //SEG72 [47] phi from render::@3 to render::@1 + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG76 [48] phi from render::@1 to render::@2 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x jmp b2 - //SEG120 [54] phi from render::@5 to render::@2 - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy - //SEG122 render::@2 + //SEG78 [48] phi from render::@5 to render::@2 + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol jsr findcol - //SEG127 render::@5 - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- aby=yby + //SEG85 render::@5 + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- aby=yby tya - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=aby + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=aby ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2 - //SEG132 render::@3 - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG90 render::@3 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -11046,164 +9031,164 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1 - //SEG136 render::@return - //SEG137 [65] return [ numpoints#1 ] + //SEG94 render::@return + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label x = 9 - .label y = 10 + .label x = 8 + .label y = 9 .label xp = 7 - .label yp = 11 + .label yp = 10 .label diff = 7 .label mindiff = 6 - //SEG139 [67] phi from findcol to findcol::@1 - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 + //SEG97 [61] phi from findcol to findcol::@1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 ldy #0 - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 ldx #0 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_xby lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_xby lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 - //SEG147 findcol::@9 - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG105 findcol::@9 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 + //SEG107 [66] phi from findcol::@9 to findcol::@return + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 ldy #0 - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 - //SEG155 findcol::@12 - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 + //SEG113 findcol::@12 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby1_minus_zpby2 lda diff sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy - //SEG159 findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 - //SEG161 findcol::@14 - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- aby=zpby1_minus_zpby2 + //SEG119 findcol::@14 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- aby=zpby1_minus_zpby2 lda yp sec sbc y - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- aby=zpby1_plus_aby clc adc diff - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy - //SEG166 findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- aby_ge_zpby1_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- aby_ge_zpby1_then_la1 cmp mindiff bcs b21 - //SEG168 findcol::@16 - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- yby=cowo1_staridx_xby + //SEG126 findcol::@16 + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- yby=cowo1_staridx_xby ldy COLS,x - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy - //SEG173 findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby=_inc_xby + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby=_inc_xby inx - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby_lt_zpby1_then_la1 - cpx numpoints + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby_lt_coby1_then_la1 + cpx #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG134 [66] phi from findcol::@8 to findcol::@return + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=aby + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=aby sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG138 [61] phi from findcol::@19 to findcol::@1 + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- aby=zpby1 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- aby=zpby1 lda mindiff jmp b8 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- aby=zpby1_minus_zpby2 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- aby=zpby1_minus_zpby2 lda y sec sbc yp - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- aby=zpby1_plus_aby clc adc diff jmp b7 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby1 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby1 lda x sec sbc diff sta diff jmp b5 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 3 - //SEG192 [92] phi from initscreen to initscreen::@1 - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG150 [86] phi from initscreen to initscreen::@1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 jmp b1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy - //SEG196 initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1 @@ -11212,28 +9197,8 @@ initscreen: { cmp #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y - //SEG114 [53] phi from render::@3 to render::@1 - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy - //SEG117 render::@1 + //SEG72 [47] phi from render::@3 to render::@1 + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG76 [48] phi from render::@1 to render::@2 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x - //SEG120 [54] phi from render::@5 to render::@2 - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy - //SEG122 render::@2 + //SEG78 [48] phi from render::@5 to render::@2 + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol jsr findcol - //SEG127 render::@5 - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- aby=yby + //SEG85 render::@5 + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- aby=yby tya - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=aby + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=aby ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2 - //SEG132 render::@3 - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG90 render::@3 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -11519,163 +9410,163 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1 - //SEG136 render::@return - //SEG137 [65] return [ numpoints#1 ] + //SEG94 render::@return + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label x = 9 - .label y = 10 + .label x = 8 + .label y = 9 .label xp = 7 - .label yp = 11 + .label yp = 10 .label diff = 7 .label mindiff = 6 - //SEG139 [67] phi from findcol to findcol::@1 - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 + //SEG97 [61] phi from findcol to findcol::@1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 ldy #0 - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 ldx #0 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_xby lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_xby lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 - //SEG147 findcol::@9 - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG105 findcol::@9 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 + //SEG107 [66] phi from findcol::@9 to findcol::@return + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 ldy #0 - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 - //SEG155 findcol::@12 - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 + //SEG113 findcol::@12 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby1_minus_zpby2 lda diff sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy - //SEG159 findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 - //SEG161 findcol::@14 - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- aby=zpby1_minus_zpby2 + //SEG119 findcol::@14 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- aby=zpby1_minus_zpby2 lda yp sec sbc y - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- aby=zpby1_plus_aby clc adc diff - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy - //SEG166 findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- aby_ge_zpby1_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- aby_ge_zpby1_then_la1 cmp mindiff bcs b21 - //SEG168 findcol::@16 - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- yby=cowo1_staridx_xby + //SEG126 findcol::@16 + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- yby=cowo1_staridx_xby ldy COLS,x - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy - //SEG173 findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby=_inc_xby + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby=_inc_xby inx - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby_lt_zpby1_then_la1 - cpx numpoints + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby_lt_coby1_then_la1 + cpx #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG134 [66] phi from findcol::@8 to findcol::@return + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=aby + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=aby sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG138 [61] phi from findcol::@19 to findcol::@1 + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- aby=zpby1 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- aby=zpby1 lda mindiff jmp b8 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- aby=zpby1_minus_zpby2 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- aby=zpby1_minus_zpby2 lda y sec sbc yp - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- aby=zpby1_plus_aby clc adc diff jmp b7 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby1 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby1 lda x sec sbc diff sta diff jmp b5 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 3 - //SEG192 [92] phi from initscreen to initscreen::@1 - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG150 [86] phi from initscreen to initscreen::@1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy - //SEG196 initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1 @@ -11684,28 +9575,8 @@ initscreen: { cmp #COLORS sta colline+1 - //SEG113 [53] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 + //SEG71 [47] phi (byte) render::y#2 = (byte) 0 -- zpby1=coby1 lda #0 sta y - //SEG114 [53] phi from render::@3 to render::@1 - //SEG115 [53] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy - //SEG116 [53] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy - //SEG117 render::@1 + //SEG72 [47] phi from render::@3 to render::@1 + //SEG73 [47] phi (byte*) render::colline#2 = (byte*) render::colline#1 -- register_copy + //SEG74 [47] phi (byte) render::y#2 = (byte) render::y#1 -- register_copy + //SEG75 render::@1 b1: - //SEG118 [54] phi from render::@1 to render::@2 - //SEG119 [54] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 + //SEG76 [48] phi from render::@1 to render::@2 + //SEG77 [48] phi (byte) render::x#2 = (byte) 0 -- zpby1=coby1 lda #0 sta x - //SEG120 [54] phi from render::@5 to render::@2 - //SEG121 [54] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy - //SEG122 render::@2 + //SEG78 [48] phi from render::@5 to render::@2 + //SEG79 [48] phi (byte) render::x#2 = (byte) render::x#1 -- register_copy + //SEG80 render::@2 b2: - //SEG123 [55] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 numpoints#1 ] -- zpby1=zpby2 + //SEG81 [49] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 ] -- zpby1=zpby2 lda x sta findcol.x - //SEG124 [56] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 numpoints#1 ] -- zpby1=zpby2 + //SEG82 [50] (byte) findcol::y#0 ← (byte) render::y#2 [ render::y#2 render::colline#2 render::x#2 findcol::x#0 findcol::y#0 ] -- zpby1=zpby2 lda y sta findcol.y - //SEG125 [57] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 numpoints#1 ] - //SEG126 [66] phi from render::@2 to findcol + //SEG83 [51] call findcol param-assignment [ render::y#2 render::colline#2 render::x#2 findcol::return#0 ] + //SEG84 [60] phi from render::@2 to findcol jsr findcol - //SEG127 render::@5 - //SEG128 [58] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 numpoints#1 ] -- aby=yby + //SEG85 render::@5 + //SEG86 [52] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#2 render::colline#2 render::x#2 render::col#0 ] -- aby=yby tya - //SEG129 [59] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 numpoints#1 ] -- zpptrby1_staridx_zpby1=aby + //SEG87 [53] *((byte*) render::colline#2 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#2 render::colline#2 render::x#2 ] -- zpptrby1_staridx_zpby1=aby ldy x sta (colline),y - //SEG130 [60] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG88 [54] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1=_inc_zpby1 inc x - //SEG131 [61] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG89 [55] if((byte) render::x#1!=(byte) 40) goto render::@2 [ render::y#2 render::colline#2 render::x#1 ] -- zpby1_neq_coby1_then_la1 lda x cmp #$28 bne b2 - //SEG132 render::@3 - //SEG133 [62] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 numpoints#1 ] -- zpptrby1=zpptrby1_plus_coby1 + //SEG90 render::@3 + //SEG91 [56] (byte*) render::colline#1 ← (byte*) render::colline#2 + (byte) 40 [ render::y#2 render::colline#1 ] -- zpptrby1=zpptrby1_plus_coby1 lda colline clc adc #$28 @@ -12164,163 +9943,163 @@ render: { bcc !+ inc colline+1 !: - //SEG134 [63] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1=_inc_zpby1 + //SEG92 [57] (byte) render::y#1 ← ++ (byte) render::y#2 [ render::y#1 render::colline#1 ] -- zpby1=_inc_zpby1 inc y - //SEG135 [64] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 numpoints#1 ] -- zpby1_neq_coby1_then_la1 + //SEG93 [58] if((byte) render::y#1!=(byte) 25) goto render::@1 [ render::y#1 render::colline#1 ] -- zpby1_neq_coby1_then_la1 lda y cmp #$19 bne b1 - //SEG136 render::@return - //SEG137 [65] return [ numpoints#1 ] + //SEG94 render::@return + //SEG95 [59] return [ ] rts } -//SEG138 findcol +//SEG96 findcol findcol: { - .label x = 9 - .label y = 10 + .label x = 8 + .label y = 9 .label xp = 7 - .label yp = 11 + .label yp = 10 .label diff = 7 .label mindiff = 6 - //SEG139 [67] phi from findcol to findcol::@1 - //SEG140 [67] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 + //SEG97 [61] phi from findcol to findcol::@1 + //SEG98 [61] phi (byte) findcol::mincol#11 = (byte) 0 -- yby=coby1 ldy #0 - //SEG141 [67] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 + //SEG99 [61] phi (byte) findcol::mindiff#10 = (byte) 255 -- zpby1=coby1 lda #$ff sta mindiff - //SEG142 [67] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 + //SEG100 [61] phi (byte) findcol::i#12 = (byte) 0 -- xby=coby1 ldx #0 - //SEG143 findcol::@1 + //SEG101 findcol::@1 b1: - //SEG144 [68] (byte) findcol::xp#0 ← (const byte[256]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG102 [62] (byte) findcol::xp#0 ← (const byte[]) XPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 ] -- zpby1=cowo1_staridx_xby lda XPOS,x sta xp - //SEG145 [69] (byte) findcol::yp#0 ← (const byte[256]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1=cowo1_staridx_xby + //SEG103 [63] (byte) findcol::yp#0 ← (const byte[]) YPOS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1=cowo1_staridx_xby lda YPOS,x sta yp - //SEG146 [70] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG104 [64] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda x cmp xp bne b2 - //SEG147 findcol::@9 - //SEG148 [71] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_neq_zpby2_then_la1 + //SEG105 findcol::@9 + //SEG106 [65] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_neq_zpby2_then_la1 lda y cmp yp bne b2 - //SEG149 [72] phi from findcol::@9 to findcol::@return - //SEG150 [72] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 + //SEG107 [66] phi from findcol::@9 to findcol::@return + //SEG108 [66] phi (byte) findcol::return#0 = (byte) 0 -- yby=coby1 ldy #0 - //SEG151 findcol::@return + //SEG109 findcol::@return breturn: - //SEG152 [73] return [ findcol::return#0 numpoints#1 ] + //SEG110 [67] return [ findcol::return#0 ] rts - //SEG153 findcol::@2 + //SEG111 findcol::@2 b2: - //SEG154 [74] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG112 [68] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::xp#0 findcol::yp#0 ] -- zpby1_ge_zpby2_then_la1 lda x cmp xp bcs b4 - //SEG155 findcol::@12 - //SEG156 [75] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 numpoints#1 ] -- zpby1=zpby1_minus_zpby2 + //SEG113 findcol::@12 + //SEG114 [69] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#1 ] -- zpby1=zpby1_minus_zpby2 lda diff sec sbc x sta diff - //SEG157 [76] phi from findcol::@12 findcol::@4 to findcol::@5 - //SEG158 [76] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy - //SEG159 findcol::@5 + //SEG115 [70] phi from findcol::@12 findcol::@4 to findcol::@5 + //SEG116 [70] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 -- register_copy + //SEG117 findcol::@5 b5: - //SEG160 [77] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 numpoints#1 ] -- zpby1_ge_zpby2_then_la1 + //SEG118 [71] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#4 ] -- zpby1_ge_zpby2_then_la1 lda y cmp yp bcs b6 - //SEG161 findcol::@14 - //SEG162 [78] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 numpoints#1 ] -- aby=zpby1_minus_zpby2 + //SEG119 findcol::@14 + //SEG120 [72] (byte~) findcol::$12 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$12 ] -- aby=zpby1_minus_zpby2 lda yp sec sbc y - //SEG163 [79] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG121 [73] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#3 ] -- aby=zpby1_plus_aby clc adc diff - //SEG164 [80] phi from findcol::@14 findcol::@6 to findcol::@7 - //SEG165 [80] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy - //SEG166 findcol::@7 + //SEG122 [74] phi from findcol::@14 findcol::@6 to findcol::@7 + //SEG123 [74] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 -- register_copy + //SEG124 findcol::@7 b7: - //SEG167 [81] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 numpoints#1 ] -- aby_ge_zpby1_then_la1 + //SEG125 [75] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#6 ] -- aby_ge_zpby1_then_la1 cmp mindiff bcs b21 - //SEG168 findcol::@16 - //SEG169 [82] (byte) findcol::mincol#1 ← (const byte[256]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 numpoints#1 ] -- yby=cowo1_staridx_xby + //SEG126 findcol::@16 + //SEG127 [76] (byte) findcol::mincol#1 ← (const byte[]) COLS#0 *idx (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::diff#6 findcol::mincol#1 ] -- yby=cowo1_staridx_xby ldy COLS,x - //SEG170 [83] phi from findcol::@16 findcol::@21 to findcol::@8 - //SEG171 [83] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy - //SEG172 [83] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy - //SEG173 findcol::@8 + //SEG128 [77] phi from findcol::@16 findcol::@21 to findcol::@8 + //SEG129 [77] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 -- register_copy + //SEG130 [77] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 -- register_copy + //SEG131 findcol::@8 b8: - //SEG174 [84] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby=_inc_xby + //SEG132 [78] (byte) findcol::i#1 ← ++ (byte) findcol::i#12 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby=_inc_xby inx - //SEG175 [85] if((byte) findcol::i#1<(byte) numpoints#1) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 numpoints#1 ] -- xby_lt_zpby1_then_la1 - cpx numpoints + //SEG133 [79] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] -- xby_lt_coby1_then_la1 + cpx #numpoints bcc b19 - //SEG176 [72] phi from findcol::@8 to findcol::@return - //SEG177 [72] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy + //SEG134 [66] phi from findcol::@8 to findcol::@return + //SEG135 [66] phi (byte) findcol::return#0 = (byte) findcol::mincol#2 -- register_copy jmp breturn - //SEG178 findcol::@19 + //SEG136 findcol::@19 b19: - //SEG179 [86] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 numpoints#1 ] -- zpby1=aby + //SEG137 [80] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] -- zpby1=aby sta mindiff - //SEG180 [67] phi from findcol::@19 to findcol::@1 - //SEG181 [67] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy - //SEG182 [67] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy - //SEG183 [67] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy + //SEG138 [61] phi from findcol::@19 to findcol::@1 + //SEG139 [61] phi (byte) findcol::mincol#11 = (byte) findcol::mincol#2 -- register_copy + //SEG140 [61] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 -- register_copy + //SEG141 [61] phi (byte) findcol::i#12 = (byte) findcol::i#1 -- register_copy jmp b1 - //SEG184 findcol::@21 + //SEG142 findcol::@21 b21: - //SEG185 [87] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 numpoints#1 ] -- aby=zpby1 + //SEG143 [81] (byte~) findcol::mindiff#14 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mincol#11 findcol::mindiff#14 ] -- aby=zpby1 lda mindiff jmp b8 - //SEG186 findcol::@6 + //SEG144 findcol::@6 b6: - //SEG187 [88] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 numpoints#1 findcol::$14 ] -- aby=zpby1_minus_zpby2 + //SEG145 [82] (byte~) findcol::$14 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#4 findcol::$14 ] -- aby=zpby1_minus_zpby2 lda y sec sbc yp - //SEG188 [89] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 numpoints#1 ] -- aby=zpby1_plus_aby + //SEG146 [83] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte~) findcol::$14 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::diff#2 ] -- aby=zpby1_plus_aby clc adc diff jmp b7 - //SEG189 findcol::@4 + //SEG147 findcol::@4 b4: - //SEG190 [90] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 numpoints#1 ] -- zpby1=zpby2_minus_zpby1 + //SEG148 [84] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#12 findcol::mindiff#10 findcol::mincol#11 findcol::yp#0 findcol::diff#0 ] -- zpby1=zpby2_minus_zpby1 lda x sec sbc diff sta diff jmp b5 } -//SEG191 initscreen +//SEG149 initscreen initscreen: { .label screen = 3 - //SEG192 [92] phi from initscreen to initscreen::@1 - //SEG193 [92] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 + //SEG150 [86] phi from initscreen to initscreen::@1 + //SEG151 [86] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 -- zpptrby1=cowo1 lda #SCREEN sta screen+1 - //SEG194 [92] phi from initscreen::@1 to initscreen::@1 - //SEG195 [92] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy - //SEG196 initscreen::@1 + //SEG152 [86] phi from initscreen::@1 to initscreen::@1 + //SEG153 [86] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 -- register_copy + //SEG154 initscreen::@1 b1: - //SEG197 [93] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 + //SEG155 [87] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] -- _star_zpptrby1=coby1 ldy #0 lda #FILL sta (screen),y - //SEG198 [94] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 + //SEG156 [88] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] -- zpptrby1=_inc_zpptrby1 inc screen bne !+ inc screen+1 !: - //SEG199 [95] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 + //SEG157 [89] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word) 1000) goto initscreen::@1 [ initscreen::screen#1 ] -- zpptrby1_lt_cowo1_then_la1 lda screen+1 cmp #>SCREEN+$3e8 bcc b1 @@ -12329,28 +10108,8 @@ initscreen: { cmp #