1. May 13, 2016
    • Adam Nemet's avatar
      [LoopDist] Only run LAA for loops with the pragma · eff76646
      Adam Nemet authored
      This should fix some compile-time regressions after r267672.  Thanks to
      Chris Matthews for bisecting it.
      
      llvm-svn: 269392
      eff76646
    • Matt Arsenault's avatar
      AMDGPU: Remove verifier check for scc live ins · 999f7dd8
      Matt Arsenault authored
      We only really need this to be true for SIFixSGPRCopies.
      I'm not sure there's any way this could happen before that point.
      
      Fixes a case where MachineCSE could introduce a cross block
      scc use.
      
      llvm-svn: 269391
      999f7dd8
    • Chandler Carruth's avatar
      [ADT] Add an 'llvm::seq' function which produces an iterator range over · d1ad58b1
      Chandler Carruth authored
      a sequence of values.
      
      It increments through the values in the half-open range: [Begin, End),
      producing those values when indirecting the iterator. It should support
      integers, iterators, and any other type providing these basic arithmetic
      operations.
      
      This came up in the C++ standards committee meeting, and it seemed like
      a useful construct that LLVM might want as well, and I wanted to
      understand how easily we could solve it. I suspect this can be used to
      write simpler counting loops even in LLVM along the lines of:
      
        for (int i : seq(0, v.size())) {
          ...
        };
      
      As part of this, I had to fix the lack of a proxy object returned from
      the operator[] in our iterator facade.
      
      Differential Revision: http://reviews.llvm.org/D17870
      
      llvm-svn: 269390
      d1ad58b1
    • Felix Berger's avatar
      [clang-tidy] - PerformanceUnnecesaryCopyInitialization - only trigger for decl... · 6d3d746f
      Felix Berger authored
      [clang-tidy] - PerformanceUnnecesaryCopyInitialization - only trigger for decl stmts with single VarDecl.
      
      Summary: This fixes bug: https://llvm.org/bugs/show_bug.cgi?id=27325
      
      Reviewers: alexfh
      
      Subscribers: cfe-commits
      
      Differential Revision: http://reviews.llvm.org/D19865
      
      llvm-svn: 269389
      6d3d746f
    • Michael Zolotukhin's avatar
      [Unroll] Implement a conservative and monotonically increasing cost tracking... · b7b80529
      Michael Zolotukhin authored
      [Unroll] Implement a conservative and monotonically increasing cost tracking system during the full unroll heuristic analysis that avoids counting any instruction cost until that instruction becomes "live" through a side-effect or use outside the...
      
      Summary:
      ...loop after the last iteration.
      
      This is really hard to do correctly. The core problem is that we need to
      model liveness through the induction PHIs from iteration to iteration in
      order to get the correct results, and we need to correctly de-duplicate
      the common subgraphs of instructions feeding some subset of the
      induction PHIs. All of this can be driven either from a side effect at
      some iteration or from the loop values used after the loop finishes.
      
      This patch implements this by storing the forward-propagating analysis
      of each instruction in a cache to recall whether it was free and whether
      it has become live and thus counted toward the total unroll cost. Then,
      at each sink for a value in the loop, we recursively walk back through
      every value that feeds the sink, including looping back through the
      iterations as needed, until we have marked the entire input graph as
      live. Because we cache this, we never visit instructions more than twice
      -- once when we analyze them and put them into the cache, and once when
      we count their cost towards the unrolled loop. Also, because the cache
      is only two bits and because we are dealing with relatively small
      iteration counts, we can store all of this very densely in memory to
      avoid this from becoming an excessively slow analysis.
      
      The code here is still pretty gross. I would appreciate suggestions
      about better ways to factor or split this up, I've stared too long at
      the algorithmic side to really have a good sense of what the design
      should probably look at.
      
      Also, it might seem like we should do all of this bottom-up, but I think
      that is a red herring. Specifically, the simplification power is *much*
      greater working top-down. We can forward propagate very effectively,
      even across strange and interesting recurrances around the backedge.
      Because we use data to propagate, this doesn't cause a state space
      explosion. Doing this level of constant folding, etc, would be very
      expensive to do bottom-up because it wouldn't be until the last moment
      that you could collapse everything. The current solution is essentially
      a top-down simplification with a bottom-up cost accounting which seems
      to get the best of both worlds. It makes the simplification incremental
      and powerful while leaving everything dead until we *know* it is needed.
      
      Finally, a core property of this approach is its *monotonicity*. At all
      times, the current UnrolledCost is a conservatively low estimate. This
      ensures that we will never early-exit from the analysis due to exceeding
      a threshold when if we had continued, the cost would have gone back
      below the threshold. These kinds of bugs can cause incredibly hard to
      track down random changes to behavior.
      
      We could use a techinque similar (but much simpler) within the inliner
      as well to avoid considering speculated code in the inline cost.
      
      Reviewers: chandlerc
      
      Subscribers: sanjoy, mzolotukhin, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D11758
      
      llvm-svn: 269388
      b7b80529
    • Michael Zolotukhin's avatar
      [LoopUnrollAnalyzer] Don't treat gep-instructions with simplified offset as simplified. · a59a308e
      Michael Zolotukhin authored
      Summary:
      Currently we consider such instructions as simplified, which is incorrect,
      because if their user isn't simplified, we can't actually simplify them too.
      This biases our estimates of profitability: for instance the analyzer expects
      much more gains from unrolling memcpy loops than there actually are.
      
      Reviewers: hfinkel, chandlerc
      
      Subscribers: mzolotukhin, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D17365
      
      llvm-svn: 269387
      a59a308e
    • Teresa Johnson's avatar
      [ThinLTO] Use correct pipeline for ThinLTO in gold-plugin. · 532e33be
      Teresa Johnson authored
      This change is the gold side of the change made in D17115 and clang
      patch r261045 to add a ThinLTO specific pipeline that moves more of
      the optimization to the backends.
      
      llvm-svn: 269386
      532e33be
    • Akira Hatanaka's avatar
      [ObjC][CodeGen] Remove an assert that is no longer correct. · fdacb5c0
      Akira Hatanaka authored
      clang asserts when compiling the following code because r231508 made
      changes to promote constant temporary arrays and records to globals
      with constant initializers:
      
      std::vector<NSString*> strs = {@"a", @"b"};
      
      This commit changes the code to return early if the object returned by
      createReferenceTemporary is a global variable with an initializer.
      
      rdar://problem/25504992
      rdar://problem/25955179
      
      Differential Revision: http://reviews.llvm.org/D20045
      
      llvm-svn: 269385
      fdacb5c0
    • Xinliang David Li's avatar
      Remove runtime specific code from common header · 8e6b917e
      Xinliang David Li authored
      llvm-svn: 269384
      8e6b917e
    • Adrian Prantl's avatar
      dsymutil: Fix the DWOId mismatch check for cached modules. · e1bc3e20
      Adrian Prantl authored
      In verbose mode, we emit a warning if the DWOId of a skeleton CU
      mismatches the DWOId of the referenced module. This patch updates the
      cached DWOId after a module has been loaded to the DWOId of the module
      on disk (instead of storing the DWOId we expected to load). This
      allows us to correctly emit the mismatch warning for all subsequent
      object files that want to import the same module. This patch also
      ensures both warnings are only emitted in verbose mode.
      
      rdar://problem/26214027
      
      llvm-svn: 269383
      e1bc3e20
    • Richard Smith's avatar
      Preserve the FoundDecl properly in constructor overload resolution. No · 55c28889
      Richard Smith authored
      functionality change; this information is not yet in use.
      
      llvm-svn: 269382
      55c28889
    • Reid Kleckner's avatar
      [codeview] Try to handle errors better in record iterator · ce5196e7
      Reid Kleckner authored
      llvm-svn: 269381
      ce5196e7
    • Chris Bieneman's avatar
      [MachO] Extract MachO load command enums into a def file · 05a19af7
      Chris Bieneman authored
      Having the MachO enums in a def file instead of inline will allow us to write utilities and encoding/decoding methods for load commands without having to write a lot of mechanically repeated code.
      
      llvm-svn: 269380
      05a19af7
    • Justin Bogner's avatar
      SDAG: Implement Select instead of SelectImpl in AArch64DAGToDAGISel · 283e3bd7
      Justin Bogner authored
      This one has a lot of code churn, but it's all mechanical and
      straightforward.
      
      - Where we were returning a node before, call ReplaceNode instead.
      - Where we would return null to fall back to another selector, rename
        the method to try* and return a bool for success.
      - Where we were calling SelectNodeTo, just return afterwards.
      
      Part of llvm.org/pr26808.
      
      llvm-svn: 269379
      283e3bd7
    • Enrico Granata's avatar
      7d1ff51f
    • Greg Clayton's avatar
      Fix some long standing issues that caused tests to be flaky. · 1e20f021
      Greg Clayton authored
      The main issues were:
      - Listeners recently were converted over to used by getting a shared pointer to a listener. And when they listened to broadcasters they would get a strong reference added to them meaning the listeners would never go away. This caused memory usage to increase and would cause performance issue if many steps were done.
      - The lldb_private::Process private state thread had an issue where if a "stop" contol signal was attempted to be sent to that thread, it could end up not responding in 2 seconds and end up getting cancelled which might cause us to cancel a thread that had a mutex locked and it would deadlock the test.
      
      This change makes broadcasters hold onto weak references to listeners. It also fixes some bad threading code that had races inside of it by making the m_events_mutex be non-recursive and getting rid of fragile use of a Predicate<bool> to say that new events are available, and replacing it with using the m_events_mutex with a new m_events_condition to control access to the events in a safer way.
      
      The private state thread now uses a safer way to communicate that the control event has been received by the private state thread: it makes a EventDataReceipt instance that it attaches to the event that sends the control to the private state thread and used this to synchronize the fact that the private state thread has received the event instead of using a Predicate<bool> to convey the info. When the signal event is received, it will pull the event off of the queue in the private state thread and cause the EventData::DoOnRemoval() to be called, which will signal that the event has been received. This cleans up the signal delivery notification so it doesn't rely on a member variable of the process class to convey the info.
      
      std::shared_ptr<EventDataReceipt> event_receipt_sp(new EventDataReceipt());
      m_private_state_control_broadcaster.BroadcastEvent(signal, event_receipt_sp);
      
      <rdar://problem/26256353> Listeners are being kept around longer than they should be due to recent changs
      <rdar://problem/26256258> Private process state thread can be cancelled and cause deadlocks in test suite
      
      llvm-svn: 269377
      1e20f021
    • Hemant Kulkarni's avatar
      llvm-readobj: Fix GNU style entry point print width · 787c2ed6
      Hemant Kulkarni authored
      llvm-svn: 269376
      787c2ed6
    • Rafael Espindola's avatar
      Slit the relocation scan in two parts. · 686ffc6f
      Rafael Espindola authored
      The first part handles whatever has to be written to the r_offset
      position.
      
      The second part handles creating got and plt entries.
      
      llvm-svn: 269375
      686ffc6f
    • Reid Kleckner's avatar
      [codeview] Fix dumping VFTables, stop when we see LF_PAD* · 0e85b973
      Reid Kleckner authored
      Also stop visiting type records when we encounter an error.
      
      llvm-svn: 269374
      0e85b973
    • Greg Clayton's avatar
      Don't crash when a process' task port goes bad. · 1059a067
      Greg Clayton authored
      <rdar://problem/26256049>
      
      llvm-svn: 269373
      1059a067
    • Greg Clayton's avatar
      Fix libstdc++ failure where <atomic> is not able to be imported on Darwin systems. · ff8e6a76
      Greg Clayton authored
      The adding of <atomic> to test_common.h broke 12 tests on Darwin. We work around this by not including <atomic> when building on darwin for libstdc++ tests.
      
      llvm-svn: 269372
      ff8e6a76
    • Eugene Zelenko's avatar
      Fix Clang-tidy modernize-use-bool-literals in generated code. · a9f3e908
      Eugene Zelenko authored
      Reduce space in empty constructors and between data members and first public section.
      
      Fix some Include What You Use warnings.
      
      Differential revision: http://reviews.llvm.org/D20213
      
      llvm-svn: 269371
      a9f3e908
    • Chandler Carruth's avatar
      [PM] Port of the DepndenceAnalysis to the new PM. · 49c22190
      Chandler Carruth authored
      Ported DA to the new PM by splitting the former DependenceAnalysis Pass
      into a DependenceInfo result type and DependenceAnalysisWrapperPass type
      and adding a new PM-style DependenceAnalysis analysis pass returning the
      DependenceInfo.
      
      Patch by Philip Pfaffe, most of the review by Justin.
      
      Differential Revision: http://reviews.llvm.org/D18834
      
      llvm-svn: 269370
      49c22190
    • Rafael Espindola's avatar
      Move addend computation to a helper function. · 203b0773
      Rafael Espindola authored
      llvm-svn: 269369
      203b0773
    • Hemant Kulkarni's avatar
      llvm-readobj: Change Hex output for GNU style dynamic table print · cb21f3c7
      Hemant Kulkarni authored
      Dynamic table when printed shows uppercase tag/values.
      This changes it to lower case when printing in GNU style
      
      llvm-svn: 269368
      cb21f3c7
    • Richard Smith's avatar
      Refactor constant expression evaluation of CXXConstructExpr to reduce... · b8348f57
      Richard Smith authored
      Refactor constant expression evaluation of CXXConstructExpr to reduce duplication between array and class initialization.
      
      llvm-svn: 269367
      b8348f57
    • Cameron Desrochers's avatar
    • Jonathan Peyton's avatar
      Adding new kmp_aligned_malloc() entry point · f83ae31c
      Jonathan Peyton authored
      This change adds a new entry point,
      kmp_aligned_malloc(size_t size, size_t alignment), an entry point corresponding
      to kmp_malloc() but with the capability to return aligned memory as well.
      Other allocator routines have been adjusted so that kmp_free() can be used for
      freeing memory blocks allocated by any kmp_*alloc() routine, including the new
      kmp_aligned_malloc() routine.
      
      Differential Revision: http://reviews.llvm.org/D19814
      
      llvm-svn: 269365
      f83ae31c
    • Justin Bogner's avatar
      SDAG: Implement Select instead of SelectImpl in LanaiDAGToDAGISel · 7a0fe694
      Justin Bogner authored
      - Where we were returning a node before, call ReplaceNode instead.
      - Where we were calling SelectNodeTo, just return afterwards.
      
      Part of llvm.org/pr26808.
      
      llvm-svn: 269364
      7a0fe694
    • Jonathan Peyton's avatar
      Fix team reuse with foreign threads · 2b749b33
      Jonathan Peyton authored
      After hot teams were enabled by default, the library started using levels kept
      in the team structure. The levels are broken in case foreign thread exits and
      puts its team into the pool which is then re-used by another foreign thread.
      The broken behavior observed is when printing the levels for each new team, one
      gets 1, 2, 1, 2, 1, 2, etc. This makes the library believe that every other
      team is nested which is incorrect. What is wanted is for the levels to be
      1, 1, 1, etc.
      
      Differential Revision: http://reviews.llvm.org/D19980
      
      llvm-svn: 269363
      2b749b33
    • Rafael Espindola's avatar
      Handle thunks in adjustExpr. · 01f16364
      Rafael Espindola authored
      This is similar to the other changes this function does. With this all
      Relocations.push_back calls look similar.
      
      llvm-svn: 269362
      01f16364
    • Rafael Espindola's avatar
      This reverts commit r269359 and r269360. · 62cb02ee
      Rafael Espindola authored
      I will commit again with a fixed commit message.
      
      llvm-svn: 269361
      62cb02ee
    • Rafael Espindola's avatar
      Handle thunks in adjustExpr. · cc42a90b
      Rafael Espindola authored
      This is similar to the other changes this function does. With this all
      Relocations.push_back calls look similar.
      
      llvm-svn: 269360
      cc42a90b
    • Rafael Espindola's avatar
      bra · 01a94f83
      Rafael Espindola authored
      llvm-svn: 269359
      01a94f83
    • Justin Bogner's avatar
      SDAG: Implement Select instead of SelectImpl in HexagonDAGToDAGISel · ec37a027
      Justin Bogner authored
      - Where we were returning a node before, call ReplaceNode instead.
      - Where we had already replaced all uses and we returned a node, just
        remove the dead node instead.
      - Where we would return null to fall back to another selector, rename
        the method to try* and return a bool for success.
      
      Part of llvm.org/pr26808.
      
      llvm-svn: 269358
      ec37a027
    • Xinliang David Li's avatar
      [profile] Code refactoring · d1dadf6b
      Xinliang David Li authored
      Move runtime specific code from the common header file
      to runtime source.
      
      llvm-svn: 269357
      d1dadf6b
    • Adam Nemet's avatar
      [LAA] Use std::min. NFC · 2c34ab51
      Adam Nemet authored
      llvm-svn: 269356
      2c34ab51
    • Justin Bogner's avatar
      SDAG: Clean up a dangling node in HexagonISelDAGToDAG::SelectImpl · d82025b1
      Justin Bogner authored
      When we convert to the void Select interface, leaving unreferenced
      nodes around won't be allowed anymore.
      
      Part of llvm.org/pr26808.
      
      llvm-svn: 269355
      d82025b1
    • Renato Golin's avatar
      [ARM] Support and tests for transform of LDR rt, = to MOV · 608cb5de
      Renato Golin authored
      This change implements the transformation in processInstruction() for the
      LDR rt, =expression to MOV rt, expression when the expression can be evaluated
      and can fit into the immediate field of the MOV or a MVN.
      
      Across the ARM and Thumb instruction sets there are several cases to consider,
      each with a different range of representatble constants.
      
      In ARM we have:
       * Modified immediate (All ARM architectures)
       * MOVW (v6t2 and above)
      
      In Thumb we have:
       * Modified immediate (v6t2, v7m and v8m.mainline)
       * MOVW (v6t2, v7m, v8.mainline and v8m.baseline)
       * Narrow Thumb MOV that can be used in an IT block (non flag-setting)
      
      If the immediate fits any of the available alternatives then we make the transformation.
      
      Fixes 25722.
      
      Patch by Peter Smith.
      
      llvm-svn: 269354
      608cb5de
    • Renato Golin's avatar
      [ARM] Fixup tests to take into account mov translation. NFC. · d5491ab1
      Renato Golin authored
      Alter instances in the test-suite that use immediates that can be represented
      in the immediate field of a MOV. The reason for doing this is that when the
      LDR rt,=imm transformation to MOV rt, imm the existing tests do not need to
      be modified.
      
      Required by the patch that fixes PR25722.
      
      Patch by Peter Smith.
      
      llvm-svn: 269353
      d5491ab1