Skip to content
  1. Jan 19, 2015
    • Chandler Carruth's avatar
      [PM] Remove the Pass argument from all of the critical edge splitting · 37df2cfb
      Chandler Carruth authored
      APIs and replace it and numerous booleans with an option struct.
      
      The critical edge splitting API has a really large surface of flags and
      so it seems worth burning a small option struct / builder. This struct
      can be constructed with the various preserved analyses and then flags
      can be flipped in a builder style.
      
      The various users are now responsible for directly passing along their
      analysis information. This should be enough for the critical edge
      splitting to work cleanly with the new pass manager as well.
      
      This API is still pretty crufty and could be cleaned up a lot, but I've
      focused on this change just threading an option struct rather than
      a pass through the API.
      
      llvm-svn: 226456
      37df2cfb
    • Chandler Carruth's avatar
      [PM] Relax asserts and always try to reconstruct loop simplify form when · ad34d913
      Chandler Carruth authored
      we can while splitting critical edges.
      
      The only code which called this and didn't require simplified loops to
      be preserved is polly, and the code behaves correctly there anyways.
      Without this change, it becomes really hard to share this code with the
      new pass manager where things like preserving loop simplify form don't
      make any sense.
      
      If anyone discovers this code behaving incorrectly, what it *should* be
      testing for is whether the loops it needs to be in simplified form are
      in fact in that form. It should always be trying to preserve that form
      when it exists.
      
      llvm-svn: 226443
      ad34d913
    • Erik Eckstein's avatar
      SLPVectorizer: limit the number of alias checks to reduce the runtime. · 76cb53a8
      Erik Eckstein authored
      In case of blocks with many memory-accessing instructions, alias checking can take lot of time
      (because calculating the memory dependencies has quadratic complexity).
      I chose a limit which resulted in no changes when running the benchmarks.
      
      llvm-svn: 226439
      76cb53a8
    • Hal Finkel's avatar
      [PowerPC] Minor correction to r226432 · c3168129
      Hal Finkel authored
      We don't need to exclude patchpoints from the implicit r2 dependence in
      FastISel because it is added as an implicit operand and, thus, should not
      confuse that StackMap code.
      
      By inspection / no test case.
      
      llvm-svn: 226434
      c3168129
    • Michael Kuperstein's avatar
      [MIScheduler] Slightly better handling of constrainLocalCopy when both source and dest are local · 54c61ede
      Michael Kuperstein authored
      This fixes PR21792.
      
      Differential Revision: http://reviews.llvm.org/D6823
      
      llvm-svn: 226433
      54c61ede
    • Hal Finkel's avatar
      [PowerPC] Add r2 as an operand for all calls under both PPC64 ELF V1 and V2 · af51993e
      Hal Finkel authored
      Our PPC64 ELF V2 call lowering logic added r2 as an operand to all direct call
      instructions in order to represent the dependency on the TOC base pointer
      value. Restricting this to ELF V2, however, does not seem to make sense: calls
      under ELF V1 have the same dependence, and indirect calls have an r2 dependence
      just as direct ones. Make sure the dependence is noted for all calls under both
      ELF V1 and ELF V2.
      
      llvm-svn: 226432
      af51993e
    • Craig Topper's avatar
      [x86] Change AVX512 intrinsics to take a 8-bit immediate for the comparision... · f4bf9119
      Craig Topper authored
      [x86] Change AVX512 intrinsics to take a 8-bit immediate for the comparision kind instead of a 32-bit immediate. This better aligns with the emitted instruction. It also matches SSE and AVX1 equivalents. Also add auto upgrade support.
      
      llvm-svn: 226430
      f4bf9119
    • Chandler Carruth's avatar
      [PM] Lift the analyses into the interface for · 0eae1120
      Chandler Carruth authored
      SplitLandingPadPredecessors and remove the Pass argument from its
      interface.
      
      Another step to the utilities being usable with both old and new pass
      managers.
      
      llvm-svn: 226426
      0eae1120
  2. Jan 18, 2015
  3. Jan 17, 2015
    • Chandler Carruth's avatar
      [PM] Cleanup more warnings my refactoring exposed where now we have · bc045a5a
      Chandler Carruth authored
      unused variables in a no-asserts build.
      
      I've fixed this by putting the entire loop behind an #ifndef as it
      contains nothing other than asserts.
      
      llvm-svn: 226377
      bc045a5a
    • Chandler Carruth's avatar
      [PM] Remove a dead field. · 24fd029a
      Chandler Carruth authored
      This was dead even before I refactored how we initialized it, but my
      refactoring made it trivially dead and it is now caught by a Clang
      warning. This fixes the warning and should clean up the -Werror bot
      failures (sorry!).
      
      llvm-svn: 226376
      24fd029a
    • Chandler Carruth's avatar
      [PM] Split the LoopInfo object apart from the legacy pass, creating · 4f8f307c
      Chandler Carruth authored
      a LoopInfoWrapperPass to wire the object up to the legacy pass manager.
      
      This switches all the clients of LoopInfo over and paves the way to port
      LoopInfo to the new pass manager. No functionality change is intended
      with this iteration.
      
      llvm-svn: 226373
      4f8f307c
    • Hal Finkel's avatar
      [PowerPC] Don't list R11 as a patchpoint scratch register · c19805a7
      Hal Finkel authored
      R11's status is the same under both the PPC64 ELF V1 and V2 ABIs: it is
      reserved for use as an "environment pointer" for compilation models that
      require such a thing. We don't, we also don't need a second scratch register,
      and because we support only "local" patchpoint call targets, we might as well
      let R11 be used for anyregcc patchpoints.
      
      llvm-svn: 226369
      c19805a7
    • Mehdi Amini's avatar
      Improve DAG combine pass on certain IR vector patterns · 37f316af
      Mehdi Amini authored
      Loading 2 2x32-bit float vectors into the bottom half of a 256-bit vector
      produced suboptimal code in AVX2 mode with certain IR combinations.
      
      In particular, the IR optimizer folded 2f32 + 2f32 -> 4f32, 4f32 + 4f32
      (undef) -> 8f32 into a 2f32 + 2f32 -> 8f32, which seems more canonical,
      but then mysteriously generated rather bad code; the movq/movhpd combination
      didn't match.
      
      The problem lay in the BUILD_VECTOR optimization path. The 2f32 inputs
      would get promoted to 4f32 by the type legalizer, eventually resulting
      in a BUILD_VECTOR on two 4f32 into an 8f32. The BUILD_VECTOR then, recognizing
      these were both half the output size, concatted them and then produced
      a shuffle. However, the resulting concat + shuffle was more complex than
      it should be; in the case where the upper half of the output is undef, we
      probably want to generate shuffle + concat instead.
      
      This enhancement causes the vector_shuffle combine step to recognize this
      suboptimal pattern and correct it. I included it there instead of in BUILD_VECTOR
      in case the same suboptimal pattern occurs for other reasons.
      
      This results in the optimizer correctly producing the optimal movq + movhpd
      sequence for all three variations on this IR, even with AVX2.
      
      I've included a test case.
      
      Radar link: rdar://problem/19287012
      Fix for PR 21943.
      
      From: Fiona Glaser <fglaser@apple.com>
      llvm-svn: 226360
      37f316af
    • Lang Hames's avatar
      [RuntimeDyld] Tidy up emitCommonSymbols a little. NFC. · 2996895f
      Lang Hames authored
      llvm-svn: 226358
      2996895f
    • Richard Trieu's avatar
      Remove std::move that was preventing return value optimization. · 73d06526
      Richard Trieu authored
      llvm-svn: 226356
      73d06526
    • Matthias Braun's avatar
      7618b2b2
    • Matthias Braun's avatar
      RegisterCoalescer: Cleanup by factoring out a common expression · 0eb940ae
      Matthias Braun authored
      llvm-svn: 226352
      0eb940ae
    • Matthias Braun's avatar
      RegisterCoalescer: Cleanup comment style · e2fa0816
      Matthias Braun authored
      - Consistenly put comments above the function declaration, not the
        definition. To achieve this some duplicate comments got merged and
        some comment parts describing implementation details got moved into their
        functions.
      - Consistently use doxygen comments above functions.
      - Do not use doxygen comments inside functions.
      
      llvm-svn: 226351
      e2fa0816
    • Matthias Braun's avatar
      RegisterCoalescer: Drive-by typo + whitespace fix · fc6ef3a2
      Matthias Braun authored
      llvm-svn: 226350
      fc6ef3a2
    • Lang Hames's avatar
      [RuntimeDyld] Remove the brace initialization that was introduced in r226341. · 1f7eab33
      Lang Hames authored
      Evidently MSVC doesn't like it.
      
      llvm-svn: 226349
      1f7eab33
    • Philip Reames's avatar
      Update a comment · 287987ca
      Philip Reames authored
      Be a bit more explicit about the fact that addrspace(1) is not reserved.
      
      llvm-svn: 226344
      287987ca
    • Philip Reames's avatar
      clang-format all the GC related files (NFC) · 36319538
      Philip Reames authored
      Nothing interesting here...
      
      llvm-svn: 226342
      36319538
    • Lang Hames's avatar
      [RuntimeDyld] Track symbol visibility in RuntimeDyld. · 6bfd3980
      Lang Hames authored
      RuntimeDyld symbol info previously consisted of just a Section/Offset pair. This
      patch replaces that pair type with a SymbolInfo class that also tracks symbol
      visibility. A new method, RuntimeDyld::getExportedSymbolLoadAddress, is
      introduced which only returns a non-zero result for exported symbols. For
      non-exported or non-existant symbols this method will return zero. The
      RuntimeDyld::getSymbolAddress method retains its current behavior, returning
      non-zero results for all symbols regardless of visibility.
      
      No in-tree clients of RuntimeDyld are changed. The newly introduced
      functionality will be used by the Orc APIs.
      
      No test case: Since this patch doesn't modify the behavior for any in-tree
      clients we don't have a good tool to test this with yet. Once Orc is in we can
      use it to write regression tests that test these changes.
      
      llvm-svn: 226341
      6bfd3980
  4. Jan 16, 2015
Loading