1. Apr 19, 2013
    • Chris Lattner's avatar
      Fix a comment, PR15777. · 8cf09416
      Chris Lattner authored
      llvm-svn: 179775
      8cf09416
    • Derek Schuff's avatar
      Allow misaligned stores in x86 fast-isel. · a403d243
      Derek Schuff authored
      In X86FastISel::X86SelectStore(), improperly aligned stores are rejected and
      handled by the DAG-based ISel.  However, X86FastISel::X86SelectLoad() makes
      no such requirement.  There doesn't appear to be an x86 architectural
      correctness issue with allowing potentially unaligned store instructions.
      This patch removes this restriction.
      
      Patch by Jim Stichnot.
      
      llvm-svn: 179774
      a403d243
    • Arnold Schwaighofer's avatar
      LoopVectorizer: Recognize min/max reductions · 4cd6aa11
      Arnold Schwaighofer authored
      A min/max operation is represented by a select(cmp(lt/le/gt/ge, X, Y), X, Y)
      sequence in LLVM. If we see such a sequence we can treat it just as any other
      commutative binary instruction and reduce it.
      
      This appears to help bzip2 by about 1.5% on an imac12,2.
      
      radar://12960601
      
      llvm-svn: 179773
      4cd6aa11
    • Greg Clayton's avatar
      Re-enable m_private_run_lock changes from 179329, but only for Apple hosted... · 9624985b
      Greg Clayton authored
      Re-enable m_private_run_lock changes from 179329, but only for Apple hosted builds so it doesn't break the buildbots. We will try and work the issues out in the Apple build before enabling this feature for everyone.
      
      llvm-svn: 179772
      9624985b
    • Andy Gibbs's avatar
      Dropped the parentheses for #pragma message and its kin in the -E output generator. · 96d93907
      Andy Gibbs authored
      This was a suggestion by Jordan Rose since the documented format for these pragmas is without the parentheses.  At the same time, I've increased test coverage too for the preprocessed output.
      
      llvm-svn: 179771
      96d93907
    • Fariborz Jahanian's avatar
      Adds a new doxygen tag needed. // rdar://12379053 · 65ff01bc
      Fariborz Jahanian authored
      llvm-svn: 179770
      65ff01bc
    • Argyrios Kyrtzidis's avatar
    • Eli Bendersky's avatar
      Fix grammar in LLVMBuild.rst · c0ef3d85
      Eli Bendersky authored
      llvm-svn: 179768
      c0ef3d85
    • Jordan Rose's avatar
      [analyzer] "Force" LazyCompoundVals on bind when they are simple enough. · 3720e2f0
      Jordan Rose authored
      The analyzer uses LazyCompoundVals to represent rvalues of aggregate types,
      most importantly structs and arrays. This allows us to efficiently copy
      around an entire struct, rather than doing a memberwise load every time a
      struct rvalue is encountered. This can also keep memory usage down by
      allowing several structs to "share" the same snapshotted bindings.
      
      However, /lookup/ through LazyCompoundVals can be expensive, especially
      since they can end up chaining back to the original value. While we try
      to reuse LazyCompoundVals whenever it's safe, and cache information about
      this transitivity, the fact is it's sometimes just not a good idea to
      perpetuate LazyCompoundVals -- the tradeoffs just aren't worth it.
      
      This commit changes RegionStore so that binding a LazyCompoundVal to struct
      will do a memberwise copy if the struct is simple enough. Today's definition
      of "simple enough" is "up to N scalar members" (see below), but that could
      easily be changed in the future. This is enough to bring the test case in
      PR15697 back down to a manageable analysis time (within 20% of its original
      time, in an unfair test where the new analyzer is not compiled with LTO).
      
      The actual value of "N" is controlled by a new -analyzer-config option,
      'region-store-small-struct-limit'. It defaults to "2", meaning structs with
      zero, one, or two scalar members will be considered "simple enough" for
      this code path.
      
      It's worth noting that a more straightforward implementation would do this
      on load, not on bind, and make use of the structure we already have for this:
      CompoundVal. A long time ago, this was actually how RegionStore modeled
      aggregate-to-aggregate copies, but today it's only used for compound literals.
      Unfortunately, it seems that we've special-cased LazyCompoundVal in certain
      places (such as liveness checks) but failed to similarly special-case
      CompoundVal in all of them. Until we're confident that CompoundVal is
      handled properly everywhere, this solution is safer, since the entire
      optimization is just an implementation detail of RegionStore.
      
      <rdar://problem/13599304>
      
      llvm-svn: 179767
      3720e2f0
    • Jordan Rose's avatar
      [analyzer] Don't crash if we cache out after making a temporary region. · cdb44bdb
      Jordan Rose authored
      A C++ overloaded operator may be implemented as an instance method, and
      that instance method may be called on an rvalue object, which has no
      associated region. The analyzer handles this by creating a temporary region
      just for the evaluation of this call; however, it is possible that /by
      creating the region/, the analyzer ends up in a previously-explored state.
      In this case we don't need to continue along this path.
      
      This doesn't actually show any behavioral change now, but it starts being
      used with the next commit and prevents an assertion failure there.
      
      llvm-svn: 179766
      cdb44bdb
    • Chad Rosier's avatar
      db003998
    • Chad Rosier's avatar
      Make this private method. · c2f055d1
      Chad Rosier authored
      llvm-svn: 179764
      c2f055d1
    • Eli Bendersky's avatar
      Fixes to LangRef.rst: incorrect attributes syntax and misplaced 'nobuiltin' · 97ad9245
      Eli Bendersky authored
      Patch by Stephen Lin
      
      llvm-svn: 179763
      97ad9245
  2. Apr 18, 2013