aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linearizeaux.ml
Commit message (Collapse)AuthorAgeFilesLines
* Simplification of the Linearize heuristic (same result functionally)Cyril SIX2021-03-301-216/+6
|
* Simplifications on Linearize - details belowCyril SIX2021-03-291-205/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While I was developing the new trace linearize, I started off with implementing a big algorithm reasoning on dependencies etc.., but I realized later that it was giving a too different performance (sometimes better, sometimes worst) than the original CompCert. So I stripped it off gradually until its performance (on regular code with just branch prediction) was on par with the base Linearize of CompCert. I was aiming here for something that is either equal, or better, in terms of performance. My (then and current) theory is that I have stripped it out so much that now it's just like the algorithm of CompCert, but with a modification for Lcond instructions (see the new linearize_aux_cb). However, I never tested that theory: the code worked, so I left it as is, without any simplification. But now that I need to get a clear version for my manuscript, I'm digging into it. It turns out my theory is not really exact. A difference is that instead of taking the minpc across the chain, I take the pc of the very first block of the chain I create. This was (I think) out of laziness in the middle of two iterations, except that I forgot about it. I tested my new theory by deleting all the stuff about dependencies calculation (commited), and also computing a minpc just like original compcert (not commited): I get the same exact Mach code than linearize_aux_cb. So right now, the only difference between linearize_aux_cb and linearize_aux_trace is that slightly different minpc computation. I think transitionning to linearize_aux_cb will be 1) much clearer than this Frankenstein monster of linearize_aux_trace that I made, and 2) might be better performing too. I don't have access to Kalray machines today so i'm leaving this on hold for now, but tomorrow I will test performance wise to see if there is a regression. If there isn't, I will commit this (and it will be the version narrated by my manuscript). If there is a regression, it would mean selecting the pc of the first node (in opposition to the minpc) is more performant, so i'd backtrack the change to linearize_aux_cb anyway and there should then be 0 difference in the generated code.
* Adding copyrightsCyril SIX2020-05-041-1/+1
|
* Removed the assertion about prediction on ifsoCyril SIX2020-04-091-2/+3
|
* Some cleaning on Linearize and DuplicateCyril SIX2020-04-081-40/+49
|
* Stopping traces at join pointsCyril SIX2020-04-011-2/+25
|
* Linearize: Scheduling based on maxpc instead of dependenciesCyril SIX2020-03-251-3/+9
|
* Linearizeaux: Refining block selection in case of tieCyril SIX2020-03-241-19/+37
|
* Removing store heuristic and more fine tuning loop heuristicCyril SIX2020-03-231-1/+1
|
* More helpful debug info in linearizeCyril SIX2020-03-131-1/+3
|
* Correcting a few bugs in trace selection and expansionCyril SIX2020-03-121-7/+13
|
* Adding info field for branching in RTL, LTL, XTL and all associated passesCyril SIX2020-03-111-5/+5
|
* More debug info on Linearize and DuplicateCyril SIX2020-03-111-1/+1
|
* Linearizeaux: dumb selector when cycling dependencies are foundCyril SIX2020-03-101-4/+6
|
* Linearizeaux, forgot to visit the rest of the nodes in dfs_visitCyril SIX2020-03-101-22/+26
|
* Some dependencies were not taken into account in tracelinearizeCyril SIX2020-03-101-15/+12
|
* Linearize: More helpful message when tracelinearize failsCyril SIX2020-03-101-4/+12
|
* Bug fix in ftracelinearizeCyril SIX2020-03-101-4/+15
|
* Linearizeaux: forgotten printCyril SIX2020-03-091-1/+1
|
* Linearizeaux: Fixed bug where the output list was in reverse orderCyril SIX2020-03-091-4/+20
|
* Adding debug info in LinearizeauxCyril SIX2020-03-061-0/+12
|
* [UNTESTED] Sequence orderingCyril SIX2020-03-061-3/+27
|
* Linearize: Dependencies computing to decide which sequence to put firstCyril SIX2020-03-031-31/+132
|
* Linearizeaux: can_be_mergedCyril SIX2020-02-211-13/+48
|
* Linearizeaux: function try_mergeCyril SIX2020-02-211-11/+20
|
* WIP2Cyril SIX2020-02-201-16/+24
|
* WIPCyril SIX2020-02-201-0/+26
|
* First part of Hansen algorithm - build the sequencesCyril SIX2020-02-191-1/+43
|
* Added option -ftracelinearize which linearizes based on ifnot branchesCyril SIX2020-02-121-3/+54
|
* Compatibility with OCaml 4.08 (#302)Xavier Leroy2019-07-081-1/+1
| | | | | | | | | | | | | | | | * Do not use `Pervasives.xxx` qualified names Starting with OCaml 4.08, `Pervasives` is deprecated in favor of `Stdlib`, and uses of `Pervasives` cause fatal warnings. This commit uses unqualified names instead, as no ambiguity occurs. * Clarify "open" statements OCaml 4.08.0 has stricter warnings concerning open statements that shadow module names. Closes: #300
* Deactivate warning 27 and added back removed code.Bernhard Schommer2016-03-151-5/+5
| | | | | | The code was mostly there for documentation effort. So warning 27 is deactivated again. Bug 18349
* Code cleanup.Bernhard Schommer2016-03-101-8/+5
| | | | | | Removed some unused variables, functions etc. and resolved some problems which occur if all warnings except 3,4,9 and 29 are active. Bug 18394.
* Updated PR by removing whitespaces. Bug 17450.Bernhard Schommer2015-10-201-2/+2
|
* Change interface of Kildall solvers to avoid precomputing the map pc -> list ↵xleroy2013-08-121-2/+3
| | | | | | of successors. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2305 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Big merge of the newregalloc-int64 branch. Lots of changes in two directions:xleroy2013-04-201-13/+15
| | | | | | | | | 1- new register allocator (+ live range splitting, spilling&reloading, etc) based on a posteriori validation using the Rideau-Leroy algorithm 2- support for 64-bit integer arithmetic (type "long long"). git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2200 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Ported to Coq 8.4pl1. Merge of branches/coq-8.4.xleroy2013-01-291-17/+4
| | | | git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2101 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Support for inlined built-ins.xleroy2010-06-291-0/+1
| | | | | | | | | | | | | AST: add ef_inline flag to external functions. Selection: recognize calls to inlined built-ins and inline them as Sbuiltin. CminorSel to Asm: added Sbuiltin/Ibuiltin instruction. PrintAsm: adapted expansion of builtins. C2Clight: adapted detection of builtins. Conventions: refactored in a machine-independent part (backend/Conventions) and a machine-dependent part (ARCH/SYS/Conventions1). git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1356 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Added support for jump tables in back end.xleroy2009-11-101-0/+2
| | | | git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1171 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Cil2Csyntax: added goto and labels; added assignment between structsxleroy2009-08-161-1/+2
| | | | | | | | | | | | Kildall: simplified the interface Constprop, CSE, Allocation, Linearize: updated for the new Kildall RTL, LTL: removed the well-formedness condition on the CFG, it is no longer necessary with the new Kildall and it is problematic for validated optimizations. Maps: more efficient implementation of PTree.fold. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1124 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* New linearization heuristicxleroy2009-02-271-32/+72
| | | | git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1001 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Conflict between extraction/CList and cil/obj/xxx/clist on case-insensitive ↵xleroy2009-01-291-2/+1
| | | | | | file systems. Replaced CList by CoqList and likewise for CString and CInt. Removed useless references to CList in hand-written Caml code. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@951 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Elimination of "alloc" instruction in Caml files and test files.xleroy2009-01-111-1/+0
| | | | git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@946 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
* Reorganized the development, modularizing away machine-dependent parts.xleroy2008-12-301-0/+85
Started to merge the ARM code generator. Started to add support for PowerPC/EABI. Use ocamlbuild to construct executable from Caml files. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@930 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e