aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
| * | Run register renaming pass after receiving the info which pc's should beJustus Fasse2021-07-301-9/+45
| | | | | | | | | | | | | | | | | | | | | moved past side exits. Otherwise it is not safe to copy those instructions. Ideally, this approach is just as good as a more fine-grained appraoch, assuming that the register allocation "nops" the non-exploited renames.
| * | Remove now unused debug functionJustus Fasse2021-07-301-26/+0
| | |
| * | Do not accidentally shadow a previous functionJustus Fasse2021-07-301-2/+3
| | |
| * | FormattingJustus Fasse2021-07-301-4/+4
| | |
| * | Adjust "main" function of this pass to the previous changes.Justus Fasse2021-07-291-29/+57
| | | | | | | | | | | | | | | NB: Currently, the code motion past side exits logic assumes that poor man's SSA is turned on.
| * | Update TODO listJustus Fasse2021-07-291-3/+1
| | |
| * | Rename registers until they are defined (again).Justus Fasse2021-07-291-0/+24
| | | | | | | | | | | | | | | This function is useful in coordination with the aliasing code in restoration_instruction'.
| * | Another necessary change to allow code motion past the final Icond of aJustus Fasse2021-07-291-2/+2
| | | | | | | | | | | | path (if existant and predicted [not None]).
| * | Update downschedule_compensation_code functionJustus Fasse2021-07-291-38/+33
| | | | | | | | | | | | | | | | | | | | | | | | Transitively consider the additional dependent instructions. This is necessary since we delete the originals of duplicated-for-code-motion instruction since this is the only way it will [currently] work for memory stores. Before only instructions that directly dependent on a monved/copied for code motion instruction were considered.
| * | Do not virtually insert the final restoration code before applying theJustus Fasse2021-07-291-18/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | code motion past side exits heuristic. Now, that code may be moved past the final Icond, it it is movable, the previous (deleted with this commit) approach is no longer correct. The code-to-be-inserted may contain the imaginary final restoration code which does not exist (yet) outside of this function. Instead, the final restoration code should (optionally?) be inserted before calling this function.
| * | Turn a tree of deps into a tree of usesJustus Fasse2021-07-291-0/+20
| | |
| * | Return estimated final_time from schedulersJustus Fasse2021-07-292-9/+19
| | |
| * | Early exit for ideal_schedule'Justus Fasse2021-07-291-1/+1
| | |
| * | Disable debug info for `intra_path_dependencies` by defaultJustus Fasse2021-07-291-2/+1
| | |
| * | Alternative function to calculate restoration instructions.Justus Fasse2021-07-291-0/+35
| | | | | | | | | | | | | | | | | | | | | Also creates aliases for overwritten registers. These aliases must be applied afterwards. Otherwise, the restoration code may incorrectly overwrite a register that is read afterwards and expects the previous value.
| * | Return a mapping from the old pcs to the new valuesJustus Fasse2021-07-291-3/+8
| | | | | | | | | | | | | | | This allows to update externally kept information that relies on these pcs across code insertions.
| * | Only print instructions (in insert_code) when debug flag is setJustus Fasse2021-07-291-2/+2
| | |
| * | Code may be scheduled past a path-ending Icond if it is predictedJustus Fasse2021-07-291-25/+18
| | |
| * | Add convenience, map-like, function to InsertPositionJustus Fasse2021-07-291-0/+4
| | |
| * | An Icond that sits at the end of a superblock may be a "side" exitJustus Fasse2021-07-291-2/+3
| | | | | | | | | | | | | | | ... if it has a prediction associated to it. If the prediction is None it cannot be a side exit.
| * | Make comment apply to the correct branchJustus Fasse2021-07-271-1/+1
| | |
| * | Rewrite code insertion logicJustus Fasse2021-07-271-71/+137
| | | | | | | | | | | | Now able to explicitly insert code above or below a certain pc.
| * | Remove useless comment (implemented by ideal_schedule')Justus Fasse2021-07-211-3/+0
| | |
| * | Don't attempt to schedule instrcution beyond an Icond if it is the lastJustus Fasse2021-07-211-26/+29
| | | | | | | | | | | | instruction of the superblock.
| * | Fix error where side exits where accidentally swappedJustus Fasse2021-07-211-1/+3
| | |
| * | Merge branch 'kvx-work' into weak-software-pipeliningJustus Fasse2021-07-191-1/+1
| |\ \
| * | | Fix compilation errorJustus Fasse2021-07-192-2/+4
| | | | | | | | | | | | | | | | TODO: review changes to scheduling heuristic
| * | | Merge branch 'kvx-work' into weak-software-pipeliningJustus Fasse2021-07-1929-36/+2146
| |\ \ \
| * | | | Comment out extra-aliasing logic which becomes useless w/ pmSSA + lift-ifJustus Fasse2021-07-161-3/+5
| | | | | | | | | | | | | | | | | | | | Question: Is it useless in general?
| * | | | Describe new command line options slightly betterJustus Fasse2021-07-161-1/+5
| | | | |
| * | | | Use flag -ftarget-inner-loopsJustus Fasse2021-07-161-1/+1
| | | | | | | | | | | | | | | | | | | | That is, inner loops that are spanned by a superblock
| * | | | Add hyphens to flagsJustus Fasse2021-07-161-5/+5
| | | | |
| * | | | Fix build via work-around in Compiler.vexpandJustus Fasse2021-07-162-9/+27
| | | | |
| * | | | Use new flagsJustus Fasse2021-07-161-2/+15
| | | | |
| * | | | Add additional compiler flagsJustus Fasse2021-07-162-1/+11
| | | | |
| * | | | Optimize code layoutJustus Fasse2021-07-151-5/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When detecting a superblock that spans a loop, lay out the code in such a way that not looping can be handled via fall-through, thus saving an extra instruction on the suspected hot-path.
| * | | | Try to somehwat separate downward scheduling from register renamingJustus Fasse2021-07-131-28/+69
| | | | |
| * | | | Fix error messageJustus Fasse2021-07-121-2/+2
| | | | |
| * | | | Make it possible to only rename select registersJustus Fasse2021-07-121-24/+35
| | | | | | | | | | | | | | | | | | | | Not used yet.
| * | | | Fix TODOJustus Fasse2021-07-091-1/+33
| | | | | | | | | | | | | | | | | | | | Only move memory writes across at most a single Icond
| * | | | Refactor finding side-exitsJustus Fasse2021-07-091-5/+9
| | | | |
| * | | | Split `transitive_dependencies` into its own functionJustus Fasse2021-07-081-17/+31
| | | | | | | | | | | | | | | | | | | | Might be very slow
| * | | | Merge branch 'kvx-work' into weak-software-pipeliningJustus Fasse2021-07-08415-7966/+14838
| |\ \ \ \
| * | | | | Update `next_free_reg` correctlyJustus Fasse2021-07-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By incorrectly reusing registers, the schedules of `ideal_schedule'` were over-constrained.
| * | | | | Fix weird indentationJustus Fasse2021-07-071-85/+85
| | | | | |
| * | | | | Optionally, only remove redundant conditions when applying CSE3.Justus Fasse2021-07-067-36/+63
| | | | | | | | | | | | | | | | | | | | | | | | Super hacky way to do it right now.
| * | | | | Work-around so that the less-restrictive down-scheduling heuristic canJustus Fasse2021-07-051-14/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | be used The current code is not correct right now, see the inline comments.
| * | | | | Actually sort the list... (dumb typo)Justus Fasse2021-07-051-1/+1
| | | | | |
| * | | | | Minor changes to proofs (not complete)Justus Fasse2021-07-041-9/+26
| | | | | |
| * | | | | Minor changes to compiler_expand.mlJustus Fasse2021-07-041-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a) Make it possible to trivially discover induction variables on a small example b) Extra-renumbering pass for better printing while debugging