summaryrefslogtreecommitdiff
path: root/language/src
diff options
context:
space:
mode:
authorDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2023-11-11 23:17:22 +0000
committerGitHub <noreply@github.com>2023-11-11 23:17:22 +0000
commit1a9cac97df063af82516ca35bde34fde62d24c56 (patch)
tree7bab31bac1cf890466b3f0884a0f59c784cc0027 /language/src
parent077b25007cf8af3c3673d017625ea255bda87620 (diff)
downloadSimple-1a9cac97df063af82516ca35bde34fde62d24c56.tar.gz
Simple-1a9cac97df063af82516ca35bde34fde62d24c56.zip
Chapter 6 (#38)
* #37 Create chapter 6 skeleton * #37 Revise type system - TOP, BOTTOM, CONTROL are now directly implemented in Type, XCONTROL is a new type and that's implemented directly too. We have a _type field that is like an enum. * #37 Revise Type.meet() - this is now final. Subclasses can override xmeet() which is protected but now handles simple types in Type itself. * #37 Basic test for peephole of CFG * #37 Revise compute of if * #37 Revise compute of if * #37 WIP peephole of If * #37 WIP peephole of If * #37 WIP peephole of If * #37 WIP peephole of If * #37 WIP peephole of If * #37 WIP fix the chars inserted by IntelliJ * #37 WIP Fix compute type in IfNode * #37 WIP Null check region inputs * #37 WIP Fix where we choose great grand parent instead of grand parent Add new test * #37 WIP More fixes and tests * #37 WIP Some minor adjustments * Cleanup folding dead IF tests Remove isDeadCtrl & just test for the constant. Remove DEAD_CTRL, doesn't properly reset between tests. Move keep/unkeep to Node. PhiNode has a proper compute() call. ProjNode ideal is a lot simpler. Region doesn't ever get a null. Move the mergeScopes Region peep till after all Phis are added. Type TOP and XCONTROL count as constants. TypeTuple gets a toString * #37 WIP Upate README * #37 WIP Region node should check if one of its inputs is a region that needs to be peepholed * #37 WIP If node should check if its ctrl input is a Region that has only 1 live input so can be peepholed * #37 WIP Further update to README to make the peephole logic clearer. Also discuss the relationship between Region and Phi nodes * Region removes dead input paths Remove region-folding in Return, If. Add a Makefile. Reformat triple-quote lines to be emacs-friendly. * StopNode idealize Return type sharpens to include control input. * Remove !=, >=, >; use Not and <, <=, == Fix bug mixing rotating different ops. Generalize Add fold constants; apply to Mul, EQ. Fix Div.copy * Fix bug rotating e.g. < or <= Peep is only valid for associative ops * #37 WIP Doc updates * Work over the Ch6 Readme Major issue: Region inputs align 1-to-1 with Phi inputs, but a Region can have zero to many Phis. When we lose a Region input (dead path), we need to lose the same inputs to each Phi - but we don't lose the Phis themselves, unless we're folding away down to the last live input. * Update chapter06/README.md Co-authored-by: Yichen Yan <oraluben@outlook.com> * Update chapter06/README.md Co-authored-by: Yichen Yan <oraluben@outlook.com> * #37 Backport type system changes to chapter 2 * #37 Backport type system changes to chapter 3 * #37 Backport type system changes to chapter 4 * #37 Backport type system changes to chapter 5 * #37 Merge chapter 5 updates from main. Remove language grammar module as we describe the grammar incrementally in each chapter. * #37 Chapter 6 doc updates - added visuals to show effects of CFG peephole * #37 Sync some updates to chapter 2 * #37 Sync some updates to chapter 3 * #37 Sync some updates to chapter 4 --------- Co-authored-by: Cliff Click <cliffc@acm.org> Co-authored-by: Yichen Yan <oraluben@outlook.com>
Diffstat (limited to 'language/src')
-rw-r--r--language/src/main/antlr4/com/seaofnodes/simple/antlr/SimpleLanguage.g4170
1 files changed, 0 insertions, 170 deletions
diff --git a/language/src/main/antlr4/com/seaofnodes/simple/antlr/SimpleLanguage.g4 b/language/src/main/antlr4/com/seaofnodes/simple/antlr/SimpleLanguage.g4
deleted file mode 100644
index 6779e5a2..00000000
--- a/language/src/main/antlr4/com/seaofnodes/simple/antlr/SimpleLanguage.g4
+++ /dev/null
@@ -1,170 +0,0 @@
-grammar SimpleLanguage;
-
-program
- : declaration* statement+ EOF
- ;
-
-declaration
- : type IDENTIFIER ';'
- ;
-
-type
- : 'int'
- ;
-
-statement
- : 'if' '(' expression ')' statement
- | 'if' '(' expression ')' statement 'else' statement
- | 'while' '(' expression ')' statement
- | IDENTIFIER '=' expression ';'
- | '{' declaration* statement+ '}'
- | 'break' ';'
- ;
-
-expression
- : primaryExpression # PrimaryExpression_
- | ('-' | '!') expression # UnaryExpression
- | expression ('*' | '/' ) expression # ArithmeticOrLogicalExpression
- | expression ('+' | '-') expression # ArithmeticOrLogicalExpression
- | expression ('==' | '!='| '>'| '<'| '>='| '<=') expression # ComparisonExpression
- | expression '&&' expression # BooleanExpression
- | expression '||' expression # BooleanExpression
- ;
-
-primaryExpression
- :
- | INTEGER_LITERAL
- | IDENTIFIER
- | '(' expression ')'
- ;
-
-///////////////////////////////////////////////////////////////////
-
-IDENTIFIER
- : IDENTIFIER_NONDIGIT
- ( IDENTIFIER_NONDIGIT
- | DEC_DIGIT
- )*
- ;
-
-fragment
-IDENTIFIER_NONDIGIT
- : NON_DIGIT
- | UNIVERSAL_CHARACTER_NAME
- ;
-
-fragment
-NON_DIGIT
- : [a-zA-Z_]
- ;
-
-
-fragment
-UNIVERSAL_CHARACTER_NAME
- : '\\u' HEX_QUAD
- | '\\U' HEX_QUAD HEX_QUAD
- ;
-
-fragment
-HEX_QUAD
- : HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
- ;
-
-// tokens char and string
-CHAR_LITERAL
- : '\''
- (
- ~['\\\n\r\t]
- | QUOTE_ESCAPE
- | ASCII_ESCAPE
- | UNICODE_ESCAPE
- ) '\''
- ;
-
-STRING_LITERAL
- : '"'
- (
- ~["]
- | QUOTE_ESCAPE
- | ASCII_ESCAPE
- | UNICODE_ESCAPE
- | ESC_NEWLINE
- )* '"'
- ;
-RAW_STRING_LITERAL: 'r' RAW_STRING_CONTENT;
-fragment RAW_STRING_CONTENT: '#' RAW_STRING_CONTENT '#' | '"' .*? '"';
-BYTE_LITERAL: 'b\'' (. | QUOTE_ESCAPE | BYTE_ESCAPE) '\'';
-
-BYTE_STRING_LITERAL: 'b"' (~["] | QUOTE_ESCAPE | BYTE_ESCAPE)* '"';
-RAW_BYTE_STRING_LITERAL: 'br' RAW_STRING_CONTENT;
-fragment ASCII_ESCAPE: '\\x' OCT_DIGIT HEX_DIGIT | COMMON_ESCAPE;
-fragment BYTE_ESCAPE: '\\x' HEX_DIGIT HEX_DIGIT | COMMON_ESCAPE;
-fragment COMMON_ESCAPE: '\\' [nrt\\0];
-fragment UNICODE_ESCAPE
- : '\\u{' HEX_DIGIT HEX_DIGIT? HEX_DIGIT? HEX_DIGIT? HEX_DIGIT? HEX_DIGIT? '}'
- ;
-fragment QUOTE_ESCAPE: '\\' ['"];
-fragment ESC_NEWLINE: '\\' '\n';
-
-// number
-INTEGER_LITERAL
- :
- (
- DEC_LITERAL
- | BIN_LITERAL
- | OCT_LITERAL
- | HEX_LITERAL
- ) INTEGER_SUFFIX?
- ;
-DEC_LITERAL: DEC_DIGIT (DEC_DIGIT | '_')*;
-HEX_LITERAL: '0x' '_'* HEX_DIGIT (HEX_DIGIT | '_')*;
-OCT_LITERAL: '0o' '_'* OCT_DIGIT (OCT_DIGIT | '_')*;
-BIN_LITERAL: '0b' '_'* [01] [01_]*;
-FLOAT_LITERAL
- : DEC_LITERAL
- (
- '.' DEC_LITERAL
- )? FLOAT_EXPONENT? FLOAT_SUFFIX?
- ;
-
-fragment INTEGER_SUFFIX
- : 'u8'
- | 'u16'
- | 'u32'
- | 'u64'
- | 'u128'
- | 'usize'
- | 'i8'
- | 'i16'
- | 'i32'
- | 'i64'
- | 'i128'
- | 'isize'
- ;
-
-fragment FLOAT_SUFFIX: 'f32' | 'f64';
-fragment FLOAT_EXPONENT: [eE] [+-]? '_'* DEC_LITERAL;
-fragment OCT_DIGIT: [0-7];
-fragment DEC_DIGIT: [0-9];
-fragment HEX_DIGIT: [0-9a-fA-F];
-
-
-WHITESPACE
- : [ \t]+
- -> skip
- ;
-
-NEWLINE
- : ( '\r' '\n'?
- | '\n'
- )
- -> skip
- ;
-
-LINE_COMMENT
- : '//' ~[\r\n]*
- -> skip
- ;
-
-
-ANY: . ; \ No newline at end of file