Skip to content
  1. Jun 22, 2012
    • Lang Hames's avatar
      Rename -allow-excess-fp-precision flag to -fuse-fp-ops, and switch from a · b8650f10
      Lang Hames authored
      boolean flag to an enum: { Fast, Standard, Strict } (default = Standard).
      
      This option controls the creation by optimizations of fused FP ops that store
      intermediate results in higher precision than IEEE allows (E.g. FMAs). The
      behavior of this option is intended to match the behaviour specified by a
      soon-to-be-introduced frontend flag: '-ffuse-fp-ops'.
      
      Fast mode - allows formation of fused FP ops whenever they're profitable.
      
      Standard mode - allow fusion only for 'blessed' FP ops. At present the only
      blessed op is the fmuladd intrinsic. In the future more blessed ops may be
      added.
      
      Strict mode - allow fusion only if/when it can be proven that the excess
      precision won't effect the result.
      
      Note: This option only controls formation of fused ops by the optimizers.  Fused
      operations that are explicitly requested (e.g. FMA via the llvm.fma.* intrinsic)
      will always be honored, regardless of the value of this option.
      
      Internally TargetOptions::AllowExcessFPPrecision has been replaced by
      TargetOptions::AllowFPOpFusion.
      
      llvm-svn: 158956
      b8650f10
  2. Jun 21, 2012
  3. Jun 20, 2012
    • Jakob Stoklund Olesen's avatar
      Avoid iterating with LiveIntervals::iterator. · a1f43dcd
      Jakob Stoklund Olesen authored
      That is a DenseMap iterator keyed by pointers, so the iteration order is
      nondeterministic.
      
      I would like to replace the DenseMap with an IndexedMap which doesn't
      allow iteration.
      
      llvm-svn: 158856
      a1f43dcd
    • Pete Cooper's avatar
      Add users of a MERGE_VALUE node to the worklist to process again when the node... · fe5b84b4
      Pete Cooper authored
      Add users of a MERGE_VALUE node to the worklist to process again when the node is removed.  Sorry, no test case.  Foudn it by inspection of the code
      
      llvm-svn: 158839
      fe5b84b4
    • Jakob Stoklund Olesen's avatar
      Only update regunit live ranges that have been precomputed. · 833308d7
      Jakob Stoklund Olesen authored
      Regunit live ranges are computed on demand, so when mi-sched calls
      handleMove, some regunits may not have live ranges yet.
      
      That makes updating them easier: Just skip the non-existing ranges. They
      will be computed correctly from the rescheduled machine code when they
      are needed.
      
      llvm-svn: 158831
      833308d7
    • Jakob Stoklund Olesen's avatar
      Delete dead code. · d702e8fd
      Jakob Stoklund Olesen authored
      llvm-svn: 158827
      d702e8fd
    • Hal Finkel's avatar
      Fix DAGCombine to deal with ext-conversion of pre/post_inc loads. · 8a311385
      Hal Finkel authored
      The test case for this will come with the PPC indexed preinc loads commit.
      
      llvm-svn: 158822
      8a311385
    • Aaron Ballman's avatar
      Fixing a compiler warning in MSVC 10. · 421a5ba0
      Aaron Ballman authored
      llvm-svn: 158820
      421a5ba0
    • Chandler Carruth's avatar
      Fix two rather subtle internal vs. external linker issues. · c60fbe6b
      Chandler Carruth authored
      I'll admit I'm not entirely satisfied with this change, but it seemed
      the cleanest option. Other suggestions quite welcome
      
      The issue is that the traits specializations have static methods which
      return the typedef'ed PHI_iterator type. In both the IR and MI layers
      this is typedef'ed to a custom iterator class defined in an anonymous
      namespace giving the types and the functions returning them internal
      linkage. However, because the traits specialization is defined in the
      'llvm' namespace (where it has to be, specialized template lives there),
      and is in turn used in the templated implementation of the SSAUpdater.
      This led to the linkage conflict that Clang now warns about.
      
      The simplest solution to me was just to define the PHI_iterator as
      a nested class inside the trait specialization. That way it still
      doesn't get scoped widely, it can't be accidentally reused somewhere,
      etc. This is a little gross just because nested class definitions are
      a little gross, but the alternatives seem more ad-hoc.
      
      llvm-svn: 158799
      c60fbe6b
    • Andrew Trick's avatar
      A new algorithm for computing LoopInfo. Temporarily disabled. · ff2ed7b6
      Andrew Trick authored
      -stable-loops enables a new algorithm for generating the Loop
      forest. It differs from the original algorithm in a few respects:
      
      - Not determined by use-list order.
      - Initially guarantees RPO order of block and subloops.
      - Linear in the number of CFG edges.
      - Nonrecursive.
      
      I didn't want to change the LoopInfo API yet, so the block lists are
      still inclusive. This seems strange to me, and it means that building
      LoopInfo is not strictly linear, but it may not be a problem in
      practice. At least the block lists start out in RPO order now. In the
      future we may add an attribute or wrapper analysis that allows other
      passes to assume RPO order.
      
      The primary motivation of this work was not to optimize LoopInfo, but
      to allow reproducing performance issues by decomposing the compilation
      stages. I'm often unable to do this with the current LoopInfo, because
      the loop tree order determines Loop pass order. Serializing the IR
      tends to invert the order, which reverses the optimization order. This
      makes it nearly impossible to debug interdependent loop optimizations
      such as LSR.
      
      I also believe this will provide more stable performance results across time.
      
      llvm-svn: 158790
      ff2ed7b6
    • Andrew Trick's avatar
      Move the implementation of LoopInfo into LoopInfoImpl.h. · cda51d43
      Andrew Trick authored
      The implementation only needs inclusion from LoopInfo.cpp and
      MachineLoopInfo.cpp. Clients of the interface should only include the
      interface. This makes the interface readable and speeds up rebuilds
      after modifying the implementation.
      
      llvm-svn: 158787
      cda51d43
    • Jakob Stoklund Olesen's avatar
      Add regunit liveness support to LiveIntervals::handleMove(). · 3802bbf3
      Jakob Stoklund Olesen authored
      When LiveIntervals is tracking fixed interference in regunits, make sure
      to update those intervals as well. Currently guarded by -live-regunits.
      
      llvm-svn: 158766
      3802bbf3
    • Chad Rosier's avatar
      Tidy up. · 651f9a48
      Chad Rosier authored
      llvm-svn: 158762
      651f9a48
    • Chad Rosier's avatar
      Add an ensureMaxAlignment() function to MachineFrameInfo (analogous to · 73696927
      Chad Rosier authored
      ensureAlignment() in MachineFunction).  Also, drop setMaxAlignment() in
      favor of this new function.  This creates a main entry point to setting
      MaxAlignment, which will be helpful for future work.  No functionality
      change intended.
      
      llvm-svn: 158758
      73696927
    • Lang Hames's avatar
      Add DAG-combines for aggressive FMA formation. · 39fb1d08
      Lang Hames authored
      This patch adds DAG combines to form FMAs from pairs of FADD + FMUL or
      FSUB + FMUL. The combines are performed when:
      (a) Either
            AllowExcessFPPrecision option (-enable-excess-fp-precision for llc)
              OR
            UnsafeFPMath option (-enable-unsafe-fp-math)
          are set, and
      (b) TargetLoweringInfo::isFMAFasterThanMulAndAdd(VT) is true for the type of
          the FADD/FSUB, and
      (c) The FMUL only has one user (the FADD/FSUB).
      
      If your target has fast FMA instructions you can make use of these combines by
      overriding TargetLoweringInfo::isFMAFasterThanMulAndAdd(VT) to return true for
      types supported by your FMA instruction, and adding patterns to match ISD::FMA
      to your FMA instructions.
      
      llvm-svn: 158757
      39fb1d08
    • Jakob Stoklund Olesen's avatar
      80 col. · 2db1125b
      Jakob Stoklund Olesen authored
      llvm-svn: 158755
      2db1125b
  4. Jun 19, 2012
  5. Jun 18, 2012
  6. Jun 16, 2012
  7. Jun 15, 2012
  8. Jun 14, 2012
Loading