Changed expr_uses_vars back to using a custom visitor. This is because we need to dive into bound variables from the linear solvers scope, so the visitor in ExprUsesVars is not sufficient.
Merge branch 'scoped_expr_uses_vars' into linear_solver
After merging in scoped_expr_uses_vars branch, changed has_vars method to use expr_uses_vars and deleted custom visitor.
Added EXPORT macro to linear solver functions. Grouped comments and made them readable by doxygen.
Added BranchUtils.h/.cpp files that contain several visitors and mutators used by the specialize_branched_loops optimization pass. I have pulled this work out into its own file to improve the readability of the specialize_branched_loops stuff, and make it easier to test and review these components.
Fixed compile errors in BranchUtils. Added the beginnings of a correctness test to check the validity of the functions in BranchUtils.
Added some tests to check the correctness of the normalize and prune functions in BranchUtils.
Fixed generation of shift operators in OpenCL C for vector types.
Added test for vectorized div/mod in GPU targets.
Merge master
Merge pull request #544 from halide/linear_solver

Changed expr_uses_vars back to using a custom visitor.
Changed the names of the BranchUtils files to BranchVisitors. Added some more comments to BranchVisitors.cpp file at the top of each class to indicate what it does. Rearrange the order of the functions and visitors in the file to match the order in which they are intended to be used. Also, fixed a minor but important bug that could potentially lead to infinite loops when a select expr was found in the condition of an if stmt.
Merge master
Fixed some compile errors that shouldn't have made it in the last commit.
Merge branch 'master' into branch_utils
Fixed comments in vectorized div/mod test.
Merge branch 'master' of https://github.com/halide/Halide into no-shift-ocl-c
Merge pull request #550 from halide/no-shift-ocl-c

Don't lower Div/Mod to shift/and in OpenCL C
Addressed some of the minor comments on the outstanding pull request for this branch.
Added a function expr_is_linear_in_vars to LinearSolve. This is useful for detecting expressions that we could have a reasonable chance of solving.