aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Duplicateaux.ml
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch 'kvx-work' into BTLLéo Gourdin2021-06-101-13/+11
|\
| * Do not rotate if the CB was already at the end.Cyril SIX2021-04-281-1/+5
| |
| * Heuristic counter updateCyril SIX2021-04-281-12/+6
| |
* | Moving common tools, adding liveness input/output information to BTL ↵Léo Gourdin2021-05-241-1/+1
| | | | | | | | generation oracle
* | Grouping common RTL functions, printer improvementLéo Gourdin2021-05-191-1/+1
|/
* Merge remote-tracking branch 'origin/manuscript' into kvx-worksubmission_OOPSLA2021_AARCH64_KVXCyril SIX2021-04-131-110/+56
|\
| * CleaningCyril SIX2021-04-021-2/+1
| |
| * More efficientCyril SIX2021-04-021-8/+12
| |
| * Outermost loop detection worksCyril SIX2021-04-021-9/+10
| |
| * Getting all loop bodiesCyril SIX2021-04-021-2/+36
| |
| * Simple backedge detection (modified code from get_loop_headers)Cyril SIX2021-04-021-0/+3
| |
| * Big simplification of get_loop_infoCyril SIX2021-03-311-111/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Another remnant of trying to devise a complicated algorithm for a problem that was, in fact, very simple: I just had to check whether the branch was within the loop body. I tested it functionally on the benchmarks: only heapsort is changed, in slightly worst (4-5%), because the old get_loop_info had done a buggy guess that proved to be lucky for that particular case. The other benchmarks are unchanged: the predictions stay the exact same. The get_loop_info could potentially be improved by having a natural loop detection that extends to outer loops (not just inner loops), though I expect the performance improvements would be very small.
* | Adding more precise heuristic measuresCyril SIX2021-04-131-2/+62
| |
* | Adding overpredictsCyril SIX2021-04-131-3/+6
| |
* | Recording of prediction stats with COMPCERT_PROFILING_STATS environment flagCyril SIX2021-04-131-33/+93
|/ | | | | | | | | | | | | | | | | It only works correctly if both profiling and static prediction are used: it then compares both and gives stats in COMPCERT_PREDICT_STATS file. The stats are of the form: total correct mispredicts missed total = number of total CBs encountered correct = number of correct predictions mispredicts = times when static prediction did a wrong guess (predicted the opposite from profiling, or predicted Some _ when profiling said None) missed = times when static prediction was not able to give a verdict, though the profiling gave one
* Solving a stack overflow issue (was failing in yarpgen ran000089 for armhf)Cyril SIX2021-01-061-9/+9
| | | | | | | Note : the issue is still present later in Duplicateproof. This is because I am examining an "identity ptree" which is way too big. I am having a look to see if I could make this ptree less big - to not include nodes that are identity
* Uniformizing a couple of debug print functionsCyril SIX2020-12-171-38/+1
|
* Fixing wrong predictions on imbricated loopsCyril SIX2020-12-111-104/+114
|
* Fixing exponential blowup on get_loop_info.mark_path.exploreCyril SIX2020-12-091-33/+44
|
* The last fix for get_loop_info was giving false positives. Fixing that.Cyril SIX2020-12-081-2/+12
|
* Fixing get_loop_info : part 2Cyril SIX2020-12-081-8/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | Loops with multiple CBs were only partially predicted for some cases (the header CB would get predicted, but not the CBs inside) This would happen in the case of breaks leading to another loop, such as: ```c void lift_check_level() { int i; int middle = lift_one_level >> 2; if ( lift_cntValid ) { for ( lift_level = 1; lift_level < 14; ++lift_level ) { if ( lift_cnt < lift_levelPos[lift_level] - middle ) break; /* This break */ } } else lift_level = 0; for ( i = 0; i < 14; ++i ) lift_ctrl_io_led[i] = ( i == lift_level - 1 ); } ```
* Fixing loop detection in get_loop_info - part 1Cyril SIX2020-12-081-16/+8
| | | | Various typos made the code fail silently for certain loops
* Moving codeCyril SIX2020-12-081-71/+72
|
* More debugCyril SIX2020-12-081-6/+21
|
* More debugCyril SIX2020-12-081-3/+3
|
* Do not duplicate nodes that don't need to when unrolling the bodyCyril SIX2020-12-081-4/+18
|
* Fix on find_last_node_before_loopCyril SIX2020-12-081-3/+7
| | | | It was too permissive
* CommentCyril SIX2020-12-041-0/+1
|
* Less aggressive tail duplicationCyril SIX2020-12-041-6/+11
| | | | | In some cases of two imbricated loops, we would tail-duplicate too much, because of the input trace traversing both loop headers.
* Clean-up debugCyril SIX2020-12-041-4/+2
|
* Fixed infinite loop on find_last_node_before_loopCyril SIX2020-12-041-3/+6
| | | | Happened when a loop was predicted not to be taken
* Slight perf improvementCyril SIX2020-12-021-2/+2
|
* [expensive] Behavior change when the loop has two final instructionsCyril SIX2020-12-021-9/+57
| | | | | Right now though the compilation time is too high for glpk, I need to figure out why
* Duplicateaux: Generalization of look_aheadCyril SIX2020-12-011-3/+5
|
* Ignore loopback edges on tail-duplicateCyril SIX2020-12-011-0/+2
|
* Fixing issue with loops having branches leading to goto backedgeCyril SIX2020-11-051-27/+18
|
* Fixing get_loop_headers + alternative get_inner_loops (commented, not active)Cyril SIX2020-11-041-23/+70
|
* Loop Rotate with -flooprotateCyril SIX2020-11-031-0/+50
|
* Splitting Duplicate in several passesCyril SIX2020-10-271-14/+20
|
* Loop body unrolling with -funrollbody nCyril SIX2020-10-161-3/+6
|
* Loop body unrollingCyril SIX2020-10-161-1/+39
|
* Comment updateCyril SIX2020-10-161-1/+7
|
* Comment updateCyril SIX2020-10-161-0/+1
|
* Ignoring Inops for counting number of instructionsCyril SIX2020-10-141-6/+15
|
* Only unrolling on a given instruction limitCyril SIX2020-10-091-12/+16
|
* new flags: -fpredict, -ftailduplicate n, -funrollsingle n instead of just ↵Cyril SIX2020-10-091-34/+43
| | | | -fduplicate n
* Performing branch prediction before loop unrollingCyril SIX2020-10-071-8/+10
|
* [EXP] First draft of 1st iteration unrollingCyril SIX2020-10-071-73/+102
|
* [BROKEN] Some progress, need to figure out conversion HashedPSet -> ListCyril SIX2020-10-061-14/+111
|
* Detecting inner loops with LICMaux.inner_loopsCyril SIX2020-10-021-12/+75
|