Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Merge branch 'kvx-work' into BTL | Léo Gourdin | 2021-06-10 | 1 | -13/+11 |
|\ | |||||
| * | Do not rotate if the CB was already at the end. | Cyril SIX | 2021-04-28 | 1 | -1/+5 |
| | | |||||
| * | Heuristic counter update | Cyril SIX | 2021-04-28 | 1 | -12/+6 |
| | | |||||
* | | Moving common tools, adding liveness input/output information to BTL ↵ | Léo Gourdin | 2021-05-24 | 1 | -1/+1 |
| | | | | | | | | generation oracle | ||||
* | | Grouping common RTL functions, printer improvement | Léo Gourdin | 2021-05-19 | 1 | -1/+1 |
|/ | |||||
* | Merge remote-tracking branch 'origin/manuscript' into kvx-worksubmission_OOPSLA2021_AARCH64_KVX | Cyril SIX | 2021-04-13 | 1 | -110/+56 |
|\ | |||||
| * | Cleaning | Cyril SIX | 2021-04-02 | 1 | -2/+1 |
| | | |||||
| * | More efficient | Cyril SIX | 2021-04-02 | 1 | -8/+12 |
| | | |||||
| * | Outermost loop detection works | Cyril SIX | 2021-04-02 | 1 | -9/+10 |
| | | |||||
| * | Getting all loop bodies | Cyril SIX | 2021-04-02 | 1 | -2/+36 |
| | | |||||
| * | Simple backedge detection (modified code from get_loop_headers) | Cyril SIX | 2021-04-02 | 1 | -0/+3 |
| | | |||||
| * | Big simplification of get_loop_info | Cyril SIX | 2021-03-31 | 1 | -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 measures | Cyril SIX | 2021-04-13 | 1 | -2/+62 |
| | | |||||
* | | Adding overpredicts | Cyril SIX | 2021-04-13 | 1 | -3/+6 |
| | | |||||
* | | Recording of prediction stats with COMPCERT_PROFILING_STATS environment flag | Cyril SIX | 2021-04-13 | 1 | -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 SIX | 2021-01-06 | 1 | -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 functions | Cyril SIX | 2020-12-17 | 1 | -38/+1 |
| | |||||
* | Fixing wrong predictions on imbricated loops | Cyril SIX | 2020-12-11 | 1 | -104/+114 |
| | |||||
* | Fixing exponential blowup on get_loop_info.mark_path.explore | Cyril SIX | 2020-12-09 | 1 | -33/+44 |
| | |||||
* | The last fix for get_loop_info was giving false positives. Fixing that. | Cyril SIX | 2020-12-08 | 1 | -2/+12 |
| | |||||
* | Fixing get_loop_info : part 2 | Cyril SIX | 2020-12-08 | 1 | -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 1 | Cyril SIX | 2020-12-08 | 1 | -16/+8 |
| | | | | Various typos made the code fail silently for certain loops | ||||
* | Moving code | Cyril SIX | 2020-12-08 | 1 | -71/+72 |
| | |||||
* | More debug | Cyril SIX | 2020-12-08 | 1 | -6/+21 |
| | |||||
* | More debug | Cyril SIX | 2020-12-08 | 1 | -3/+3 |
| | |||||
* | Do not duplicate nodes that don't need to when unrolling the body | Cyril SIX | 2020-12-08 | 1 | -4/+18 |
| | |||||
* | Fix on find_last_node_before_loop | Cyril SIX | 2020-12-08 | 1 | -3/+7 |
| | | | | It was too permissive | ||||
* | Comment | Cyril SIX | 2020-12-04 | 1 | -0/+1 |
| | |||||
* | Less aggressive tail duplication | Cyril SIX | 2020-12-04 | 1 | -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 debug | Cyril SIX | 2020-12-04 | 1 | -4/+2 |
| | |||||
* | Fixed infinite loop on find_last_node_before_loop | Cyril SIX | 2020-12-04 | 1 | -3/+6 |
| | | | | Happened when a loop was predicted not to be taken | ||||
* | Slight perf improvement | Cyril SIX | 2020-12-02 | 1 | -2/+2 |
| | |||||
* | [expensive] Behavior change when the loop has two final instructions | Cyril SIX | 2020-12-02 | 1 | -9/+57 |
| | | | | | Right now though the compilation time is too high for glpk, I need to figure out why | ||||
* | Duplicateaux: Generalization of look_ahead | Cyril SIX | 2020-12-01 | 1 | -3/+5 |
| | |||||
* | Ignore loopback edges on tail-duplicate | Cyril SIX | 2020-12-01 | 1 | -0/+2 |
| | |||||
* | Fixing issue with loops having branches leading to goto backedge | Cyril SIX | 2020-11-05 | 1 | -27/+18 |
| | |||||
* | Fixing get_loop_headers + alternative get_inner_loops (commented, not active) | Cyril SIX | 2020-11-04 | 1 | -23/+70 |
| | |||||
* | Loop Rotate with -flooprotate | Cyril SIX | 2020-11-03 | 1 | -0/+50 |
| | |||||
* | Splitting Duplicate in several passes | Cyril SIX | 2020-10-27 | 1 | -14/+20 |
| | |||||
* | Loop body unrolling with -funrollbody n | Cyril SIX | 2020-10-16 | 1 | -3/+6 |
| | |||||
* | Loop body unrolling | Cyril SIX | 2020-10-16 | 1 | -1/+39 |
| | |||||
* | Comment update | Cyril SIX | 2020-10-16 | 1 | -1/+7 |
| | |||||
* | Comment update | Cyril SIX | 2020-10-16 | 1 | -0/+1 |
| | |||||
* | Ignoring Inops for counting number of instructions | Cyril SIX | 2020-10-14 | 1 | -6/+15 |
| | |||||
* | Only unrolling on a given instruction limit | Cyril SIX | 2020-10-09 | 1 | -12/+16 |
| | |||||
* | new flags: -fpredict, -ftailduplicate n, -funrollsingle n instead of just ↵ | Cyril SIX | 2020-10-09 | 1 | -34/+43 |
| | | | | -fduplicate n | ||||
* | Performing branch prediction before loop unrolling | Cyril SIX | 2020-10-07 | 1 | -8/+10 |
| | |||||
* | [EXP] First draft of 1st iteration unrolling | Cyril SIX | 2020-10-07 | 1 | -73/+102 |
| | |||||
* | [BROKEN] Some progress, need to figure out conversion HashedPSet -> List | Cyril SIX | 2020-10-06 | 1 | -14/+111 |
| | |||||
* | Detecting inner loops with LICMaux.inner_loops | Cyril SIX | 2020-10-02 | 1 | -12/+75 |
| |