Skip to content
  1. Sep 01, 2016
    • Michael Kuperstein's avatar
      Rename some variables to have meaningful names. NFC. · b4743597
      Michael Kuperstein authored
      llvm-svn: 280391
      b4743597
    • Matthew Simpson's avatar
      [LV] Move VectorParts allocation and mapping into PHI widening (NFC) · 922af076
      Matthew Simpson authored
      This patch moves the allocation of VectorParts for PHI nodes into the actual
      PHI widening code. Previously, we allocated these VectorParts in
      vectorizeBlockInLoop, and passed them by reference to widenPHIInstruction. Upon
      returning, we would then map the VectorParts in VectorLoopValueMap. This
      behavior is problematic for the cases where we only want to generate a scalar
      version of a PHI node. For example, if in the future we only generate a scalar
      version of an induction variable, we would end up inserting an empty vector
      entry into the map once we return to vectorizeBlockInLoop. We now no longer
      need to pass VectorParts to the various PHI widening functions, and we can keep
      VectorParts allocation as close as possible to the point at which they are
      actually mapped in VectorLoopValueMap.
      
      llvm-svn: 280390
      922af076
    • Zachary Turner's avatar
      5c7c2307
    • Michael Kuperstein's avatar
      [DAGCombine] Don't fold a trunc if it feeds an anyext · 65bc3c89
      Michael Kuperstein authored
      Legalization tends to create anyext(trunc) patterns. This should always be
      combined - into either a single trunc, a single ext, or nothing if the
      types match exactly. But if we happen to combine the trunc first, we may pull
      the trunc away from the anyext or make it implicit (e.g. the truncate(extract)
      -> extract(bitcast) fold).
      
      To prevent this, we can avoid doing the fold, similarly to how we already handle
      fpround(fpextend).
      
      Differential Revision: https://reviews.llvm.org/D23893
      
      llvm-svn: 280386
      65bc3c89
    • Changpeng Fang's avatar
      AMDGPU/SI: MIMG TD Refactoring. · b28fe030
      Changpeng Fang authored
      Summary:
       Created a new td file MIMGInstructions.td which contains all definitions
      of MIMG related instructions.
      
      Reviewed by:
        kzhuravl, vpykhtin
      
      Differential Revision:
        http://reviews.llvm.org/D24106
      
      llvm-svn: 280385
      b28fe030
    • Reid Kleckner's avatar
      [lit] Use multiprocessing by default on Windows · f309bfc5
      Reid Kleckner authored
      Apparently nobody evaluated multiprocessing on Windows since Daniel
      enabled multiprocessing on Unix in r193279. It works so far as I can
      tell.
      
      Today this is worth about an 8x speedup (631.29s to 73.25s) on my 24
      core Windows machine. Hopefully this will improve Windows buildbot cycle
      time, where currently it takes more time to run check-all than it does
      to self-host with assertions enabled:
      http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/20
        build stage 2 ninja all ( 28 mins, 22 secs )
        ninja check 2 stage 2   ( 37 mins, 38 secs )
      
      llvm-svn: 280382
      f309bfc5
    • Chris Bieneman's avatar
      [CMake] Revive LLVM_*_DIRS variables · be765196
      Chris Bieneman authored
      This is a partial revert of r280013. Brad King pointed out these variable names are matching CMake conventions, so we should preserve them.
      
      I've also added a direct mapping of the LLVM_*_DIR variables which we need to make projects support building in and out of tree.
      
      llvm-svn: 280380
      be765196
    • Geoff Berry's avatar
      [EarlyCSE] Change C API pass interface for EarlyCSE w/ MemorySSA · fcb186ca
      Geoff Berry authored
      Previous change broke the C API for creating an EarlyCSE pass w/
      MemorySSA by adding a bool parameter to control whether MemorySSA was
      used or not.  This broke the OCaml bindings.  Instead, change the old C
      API entry point back and add a new one to request an EarlyCSE pass with
      MemorySSA.
      
      llvm-svn: 280379
      fcb186ca
    • Simon Dardis's avatar
      [mips] Include missed file from previous commit · 1fa1fb0f
      Simon Dardis authored
      llvm-svn: 280377
      1fa1fb0f
    • Simon Pilgrim's avatar
      [X86][SSE] Dropped (V)CVTPD2PS intrinsic patterns now that its bound to X86vfpround · ce0e9f0b
      Simon Pilgrim authored
      It now uses X86vfpround patterns directly instead.
      
      Followup to D23797
      
      llvm-svn: 280376
      ce0e9f0b
    • Simon Dardis's avatar
      [mips] interAptiv based generic schedule model · bd271547
      Simon Dardis authored
      This scheduler describes a processor which covers all MIPS ISAs based
      around the interAptiv and P5600 timings.
      
      Reviewers: vkalintiris, dsanders
      
      Differential Revision: https://reviews.llvm.org/D23551
      
      llvm-svn: 280374
      bd271547
    • Andrey Bokhanko's avatar
      [CMake] Fix LLVM_ENABLE_EH and LLVM_ENABLE_RTTI on MSVC · b7201cce
      Andrey Bokhanko authored
      Patch by Johannes Sebastian Mueller-Roemer.
      
      Differential Revision: https://reviews.llvm.org/D23645
      
      llvm-svn: 280371
      b7201cce
    • Sanjay Patel's avatar
      [InstCombine] remove fold of an icmp pattern that should never happen · dd861964
      Sanjay Patel authored
      While removing a scalar shackle from an icmp fold, I noticed that I couldn't find any tests to trigger
      this code path.
      
      The 'and' shrinking transform should be handled by InstCombiner::foldCastedBitwiseLogic()
      or eliminated with InstSimplify. The icmp narrowing is part of InstCombiner::foldICmpWithCastAndCast().
      
      Differential Revision: https://reviews.llvm.org/D24031 
      
      llvm-svn: 280370
      dd861964
    • Krzysztof Parzyszek's avatar
      [Hexagon] Deal with undefs when extending live intervals · 07d9f53b
      Krzysztof Parzyszek authored
      Reapply r280275, since MSVC accepts r280358.
      
      llvm-svn: 280369
      07d9f53b
    • Elena Demikhovsky's avatar
      Optimized FMA intrinsic + FNEG , like · 4d7738df
      Elena Demikhovsky authored
      -(a*b+c)
      
      and FNEG + FMA, like
      a*b-c or (-a)*b+c.
      
      The bug description is here :  https://llvm.org/bugs/show_bug.cgi?id=28892
      
      Differential revision: https://reviews.llvm.org/D23313
      
      llvm-svn: 280368
      4d7738df
    • James Molloy's avatar
      [SimplifyCFG] Handle tail-sinking of more than 2 incoming branches · 88cad7e5
      James Molloy authored
      This was a real restriction in the original version of SinkIfThenCodeToEnd. Now it's been rewritten, the restriction can be lifted.
      
      As part of this, we handle a very common and useful case where one of the incoming branches is actually conditional. Consider:
      
         if (a)
           x(1);
         else if (b)
           x(2);
      
      This produces the following CFG:
      
               [if]
              /    \
            [x(1)] [if]
              |     | \
              |     |  \
              |  [x(2)] |
               \    |  /
                [ end ]
      
      [end] has two unconditional predecessor arcs and one conditional. The conditional refers to the implicit empty 'else' arc. This same pattern can also be caused by an empty default block in a switch.
      
      We can't sink the call to x() down to end because no call to x() happens on the third incoming arc (assume that x() has sideeffects for the sake of argument; if something is safe to speculate we could indeed sink nevertheless but this cannot happen in the general case and causes many extra selects).
      
      We are now able to detect this case and split off the unconditional arcs to a common successor:
      
               [if]
              /    \
            [x(1)] [if]
              |     | \
              |     |  \
              |  [x(2)] |
               \   /    |
           [sink.split] |
                 \     /
                 [ end ]
      
      Now we can sink the call to x() into %sink.split. This can cause significant code simplification in many testcases.
      
      llvm-svn: 280364
      88cad7e5
    • Krzysztof Parzyszek's avatar
      Add an optional parameter with a list of undefs to extendToIndices · 4f863d75
      Krzysztof Parzyszek authored
      Reapply r280268, hopefully in a version that MSVC likes.
      
      llvm-svn: 280358
      4f863d75
    • Honggyu Kim's avatar
      [IR] Properly handle escape characters in Attribute::getAsString() · 9eb6a102
      Honggyu Kim authored
      If an attribute name has special characters such as '\01', it is not
      properly printed in LLVM assembly language format.  Since the format
      expects the special characters are printed as it is, it has to contain
      escape characters to make it printable.
      
      Before:
        attributes #0 = { ... "counting-function"="^A__gnu_mcount_nc" ...
      
      After:
        attributes #0 = { ... "counting-function"="\01__gnu_mcount_nc" ...
      
      Reviewers: hfinkel, rengolin, rjmccall, compnerd
      
      Subscribers: nemanjai, mcrosier, hans, shenhan, majnemer, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D23792
      
      llvm-svn: 280357
      9eb6a102
    • James Molloy's avatar
      [SimplifyCFG] Change the algorithm in SinkThenElseCodeToEnd · eec6df31
      James Molloy authored
      r279460 rewrote this function to be able to handle more than two incoming edges and took pains to ensure this didn't regress anything.
      
      This time we change the logic for determining if an instruction should be sunk. Previously we used a single pass greedy algorithm - sink instructions until one requires more than one PHI node or we run out of instructions to sink.
      
      This had the problem that sinking instructions that had non-identical but trivially the same operands needed extra logic so we sunk them aggressively. For example:
      
          %a = load i32* %b          %d = load i32* %b
          %c = gep i32* %a, i32 0    %e = gep i32* %d, i32 1
      
      Sinking %c and %e would naively require two PHI merges as %a != %d. But the loads are obviously equivalent (and maybe can't be hoisted because there is no common predecessor).
      
      This is why we implemented the fairly complex function areValuesTriviallySame(), to look through trivial differences like this. However it's just not clever enough.
      
      Instead, throw areValuesTriviallySame away, use pointer equality to check equivalence of operands and switch to a two-stage algorithm.
      
      In the "scan" stage, we look at every sinkable instruction in isolation from end of block to front. If it's sinkable, we keep track of all operands that required PHI merging.
      
      In the "sink" stage, we iteratively sink the last non-terminator in the source blocks. But when calculating how many PHIs are actually required to be inserted (to work out if we should stop or not) we remove any values that have already been sunk from the set of PHI-merges required, which allows us to be more aggressive.
      
      This turns an algorithm with potentially recursive lookahead (looking through GEPs, casts, loads and any other instruction potentially not CSE'd) to two linear scans.
      
      llvm-svn: 280351
      eec6df31
    • Hal Finkel's avatar
      Add ISD::EH_DWARF_CFA, simplify @llvm.eh.dwarf.cfa on Mips, fix on PowerPC · 5081ac27
      Hal Finkel authored
      LLVM has an @llvm.eh.dwarf.cfa intrinsic, used to lower the GCC-compatible
      __builtin_dwarf_cfa() builtin. As pointed out in PR26761, this is currently
      broken on PowerPC (and likely on ARM as well). Currently, @llvm.eh.dwarf.cfa is
      lowered using:
      
        ADD(FRAMEADDR, FRAME_TO_ARGS_OFFSET)
      
      where FRAME_TO_ARGS_OFFSET defaults to the constant zero. On x86,
      FRAME_TO_ARGS_OFFSET is lowered to 2*SlotSize. This setup, however, does not
      work for PowerPC. Because of the way that the stack layout works, the canonical
      frame address is not exactly (FRAMEADDR + FRAME_TO_ARGS_OFFSET) on PowerPC
      (there is a lower save-area offset as well), so it is not just a matter of
      implementing FRAME_TO_ARGS_OFFSET for PowerPC (unless we redefine its
      semantics -- We can do that, since it is currently used only for
      @llvm.eh.dwarf.cfa lowering, but the better to directly lower the CFA construct
      itself (since it can be easily represented as a fixed-offset FrameIndex)). Mips
      currently does this, but by using a custom lowering for ADD that specifically
      recognizes the (FRAMEADDR, FRAME_TO_ARGS_OFFSET) pattern.
      
      This change introduces a ISD::EH_DWARF_CFA node, which by default expands using
      the existing logic, but can be directly lowered by the target. Mips is updated
      to use this method (which simplifies its implementation, and I suspect makes it
      more robust), and updates PowerPC to do the same.
      
      Fixes PR26761.
      
      Differential Revision: https://reviews.llvm.org/D24038
      
      llvm-svn: 280350
      5081ac27
    • Valery Pykhtin's avatar
      [AMDGPU] Scalar Memory instructions TD refactoring · 1b13886b
      Valery Pykhtin authored
      Differential revision: https://reviews.llvm.org/D23996
      
      llvm-svn: 280349
      1b13886b
    • Hal Finkel's avatar
      Add a counter-function insertion pass · 40d7f5c2
      Hal Finkel authored
      As discussed in https://reviews.llvm.org/D22666, our current mechanism to
      support -pg profiling, where we insert calls to mcount(), or some similar
      function, is fundamentally broken. We insert these calls in the frontend, which
      means they get duplicated when inlining, and so the accumulated execution
      counts for the inlined-into functions are wrong.
      
      Because we don't want the presence of these functions to affect optimizaton,
      they should be inserted in the backend. Here's a pass which would do just that.
      The knowledge of the name of the counting function lives in the frontend, so
      we're passing it here as a function attribute. Clang will be updated to use
      this mechanism.
      
      Differential Revision: https://reviews.llvm.org/D22825
      
      llvm-svn: 280347
      40d7f5c2
    • Chandler Carruth's avatar
      [Support] Fix a warning introduced in r280339 due to the member · 1ab16f8c
      Chandler Carruth authored
      initializers not being in the same order as the members.
      
      Specifically, 'preg' is the first member followed by 'error', so they
      will be initialized in that order and should be written in the member
      initializer list in that order.
      
      For the constructor in question, there is no change in behavior.
      
      llvm-svn: 280345
      1ab16f8c
    • James Molloy's avatar
      [SimplifyCFG] Fix nondeterministic iteration order · 21744689
      James Molloy authored
      We iterate over the result from SafeToMergeTerminators, so make it a SmallSetVector instead of a SmallPtrSet.
      
      Should fix stage3 convergence builds.
      
      llvm-svn: 280342
      21744689
    • George Rimar's avatar
      Commit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments... · e34257f2
      George Rimar authored
      Commit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments constructor for llvm::Regex"
      
      llvm-svn: 280340
      e34257f2
    • George Rimar's avatar
      [LLVM/Support] - Create no-arguments constructor for llvm::Regex · a9ff072f
      George Rimar authored
      This is useful when need to defer the construction,
      e.g. using Regex as a member of class.
      
      Differential revision: https://reviews.llvm.org/D24101
      
      llvm-svn: 280339
      a9ff072f
    • James Molloy's avatar
      [SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases · e6566422
      James Molloy authored
      A very important case is not handled here: multiple arcs to a single block with a PHI. Consider:
      
          a:
            %1 = icmp %b, 1
            br %1, label %c, label %e
          c:
            %2 = icmp %b, 2
            br %2, label %d, label %e
          d:
            br %e
          e:
            phi [0, %a], [1, %c], [2, %d]
      
      FoldValueComparisonIntoPredecessors will refuse to fold this, as it doesn't know how to deal with two arcs to a common destination with different PHI values. The answer is obvious - just split all conflicting arcs.
      
      llvm-svn: 280338
      e6566422
    • Dean Michael Berris's avatar
      [NFC] Remove unnecessary comment · 6d6addbe
      Dean Michael Berris authored
      llvm-svn: 280336
      6d6addbe
    • Dean Michael Berris's avatar
      [XRay] Detect and emit sleds for sibling/tail calls · e8ae5baa
      Dean Michael Berris authored
      Summary:
      This change promotes the 'isTailCall(...)' member function to
      TargetInstrInfo as a query interface for determining on a per-target
      basis whether a given MachineInstr is a tail call instruction. We build
      upon this in the XRay instrumentation pass to emit special sleds for
      tail call optimisations, where we emit the correct kind of sled.
      
      The tail call sleds look like a mix between the function entry and
      function exit sleds. Form-wise, the sled comes before the "jmp"
      instruction that implements the tail call similar to how we do it for
      the function entry sled. Functionally, because we know this is a tail
      call, it behaves much like an exit sled -- i.e. at runtime we may use
      the exit trampolines instead of a different kind of trampoline.
      
      A follow-up change to recognise these sleds will be done in compiler-rt,
      so that we can start intercepting these initially as exits, but also
      have the option to have different log entries to more accurately reflect
      that this is actually a tail call.
      
      Reviewers: echristo, rSerge, majnemer
      
      Subscribers: mehdi_amini, dberris, llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D23986
      
      llvm-svn: 280334
      e8ae5baa
    • Kostya Serebryany's avatar
      [libFuzzer] add -minimize_crash flag (to minimize crashers). also add two... · e2d0f636
      Kostya Serebryany authored
      [libFuzzer] add -minimize_crash flag (to minimize crashers). also add two tests that I failed to commit last time
      
      llvm-svn: 280332
      e2d0f636
    • Dean Michael Berris's avatar
      [XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo. · 40e6ba16
      Dean Michael Berris authored
      This change is broken out from D23986, where XRay detects tail call
      exits.
      
      llvm-svn: 280331
      40e6ba16
    • Heejin Ahn's avatar
      Revert "Add asm.js-style setjmp/longjmp handling for wasm" · 10a70867
      Heejin Ahn authored
      This reverts commit r280302, it broke the integration tests.
      
      llvm-svn: 280329
      10a70867
    • Justin Bogner's avatar
      Support: Avoid errors with LLVM_FALLTHROUGH in clang 3.6 and below in C mode · f1382fc7
      Justin Bogner authored
      Older versions of clang defined __has_cpp_attribute in C mode, but
      would choke on scoped attributes, as per llvm.org/PR23435. Since we
      support building with clang all the way back to 3.1, we have to work
      around this issue.
      
      llvm-svn: 280326
      f1382fc7
    • Nick Lewycky's avatar
      8dd4dad0
    • Zachary Turner's avatar
      [codeview] Have visitTypeBegin return the record type. · 77807637
      Zachary Turner authored
      Previously we were assuming that any visitation of types would
      necessarily be against a type we had binary data for.  Reasonable
      assumption when were just reading PDBs and dumping them, but once
      we start writing PDBs from Yaml this breaks down, because we have
      no binary data yet, only Yaml, and from that we need to read the
      record kind and perform the switch based on that.
      
      So this patch does that.  Instead of having the visitor switch
      on the kind that is already in the CVType record, we change the
      visitTypeBegin() method to return the Kind, and switch on the
      returned value.  This way, the default implementation can still
      return the value from the CVType, but the implementation which
      visits Yaml records and serializes binary PDB type records can
      use the field in the Yaml as the source of the switch.
      
      llvm-svn: 280307
      77807637
    • Nick Lewycky's avatar
      Add -fprofile-dir= to clang. · 97e49ac5
      Nick Lewycky authored
      -fprofile-dir=path allows the user to specify where .gcda files should be
      emitted when the program is run. In particular, this is the first flag that
      causes the .gcno and .o files to have different paths, LLVM is extended to
      support this. -fprofile-dir= does not change the file name in the .gcno (and
      thus where lcov looks for the source) but it does change the name in the .gcda
      (and thus where the runtime library writes the .gcda file). It's different from
      a GCOV_PREFIX because a user can observe that the GCOV_PREFIX_STRIP will strip
      paths off of -fprofile-dir= but not off of a supplied GCOV_PREFIX.
      
      To implement this we split -coverage-file into -coverage-data-file and
      -coverage-notes-file to specify the two different names. The !llvm.gcov
      metadata node grows from a 2-element form {string coverage-file, node dbg.cu}
      to 3-elements, {string coverage-notes-file, string coverage-data-file, node
      dbg.cu}. In the 3-element form, the file name is already "mangled" with
      .gcno/.gcda suffixes, while the 2-element form left that to the middle end
      pass.
      
      llvm-svn: 280306
      97e49ac5
    • Reid Kleckner's avatar
      34151b30
    • NAKAMURA Takumi's avatar
      [CMake] Increase stack size to 16MiB for all mingw executables. · 96a6c49b
      NAKAMURA Takumi authored
      llvm-svn: 280303
      96a6c49b
    • Heejin Ahn's avatar
      Add asm.js-style setjmp/longjmp handling for wasm · 23d57103
      Heejin Ahn authored
      Summary: This patch adds asm.js-style setjmp/longjmp handling support for WebAssembly. It also uses JavaScript's try and catch mechanism.
      
      Reviewers: jpp, dschuff
      
      Subscribers: jfb, dschuff
      
      Differential Revision: https://reviews.llvm.org/D23928
      
      llvm-svn: 280302
      23d57103
    • Reid Kleckner's avatar
      Revert "Add an optional parameter with a list of undefs to extendToIndices" · 109448ee
      Reid Kleckner authored
      This reverts commit r280268, it causes all MSVC 2013 to ICE. This
      appears to have been fixed in a later MSVC 2013 update, because I cannot
      reproduce it locally. That said, all upstream LLVM bots are broken right
      now, so I am reverting.
      
      Also reverts dependent change r280275, "[Hexagon] Deal with undefs when
      extending live intervals".
      
      llvm-svn: 280301
      109448ee
Loading