diff options
| author | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2023-11-11 23:17:22 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-11 23:17:22 +0000 |
| commit | 1a9cac97df063af82516ca35bde34fde62d24c56 (patch) | |
| tree | 7bab31bac1cf890466b3f0884a0f59c784cc0027 /language/src | |
| parent | 077b25007cf8af3c3673d017625ea255bda87620 (diff) | |
| download | Simple-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.g4 | 170 |
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 |
