Added a LinearSolve IRMutator that can solve simple linear equations for a given variable.
merge
merge
Added a specialized_branched_loops optimization pass, that searches for if statements nested inside loops and attempts to pull them outside the loop.
Removed Makefile that was accidentally checked in.
Fixed extent computation for branched loops.
Added an irregular grid data structure that will be useed to track the branches of nested loops.
Switch BranchedLoopsGrid to think of cell max as non-inclusive.
Added a linear solver
Added initial chunk of code to handle specializing branched loops. This is messy, and not working yet, but need to sync with desktop machine.
Finished initial implementation of specialize_branched_loops. Still testing...
Initial implementation of specialize_branched_loops is working. Need to work out how to optimize the cases identified in each branch.
Fixes to specialize_branched_loops. It correctly mutates loops for the most parts right now.
Fixed a bug I introduced in simplify. Removed a bunch of debugging comments from SpecializeBranchedLoops.
Fixed a minor type correctness bug in LinearSolve.
Fixed an issue in specialize_branched_loops when the branching condition requires 2 loop variables.
Fixed a problem in specialize_branched_loops that was dropping some let bound variables. Changed the mutator to not branch on min/max expr by default, unless the min/max is on a variable that has already been determined to have a branch.
Added specialization of select branches in the case that the values of the select are vectors, but the condition is scalar.
Had to put a local version of the ExprUsesVar visitor inside SpecializeBranchedLoops so that I could check if variables in my scope reference the var I am searching for.
Fixed a bug in my visitor that tests if an Expr or Stmt branches in a particular var. The scope was not being correctly populated with let bound vars.