platform/upstream/llvm.git
4 years ago[clangd] Get rid of lexer usage in ObjCLocalizeStringLiteral tweak
Kadir Cetinkaya [Thu, 27 Feb 2020 09:35:14 +0000 (10:35 +0100)]
[clangd] Get rid of lexer usage in ObjCLocalizeStringLiteral tweak

Reviewers: hokein

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D75230

4 years ago[clangd] Use tokenize instead of raw lexer in SourceCode/lex
Kadir Cetinkaya [Thu, 27 Feb 2020 14:10:54 +0000 (15:10 +0100)]
[clangd] Use tokenize instead of raw lexer in SourceCode/lex

Reviewers: hokein, sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D75249

4 years ago[DebugInfo] Fix parsing DWARF64 units in DWP.
Igor Kudrin [Wed, 26 Feb 2020 15:02:33 +0000 (22:02 +0700)]
[DebugInfo] Fix parsing DWARF64 units in DWP.

The integrity check code allowed only DWARF32 units.

Differential Revision: https://reviews.llvm.org/D75178

4 years ago[DebugInfo] Avoid crashing when parsing an invalid unit header in DWP.
Igor Kudrin [Wed, 26 Feb 2020 14:23:43 +0000 (21:23 +0700)]
[DebugInfo] Avoid crashing when parsing an invalid unit header in DWP.

The integrity checks for index entries in DWARFUnitHeader::extract()
might cause the function to return before checking the state of an
Error object, which leads to a crash in runtime. The patch fixes the
issue by moving the checks in a safe place.

Differential Revision: https://reviews.llvm.org/D75177

4 years ago[DataExtractor] Improve error message when we run off the end of the buffer
Pavel Labath [Thu, 27 Feb 2020 15:22:12 +0000 (16:22 +0100)]
[DataExtractor] Improve error message when we run off the end of the buffer

Summary: Include the offset at which this happened.

Reviewers: dblaikie, jhenderson

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D75265

4 years agobuild: process the libxml2 library path for embedding
Saleem Abdulrasool [Fri, 28 Feb 2020 03:23:57 +0000 (19:23 -0800)]
build: process the libxml2 library path for embedding

Process the path for libxml2 before embedding that into the command line
that is generated in `llvm-config`.  Each element in the path is being
given a `-l` unconditionally which should not be the case for absolute
paths.  Since the library path may be absolute or not, just apply some
CMake pre-processing when generating the path.

Before:
```
/usr/lib/x86_64-linux-gnu/libz.so -lrt -ldl -ltinfo -lpthread -lm /usr/lib/x86_64-linux-gnu/libxml2.so
```

After:
```
/usr/lib/x86_64-linux-gnu/libz.so -lrt -ldl -ltinfo -lpthread -lm -lxml2
```

Resolves PR44179!

4 years ago[X86] Add FMA commuting test case for D75016
Craig Topper [Sun, 23 Feb 2020 08:21:34 +0000 (00:21 -0800)]
[X86] Add FMA commuting test case for D75016

This test case shows extra moves due to not fully considering all
commuting opportunities.

4 years ago[Coroutines] CoroElide enhancement
Jun Ma [Fri, 28 Feb 2020 02:12:11 +0000 (10:12 +0800)]
[Coroutines] CoroElide enhancement

Fix regression of CoreElide pass when current function is
coroutine.

Differential Revision: https://reviews.llvm.org/D71663

4 years agoRevert "[SimpleLoopUnswitch] Fix introduction of UB when hoisted condition may be...
Juneyoung Lee [Fri, 28 Feb 2020 02:08:14 +0000 (11:08 +0900)]
Revert "[SimpleLoopUnswitch] Fix introduction of UB when hoisted condition may be undef or poison"

.. due to performance regression.

This patch is reverted until infrastructore for CSE/LICM support for freeze is
added.

This reverts commit 181628b

4 years ago[mlir][Tutorial] Fix comment position in SimplifyRedundantTranspose.
Matthias Kramm [Fri, 28 Feb 2020 01:54:22 +0000 (17:54 -0800)]
[mlir][Tutorial] Fix comment position in SimplifyRedundantTranspose.

Summary:
This is a cosmetic change to make the "bingo" comment be in the
right place.

Differential Revision: https://reviews.llvm.org/D75264

4 years ago[mlir] Fix/Clarify parts of MLIR toy tutorial chapter 6+7
Matthias Kramm [Fri, 28 Feb 2020 01:53:03 +0000 (17:53 -0800)]
[mlir] Fix/Clarify parts of MLIR toy tutorial chapter 6+7

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

4 years agoFix/Clarify parts of MLIR toy tutorial chapter 5
Matthias Kramm [Fri, 28 Feb 2020 01:52:24 +0000 (17:52 -0800)]
Fix/Clarify parts of MLIR toy tutorial chapter 5

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

4 years ago[mlir] Fix/clarify parts of MLIR toy tutorial chaper 4.
Matthias Kramm [Fri, 28 Feb 2020 01:51:34 +0000 (17:51 -0800)]
[mlir] Fix/clarify parts of MLIR toy tutorial chaper 4.

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

4 years ago[mlir] Fix comma+typo in MLIR toy tutorial chapter 3.
Matthias Kramm [Fri, 28 Feb 2020 01:50:41 +0000 (17:50 -0800)]
[mlir] Fix comma+typo in MLIR toy tutorial chapter 3.

Differential Revision: https://reviews.llvm.org/D75258

4 years ago[mlir] Clarify/Fix parts of MLIR toy tutorial chapter 2
Matthias Kramm [Fri, 28 Feb 2020 01:49:31 +0000 (17:49 -0800)]
[mlir] Clarify/Fix parts of MLIR toy tutorial chapter 2

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

4 years ago[IndVars] Fix sort comparator.
Eli Friedman [Sat, 22 Feb 2020 00:00:04 +0000 (16:00 -0800)]
[IndVars] Fix sort comparator.

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

4 years agoAdd missing cstdint include not found on Windows
Reid Kleckner [Fri, 28 Feb 2020 01:24:50 +0000 (17:24 -0800)]
Add missing cstdint include not found on Windows

4 years ago[Support] Remove byte swapping from MathExtras.h
Reid Kleckner [Fri, 28 Feb 2020 01:06:48 +0000 (17:06 -0800)]
[Support] Remove byte swapping from MathExtras.h

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.

4 years ago[DFSan] Add flag to insert event callbacks.
Matt Morehouse [Fri, 28 Feb 2020 01:13:59 +0000 (17:13 -0800)]
[DFSan] Add flag to insert event callbacks.

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

4 years agoChange test to use -S so it works when an external assembler is used that is not...
Douglas Yung [Fri, 28 Feb 2020 00:51:57 +0000 (16:51 -0800)]
Change test to use -S so it works when an external assembler is used that is not present in the testing environment.

4 years ago[DFSan] Remove unused IRBuilder. NFC
Matt Morehouse [Fri, 28 Feb 2020 00:26:21 +0000 (16:26 -0800)]
[DFSan] Remove unused IRBuilder. NFC

Reviewers: pcc, vitalybuka, kcc

Reviewed By: kcc

Subscribers: hiraditya, llvm-commits, kcc

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D75190

4 years agoNeed /bigobj to build SourceCodeTest.cpp with MSVC.
Adrian McCarthy [Thu, 27 Feb 2020 22:33:24 +0000 (14:33 -0800)]
Need /bigobj to build SourceCodeTest.cpp with MSVC.

4 years agoFix DSE miscompile when store is clobbered across loop iterations
Artur Pilipenko [Fri, 21 Feb 2020 22:40:22 +0000 (14:40 -0800)]
Fix DSE miscompile when store is clobbered across loop iterations

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

4 years agoAvoid ASTContext.h -> TargetInfo.h dep
Reid Kleckner [Thu, 27 Feb 2020 22:16:47 +0000 (14:16 -0800)]
Avoid ASTContext.h -> TargetInfo.h dep

This has been done before in 2008: ab13857072
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

4 years ago[llvm-exegesis] Remove unnecessary deletion of an assignment operator of WrappingIter...
Craig Topper [Thu, 27 Feb 2020 22:15:03 +0000 (14:15 -0800)]
[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.

4 years agoAdd some missing header dependencies
Reid Kleckner [Thu, 27 Feb 2020 22:32:10 +0000 (14:32 -0800)]
Add some missing header dependencies

Unit tests are not part of `all` O_O, and I tested on Windows with
-fdelayed-template-parsing.

4 years ago[libc++] Update compiler images and more docker cleanup.
Eric Fiselier [Thu, 27 Feb 2020 22:22:16 +0000 (17:22 -0500)]
[libc++] Update compiler images and more docker cleanup.

4 years agounittest: Convert EXPECT_EQ iterator checks to use EXPECT_TRUE instead
Vedant Kumar [Thu, 27 Feb 2020 22:19:42 +0000 (14:19 -0800)]
unittest: Convert EXPECT_EQ iterator checks to use EXPECT_TRUE instead

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) {
           ^

4 years agoUpdate Sanitizer tests for Android R.
Mitch Phillips [Thu, 27 Feb 2020 22:15:09 +0000 (14:15 -0800)]
Update Sanitizer tests for Android R.

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

4 years agoAvoid SourceManager.h include in RawCommentList.h, add missing incs
Reid Kleckner [Thu, 27 Feb 2020 19:01:58 +0000 (11:01 -0800)]
Avoid SourceManager.h include in RawCommentList.h, add missing incs

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

4 years ago[libc++] Update lld version on buildbots to be LLVM-11.
Eric Fiselier [Thu, 27 Feb 2020 21:27:32 +0000 (16:27 -0500)]
[libc++] Update lld version on buildbots to be LLVM-11.

4 years ago[lldb/CMake] Use PYTHON_HOME as a hint to find Python 3.
Jonas Devlieghere [Thu, 27 Feb 2020 21:17:19 +0000 (13:17 -0800)]
[lldb/CMake] Use PYTHON_HOME as a hint to find Python 3.

http://lists.llvm.org/pipermail/lldb-dev/2020-February/015998.html

Differential revision: https://reviews.llvm.org/D75275

4 years agounittest: Disable checks to work around compiler errors
Vedant Kumar [Thu, 27 Feb 2020 21:02:42 +0000 (13:02 -0800)]
unittest: Disable checks to work around compiler errors

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

4 years ago[AMDGPU] Enable runtime unroll for LDS
Stanislav Mekhanoshin [Thu, 27 Feb 2020 20:36:40 +0000 (12:36 -0800)]
[AMDGPU] Enable runtime unroll for LDS

We want to do unroll for LDS even for runtime trip count
to combine LDS operations.

Differential Revision: https://reviews.llvm.org/D75293

4 years ago[gn build] Port b0142cd9867
LLVM GN Syncbot [Thu, 27 Feb 2020 20:40:16 +0000 (20:40 +0000)]
[gn build] Port b0142cd9867

4 years ago[LiveDebugValues] Encode register location within VarLoc IDs [3/3]
Vedant Kumar [Fri, 21 Feb 2020 02:23:01 +0000 (18:23 -0800)]
[LiveDebugValues] Encode register location within VarLoc IDs [3/3]

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

4 years ago[LiveDebugValues] Encode a location in VarLoc IDs, NFC [2/3]
Vedant Kumar [Thu, 20 Feb 2020 17:40:27 +0000 (09:40 -0800)]
[LiveDebugValues] Encode a location in VarLoc IDs, NFC [2/3]

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

4 years ago[ADT] Add CoalescingBitVector, implemented using IntervalMap [1/3]
Vedant Kumar [Tue, 18 Feb 2020 13:41:55 +0000 (05:41 -0800)]
[ADT] Add CoalescingBitVector, implemented using IntervalMap [1/3]

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

4 years ago[libc++] Rework docker files for buildbots.
Eric Fiselier [Thu, 27 Feb 2020 20:16:30 +0000 (15:16 -0500)]
[libc++] Rework docker files for buildbots.

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

4 years ago[x86] use instruction-level fast-math-flags to drive MachineCombiner
Sanjay Patel [Thu, 27 Feb 2020 20:19:37 +0000 (15:19 -0500)]
[x86] use instruction-level fast-math-flags to drive MachineCombiner

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

4 years ago[AArch64] add splat shuffle combine test; NFC
Sanjay Patel [Thu, 27 Feb 2020 18:57:06 +0000 (13:57 -0500)]
[AArch64] add splat shuffle combine test; NFC

4 years ago[AArch64] regenerate complete test checks; NFC
Sanjay Patel [Thu, 27 Feb 2020 18:54:02 +0000 (13:54 -0500)]
[AArch64] regenerate complete test checks; NFC

4 years ago[LLDB] Fix AddressSanitizer failure in MemoryCache
Paolo Severini [Thu, 27 Feb 2020 19:17:10 +0000 (11:17 -0800)]
[LLDB] Fix AddressSanitizer failure in MemoryCache

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

4 years ago[mlir] NFC - Split out RunnerUtils that don't require a C++ runtime
Nicolas Vasilache [Thu, 27 Feb 2020 18:45:43 +0000 (13:45 -0500)]
[mlir] NFC - Split out RunnerUtils that don't require a C++ runtime

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

4 years ago[MLIR][Loops] Expose transformations on loop.parallel in header (NFC).
Stephan Herhut [Thu, 27 Feb 2020 09:48:02 +0000 (10:48 +0100)]
[MLIR][Loops] Expose transformations on loop.parallel in header (NFC).

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

4 years ago[MLIR] add show-dialects option for mlir-opt
Stephen Neuendorffer [Tue, 18 Feb 2020 22:56:45 +0000 (14:56 -0800)]
[MLIR] add show-dialects option for mlir-opt

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

4 years ago[clang-tidy] Store all ranges in clang::tooling::Diagnostic
Joe Turner [Tue, 25 Feb 2020 13:56:57 +0000 (14:56 +0100)]
[clang-tidy] Store all ranges in clang::tooling::Diagnostic

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

4 years ago[XCOFF] Don't emit non-external labels in the symbol table and handle MCSA_LGlobal
David Tenty [Thu, 27 Feb 2020 15:43:27 +0000 (10:43 -0500)]
[XCOFF] Don't emit non-external labels in the symbol table and handle MCSA_LGlobal

Summary:
We need to handle the  MCSA_LGlobal case in emitSymbolAttribute for functions marked internal in the IR so that the
appropriate storage class is emitted on the function descriptor csect.  As part of this we need to make sure that external
labels are not emitted into the symbol table, so we don't emit the descriptor label in the object writing path.

Reviewers: jasonliu, DiggerLin, hubert.reinterpretcast

Reviewed By: jasonliu

Subscribers: Xiangling_L, wuzish, nemanjai, hiraditya, jsji, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D74968

4 years ago[libc++] Mark more try_lock tests as possibly flaky.
Eric Fiselier [Wed, 26 Feb 2020 22:25:03 +0000 (17:25 -0500)]
[libc++] Mark more try_lock tests as possibly flaky.

These tests check that an operations happens within a specified
deadline, which causes flaky failures on slow machines or machines
under heavy load.

By adding the // FLAKY_TEST. tag it allows the test suite to
retry or ignore the tests

4 years agoForward declare FileEntry and DirectoryEntry in Module.h
Reid Kleckner [Thu, 27 Feb 2020 00:29:37 +0000 (16:29 -0800)]
Forward declare FileEntry and DirectoryEntry in Module.h

FileManager.h is an expensive header (~350ms for me in isolation), so
try to do without it.

Notably, we need to avoid checking the alignment of FileEntry, which
happens for DenseMap<FileEntry*> and PointerUnion<FileEntry*>. I
adjusted the code to avoid PointerUnion, and moved the DenseMap
insertion to the .cpp file.

Globally, this only saved about ~17 includes of the related headers
because SourceManager.h still includes FileManager.h, and it is more
popular than Module.h.

4 years agoForward declare special case lists
Reid Kleckner [Thu, 27 Feb 2020 01:24:52 +0000 (17:24 -0800)]
Forward declare special case lists

This avoids pulling in unordered_map from TrigramIndex.h:

$ diff -u thedeps-before.txt thedeps-after.txt | \
        grep '^[-+] ' | sort | uniq -c | sort -nr
    976 -    ../llvm/include/llvm/Support/TrigramIndex.h
    976 -    ../llvm/include/llvm/Support/SpecialCaseList.h
    976 -    ../clang/include/clang/Basic/SanitizerSpecialCaseList.h
    502 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/unordered_map
    467 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/xhash
    467 -    ../../../PROGRA~2/MIB055~1/2019/PROFES~1/VC/Tools/MSVC/14.24.28314/include/xbit_ops.h
    212 -    ../llvm/include/llvm/ADT/StringSet.h

4 years ago[AMDGPU] improve fragile test for divergent branches
Sameer Sahasrabuddhe [Thu, 27 Feb 2020 10:29:25 +0000 (15:59 +0530)]
[AMDGPU] improve fragile test for divergent branches

Summary:
The affected LIT test intends to test the correct use of divergence
analysis to detect a divergent branch with a uniform predicate. The
passes involved are LLVM IR passes, but the test runs llc and tries to
match against generated ISA, which makes it hard to demonstrate that
the intended behavior was really tested. Replaced this with a test
that invokes opt on the required passes and then checks for the
appropriate changes in the LLVM IR.

Reviewed By: arsenm

Differential Revision: https://reviews.llvm.org/D75267

4 years ago[mlir] Hotfix - Rename MLIRRuntimeUtils to mlir_runtime_utils
Nicolas Vasilache [Thu, 27 Feb 2020 17:58:41 +0000 (12:58 -0500)]
[mlir] Hotfix - Rename MLIRRuntimeUtils to mlir_runtime_utils

4 years ago[InstCombine] DCE instructions earlier
Nikita Popov [Thu, 20 Feb 2020 21:42:42 +0000 (22:42 +0100)]
[InstCombine] DCE instructions earlier

When InstCombine initially populates the worklist, it already
performs constant folding and DCE. However, as the instructions
are initially visited in program order, this DCE can pick up only
the last instruction of a dead chain, the rest would only get
picked up in the main InstCombine run.

To avoid this, we instead perform the DCE in separate pass over the
collected instructions in reverse order, which will allow us to
pick up full dead instruction chains. We already need to do this
reverse iteration anyway to populate the worklist, so this
shouldn't add extra cost.

This by itself only fixes a small part of the problem though:
The same basic issue also applies during the main InstCombine loop.
We generally always want DCE to occur as early as possible,
because it will allow one-use folds to happen. Address this by also
performing DCE while adding deferred instructions to the main worklist.

This drops the number of tests that perform more than 2 InstCombine
iterations from ~80 to ~40. There's some spurious test changes due
to operand order / icmp toggling.

Differential Revision: https://reviews.llvm.org/D75008

4 years agoAdd an attribute registry so plugins can add attributes
John Brawn [Fri, 7 Feb 2020 14:21:13 +0000 (14:21 +0000)]
Add an attribute registry so plugins can add attributes

When constructing a ParsedAttr the ParsedAttrInfo gets looked up in the
AttrInfoMap, which is auto-generated using tablegen. If that lookup fails then
we look through the ParsedAttrInfos that plugins have added to the registry and
check if any has a spelling that matches.

Differential Revision: https://reviews.llvm.org/D31338

4 years agoRemove BinaryOperator::CreateFNeg
Simon Moll [Thu, 27 Feb 2020 17:05:54 +0000 (09:05 -0800)]
Remove BinaryOperator::CreateFNeg

Use UnaryOperator::CreateFNeg instead.

Summary:
With the introduction of the native fneg instruction, the
fsub -0.0, %x idiom is obsolete. This patch makes LLVM
emit fneg instead of the idiom in all places.

Reviewed By: cameron.mcinally

Differential Revision: https://reviews.llvm.org/D75130

4 years agoRevert "[SYCL] Driver option to select SYCL version"
Alexey Bader [Thu, 27 Feb 2020 13:23:54 +0000 (16:23 +0300)]
Revert "[SYCL] Driver option to select SYCL version"

This reverts commit bd97704eaaaab5a95ecb048ce343c1a4be5d94e5.

It broke tests on mac: http://45.33.8.238/mac/9011/step_7.txt

4 years ago[Transforms][Debugify] Ignore PHI nodes when checking for DebugLocs
Pierre-vh [Thu, 27 Feb 2020 12:32:51 +0000 (12:32 +0000)]
[Transforms][Debugify] Ignore PHI nodes when checking for DebugLocs

Fix for: https://bugs.llvm.org/show_bug.cgi?id=37964

Differential Revision: https://reviews.llvm.org/D75242

4 years ago[WebAssembly] Mangle the argc/argv `main` as `__wasm_argc_argv`.
Dan Gohman [Mon, 25 Nov 2019 17:50:58 +0000 (09:50 -0800)]
[WebAssembly] Mangle the argc/argv `main` as `__wasm_argc_argv`.

WebAssembly enforces a rule that caller and callee signatures must
match. This means that the traditional technique of passing `main`
`argc` and `argv` even when it doesn't need them doesn't work.

Currently the backend renames `main` to `__original_main`, however this
doesn't interact well with LTO'ing libc, and the name isn't intuitive.
This patch allows us to transition to `__main_argc_argv` instead.

This implements the proposal in
https://github.com/WebAssembly/tool-conventions/pull/134
with a flag to disable it when targeting Emscripten, though this is
expected to be temporary, as discussed in the proposal comments.

Differential Revision: https://reviews.llvm.org/D70700

4 years ago[WebAssembly] Teach lld how to demangle "__main_argc_argv".
Dan Gohman [Thu, 27 Feb 2020 15:51:37 +0000 (07:51 -0800)]
[WebAssembly] Teach lld how to demangle "__main_argc_argv".

WebAssembly requires that caller and callee signatures match, so it
can't do the usual trick of passing more arguments to main than it
expects. Instead WebAssembly will mangle "main" with argc/argv
parameters as "__main_argc_argv". This patch teaches lld how to
demangle it.

This patch is part of https://reviews.llvm.org/D70700.

4 years ago[WebAssembly] Add an `isWasm` target triple predicate.
Dan Gohman [Thu, 27 Feb 2020 15:49:56 +0000 (07:49 -0800)]
[WebAssembly] Add an `isWasm` target triple predicate.

This simplies code which needs to apply the same logic to both wasm32
and wasm64.

This patch is part of https://reviews.llvm.org/D70700.

4 years ago[InstCombine] Add PR14365 test cases + vector equivalents.
Simon Pilgrim [Thu, 27 Feb 2020 15:53:22 +0000 (15:53 +0000)]
[InstCombine] Add PR14365 test cases + vector equivalents.

4 years ago[CostModel][X86] Improve extract/insert element costs (PR43605)
Simon Pilgrim [Thu, 27 Feb 2020 15:36:13 +0000 (15:36 +0000)]
[CostModel][X86] Improve extract/insert element costs (PR43605)

This tries to improve the accuracy of extract/insert element costs by accounting for subvector extraction/insertion for >128-bit vectors and the shuffling of elements to/from the 0'th index.

It also adds INSERTPS for f32 types and PINSR/PEXTR costs for integer types (at the moment we assume the same cost as MOVD/MOVQ - which isn't always true).

Differential Revision: https://reviews.llvm.org/D74976

4 years agoRevert "[ARM] Add CPSR as an implicit use of t2IT"
Sam Parker [Thu, 27 Feb 2020 15:36:53 +0000 (15:36 +0000)]
Revert "[ARM] Add CPSR as an implicit use of t2IT"

This reverts commit e58229fded0407f3e4f77cd87bedcd4d35bb7c89.

Differential Revision: https://reviews.llvm.org/D75186

4 years ago[Debuginfo][NFC] Unify error reporting routines inside DebugInfoDWARF.
Alexey Lapshin [Thu, 27 Feb 2020 14:53:00 +0000 (17:53 +0300)]
[Debuginfo][NFC] Unify error reporting routines inside DebugInfoDWARF.

Summary:
Error reporting in DebugInfoDWARF library currently done in three ways :

1. Direct calls to WithColor::error()/WithColor::warning()
2. ErrorPolicy defaultErrorHandler(Error E);
3. void dumpWarning(Error Warning);

additionally, other locations could have more variations:

lld/ELF/SyntheticSection.cpp
    if (Error e = cu->tryExtractDIEsIfNeeded(false)) {
      error(toString(sec) + ": " + toString(std::move(e)));

DebugInfo/DWARF/DWARFUnit.cpp
  if (Error e = tryExtractDIEsIfNeeded(CUDieOnly))
    WithColor::error() << toString(std::move(e));

Thus error reporting could look inconsistent. To have a consistent error
messages it is necessary to have a possibility to redefine error
reporting functions. This patch creates two handlers and allows to
redefine them. It also patches all places inside DebugInfoDWARF
to use these handlers.

The intention is always to use following handlers for error reporting
purposes inside DebugInfoDWARF:

DebugInfo/DWARF/DWARFContext.h

std::function<void(Error E)> RecoverableErrorHandler = WithColor::defaultErrorHandler;
std::function<void(Error E)> WarningHandler = WithColor::defaultWarningHandler;

This is last patch from series of patches: D74481, D74635, D75118.

Reviewers: jhenderson, dblaikie, probinson, aprantl, JDevlieghere

Reviewed By: jhenderson

Subscribers: grimar, hiraditya, llvm-commits

Tags: #llvm, #debug-info

Differential Revision: https://reviews.llvm.org/D74308

4 years ago[DA] Delinearization of fixed-size multi-dimensional arrays
Bardia Mahjour [Wed, 26 Feb 2020 17:51:58 +0000 (12:51 -0500)]
[DA] Delinearization of fixed-size multi-dimensional arrays

Summary:
Currently the dependence analysis in LLVM is unable to compute accurate
dependence vectors for multi-dimensional fixed size arrays.
This is mainly because the delinearization algorithm in scalar evolution
relies on parametric terms to be present in the access functions. In the
case of fixed size arrays such parametric terms are not present, but we
can use the indexes from GEP instructions to recover the subscripts for
each dimension of the arrays. This patch adds this ability under the
existing option `-da-disable-delinearization-checks`.

Authored By: bmahjour

Reviewer: Meinersbur, sebpop, fhahn, dmgreen, grosser, etiotto, bollu

Reviewed By: Meinersbur

Subscribers: hiraditya, arphaman, Whitney, ppc-slack, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D72178

4 years ago[SYCL] Driver option to select SYCL version
Ruyman [Fri, 26 Jul 2019 15:21:01 +0000 (16:21 +0100)]
[SYCL] Driver option to select SYCL version

Summary:
User can select the version of SYCL the compiler will
use via the flag -sycl-std, similar to -cl-std.

The flag defines the LangOpts.SYCLVersion option to the
version of SYCL. The default value is undefined.
If driver is building SYCL code, flag is set to the default SYCL
version (1.2.1)

The preprocessor uses this variable to define CL_SYCL_LANGUAGE_VERSION macro,
which should be defined according to SYCL 1.2.1 standard.

Only valid value at this point for the flag is 1.2.1.

Co-Authored-By: David Wood <Q0KPU0H1YOEPHRY1R2SN5B5RL@david.davidtw.co>
Signed-off-by: Ruyman Reyes <ruyman@codeplay.com>
Subscribers: ebevhan, Anastasia, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D72857

Signed-off-by: Alexey Bader <alexey.bader@intel.com>
4 years ago[Hexagon] Do not use init_arrays by default
Krzysztof Parzyszek [Thu, 27 Feb 2020 15:04:56 +0000 (09:04 -0600)]
[Hexagon] Do not use init_arrays by default

4 years ago[mlir] NFC - Move runner utils from mlir-cpu-runner to ExecutionEngine
Nicolas Vasilache [Thu, 27 Feb 2020 14:51:15 +0000 (09:51 -0500)]
[mlir] NFC - Move runner utils from mlir-cpu-runner to ExecutionEngine

Runner utils are useful beyond just CPU and hiding them within the test directory
makes it unnecessarily harder to reuse in other projects.

4 years agoRevert "Devirtualize a call on alloca without waiting for post inline cleanup and...
Kirill Bobyrev [Thu, 27 Feb 2020 14:58:39 +0000 (15:58 +0100)]
Revert "Devirtualize a call on alloca without waiting for post inline cleanup and next"

This reverts commit 59fb9cde7a4a96fe8485a80d9010e4420ffdca82.

The patch caused internal miscompilations.

4 years ago[AMDGPU][ConstantFolding] Fold llvm.amdgcn.fract intrinsic
Jay Foad [Wed, 26 Feb 2020 15:16:57 +0000 (15:16 +0000)]
[AMDGPU][ConstantFolding] Fold llvm.amdgcn.fract intrinsic

Reviewers: nhaehnle, arsenm, rampitec

Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, hiraditya, kerbowa, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D75179

4 years agoFix cppcheck definition/declaration arg mismatch warnings. NFCI.
Simon Pilgrim [Thu, 27 Feb 2020 14:34:37 +0000 (14:34 +0000)]
Fix cppcheck definition/declaration arg mismatch warnings. NFCI.

4 years ago[X86] Use Subtarget.useSoftFloat() in X86TargetLowering constructor
Simon Pilgrim [Thu, 27 Feb 2020 14:27:16 +0000 (14:27 +0000)]
[X86] Use Subtarget.useSoftFloat() in X86TargetLowering constructor

Avoid use of X86TargetLowering::useSoftFloat() in the constructor as its a virtual function

4 years agoAdding some documentation for __builtin_dump_struct.
Aaron Ballman [Thu, 27 Feb 2020 14:29:40 +0000 (09:29 -0500)]
Adding some documentation for __builtin_dump_struct.

4 years agoAdd GPU lowerings for the different log ops.
Adrian Kuegel [Thu, 27 Feb 2020 12:03:05 +0000 (13:03 +0100)]
Add GPU lowerings for the different log ops.

Summary: This adds GPU lowerings for log, log10 and log2.

Reviewers: mravishankar, herhut

Subscribers: jholewinski, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, nicolasvasilache, csigg, arpith-jacob, mgester, lucyrfox, liufengdb, Joonsoo, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D75239

4 years agoFix shadow variable warning. NFC.
Simon Pilgrim [Thu, 27 Feb 2020 14:23:05 +0000 (14:23 +0000)]
Fix shadow variable warning. NFC.

4 years agoFix shadow variable warnings. NFC.
Simon Pilgrim [Thu, 27 Feb 2020 14:20:30 +0000 (14:20 +0000)]
Fix shadow variable warnings. NFC.

4 years ago[X86] LowerMSCATTER/MGATHER - reduce scope of MaskVT. NFCI.
Simon Pilgrim [Thu, 27 Feb 2020 14:02:20 +0000 (14:02 +0000)]
[X86] LowerMSCATTER/MGATHER - reduce scope of MaskVT. NFCI.

Fixes cppcheck warning.

4 years agoFix uninitialized variable warning. NFC.
Simon Pilgrim [Thu, 27 Feb 2020 13:55:31 +0000 (13:55 +0000)]
Fix uninitialized variable warning. NFC.

4 years ago[mlir] fix wrong symbol order in AffineApplyNormalizer
Alex Zinenko [Thu, 27 Feb 2020 13:45:54 +0000 (14:45 +0100)]
[mlir] fix wrong symbol order in AffineApplyNormalizer

Summary:
AffineApplyNormalizer provides common logic for folding affine maps that appear
in affine.apply into other affine operations that use the result of said
affine.apply. In the process, affine maps of both operations are composed.
During the composition `A.compose(B)` the symbols from the map A are placed
before those of the map B in a single concatenated symbol list. However,
AffineApplyNormalizer was ordering the operands of the operation being
normalized by iteratively appending the symbols into a single list accoridng to
the operand order, regardless of whether these operands are symbols of the
current operation or of the map that is being folded into it. This could lead
to wrong order of symbols and, when the symbols were bound to constant values,
to visibly incorrect folding of constants into affine maps as reported in
PR45031. Make sure symbols operands to the current operation are always placed
before symbols coming from the folded maps.

Update the test that was exercising the incorrect folder behavior. For some
reason, the order of symbol operands was swapped in the test input compared to
the previous operations, making it easy to assume the correct maps were
produced whereas they were swapping the symbols back due to the problem
described above.

Closes https://bugs.llvm.org/show_bug.cgi?id=45031

Differential Revision: https://reviews.llvm.org/D75247

4 years ago[clangd][NFC] Don't query the index if the rename symbol is function
Haojian Wu [Thu, 27 Feb 2020 13:46:01 +0000 (14:46 +0100)]
[clangd][NFC] Don't query the index if the rename symbol is function
local.

This would save an unnecessary index query when renaming a function
local symbol in cross-file rename mode.

4 years ago[X86] createVariablePermute - handle case where recursive createVariablePermute call...
Simon Pilgrim [Thu, 27 Feb 2020 13:52:16 +0000 (13:52 +0000)]
[X86] createVariablePermute - handle case where recursive createVariablePermute call fails

Account for the case where a recursive createVariablePermute call with a wider vector type fails.

Original test case from @craig.topper (Craig Topper)

4 years ago[clang-format] Recognize C# named argument colons as a token type
Jonathan Coe [Thu, 27 Feb 2020 13:46:43 +0000 (13:46 +0000)]
[clang-format] Recognize C# named argument colons as a token type

Summary:
No longer merge 'name' and ':' into a single token.

Ensure that line breaks cannot be placed before or after a named-argument colon.

Ensure that no space is inserted before a named-argument colon.

Reviewers: krasimir

Reviewed By: krasimir

Subscribers: cfe-commits, MyDeveloperDay

Tags: #clang-format, #clang

Differential Revision: https://reviews.llvm.org/D75244

4 years agoRevert "make -fmodules-codegen and -fmodules-debuginfo work also with PCHs"
Hans Wennborg [Thu, 27 Feb 2020 13:33:43 +0000 (14:33 +0100)]
Revert "make -fmodules-codegen and -fmodules-debuginfo work also with PCHs"

This caused PR44953. See also the discussion on D74846.

This reverts commit cbc9d22e49b434b6ceb2eb94b67079d02e0a7b74.

4 years ago[CallSiteInfo] Handle bundles when updating call site info
Djordje Todorovic [Thu, 27 Feb 2020 10:44:53 +0000 (11:44 +0100)]
[CallSiteInfo] Handle bundles when updating call site info

This will address the issue: P8198 and P8199 (from D73534).

The methods was not handle bundles properly.

Differential Revision: https://reviews.llvm.org/D74904

4 years ago[AArch64][SVE] Add intrinsics for first-faulting gather loads
Andrzej Warzynski [Fri, 21 Feb 2020 13:59:02 +0000 (13:59 +0000)]
[AArch64][SVE] Add intrinsics for first-faulting gather loads

Summary:
The following intrinsics are added:
  * @llvm.aarch64.sve.ldff1.gather
  * @llvm.aarch64.sve.ldff1.gather.index
  * @llvm.aarch64.sve.ldff1.gather_sxtw
  * @llvm.aarch64.sve.ldff1.gather.uxtw
  * @llvm.aarch64.sve.ldff1.gather_sxtw.index
  * @llvm.aarch64.sve.ldff1.gather.uxtw.index
  * @llvm.aarch64.sve.ldff1.gather.scalar.offset

Although this patch is quite substantial, the vast majority of the
implementation is just a 'copy & paste' of the implementation of regular
gather loads, including tests. There's only a handful of new
definitions:
  * AArch64ISD nodes defined in AArch64ISelLowering.h (e.g. GLDFF1)
  * Seleciton DAG Types in AArch64SVEInstrInfo.td (e.g.
    AArch64ldff1_gather)
  * intrinsics in IntrinsicsAArch64.td (e.g. aarch64_sve_ldff1_gather)
  * Pseudo instructions in SVEInstrFormats.td to workaround the issue of
    use-before-def for the FFR register.

Reviewed By: sdesmalen

Differential Revision: https://reviews.llvm.org/D75128

4 years ago[driver][darwin] Don't use -platform_version flag by default (PR44813)
Hans Wennborg [Thu, 27 Feb 2020 12:48:26 +0000 (13:48 +0100)]
[driver][darwin] Don't use -platform_version flag by default (PR44813)

The code in llvmorg-10-init-12188-g25ce33a6e4f is a breaking change for
users of older linkers who don't pass a version parameter, which
prevents a drop-in clang upgrade. Old tools can't know about what future
tools will do, so as a general principle the burden should be new tools
to be compatible by default. Also, for comparison, none of the other
tests of Version within AddLinkArgs add any new behaviors unless the
version is explicitly specified. Therefore, this patch changes the
-platform_version behavior from opt-out to opt-in.

Patch by David Major!

Differential revision: https://reviews.llvm.org/D74784

4 years ago[AVX] Cleanup check prefixes
Simon Pilgrim [Thu, 27 Feb 2020 12:27:18 +0000 (12:27 +0000)]
[AVX] Cleanup check prefixes

We were missing some coverage for avx512bw targets as the update script can be pretty dumb about check prefix orders...

4 years agoRequire asserts for debuginline-cost-delta.ll test
Kirill Bobyrev [Thu, 27 Feb 2020 12:16:12 +0000 (13:16 +0100)]
Require asserts for debuginline-cost-delta.ll test

-debug-only=inline-cost does not exist in optimized builds without
asserts and therefore the test fails for such configurations.

Related revision: c965fd942f1d2de6179cd1a2f78c78fa4bd74626

4 years ago[ARM] Fixup FP16 bitcasts
David Green [Tue, 25 Feb 2020 11:26:53 +0000 (11:26 +0000)]
[ARM] Fixup FP16 bitcasts

Under fp16 we optimise the bitcast between a VMOVhr and a CopyToReg via
custom lowering. This rewrites that to be a DAG combine instead, which
helps produce better code in the cases where the bitcast is actaully
legal.

Differential Revision: https://reviews.llvm.org/D72753

4 years ago[clang-format] Handle commas in [] in C#
Jonathan Coe [Thu, 27 Feb 2020 11:39:57 +0000 (11:39 +0000)]
[clang-format] Handle commas in [] in C#

Summary:
Respect setting `SpacesInSquareBrackets` for commas in square brackets in C# code.

Reviewers: krasimir, MyDeveloperDay

Reviewed By: krasimir

Subscribers: cfe-commits

Tags: #clang-format, #clang

Differential Revision: https://reviews.llvm.org/D75182

4 years ago[MC][ARM] Resolve some pcrel fixups at assembly time (PR44929)
Hans Wennborg [Thu, 27 Feb 2020 11:35:10 +0000 (12:35 +0100)]
[MC][ARM] Resolve some pcrel fixups at assembly time (PR44929)

MC currently does not emit these relocation types, and lld does not
handle them. Add FKF_Constant as a work-around of some ARM code after
D72197. Eventually we probably should implement these relocation types.

By Fangrui Song!

Differential revision: https://reviews.llvm.org/D72892

4 years ago[InstCombine] Fix confusing variable name.
Jay Foad [Thu, 27 Feb 2020 11:27:49 +0000 (11:27 +0000)]
[InstCombine] Fix confusing variable name.

4 years ago[lldb] Show the actual error when 'watchpoint set expression' failed
Raphael Isemann [Thu, 27 Feb 2020 10:46:10 +0000 (11:46 +0100)]
[lldb] Show the actual error when 'watchpoint set expression' failed

Currently we only show the user that the expression failed but not
what is actually wrong with it. This just dumps the error we get
back alongside the other output to the error stream.

This should also help with finding out with why sometimees the
TestWatchLocationWithWatchSet.py test fails here on the LLDB
incremental bot on Green Dragon.

4 years agoRevert "[Hexagon] Improve casting of boolean HVX vectors to scalars"
Kirill Bobyrev [Thu, 27 Feb 2020 10:58:32 +0000 (11:58 +0100)]
Revert "[Hexagon] Improve casting of boolean HVX vectors to scalars"

This reverts commit 7691790dfd1011d08f5468f63952d7690755aad4.

The patch is failing tests with MSAN:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/39054/steps/check-llvm%20msan/logs/stdio

4 years ago[DebugInfo][ARM] Fix noreg case when checkig if it is an addImm
Djordje Todorovic [Thu, 27 Feb 2020 09:30:41 +0000 (10:30 +0100)]
[DebugInfo][ARM] Fix noreg case when checkig if it is an addImm

This fixes a build failure with an ARM buildbot.

Differential Revision: https://reviews.llvm.org/D75231

4 years ago[DebugInfo] Describe call site values for chains of expression producing instrs
David Stenberg [Thu, 27 Feb 2020 08:54:37 +0000 (09:54 +0100)]
[DebugInfo] Describe call site values for chains of expression producing instrs

Summary:
If the describeLoadedValue() hook produced a DIExpression when
describing a instruction, and it was not possible to emit a call site
entry directly (the value operand was not an immediate nor a preserved
register), then that described value could not be inserted into the
worklist, and would instead be dropped, meaning that the parameter's
call site value couldn't be described.

This patch extends the worklist so that each entry has an DIExpression
that is built up when iterating through the instructions.

This allows us to describe instruction chains like this:

  $reg0 = mv $fp
  $reg0 = add $reg0, offset
  call @call_with_offseted_fp

Since DW_OP_LLVM_entry_value operations can't be combined with any other
expression, such call site entries will not be emitted. I have added a
test, dbgcall-site-expr-entry-value.mir, which verifies that we don't
assert or emit broken DWARF in such cases.

Reviewers: djtodoro, aprantl, vsk

Reviewed By: djtodoro, vsk

Subscribers: hiraditya, llvm-commits

Tags: #debug-info, #llvm

Differential Revision: https://reviews.llvm.org/D75036

4 years ago[DebugInfo][NFC] Move out lambdas from collectCallSiteParameters()
David Stenberg [Thu, 27 Feb 2020 08:53:31 +0000 (09:53 +0100)]
[DebugInfo][NFC] Move out lambdas from collectCallSiteParameters()

Summary:
This is a preparatory patch for D75036, in which a debug expression is
associated with each parameter register in the worklist. In that patch
the two lambda functions addToWorklist() and finishCallSiteParams() grow
a bit, so move those out to separate functions. This patch also prepares
for each parameter register having their own expression moving the
creation of the DbgValueLoc into finishCallSiteParams().

Reviewers: djtodoro, vsk

Reviewed By: djtodoro, vsk

Subscribers: hiraditya, llvm-commits

Tags: #debug-info, #llvm

Differential Revision: https://reviews.llvm.org/D75050

4 years ago[lldb][NFC] Fix several -Wdocumentation warnings
Raphael Isemann [Thu, 27 Feb 2020 10:16:16 +0000 (11:16 +0100)]
[lldb][NFC] Fix several -Wdocumentation warnings

The GetOffset documentation was copied from the function above
so I completely deleted that one. The rest was just outdated
documentation that didn't keep up with renamed or changed
function parameters/return types.

4 years ago[ARM] Add CPSR as an implicit use of t2IT
Sam Parker [Thu, 27 Feb 2020 10:10:40 +0000 (10:10 +0000)]
[ARM] Add CPSR as an implicit use of t2IT

This use is already attached to the BUNDLE instruction but is lost
after finalisation.

Differential Revision: https://reviews.llvm.org/D75186