Skip to content
  1. Jun 09, 2017
    • Craig Topper's avatar
      [LazyValueInfo] Don't run the more complex predicate handling code for EQ and... · 31ce4ec2
      Craig Topper authored
      [LazyValueInfo] Don't run the more complex predicate handling code for EQ and NE in getPredicateResult
      
      Summary:
      Unless I'm mistaken, the special handling for EQ/NE should cover everything and there is no reason to fallthrough to the more complex code. For that matter I'm not sure there's any reason to special case EQ/NE other than avoiding creating temporary ConstantRanges.
      
      This patch moves the complex code into an else so we only do it when we are handling a predicate other than EQ/NE.
      
      Reviewers: anna, reames, resistor, Farhana
      
      Reviewed By: anna
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D34000
      
      llvm-svn: 305086
      31ce4ec2
    • Krzysztof Parzyszek's avatar
      [Hexagon] Fixes and updates to the selection patterns · 7aca2fd8
      Krzysztof Parzyszek authored
      - Add some missing patterns.
      - Use C4_cmplte in branch patterns.
      - Fix signedness of immediate operand in M2_accii.
      
      llvm-svn: 305085
      7aca2fd8
    • Zvi Rackover's avatar
      SelectionDAG: Remove deleted nodes from legalized set to avoid clash with newly created nodes · 3a2c4b48
      Zvi Rackover authored
      Summary:
      During DAG legalization loop in SelectionDAG::Legalize(),
      bookkeeping of the SDNodes that were already legalized is implemented
      with SmallPtrSet (LegalizedNodes). This kind of set stores only pointers
      to objects, not the objects themselves. Unfortunately, if SDNode is
      deleted during legalization for some reason, LegalizedNodes set is not
      informed about this fact. This wouldn’t be so bad, if SelectionDAG wouldn’t reuse
      space deallocated after deletion of unused nodes, for creation of new
      ones. Because of this, new nodes, created during legalization often can
      have pointers identical to ones that have been previously legalized,
      added to the LegalizedNodes set, and deleted afterwards. This in turn
      causes, that newly created nodes, sharing the same pointer as deleted
      old ones, are present in LegalizedNodes *already at the moment of
      creation*, so we never call Legalize on them.
      The fix facilitates the fact, that DAG notifies listeners about each
      modification. I have registered DAGNodeDeletedListener inside
      SelectionDAG::Legalize, with a callback function that removes any
      pointer of any deleted SDNode from the LegalizedNodes set. With this
      modification, LegalizeNodes set does not contain pointers to nodes that
      were deleted, so newly created nodes can always be inserted to it, even
      if they share pointers with old deleted nodes.
      
      Patch by pawel.szczerbuk@intel.com
      
      The issue this patch addresses causes failures in an out-of-tree target,
      and i was not able to create a reproducer for an in-tree target, hence
      there is no test-case.
      
      Reviewers: delena, spatel, RKSimon, hfinkel, davide, qcolombet
      
      Reviewed By: delena
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D33891
      
      llvm-svn: 305084
      3a2c4b48
    • Simon Dardis's avatar
      Reland "[SelectionDAG] Enable target specific vector scalarization of calls and returns" · 212cccb2
      Simon Dardis authored
      By target hookifying getRegisterType, getNumRegisters, getVectorBreakdown,
      backends can request that LLVM to scalarize vector types for calls
      and returns.
      
      The MIPS vector ABI requires that vector arguments and returns are passed in
      integer registers. With SelectionDAG's new hooks, the MIPS backend can now
      handle LLVM-IR with vector types in calls and returns. E.g.
      'call @foo(<4 x i32> %4)'.
      
      Previously these cases would be scalarized for the MIPS O32/N32/N64 ABI for
      calls and returns if vector types were not legal. If vector types were legal,
      a single 128bit vector argument would be assigned to a single 32 bit / 64 bit
      integer register.
      
      By teaching the MIPS backend to inspect the original types, it can now
      implement the MIPS vector ABI which requires a particular method of
      scalarizing vectors.
      
      Previously, the MIPS backend relied on clang to scalarize types such as "call
      @foo(<4 x float> %a) into "call @foo(i32 inreg %1, i32 inreg %2, i32 inreg %3,
      i32 inreg %4)".
      
      This patch enables the MIPS backend to take either form for vector types.
      
      The previous version of this patch had a "conditional move or jump depends on
      uninitialized value".
      
      Reviewers: zoran.jovanovic, jaydeep, vkalintiris, slthakur
      
      Differential Revision: https://reviews.llvm.org/D27845
      
      llvm-svn: 305083
      212cccb2
    • Sanjay Patel's avatar
      [SimplifyLibCalls] fix formatting; NFC · 70db4246
      Sanjay Patel authored
      llvm-svn: 305081
      70db4246
    • Sanjay Patel's avatar
      [ValueTracking] fix typo; NFC · fef83e8f
      Sanjay Patel authored
      llvm-svn: 305080
      fef83e8f
    • David Stuttard's avatar
      [AMDGPU] Fix for issue in alloca to vector promotion pass · 82618baa
      David Stuttard authored
      Summary:
      Alloca promotion pass not dealing with non-canonical input
      
      Added some additional checks so the pass simply backs-off forms it can't deal with (non-canonical)
      
      Also added some test cases in non-canonical form to check that it no longer crashes
      
      Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tpr, t-tye
      
      Differential Revision: https://reviews.llvm.org/D31710
      
      llvm-svn: 305079
      82618baa
    • Javed Absar's avatar
      [ARM] Custom machine-scheduler. NFCI. · 9e1ff865
      Javed Absar authored
      This patch creates a customised machine-scheduler for ARM targets,
      so that subsequently DAG mutations etc can be added.
      Reviewed by: hahn, rengolin, rovka. 
      Differential Revision: https://reviews.llvm.org/D34039
      
      llvm-svn: 305078
      9e1ff865
    • Nirav Dave's avatar
      [MC] Fix compiler crash in AsmParser::Lex · 670109d8
      Nirav Dave authored
      When an empty comment is present in an assembly file, the compiler will crash because it checks the first character for '\n' or '\r'.
      The fix consists of also checking if the string is empty before accessing the *front* method of the StringRef.
      A test is included for the x86 target, but this issue is reproducible with other targets as well.
      
      Patch by Alexandru Guduleasa!
      
      Reviewers: niravd, grosbach, llvm-commits
      
      Reviewed By: niravd
      
      Differential Revision: https://reviews.llvm.org/D33993
      
      llvm-svn: 305077
      670109d8
    • Krzysztof Parzyszek's avatar
      [Hexagon] Add LLVM header to HexagonPatterns.td · 78814155
      Krzysztof Parzyszek authored
      llvm-svn: 305074
      78814155
    • Serge Rogatch's avatar
      [XRay] Fix computation of function size subject to XRay threshold · 85427c0d
      Serge Rogatch authored
      Summary:
      Currently XRay compares its threshold against `Function::size()` . However, `Function::size()` returns the number of basic blocks (as I understand, such as cycle bodies, if/else bodies, switch-case bodies, etc.), rather than the number of instructions.
      
      The name of the parameter `-fxray-instruction-threshold=N`, as well as XRay documentation at http://llvm.org/docs/XRay.html , suggests that instructions should be counted, rather than the number of basic blocks.
      
      I see two options:
      1. Count the number of MachineInstr`s in MachineFunction : this gives better  estimate for the number of assembly instructions on the target. So a user can check in disassembly that the threshold works more or less correctly.
      2. Count the number of Instruction`s in a Function : AFAIK, this gives correct number of IR instructions, which the user can check in IR listing. However, this number may be far (several times for small functions) from the number of assembly instructions finally emitted.
      
      Option 1 is implemented in this patch because I think that having the closer estimate for the number of assembly instructions emitted is more important than to have a clear definition of the metric.
      
      Reviewers: dberris, rengolin
      
      Reviewed By: dberris
      
      Subscribers: llvm-commits, iid_iunknown
      
      Differential Revision: https://reviews.llvm.org/D34027
      
      llvm-svn: 305072
      85427c0d
    • Nirav Dave's avatar
      Prevent RemoveDeadNodes from deleted already deleted node. · 43a4d812
      Nirav Dave authored
      This prevents against assertion errors like PR32659 which occur from a
      replacement deleting a node after it's been added to the list argument
      of RemoveDeadNodes. The specific failure from PR32659 does not
      currently happen, but it is still potentially possible. The underlying
      cause is that the callers of the change dfunction builds up a list of
      nodes to delete after having moved their uses and it possible that a
      move of a later node will cause a previously deleted nodes to be
      deleted.
      
      Reviewers: bkramer, spatel, davide
      
      Reviewed By: spatel
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D33731
      
      llvm-svn: 305070
      43a4d812
    • Oliver Stannard's avatar
      [ARM] Add scheduling info for VFMS · ad097355
      Oliver Stannard authored
      The scalar VFMS instructions did not have scheduling information attached (but
      VFMA did), which was causing assertion failures with the Cortex-A57 scheduling
      model and -fp-contract=fast.
      
      Differential Revision: https://reviews.llvm.org/D34040
      
      llvm-svn: 305064
      ad097355
    • NAKAMURA Takumi's avatar
    • Stefan Maksimovic's avatar
      Test commit: remove whitespace · add20f8f
      Stefan Maksimovic authored
      llvm-svn: 305059
      add20f8f
    • David Blaikie's avatar
      bugpoint: disabling symbolication of bugpoint-executed programs · 4a60d370
      David Blaikie authored
      Initial implementation - needs similar work/testing for other tools
      bugpoint invokes (llc, lli I think, maybe more).
      
      Alternatively (as suggested by chandlerc@) an environment variable could
      be used. This would allow the option to pass transparently through user
      scripts, pass to compilers if they happened to be LLVM-ish, etc.
      
      I worry a bit about using cl::opt in the crash handling code - LLVM
      might crash early, perhaps before the cl::opt is properly initialized?
      Or at least before arguments have been parsed?
      
       - should be OK since it defaults to "pretty", so if the crash is very
       early in opt parsing, etc, then crash reports will still be symbolized.
      
      I shyed away from doing this with an environment variable when I
      realized that would require copying the existing environment and
      appending the env variable of interest. But it seems there's no existing
      LLVM API for accessing the environment (even the Support tests for
      process launching have their own ifdefs for getting the environment). It
      could be added, but seemed like a higher bar/untested codepath to
      actually add environment variables.
      
      Most importantly, this reduces the runtime of test/BugPoint/metadata.ll
      in a split-dwarf Debug build from 1m34s to 6.5s by avoiding a lot of
      symbolication. (this wasn't a problem for non-split-dwarf builds only
      because the executable was too large to map into memory (due to bugpoint
      setting a 400MB memory (including address space - not sure why? Going to
      remove that) limit on the child process) so symbolication would fail
      fast & wouldn't spend all that time parsing DWARF, etc)
      
      Reviewers: chandlerc, dannyb
      
      Differential Revision: https://reviews.llvm.org/D33804
      
      llvm-svn: 305056
      4a60d370
    • Serguei Katkov's avatar
      [IndVars] Add an option to be able to disable LFTR · 38414b57
      Serguei Katkov authored
      This change adds an option disable-lftr to be able to disable Linear Function Test Replace optimization.
      By default option is off so current behavior is not changed.
      
      Reviewers: reames, sanjoy, wmi, andreadb, apilipenko
      Reviewed By: sanjoy
      Subscribers: llvm-commits
      Differential Revision: https://reviews.llvm.org/D33979
      
      llvm-svn: 305055
      38414b57
    • George Burgess IV's avatar
      [LoopVectorize] Don't preserve nsw/nuw flags on shrunken ops. · a20352e1
      George Burgess IV authored
      If we're shrinking a binary operation, it may be the case that the new
      operations wraps where the old didn't. If this happens, the behavior
      should be well-defined. So, we can't always carry wrapping flags with us
      when we shrink operations.
      
      If we do, we get incorrect optimizations in cases like:
      
      void foo(const unsigned char *from, unsigned char *to, int n) {
        for (int i = 0; i < n; i++)
          to[i] = from[i] - 128;
      }
      
      which gets optimized to:
      
      void foo(const unsigned char *from, unsigned char *to, int n) {
        for (int i = 0; i < n; i++)
          to[i] = from[i] | 128;
      }
      
      Because:
      - InstCombine turned `sub i32 %from.i, 128` into
        `add nuw nsw i32 %from.i, 128`.
      - LoopVectorize vectorized the add to be `add nuw nsw <16 x i8>` with a
        vector full of `i8 128`s
      - InstCombine took advantage of the fact that the newly-shrunken add
        "couldn't wrap", and changed the `add` to an `or`.
      
      InstCombine seems happy to figure out whether we can add nuw/nsw on its
      own, so I just decided to drop the flags. There are already a number of
      places in LoopVectorize where we rely on InstCombine to clean up.
      
      llvm-svn: 305053
      a20352e1
    • David Blaikie's avatar
      Inliner: Don't touch indirect calls · cb9327b0
      David Blaikie authored
      Other comments/implications are that this isn't intended behavior (nor
      perserved/reimplemented in the new inliner) & complicates fixing the
      'inlining' of trivially dead calls without consulting the cost function
      first.
      
      llvm-svn: 305052
      cb9327b0
    • Rui Ueyama's avatar
      Fix -Wunused-variable. · 365d4d00
      Rui Ueyama authored
      llvm-svn: 305051
      365d4d00
    • Craig Topper's avatar
      [llvm-pdbdump] Fix -Wpessimizing-move warnings. · 84166788
      Craig Topper authored
      llvm-svn: 305050
      84166788
    • Craig Topper's avatar
      [InstCombine] Pass a proper context instruction to all of the calls into InstSimplify · a4205622
      Craig Topper authored
      Summary: This matches the behavior we already had for compares and makes us consistent everywhere.
      
      Reviewers: dberlin, hfinkel, spatel
      
      Reviewed By: dberlin
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D33604
      
      llvm-svn: 305049
      a4205622
    • Bob Haarman's avatar
      [codeview] use 32-bit integer for RelocOffset in DebugLinesSubsection · fdf499bf
      Bob Haarman authored
      Summary:
      RelocOffset is a 32-bit value, but we previously truncated it to 16 bits.
      
      Fixes PR33335.
      
      Reviewers: zturner, hiraditya!
      
      Reviewed By: zturner
      
      Subscribers: llvm-commits
      
      Differential Revision: https://reviews.llvm.org/D33968
      
      llvm-svn: 305043
      fdf499bf
    • Zachary Turner's avatar
      [pdb] Don't crash on unknown debug subsections. · 28c22c83
      Zachary Turner authored
      More and more unknown debug subsection kinds are being discovered
      so we should make it possible to dump these and display the
      bytes.
      
      llvm-svn: 305041
      28c22c83
    • Saleem Abdulrasool's avatar
      sink DebugCompressionType into MC for exposing to clang · 1f62f57b
      Saleem Abdulrasool authored
      This is a preparatory change to expose the debug compression style to
      clang.  It requires exposing the enumeration and passing the actual
      value through to the backend from the frontend in actual value form
      rather than a boolean that selects the GNU style of debug info
      compression.
      
      Minor tweak to the ELF Object Writer to use a variable for re-used
      values.  Add an assertion that debug information format is one of the
      two currently known types if debug information is being compressed.
      
      llvm-svn: 305038
      1f62f57b
    • Zachary Turner's avatar
      [CodeView] Support remaining debug subsection types · deb39130
      Zachary Turner authored
      This adds support for Symbols, StringTable, and FrameData subsection
      types.  Even though these subsections rarely if ever appear in a PDB
      file (they are usually in object files), there's no theoretical reason
      why they *couldn't* appear in a PDB.  The real issue though is that in
      order to add support for dumping and writing them (which will be useful
      for object files), we need a way to test them.  And since there is no
      support for reading and writing them to / from object files yet, making
      PDB support them is the best way to both add support for the underlying
      format and add support for tests at the same time.  Later, when we go
      to add support for reading / writing them from object files, we'll need
      only minimal changes in the underlying read/write code.
      
      llvm-svn: 305037
      deb39130
    • Zachary Turner's avatar
      Fix build by adding includes. · 4fcdaa94
      Zachary Turner authored
      llvm-svn: 305036
      4fcdaa94
    • Zachary Turner's avatar
      [llvm-pdbdump] Support native ordering of subsections in raw mode. · 1bf77620
      Zachary Turner authored
      This is the same change for the YAML Output style applied to the
      raw output style.  Previously we would queue up all subsections
      until every one had been read, and then output them in a pre-
      determined order.  This was because some subsections need to be
      read first in order to properly dump later subsections.  This
      patch allows them to be dumped in the order they appear.
      
      Differential Revision: https://reviews.llvm.org/D34015
      
      llvm-svn: 305034
      1bf77620
    • Zachary Turner's avatar
      [llvm-pdbdump] Improve consistency among subcommands. · 3eedd161
      Zachary Turner authored
      The pdb2yaml and raw subcommands did something very
      similar but with a different output format, and they
      used a lot of the same command line options, but each
      one re-implemented the command line option with slightly
      different spellings / options.  This patch merges them
      together into a single definition which is shared by
      both subcommands.  This new syntax also allows for more
      flexibility in the way debug subsections are dumped.
      
      Differential Revision: https://reviews.llvm.org/D33996
      
      llvm-svn: 305032
      3eedd161
    • Evgeniy Stepanov's avatar
      [CFI] Remove LinkerSubsectionsViaSymbols. · d02dbf6b
      Evgeniy Stepanov authored
      Since D17854 LinkerSubsectionsViaSymbols is unnecessary.
      
      It is interfering with ThinLTO implementation of CFI-ICall, where
      the aliases used on the !LinkerSubsectionsViaSymbols branch are
      needed to export jump tables to ThinLTO backends.
      
      This is the second attempt to land this change after fixing PR33316.
      
      llvm-svn: 305031
      d02dbf6b
    • Craig Topper's avatar
      [ExtractGV] Fix the doxygen comment on the constructor and the class to refer... · 2aa4d39f
      Craig Topper authored
      [ExtractGV] Fix the doxygen comment on the constructor and the class to refer to global values instead of functions. While there fix an 80 column violation. NFC
      
      llvm-svn: 305030
      2aa4d39f
    • Galina Kistanova's avatar
      Fixed warning: dereferencing type-punned pointer will break strict-aliasing rules. · 415ec926
      Galina Kistanova authored
      No need in reinterpret_cast<StringTableOffset &> here, as struct coff_symbol Name is a unin
      with the member StringTableOffset Offset. This union member could be accessed directly.
      
      llvm-svn: 305029
      415ec926
    • Craig Topper's avatar
      [IR] Remove getNumSuccessorsV/getSuccessorV/setSuccessorV from the... · c1993fa1
      Craig Topper authored
      [IR] Remove getNumSuccessorsV/getSuccessorV/setSuccessorV from the TerminatorInst subclasses as much as possible now that Value has been de-virtualized
      
      These used to be virtual methods that would enable doing the right thing with only a TerminatorInst pointer. I believe they were also acting as vtable anchors in my cases. I think the fact that they had a separate name ending in V was to allow a version without V to be called without a virtual call in a pre-C++11 final keyword world.
      
      Where possible the base methods in TerminatorInst dispatch directly to the public methods in the classes that have the same signature. For some classes this wasn't possible so I've left private method versions that match the name and signature of the version in TerminatorInst. All versions have been moved into the class definitions since we no longer need vtable anchors here.
      
      Differential Revision: https://reviews.llvm.org/D34011
      
      llvm-svn: 305028
      c1993fa1
    • Peter Collingbourne's avatar
      Write summaries for merged modules when splitting modules for ThinLTO. · e357fbd2
      Peter Collingbourne authored
      This is to prepare to allow for dead stripping of globals in the
      merged modules.
      
      Differential Revision: https://reviews.llvm.org/D33921
      
      llvm-svn: 305027
      e357fbd2
    • Kostya Serebryany's avatar
      [sanitizer-coverage] one more flavor of coverage:... · 2c2fb889
      Kostya Serebryany authored
      [sanitizer-coverage] one more flavor of coverage: -fsanitize-coverage=inline-8bit-counters. Experimental so far, not documenting yet. Reapplying revisions 304630, 304631, 304632, 304673, see PR33308 
      
      llvm-svn: 305026
      2c2fb889
    • Peter Collingbourne's avatar
      Object: Move datalayout check into irsymtab::build. NFCI. · dc8c0189
      Peter Collingbourne authored
      This check is a requirement of the irsymtab builder, not of any
      particular caller.
      
      Differential Revision: https://reviews.llvm.org/D33970
      
      llvm-svn: 305023
      dc8c0189
    • Peter Collingbourne's avatar
      Bitcode: Introduce a BitcodeFileContents data type. NFCI. · 8dde4cba
      Peter Collingbourne authored
      This data type includes the contents of a bitcode file.
      Right now a bitcode file can only contain modules, but
      a later change will add a symbol table.
      
      Differential Revision: https://reviews.llvm.org/D33969
      
      llvm-svn: 305019
      8dde4cba
  2. Jun 08, 2017
Loading