Skip to content
  1. Mar 28, 2016
    • Hal Finkel's avatar
      [SROA] Fix typo in comment · 5c83a090
      Hal Finkel authored
      llvm-svn: 264573
      5c83a090
    • Hal Finkel's avatar
      C++11 is required, remove some preprocessor checks for it · 29f5131d
      Hal Finkel authored
      We require C++11 to build, so remove a few remaining preprocessor checks for
      '__cplusplus >= 201103L'. This should always be true.
      
      llvm-svn: 264572
      29f5131d
    • Chuang-Yu Cheng's avatar
      [Power9] Implement new altivec instructions: bcd* series · d5eb774e
      Chuang-Yu Cheng authored
      This patch implements the following altivec instructions:
      
      - Decimal Convert From/to National/Zoned/Signed-QWord:
          bcdcfn. bcdcfz. bcdctn. bcdctz. bcdcfsq. bcdctsq.
      
      - Decimal Copy-Sign/Set-Sign:
          bcdcpsgn. bcdsetsgn.
      
      - Decimal Shift/Unsigned-Shift/Shift-and-Round:
          bcds. bcdus. bcdsr.
      
      - Decimal (Unsigned) Truncate:
          bcdtrunc. bcdutrunc.
      
      Total 13 instructions
      
      Thanks Amehsan's advice! Thanks Kit's great help!
      Reviewers: hal, nemanja, kbarton, tjablin, amehsan
      
      http://reviews.llvm.org/D17838
      
      llvm-svn: 264568
      d5eb774e
    • Chuang-Yu Cheng's avatar
      [Power9] Implement new vsx instructions: insert, extract, test data class,... · 80722719
      Chuang-Yu Cheng authored
      [Power9] Implement new vsx instructions: insert, extract, test data class, min/max, reverse, permute, splat
      
      This change implements the following vsx instructions:
      
      - Scalar Insert/Extract
          xsiexpdp xsiexpqp xsxexpdp xsxsigdp xsxexpqp xsxsigqp
      
      - Vector Insert/Extract
          xviexpdp xviexpsp xvxexpdp xvxexpsp xvxsigdp xvxsigsp
          xxextractuw xxinsertw
      
      - Scalar/Vector Test Data Class
          xststdcdp xststdcsp xststdcqp
          xvtstdcdp xvtstdcsp
      
      - Maximum/Minimum
          xsmaxcdp xsmaxjdp
          xsmincdp xsminjdp
      
      - Vector Byte-Reverse/Permute/Splat
          xxbrd xxbrh xxbrq xxbrw
          xxperm xxpermr
          xxspltib
      
      30 instructions
      
      Thanks Nemanja for invaluable discussion! Thanks Kit's great help!
      Reviewers: hal, nemanja, kbarton, tjablin, amehsan
      
      http://reviews.llvm.org/D16842
      
      llvm-svn: 264567
      80722719
    • Elena Demikhovsky's avatar
      AVX-512: Fixed ICMP instruction selection for i1 operands · 83f0647d
      Elena Demikhovsky authored
      ICMP instruction selection fails on SKX and KNL for i1 operand.
      I use XOR to resolve:
      (A == B) is equivalent to (A xor B) == 0
      
      Differential Revision: http://reviews.llvm.org/D18511
      
      llvm-svn: 264566
      83f0647d
    • Chuang-Yu Cheng's avatar
      [Power9] Implement new vsx instructions: quad-precision move, fp-arithmetic · 56638489
      Chuang-Yu Cheng authored
      This change implements the following vsx instructions:
      
      - quad-precision move
          xscpsgnqp, xsabsqp, xsnegqp, xsnabsqp
      
      - quad-precision fp-arithmetic
          xsaddqp(o) xsdivqp(o) xsmulqp(o) xssqrtqp(o) xssubqp(o)
          xsmaddqp(o) xsmsubqp(o) xsnmaddqp(o) xsnmsubqp(o)
      
      22 instructions
      
      Thanks Nemanja and Kit for careful review and invaluable discussion!
      Reviewers: hal, nemanja, kbarton, tjablin, amehsan
      
      http://reviews.llvm.org/D16110
      
      llvm-svn: 264565
      56638489
    • NAKAMURA Takumi's avatar
      a51d6ea9
    • Vedant Kumar's avatar
      [Coverage] Fix the way we load "<unknown>:func" records · 141ed944
      Vedant Kumar authored
      When emitting coverage mappings for functions with local linkage and an
      unknown filename, we use "<unknown>:func" for the PGO function name. The
      problem is that we don't strip "<unknown>" from the name when loading
      coverage data, like we do for other file names. Fix that and add a test.
      
      llvm-svn: 264559
      141ed944
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Replace dead code with an assertion, NFC · 544e4f97
      Duncan P. N. Exon Smith authored
      The caller of ValueEnumerator::EnumerateOperandType never sends in
      metadata.  Assert that, and remove the unnecessary logic.
      
      llvm-svn: 264558
      544e4f97
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Reuse writeMetadataRecords, NFC · b42fa2e5
      Duncan P. N. Exon Smith authored
      Change writeFunctionMetadata to call writeMetadataRecords.  For now
      there's no functionality change, but makes it easy to serialize other
      types of metadata in the function block in the future.
      
      llvm-svn: 264557
      b42fa2e5
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Rename some functions for consistency, NFC · cffd8cb9
      Duncan P. N. Exon Smith authored
      To match writeMetadataRecords, writeNamedMetadata and
      writeMetadataStrings, change:
      
          WriteModuleMetadata        => writeModuleMetadata
          WriteFunctionLocalMetadata => writeFunctionMetadata
          Write##CLASS               => write##CLASS
      
      The only major change is "FunctionLocal" => "Function".  The point is to
      be less specific, in preparation for emitting normal metadata records
      inside function metadata blocks (currently we only emit
      `LocalAsMetadata` there).
      
      llvm-svn: 264556
      cffd8cb9
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Split out writeMetadataRecords, NFC · 80d153f6
      Duncan P. N. Exon Smith authored
      Besides being a nice cleanup, this is preparation for reusing the code
      in function metadata blocks.
      
      llvm-svn: 264555
      80d153f6
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Restructure WriteFunctionLocalMetadata, NFC · 5465f0ad
      Duncan P. N. Exon Smith authored
      Use an early return to simplify logic.
      
      llvm-svn: 264554
      5465f0ad
    • Duncan P. N. Exon Smith's avatar
      Bitcode: Fix MSVC bot failure from r264549 · 0f571458
      Duncan P. N. Exon Smith authored
      make_unique => llvm::make_unique
      
      llvm-svn: 264553
      0f571458
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Simplify tracking of function-local metadata, NFC · 2766e4d4
      Duncan P. N. Exon Smith authored
      We don't really need a separate vector here; instead, point at a range
      inside the main MDs array.  This matches how r264551 references the
      ranges of strings and non-strings.
      
      llvm-svn: 264552
      2766e4d4
    • Duncan P. N. Exon Smith's avatar
      Reapply ~"Bitcode: Collect all MDString records into a single blob" · 6565a0d4
      Duncan P. N. Exon Smith authored
      Spiritually reapply commit r264409 (reverted in r264410), albeit with a
      bit of a redesign.
      
      Firstly, avoid splitting the big blob into multiple chunks of strings.
      
      r264409 imposed an arbitrary limit to avoid a massive allocation on the
      shared 'Record' SmallVector.  The bug with that commit only reproduced
      when there were more than "chunk-size" strings.  A test for this would
      have been useless long-term, since we're liable to adjust the chunk-size
      in the future.
      
      Thus, eliminate the motivation for chunk-ing by storing the string sizes
      in the blob.  Here's the layout:
      
          vbr6: # of strings
          vbr6: offset-to-blob
          blob:
             [vbr6]: string lengths
             [char]: concatenated strings
      
      Secondly, make the output of llvm-bcanalyzer readable.
      
      I noticed when debugging r264409 that llvm-bcanalyzer was outputting a
      massive blob all in one line.  Past a small number, the strings were
      impossible to split in my head, and the lines were way too long.  This
      version adds support in llvm-bcanalyzer for pretty-printing.
      
          <STRINGS abbrevid=4 op0=3 op1=9/> num-strings = 3 {
            'abc'
            'def'
            'ghi'
          }
      
      From the original commit:
      
      Inspired by Mehdi's similar patch, http://reviews.llvm.org/D18342, this
      should (a) slightly reduce bitcode size, since there is less record
      overhead, and (b) greatly improve reading speed, since blobs are super
      cheap to deserialize.
      
      llvm-svn: 264551
      6565a0d4
    • Duncan P. N. Exon Smith's avatar
      BitcodeWriter: Simplify and test writing blobs, NFC · 376fa260
      Duncan P. N. Exon Smith authored
      Split helper out of EmitRecordWithAbbrevImpl called emitBlob to reduce
      code duplication, and add a few tests for it.
      
      No functionality change intended.
      
      llvm-svn: 264550
      376fa260
    • Duncan P. N. Exon Smith's avatar
      Support: Implement StreamingMemoryObject::getPointer · 456c9968
      Duncan P. N. Exon Smith authored
      The implementation is fairly obvious.  This is preparation for using
      some blobs in bitcode.
      
      For clarity (and perhaps future-proofing?), I moved the call to
      JumpToBit in BitstreamCursor::readRecord ahead of calling
      MemoryObject::getPointer, since JumpToBit can theoretically (a) read
      bytes, which (b) invalidates the blob pointer.
      
      This isn't strictly necessary the two memory objects we have:
      
        - The return of RawMemoryObject::getPointer is valid until the memory
          object is destroyed.
      
        - StreamingMemoryObject::getPointer is valid until the next chunk is
          read from the stream.  Since the JumpToBit call is only going ahead
          to a word boundary, we'll never load another chunk.
      
      However, reordering makes it clear by inspection that the blob returned
      by BitstreamCursor::readRecord will be valid.
      
      I added some tests for StreamingMemoryObject::getPointer and
      BitstreamCursor::readRecord.
      
      llvm-svn: 264549
      456c9968
    • Duncan P. N. Exon Smith's avatar
      Support: Move StreamingMemoryObject{,Test}.cpp, NFC · 6648a081
      Duncan P. N. Exon Smith authored
      Change the filename to indicate this is a test, rename the tests, move
      them into an anonymous namespace, and rename some variables.  All to
      match our usual style before making further changes.
      
      llvm-svn: 264548
      6648a081
    • Duncan P. N. Exon Smith's avatar
      Bitcode: Add SimpleBitstreamCursor::setArtificialByteLimit · 58c7d495
      Duncan P. N. Exon Smith authored
      Allow users of SimpleBitstreamCursor to limit the number of bytes
      available to the cursor.  This is preparation for instantiating a cursor
      that isn't allowed to load more bytes from a StreamingMemoryObject (just
      move around the ones already-loaded).
      
      llvm-svn: 264547
      58c7d495
    • Duncan P. N. Exon Smith's avatar
      Bitcode: Add SimpleBitstreamCursor::getPointerToByte, etc. · d3be62dd
      Duncan P. N. Exon Smith authored
      Add API to SimpleBitstreamCursor to allow users to translate between
      byte addresses and pointers.
      
        - jumpToPointer: move the bit position to a particular pointer.
        - getPointerToByte: get the pointer for a particular byte.
        - getPointerToBit: get the pointer for the byte of the current bit.
        - getCurrentByteNo: convenience function for assertions and tests.
      
      Mainly adds unit tests (getPointerToBit/Byte already has a use), but
      also preparation for eventually using jumpToPointer.
      
      llvm-svn: 264546
      d3be62dd
    • Duncan P. N. Exon Smith's avatar
      Bitcode: Split out SimpleBitstreamCursor · d766d136
      Duncan P. N. Exon Smith authored
      Split out SimpleBitstreamCursor from BitstreamCursor, which is a
      lower-level cursor with no knowledge of bitcode blocks, abbreviations,
      or records.  It just knows how to read bits and navigate the stream.
      
      This is mainly organizational, to separate the API for manipulating raw
      bits from that for bitcode concepts like Record and Block.
      
      llvm-svn: 264545
      d766d136
  2. Mar 27, 2016
    • JF Bastien's avatar
      Revert "isPodLike: more precise" · baf4459b
      JF Bastien authored
      This reverts commit c45f2afac5d6855a4804456a0f718563dc47ada0.
      
      Looks like it may be causing a failure, I'll revert for now.
      
                       from
      lib/CodeGen/AsmPrinter/DwarfDebug.cpp:14:
      /usr/include/c++/4.9.2/bits/stl_pair.h: In instantiation of
                       'std::pair<_T1, _T2>& std::pair<_T1,
                       _T2>::operator=(const std::pair<_T1, _T2>&) [with _T1 =
                       std::unique_ptr<llvm::DwarfTypeUnit>; _T2 = const
                       llvm::DICompositeType*]':
      
      /usr/include/c++/4.9.2/bits/stl_pair.h:160:8: error: use of deleted
      function 'std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp,
      _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp =
      llvm::DwarfTypeUnit; _Dp = std::default_delete<llvm::DwarfTypeUnit>]'
        first = __p.first;
              ^
      
      llvm-svn: 264544
      baf4459b
    • Sanjay Patel's avatar
      workaround for an IR variable named %. · 1768117d
      Sanjay Patel authored
      (which SimplifyCFG can produce...)
      
      llvm-svn: 264543
      1768117d
    • Sanjay Patel's avatar
      add scrubber for excessive leading whitespace · d859271d
      Sanjay Patel authored
      llvm-svn: 264542
      d859271d
    • JF Bastien's avatar
      isPodLike: more precise · 507d696c
      JF Bastien authored
      I tried to use isPodLike in:
        http://reviews.llvm.org/D18483
      
      That failed because !is_class is too strict on platforms which don't yet
      have is_trivially_copyable. This update tries to make isPodLike smarter
      for platforms which don't have is_trivially_copyable, and AFAICT it
      Should Just Work on all of them. I'll revert if the bots disagree with
      me.
      
      I'll also rename isPodLike to isTriviallyCopyable if this all works out,
      since that's what the standard calls it now and one day we'll be rid of
      isPodLike.
      
      llvm-svn: 264541
      507d696c
    • Teresa Johnson's avatar
      Use DAG check to try to appease bot · 569af59b
      Teresa Johnson authored
      Try to appease
      http://bb.pgr.jp/builders/cmake-llvm-x86_64-linux/builds/34772. This was
      the only check that didn't use DAG and it wasn't found.
      
      llvm-svn: 264538
      569af59b
    • Teresa Johnson's avatar
      [ThinLTO] Add optional import message and statistics · d29478f7
      Teresa Johnson authored
      Summary:
      Add a statistic to count the number of imported functions. Also, add a
      new -print-imports option to emit a trace of imported functions, that
      works even for an NDEBUG build.
      
      Note that emitOptimizationRemark does not work for the above printing as
      it expects a Function object and DebugLoc, neither of which we have
      with summary-based importing.
      
      This is part 2 of D18487, the first part was committed separately as
      r264536.
      
      Reviewers: joker.eph
      
      Subscribers: llvm-commits, joker.eph
      
      Differential Revision: http://reviews.llvm.org/D18487
      
      llvm-svn: 264537
      d29478f7
    • Teresa Johnson's avatar
      [ThinLTO] Don't try to import alias unless aliasee can be imported · 9aae395f
      Teresa Johnson authored
      With r264503, aliases are now being added to the GlobalsToImport set
      even when their aliasees can't be imported due to their linkage type.
      While the importing worked correctly (the aliases imported as
      declarations) due to the logic in doImportAsDefinition, there is no
      point to adding them to the GlobalsToImport set.
      
      Additionally, with D18487 it was resulting in incorrectly printing a
      message indicating that the alias was imported.
      
      To avoid this, delay adding aliases to the GlobalsToImport set until
      after the linkage type of the aliasee is checked.
      
      This patch is part of D18487.
      
      llvm-svn: 264536
      9aae395f
    • Hal Finkel's avatar
      [PowerPC] Map max/minnum intrinsics and fmax/fmin to ISD nodes for CTR-based loop legality · 0b37175c
      Hal Finkel authored
      Intrinsic::maxnum and Intrinsic::minnum, along with the associated libc
      function calls (fmax[f], etc.) generally map to function calls after lowering.
      For some vector types with QPX at least, however, we can legally lower these,
      and we don't need to prohibit CTR-based loops on their account.
      
      It turned out, however, that the logic that checked the opcodes associated with
      intrinsics was broken (it would set the Opcode variable, but that variable was
      later checked only if set for some otherwise-external function call.
      
      This fixes the latter problem and adds the FMAX/MINNUM mappings.
      
      llvm-svn: 264532
      0b37175c
    • Michael Kruse's avatar
      [Verifier] Reject PHIs using defs from own block. · ff379b69
      Michael Kruse authored
      Reject the following IR as malformed (assuming that %entry, %next are
      not in a loop):
      
          next:
            %y = phi i32 [ 0, %entry ]
            %x = phi i32 [ %y, %entry ]
      
      Such PHI nodes came up in PR26718. While there was no consensus on
      whether or not this is valid IR, most opinions on that bug and in a
      discussion on the llvm-dev mailing list tended towards a
      "strict interpretation" (term by Joseph Tremoulet) of PHI node uses.
      Also, the language reference explicitly states that "the use of each
      incoming value is deemed to occur on the edge from the corresponding
      predecessor block to the current block" and
      `DominatorTree::dominates(Instruction*, Use&)` uses this definition as
      well.
      
      For the code mentioned in PR15384, clang does not compile to such PHIs
      (anymore?). The test case still hangs when replacing `%tmp6` with `%tmp`
      in revisions before r176366 (where PR15384 has been fixed). The
      occurrence of %tmp6 therefore was probably unintentional. Its value is
      not used except in other PHIs.
      
      Reviewers: majnemer, reames, JosephTremoulet, bkramer, grosser, jdoerfert, kparzysz, sanjoy
      
      Differential Revision: http://reviews.llvm.org/D18443
      
      llvm-svn: 264528
      ff379b69
    • Sanjay Patel's avatar
      796db35f
    • Sanjay Patel's avatar
      minimize test cases · 342f7c7e
      Sanjay Patel authored
      These are tests for store transforms. 
      The loads, adds, and geps were irrelevant.
      
      llvm-svn: 264526
      342f7c7e
  3. Mar 26, 2016
Loading