1. Feb 28, 2020
    • Jun Ma's avatar
      [Coroutines] CoroElide enhancement · 43c8307c
      Jun Ma authored
      Fix regression of CoreElide pass when current function is
      coroutine.
      
      Differential Revision: https://reviews.llvm.org/D71663
      43c8307c
    • Juneyoung Lee's avatar
      Revert "[SimpleLoopUnswitch] Fix introduction of UB when hoisted condition may be undef or poison" · 2b5a8976
      Juneyoung Lee authored
      .. due to performance regression.
      
      This patch is reverted until infrastructore for CSE/LICM support for freeze is
      added.
      
      This reverts commit 181628b5
      2b5a8976
    • Matthias Kramm's avatar
      [mlir][Tutorial] Fix comment position in SimplifyRedundantTranspose. · da025756
      Matthias Kramm authored
      Summary:
      This is a cosmetic change to make the "bingo" comment be in the
      right place.
      
      Differential Revision: https://reviews.llvm.org/D75264
      da025756
    • Matthias Kramm's avatar
      [mlir] Fix/Clarify parts of MLIR toy tutorial chapter 6+7 · 45d522d6
      Matthias Kramm authored
      Summary:
      * add missing comma.
      * remove "having to register them here" phrasing, since register it
        is what we're doing, which made the comment a bit confusing.
      * remove duplicate code.
      * clarify link to chapter 3, since "folder" doesn't appear in that
        chapter.
      
      Differential Revision: https://reviews.llvm.org/D75263
      45d522d6
    • Matthias Kramm's avatar
      Fix/Clarify parts of MLIR toy tutorial chapter 5 · 240769c8
      Matthias Kramm authored
      Summary:
      * Use bold font (not monospace) for legal/illegal.
      * Say a few words about operation<->dialect precedence.
      * Omit duplicate code samples.
      * Indent items in bullet-point list.
      
      Differential Revision: https://reviews.llvm.org/D75262
      240769c8
    • Matthias Kramm's avatar
      [mlir] Fix/clarify parts of MLIR toy tutorial chaper 4. · d8392f76
      Matthias Kramm authored
      Summary:
      * Let's use "override" when we're just doing standard baseclassing.
        ("Specialization" makes it sound like template specialization, which
         this is not.)
      * CallInterfaces.td has an include guard, so #ifdef not needed anymore.
      * Omit duplicate code in code samples.
      * Clarify which algorithm we're talking about.
      * Mention that the ShapeInference code is code a snippet that belongs to
        algorithm discussed in the paragraph above it.
      * Add missing definition for createShapeInferencePass.
      
      Differential Revision: https://reviews.llvm.org/D75260
      d8392f76
    • Matthias Kramm's avatar
      79c17330
    • Matthias Kramm's avatar
      [mlir] Clarify/Fix parts of MLIR toy tutorial chapter 2 · 9f6617dc
      Matthias Kramm authored
      Summary:
      * clarify what "registering" means.
      * clarify Op dereferencing
      * clarify override/virtual phrasing
      * omit duplication in code samples
      * fix OpAsmPrinter comment
      
      Differential Revision: https://reviews.llvm.org/D75256
      9f6617dc
    • Eli Friedman's avatar
      [IndVars] Fix sort comparator. · b2999264
      Eli Friedman authored
      std::sort will compare an element to itself in some cases.  We should
      not crash if this happens.
      
      Differential Revision: https://reviews.llvm.org/D75000
      b2999264
    • Reid Kleckner's avatar
      b077c251
    • Reid Kleckner's avatar
      [Support] Remove byte swapping from MathExtras.h · e3a9b0f3
      Reid Kleckner authored
      MathExtras.h was just wrapping SwapByteOrder.h functionality, so have
      the callers use it directly.  Use the MathExtras.h name (ByteSwap_NN) as
      the standard naming, since it appears to be the most popular.
      e3a9b0f3
    • Matt Morehouse's avatar
      [DFSan] Add flag to insert event callbacks. · 470db54c
      Matt Morehouse authored
      Summary:
      For now just insert the callback for stores, similar to how MSan tracks
      origins.  In the future we may want to add callbacks for loads, memcpy,
      function calls, CMPs, etc.
      
      Reviewers: pcc, vitalybuka, kcc, eugenis
      
      Reviewed By: vitalybuka, kcc, eugenis
      
      Subscribers: eugenis, hiraditya, #sanitizers, llvm-commits, kcc
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D75312
      470db54c
    • Douglas Yung's avatar
      Change test to use -S so it works when an external assembler is used that is... · b6f605ce
      Douglas Yung authored
      Change test to use -S so it works when an external assembler is used that is not present in the testing environment.
      b6f605ce
    • Matt Morehouse's avatar
      [DFSan] Remove unused IRBuilder. NFC · 2a29617b
      Matt Morehouse authored
      Reviewers: pcc, vitalybuka, kcc
      
      Reviewed By: kcc
      
      Subscribers: hiraditya, llvm-commits, kcc
      
      Tags: #llvm
      
      Differential Revision: https://reviews.llvm.org/D75190
      2a29617b
    • Adrian McCarthy's avatar
      0a311783
    • Artur Pilipenko's avatar
      Fix DSE miscompile when store is clobbered across loop iterations · 02e3d5c3
      Artur Pilipenko authored
      DSE would mistakenly remove store (2):
      
        a = calloc(n+1)
        for (int i = 0; i < n; i++) {
          store 1, a[i+1] // (1)
          store 0, a[i]   // (2)
        }
      
      The fix is to do PHI transaltion while looking for clobbering
      instructions between the store and the calloc.
      
      Reviewed By: efriedma, bjope
      
      Differential Revision: https://reviews.llvm.org/D68006
      02e3d5c3
    • Reid Kleckner's avatar
      Avoid ASTContext.h -> TargetInfo.h dep · 4c2a6567
      Reid Kleckner authored
      This has been done before in 2008: ab138570
      But these things regress easily.
      Move some things out of line.
      
      Saves 316 includes + transitive stuff:
          316 -    ../clang/include/clang/Basic/TargetOptions.h
          316 -    ../clang/include/clang/Basic/TargetInfo.h
          316 -    ../clang/include/clang/Basic/TargetCXXABI.h
          316 -    ../clang/include/clang/Basic/OpenCLOptions.h
          316 -    ../clang/include/clang/Basic/OpenCLExtensions.def
          302 -    ../llvm/include/llvm/Target/TargetOptions.h
          302 -    ../llvm/include/llvm/Support/CodeGen.h
          302 -    ../llvm/include/llvm/MC/MCTargetOptions.h
          302 -    ../llvm/include/llvm/ADT/FloatingPointMode.h
          302 -    ../clang/include/clang/Basic/XRayInstr.h
          302 -    ../clang/include/clang/Basic/DebugInfoOptions.h
          302 -    ../clang/include/clang/Basic/CodeGenOptions.h
          302 -    ../clang/include/clang/Basic/CodeGenOptions.def
          257 -    ../llvm/include/llvm/Support/Regex.h
           79 -    ../llvm/include/llvm/ADT/SmallSet.h
           68 -    MSVCSTL/include/set
           66 -    ../llvm/include/llvm/ADT/SmallPtrSet.h
           62 -    ../llvm/include/llvm/ADT/StringSwitch.h
      4c2a6567
    • Craig Topper's avatar
      [llvm-exegesis] Remove unnecessary deletion of an assignment operator of... · ab369659
      Craig Topper authored
      [llvm-exegesis] Remove unnecessary deletion of an assignment operator of WrappingIterator that angers some versions of MSVC
      
      The deletion of the const WrappingIterator & should already cover this.
      ab369659
    • Reid Kleckner's avatar
      Add some missing header dependencies · 0f6959f3
      Reid Kleckner authored
      Unit tests are not part of `all` O_O, and I tested on Windows with
      -fdelayed-template-parsing.
      0f6959f3
    • Eric Fiselier's avatar
      0b8585ed
    • Vedant Kumar's avatar
      unittest: Convert EXPECT_EQ iterator checks to use EXPECT_TRUE instead · 36789388
      Vedant Kumar authored
      Hopefully fixes compile errors on some bots, like:
      
      http://lab.llvm.org:8011/builders/clang-cmake-x86_64-avx2-linux/builds/13383/steps/ninja%20check%201/logs/stdio
      
      /home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/unittests/ADT/CoalescingBitVectorTest.cpp:452:3:   required from here
      /home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/utils/unittest/googletest/include/gtest/gtest-printers.h:377:56: error: ‘const class llvm::CoalescingBitVector<long unsigned int>::const_iterator’ has no member named ‘begin’
         for (typename C::const_iterator it = container.begin();
                                                              ^
      /home/ssglocal/clang-cmake-x86_64-avx2-linux/clang-cmake-x86_64-avx2-linux/llvm/llvm/utils/unittest/googletest/include/gtest/gtest-printers.h:378:11: error: ‘const class llvm::CoalescingBitVector<long unsigned int>::const_iterator’ has no member named ‘end’
              it != container.end(); ++it, ++count) {
                 ^
      36789388
    • Mitch Phillips's avatar
      Update Sanitizer tests for Android R. · 20f508ef
      Mitch Phillips authored
      Summary:
      Sanitizer tests don't entirely pass on an R device. Fix up all the
      incompatibilities with the new system.
      
      Reviewers: eugenis, pcc
      
      Reviewed By: eugenis
      
      Subscribers: #sanitizers, llvm-commits
      
      Tags: #sanitizers, #llvm
      
      Differential Revision: https://reviews.llvm.org/D75303
      20f508ef
    • Reid Kleckner's avatar
      Avoid SourceManager.h include in RawCommentList.h, add missing incs · 86565c13
      Reid Kleckner authored
      SourceManager.h includes FileManager.h, which is expensive due to
      dependencies on LLVM FS headers.
      
      Remove dead BeforeThanCompare specialization.
      
      Sink ASTContext::addComment to cpp file.
      
      This reduces the time to compile a file that does nothing but include
      ASTContext.h from ~3.4s to ~2.8s for me.
      
      Saves these includes:
          219 -    ../clang/include/clang/Basic/SourceManager.h
          204 -    ../clang/include/clang/Basic/FileSystemOptions.h
          204 -    ../clang/include/clang/Basic/FileManager.h
          165 -    ../llvm/include/llvm/Support/VirtualFileSystem.h
          164 -    ../llvm/include/llvm/Support/SourceMgr.h
          164 -    ../llvm/include/llvm/Support/SMLoc.h
          161 -    ../llvm/include/llvm/Support/Path.h
          141 -    ../llvm/include/llvm/ADT/BitVector.h
          128 -    ../llvm/include/llvm/Support/MemoryBuffer.h
          124 -    ../llvm/include/llvm/Support/FileSystem.h
          124 -    ../llvm/include/llvm/Support/Chrono.h
          124 -    .../MSVCSTL/include/stack
          122 -    ../llvm/include/llvm-c/Types.h
          122 -    ../llvm/include/llvm/Support/NativeFormatting.h
          122 -    ../llvm/include/llvm/Support/FormatProviders.h
          122 -    ../llvm/include/llvm/Support/CBindingWrapping.h
          122 -    .../MSVCSTL/include/xtimec.h
          122 -    .../MSVCSTL/include/ratio
          122 -    .../MSVCSTL/include/chrono
          121 -    ../llvm/include/llvm/Support/FormatVariadicDetails.h
          118 -    ../llvm/include/llvm/Support/MD5.h
          109 -    .../MSVCSTL/include/deque
          105 -    ../llvm/include/llvm/Support/Host.h
          105 -    ../llvm/include/llvm/Support/Endian.h
      
      Reviewed By: aaron.ballman, hans
      
      Differential Revision: https://reviews.llvm.org/D75279
      86565c13
    • Eric Fiselier's avatar
      fdba2e4e
    • Jonas Devlieghere's avatar
    • Vedant Kumar's avatar
      unittest: Disable checks to work around compiler errors · 3156b1cf
      Vedant Kumar authored
      On some bots, using gtest asserts to compare iterators does not compile,
      and I'm not sure why (this certainly compiles with clang). Disable the
      checks for now :/.
      
      ```
      C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\utils\unittest\googletest\include\gtest/gtest-printers.h(377): error C2039: 'begin': is not a member of 'llvm::CoalescingBitVector<unsigned int,16>::const_iterator'
      C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\include\llvm/ADT/CoalescingBitVector.h(243): note: see declaration of 'llvm::CoalescingBitVector<unsigned int,16>::const_iterator'
      C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\utils\unittest\googletest\include\gtest/gtest-printers.h(478): note: see reference to function template instantiation 'void testing::internal::DefaultPrintTo<T>(testing::internal::IsContainer,testing::internal::false_type,const C &,std::ostream *)' being compiled
              with
              [
                  T=T1,
                  C=T1
              ]
      ```
      
      http://lab.llvm.org:8011/builders/llvm-clang-x86_64-win-fast/builds/12006/steps/test-check-llvm-unit/logs/stdio
      http://lab.llvm.org:8011/builders/clang-cmake-x86_64-sde-avx512-linux/builds/34521/steps/ninja%20check%201/logs/stdio
      3156b1cf
    • Stanislav Mekhanoshin's avatar
      [AMDGPU] Enable runtime unroll for LDS · 6b813f27
      Stanislav Mekhanoshin authored
      We want to do unroll for LDS even for runtime trip count
      to combine LDS operations.
      
      Differential Revision: https://reviews.llvm.org/D75293
      6b813f27
    • LLVM GN Syncbot's avatar
      [gn build] Port b0142cd9 · 2301a18c
      LLVM GN Syncbot authored
      2301a18c
    • Vedant Kumar's avatar
      [LiveDebugValues] Encode register location within VarLoc IDs [3/3] · a9937203
      Vedant Kumar authored
      This is part 3 of a 3-part series to address a compile-time explosion
      issue in LiveDebugValues.
      
      ---
      
      Start encoding register locations within VarLoc IDs, and take advantage
      of this encoding to speed up transferRegisterDef.
      
      There is no fundamental algorithmic change: this patch simply swaps out
      SparseBitVector in favor of CoalescingBitVector. That changes iteration
      order (hence the test updates), but otherwise this patch is NFCI.
      
      The only interesting change is in transferRegisterDef. Instead of doing:
      
      ```
      KillSet = {}
      for (ID : OpenRanges.getVarLocs())
        if (DeadRegs.count(ID))
          KillSet.add(ID)
      ```
      
      We now do:
      
      ```
      KillSet = {}
      for (Reg : DeadRegs)
        for (ID : intervalsReservedForReg(Reg, OpenRanges.getVarLocs()))
          KillSet.add(ID)
      ```
      
      By not visiting each open location every time we visit an instruction,
      this eliminates some potentially quadratic behavior. The new
      implementation basically does a constant amount of work per instruction
      because the interval map lookups are very fast.
      
      For a file in WebKit, this brings the time spent in LiveDebugValues down
      from ~2.5 minutes to 4 seconds, reducing compile time spent in that pass
      from 28% of the total to just over 1%.
      
      Before:
      
      ```
      2.49 min   27.8%	0 s	LiveDebugValues::process
      2.41 min   27.0%	5.40 s	LiveDebugValues::transferRegisterDef
      1.51 min   16.9%	1.51 min LiveDebugValues::VarLoc::isDescribedByReg() const
      32.73 s    6.1%		8.70 s	 llvm::SparseBitVector<128u>::SparseBitVectorIterator::operator++()
      ```
      
      After:
      
      ```
      4.53 s	1.1%	0 s	LiveDebugValues::process
      3.00 s	0.7%	107.00 ms		LiveDebugValues::transferRegisterCopy
      892.00 ms	0.2%	406.00 ms	LiveDebugValues::transferSpillOrRestoreInst
      404.00 ms	0.1%	32.00 ms	LiveDebugValues::transferRegisterDef
      110.00 ms	0.0%	2.00 ms		  LiveDebugValues::getUsedRegs
      57.00 ms	0.0%	1.00 ms		  std::__1::vector<>::push_back
      40.00 ms	0.0%	1.00 ms		  llvm::CoalescingBitVector<>::find(unsigned long long)
      ```
      
      FWIW, I tried the same approach using SparseBitVector, but got bad
      results. To do that, I had to extend SparseBitVector to support 64-bit
      indices and expose its lower bound operation. The problem with this is
      that the performance is very hard to predict: SparseBitVector's lower
      bound operation falls back to O(n) linear scans in a std::list if you're
      not /very/ careful about managing iteration order. When I profiled this
      the performance looked worse than the baseline.
      
      You can see the full CoalescingBitVector-based implementation here:
      
        https://github.com/vedantk/llvm-project/commits/try-coalescing
      
      You can see the full SparseBitVector-based implementation here:
      
        https://github.com/vedantk/llvm-project/commits/try-sparsebitvec-find
      
      Depends on D74984 and D74985.
      
      Differential Revision: https://reviews.llvm.org/D74986
      a9937203
    • Vedant Kumar's avatar
      [LiveDebugValues] Encode a location in VarLoc IDs, NFC [2/3] · 210c4853
      Vedant Kumar authored
      This is part 2 of a 3-part series to address a compile-time explosion
      issue in LiveDebugValues.
      
      ---
      
      Each VarLoc has a unique ID: this ID is used to look up a VarLoc in the
      VarLocMap, and to virtually insert a VarLoc into a VarLocSet. Instead of
      inserting the VarLoc /itself/ into the VarLocSet, we insert just the ID,
      because this can be represented efficiently with a SparseBitVector.
      
      This change introduces LocIndex, a layer of abstraction on top of VarLoc
      IDs. Prior to this change, an ID was just an index into a vector. With
      this change, an ID encodes both an index /and/ a register location. The
      type-checker ensures that conversions to and from LocIndex are correct.
      
      For the moment the register location is always 0 (undef). We have plenty
      of bits left over to encode physregs, stack slots, and other locations
      in the future.
      
      Differential Revision: https://reviews.llvm.org/D74985
      210c4853
    • Vedant Kumar's avatar
      [ADT] Add CoalescingBitVector, implemented using IntervalMap [1/3] · b0142cd9
      Vedant Kumar authored
      Add CoalescingBitVector to ADT. This is part 1 of a 3-part series to
      address a compile-time explosion issue in LiveDebugValues.
      
      ---
      
      CoalescingBitVector is a bitvector that, under the hood, relies on an
      IntervalMap to coalesce elements into intervals.
      
      CoalescingBitVector efficiently represents sets which predominantly
      contain contiguous ranges (e.g.  the VarLocSets in LiveDebugValues,
      which are very long sequences that look like {1, 2, 3, ...}). OTOH,
      CoalescingBitVector isn't good at representing sets with lots of gaps
      between elements. The first N coalesced intervals of set bits are stored
      in-place (in the initial heap allocation).
      
      Compared to SparseBitVector, CoalescingBitVector offers more predictable
      performance for non-sequential find() operations. This provides a
      crucial speedup in LiveDebugValues.
      
      Differential Revision: https://reviews.llvm.org/D74984
      b0142cd9
    • Eric Fiselier's avatar
      [libc++] Rework docker files for buildbots. · 1d8fad44
      Eric Fiselier authored
      I've been sitting on this change for a while and have been using
      it to build the bot images, so it should be upstream.
      
      This re-configures the docker build files to use docker-compose
      more heavily. This allows for composing large images with multiple
      compilers without invalidating the docker caches.
      
      After this commit I'll quickly switch all the current buildbots
      over to a new docker image, followed by another update to add new
      compilers
      1d8fad44
    • Sanjay Patel's avatar
      [x86] use instruction-level fast-math-flags to drive MachineCombiner · 90fd859f
      Sanjay Patel authored
      The code changes here are hopefully straightforward:
      
      1. Use MachineInstruction flags to decide if FP ops can be reassociated
         (use both "reassoc" and "nsz" to be consistent with IR transforms;
         we probably don't need "nsz", but that's a safer interpretation of
         the FMF).
      2. Check that both nodes allow reassociation to change instructions.
         This is a stronger requirement than we've usually implemented in
         IR/DAG, but this is needed to solve the motivating bug (see below),
         and it seems unlikely to impede optimization at this late stage.
      3. Intersect/propagate MachineIR flags to enable further reassociation
         in MachineCombiner.
      
      We managed to make MachineCombiner flexible enough that no changes are
      needed to that pass itself. So this patch should only affect x86
      (assuming no other targets have implemented the hooks using MachineIR
      flags yet).
      
      The motivating example in PR43609 is another case of fast-math transforms
      interacting badly with special FP ops created during lowering:
      https://bugs.llvm.org/show_bug.cgi?id=43609
      The special fadd ops used for converting int to FP assume that they will
      not be altered, so those are created without FMF.
      
      However, the MachineCombiner pass was being enabled for FP ops using the
      global/function-level TargetOption for "UnsafeFPMath". We managed to run
      instruction/node-level FMF all the way down to MachineIR sometime in the
      last 1-2 years though, so we can do better now.
      
      The test diffs require some explanation:
      
      1. llvm/test/CodeGen/X86/fmf-flags.ll - no target option for unsafe math was
         specified here, so MachineCombiner kicks in where it did not previously;
         to make it behave consistently, we need to specify a CPU schedule model,
         so use the default model, and there are no code diffs.
      2. llvm/test/CodeGen/X86/machine-combiner.ll - replace the target option for
         unsafe math with the equivalent IR-level flags, and there are no code diffs;
         we can't remove the NaN/nsz options because those are still used to drive
         x86 fmin/fmax codegen (special SDAG opcodes).
      3. llvm/test/CodeGen/X86/pow.ll - similar to #1
      4. llvm/test/CodeGen/X86/sqrt-fastmath.ll - similar to #1, but MachineCombiner
         does some reassociation of the estimate sequence ops; presumably these are
         perf wins based on latency/throughput (and we get some reduction of move
         instructions too); I'm not sure how it affects numerical accuracy, but the
         test reflects reality better now because we would expect MachineCombiner to
         be enabled if the IR was generated via something like "-ffast-math" with clang.
      5. llvm/test/CodeGen/X86/vec_int_to_fp.ll - this is the test added to model PR43609;
         the fadds are not reassociated now, so we should get the expected results.
      6. llvm/test/CodeGen/X86/vector-reduce-fadd-fast.ll - similar to #1
      7. llvm/test/CodeGen/X86/vector-reduce-fmul-fast.ll - similar to #1
      
      Differential Revision: https://reviews.llvm.org/D74851
      90fd859f
    • Sanjay Patel's avatar
      2f090ce8
    • Sanjay Patel's avatar
      84e6fd81
    • Paolo Severini's avatar
      [LLDB] Fix AddressSanitizer failure in MemoryCache · 256e6169
      Paolo Severini authored
      The lldb sanitizer bot is flagging a container-overflow error after we
      introduced test TestWasm.py. MemoryCache::Read didn't behave correctly
      in case of partial reads that can happen with object files whose size is
      smaller that the cache size. It should return the actual number of bytes
      read and not try to fill the buffer with random memory.
      Module::GetMemoryObjectFile needs to be modified accordingly, to resize
      its buffer to only the size that was read.
      
      Differential Revision: https://reviews.llvm.org/D75200
      256e6169
    • Nicolas Vasilache's avatar
      [mlir] NFC - Split out RunnerUtils that don't require a C++ runtime · 4a966e5d
      Nicolas Vasilache authored
      Summary:
      This revision split out a new CRunnerUtils library that supports
      MLIR execution on targets without a C++ runtime.
      
      Differential Revision: https://reviews.llvm.org/D75257
      4a966e5d
    • Stephan Herhut's avatar
      [MLIR][Loops] Expose transformations on loop.parallel in header (NFC). · 9227a74b
      Stephan Herhut authored
      Summary:
      This change does not add any functionality but merely exposes existing
      static functions to make the associated transformations available
      outside of their testing passes.
      
      Differential Revision: https://reviews.llvm.org/D75232
      9227a74b
    • Stephen Neuendorffer's avatar
      [MLIR] add show-dialects option for mlir-opt · 01b20967
      Stephen Neuendorffer authored
      Display the list of dialects known to mlir-opt.  This is useful
      for ensuring that linkage has happened correctly, for instance.
      
      Differential Revision: https://reviews.llvm.org/D74865
      01b20967
    • Joe Turner's avatar
      [clang-tidy] Store all ranges in clang::tooling::Diagnostic · b26c88e3
      Joe Turner authored
      Summary: Instead of dropping all the ranges associated with a Diagnostic when
      converting them to a ClangTidy error, instead attach them to the ClangTidyError,
      so they can be consumed by other APIs.
      
      Patch by Joe Turner <joturner@google.com>.
      Differential Revision: https://reviews.llvm.org/D69782
      b26c88e3