| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Initial push
Major CodeGen cleanup; most static globals move into the CodeGen object.
* Minor progress bug with mutual recursion
* Add test from pr#148
* First cut x86 "port"
Only "return 0;", no registers, no encoding, but yah gotta start somewhere
* Update README.md
* Update README.md
* Update ListScheduler.java
* command line launcher for simple
Parser bug fref in args
Some new test cases.
* Add basic RegMask for more than 64 bits of register mask.
Add calling convention basics to X86; con+ret RegMasks.
GCM computes CFG for all users.
Drop unused MultiUse.
Pick up reg-pressure aware ListScheduler.
Re-layout CodeGen file to get code & data chunks nearer each other.
minor Ary extension
* ASM Printer
InstSel handles folding 2+ ideal ops into 1 machine op
* handle instSel for some control flow
Bool,If,CProj,Region,Phi
Handle 2-op expansions
Shuffle instSel graph walk back again.
* Basic if-block inst selects and asm prints
* Add mul-by-coinstant to shift
* left shift codegen basic
* exclude RSP from *write* mask
* 2-arg add (not immediate)
mul-by-small constant opt. Some utilities.
* Handle first loop
Change inst sel walk again to pre-order, to set an early visit bit to stop cycles.
CFGNode copies dom/loop info.
Cmp not-immediate form.
Ret/Fun lazy updates
* inst select for new struct allocation
* Float, bitwise and arithmetic operands codegen x86-64 (#150)
* left shift codegen basic
* sar codegen basic
* merge
* some basic ops
* addf
* divf, subf, mulf
* rsp allowed in bitwise input, not output
* formatting
* left shift codegen basic
* sar codegen basic
* merge
* some basic ops
* addf
* divf, subf, mulf
* rsp allowed in bitwise input, not output
* formatting
* Remove non-exsting FP+imm ops
* Handle first loop
Change inst sel walk again to pre-order, to set an early visit bit to stop cycles.
CFGNode copies dom/loop info.
Cmp not-immediate form.
Ret/Fun lazy updates
* float ops without imm values
* merge
* merge
* inst select for new struct allocation
* left shift codegen basic
* sar codegen basic
* merge
* some basic ops
* addf
* divf, subf, mulf
* rsp allowed in bitwise input, not output
* formatting
* Remove non-exsting FP+imm ops
* left shift codegen basic
* sar codegen basic
* merge
* some basic ops
* addf
* divf, subf, mulf
* rsp allowed in bitwise input, not output
* formatting
* float ops without imm values
* merge
* merge
* Rebased on ch 19
* Update tests
---------
Co-authored-by: Cliff Click <cliffc@acm.org>
* cleanup after merge
alpha-sort helper fcns
implicit test vs zero/null
* Add LEA op
asm print works on ideal nodes for all tests
* Minor cleanup lea
* x86 addressing modes during inst select
Drop New taking inits; just follow with initializing stores. Simplifies inst selelection which otherwise needs to undo this optimization and emit following init stores.
Basic load/store for now, op-to-mem comes later
add same becomes Shl by 1.
Drop DivF-immiedate
* extended ch13, 14,15,16 (#153)
* merge2
* merge3
* Fix a few minor fuzzer bugs
* Force array layout
ld/st get size (but not signed/unsigned)
Add unsigned LT for later range checks.
* Fix a bunch of float issues
was deleting required inputs
* simpler invariant
defensive copy inputs for simpler invariant in complex sharing patterns
inc/dec form (just the opcode now).
* Call & CallR X86 instructions
* Add-from-memory op
Remove FP immediate forms.
* Remove name from TFP
Never shoulda been there (but was convenient for awhile).
Moved into FunNode, found by checking the linker table with a TFP.
* New (#154)
* merge2
* merge3
* GCM for float ops fixed, other cleanup - small extensions
* call setup
* merge2
* remove debug prints
add check for bad call convention
fix 3 tests (bad merge?)
* cleanup call convention abi
Needs more love at some point...
* one more cleanup ABI
---------
Co-authored-by: Cliff Click <cliffc@acm.org>
* Add CmpMem form
Common addressing mode print
LEA can skip a base
* Add a AddFMemX86
A bunch of mem op patterns are missing, hopefully they are just cut-n-paste from the existing patterns.
* Docs
* XMM reg mask fix
Minor README updates
* Allow inverted cmp/mem
narrowing stores can bypass an AndMask
Array length loads do not need control
Some missing print info
* Support "*ptr op= val"
at least for MemAdd
* missed golden rule update
* Array len is u32
load-after-store zero/sign-extends if the store is truncating
* One more missed case
---------
Co-authored-by: hadha <helsgithub15@gmail.com>
Co-authored-by: Tamás Hadházy <85063808+Hels15@users.noreply.github.com>
|
| | |
|
| |
|
|
| |
Add linear history links
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
Missing SubF
Missing progress dep
Missing null check
Different fuzzer errors if peeps on/off
|
| | |
|
| |
|
|
|
| |
Allow self-recursive forward refs.
Missing progress.
|
| |
|
|
| |
Better error message for self-calling functions
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
More comments about meeting nil above the center line falls - but does not (can not) dual.
This implies have TFPs with *no* allowed functions that are below centerline; if allowed null then its basically an alternate null. If not allowed null and not allowed any functions, its basically a high value (not executable). IfNode folds.
Do not remove a dead infinite loop - it needs to remain as a CFG sink.
|
| | |
|
| |
|
|
| |
In "N? !n" , "N?" is a type and "n" is the declared variable.
|
| | |
|
| | |
|
| |
|
|
| |
Better comments on why a field is final
|
| |
|
|
|
| |
Var picks up a Real(tm) isFRef flag.
Minor progress bug.
|
| | |
|
| |
|
|
|
|
| |
So FRefs can strictly lift when defined.
Parser can support forward refs in more cases, by upcasting now and proving the cast is correct later.
Monotonic for some float ops.
|
| |
|
|
| |
Various kinds of missing checks, over-aggressive asserts, and a few odds and ends
|
| | |
|
| | |
|
| |
|
|
|
| |
Constants use glabel in JSView.
TypeFunPtr gprint uses "→" instead of "->"
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
Rename ScopeMin to MergeMem.
Move Var to its own file.
Allow out-of-scope id lookups in functions, as long as its a final constant.
This allows e.g. factorial to find "fact" as an out-of-scope final constant function.
|
| |
|
|
|
|
| |
Can store into an array.
Check array is "of nullable"
Add crazy closure test
|
| |
|
|
|
|
| |
Define a "Return PC" type, which maps a simple bit vector to call sites.
Returns take an RPC; function headers merge RPC from all callers.
Work over the Eval2 control path to support recursion; probably 90% to closures now as well.
|
| | |
|
| |
|
|
|
|
| |
Add FRefNode, making and defining a forward ref. Forward refs promote out of scopes instead of being an undefined error.
Add location data to all errors, because introducing more "delayed errors"- forward references are not errors if they get eventually defined. Touches many Nodes.
Fix FunNode idom/idepth.
|
| |
|
|
|
|
|
|
|
| |
Pretty-print functions.
GCM deals with functions.
Tighten linker API.
CallEnd asserts harder proper graph.
Eval2 makes (non recursive) function calls
Peeps infer sharper function return sigs.
|
| |
|
|
|
|
|
|
|
| |
Parse "arg--2" as "arg - -2" and not "arg-- 2".
Use ParserException instead of RuntimeException.
Add a Field w/out final test.
Allow Float NaN to hash/compare
Bug cast didn't check type when GVN
Better handling of dead return/exit paths
|
| |
|
|
| |
Parse as "arg - -2" and not "arg-- 2" which is a syntax error
|
| |
|
|
|
| |
...with and without peeps. Float moves out of the TypeNil set.
Eval2 picks up the FLT compares.
|
| |
|
|
|
|
|
| |
Demand CFG cleanup, even if peeps are off; cleans up some tests & a lot of fuzzer bugs related to trying to find infinite loops in dead code.
Logical subclass for better error reporting on &,|,^,>>,<<,>>>
More precise error reporting on multi returns and trinaries
Fuzzer uses new Eval2
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
More compiler driver cleanup: Stop only has Return inputs, never an expr. Drop extra lexical scope. Linker table moves to CodeGen.
Replace evaluator with a simpler design; I was unable to get the current design to work with the other changes.
Updates to old eval; proper idoms; forced type checks; extensions for Fun, Return, Call, CallEnd.
Accessor find next control to execute. Accessor for deciding when its ok to optimize a Function/Return, Call/CallEnd, Stop, ScopeMin (merge)
Add local scheduling pass.
IRPrinter uses SB instead of StringBuilder
Spelling SubF comment
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
Top level makes a "main" function and calls it. Opto() pass inlines main into top-level and removes the function call. If peeps are off, the function call remains; this breaks many tests.
Add a FunNode function header; Return is its end. Return no long used at the top level; only a single return per-function, merging all returns (breaks many tests).
Add a Call & CallEnd nodes.
Fix many tests to pass again.
Fix a bunch of minor bugs.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
Insert a TypePtr/TypeNil around TypeMemPtr and TypeFunPtr in the lattice; allows the parsing of "null" to mean either a TMP or TFP null.
Cleanup Type null checks and several prints.
Drop Type.lub, Type.makeInit.
Add a Parser NIL & ZERO.
Clean up parser errors, track line numbers for future parser errors.
|
| | |
|
| | |
|