1. 27 8月, 2013 1 次提交
    • A
      Rewrite pass management with LLVM · 73540551
      Alex Crichton 提交于
      Beforehand, it was unclear whether rust was performing the "recommended set" of
      optimizations provided by LLVM for code. This commit changes the way we run
      passes to closely mirror that of clang, which in theory does it correctly. The
      notable changes include:
      
      * Passes are no longer explicitly added one by one. This would be difficult to
        keep up with as LLVM changes and we don't guaranteed always know the best
        order in which to run passes
      * Passes are now managed by LLVM's PassManagerBuilder object. This is then used
        to populate the various pass managers run.
      * We now run both a FunctionPassManager and a module-wide PassManager. This is
        what clang does, and I presume that we *may* see a speed boost from the
        module-wide passes just having to do less work. I have no measured this.
      * The codegen pass manager has been extracted to its own separate pass manager
        to not get mixed up with the other passes
      * All pass managers now include passes for target-specific data layout and
        analysis passes
      
      Some new features include:
      
      * You can now print all passes being run with `-Z print-llvm-passes`
      * When specifying passes via `--passes`, the passes are now appended to the
        default list of passes instead of overwriting them.
      * The output of `--passes list` is now generated by LLVM instead of maintaining
        a list of passes ourselves
      * Loop vectorization is turned on by default as an optimization pass and can be
        disabled with `-Z no-vectorize-loops`
      73540551
  2. 25 8月, 2013 26 次提交
  3. 24 8月, 2013 13 次提交