platform/upstream/llvm.git
4 years ago[mips] Pass "xgot" flag as a subtarget feature
Simon Atanasyan [Wed, 18 Sep 2019 12:24:57 +0000 (12:24 +0000)]
[mips] Pass "xgot" flag as a subtarget feature

We need "xgot" flag in the MipsAsmParser to implement correct expansion
of some pseudo instructions in case of using 32-bit GOT (XGOT).
MipsAsmParser does not have reference to MipsSubtarget but has a
reference to "feature bit set".

llvm-svn: 372220

4 years ago[mips] Mark tests for lw/sw expansion in PIC by a separate "check prefix". NFC
Simon Atanasyan [Wed, 18 Sep 2019 12:24:30 +0000 (12:24 +0000)]
[mips] Mark tests for lw/sw expansion in PIC by a separate "check prefix". NFC

That simplify adding XGOT tests later.

llvm-svn: 372219

4 years ago[mips] Reduce code duplication in the `loadAndAddSymbolAddress`. NFC
Simon Atanasyan [Wed, 18 Sep 2019 12:24:23 +0000 (12:24 +0000)]
[mips] Reduce code duplication in the `loadAndAddSymbolAddress`. NFC

llvm-svn: 372218

4 years ago[AST] CommentLexer - Remove (optional) Invalid parameter from getSpelling.
Simon Pilgrim [Wed, 18 Sep 2019 12:11:16 +0000 (12:11 +0000)]
[AST] CommentLexer - Remove (optional) Invalid parameter from getSpelling.

The static analyzer noticed that we were dereferencing it even when the default null value was being used. Further investigation showed that we never explicitly set the parameter so I've just removed it entirely.

llvm-svn: 372217

4 years agoFix -Wdocumentation warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 11:22:22 +0000 (11:22 +0000)]
Fix -Wdocumentation warning. NFCI.

llvm-svn: 372215

4 years agoFix -Wdocumentation "empty paragraph passed to '\brief'" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:41:20 +0000 (10:41 +0000)]
Fix -Wdocumentation "empty paragraph passed to '\brief'" warning. NFCI.

llvm-svn: 372214

4 years ago[lldb][CMake] Build LLDB.framework with -Wdocumentation in Xcode
Stefan Granitz [Wed, 18 Sep 2019 10:41:13 +0000 (10:41 +0000)]
[lldb][CMake] Build LLDB.framework with -Wdocumentation in Xcode

llvm-svn: 372213

4 years agoFix -Wdocumentation "@returns in a void function" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:39:16 +0000 (10:39 +0000)]
Fix -Wdocumentation "@returns in a void function" warning. NFCI.

llvm-svn: 372212

4 years agoFix -Wdocumentation "Unknown param" warning. NFCI.
Simon Pilgrim [Wed, 18 Sep 2019 10:37:53 +0000 (10:37 +0000)]
Fix -Wdocumentation "Unknown param" warning. NFCI.

llvm-svn: 372211

4 years ago[lldb][CMake] Infer `Clang_DIR` if not passed explicitly
Stefan Granitz [Wed, 18 Sep 2019 10:20:28 +0000 (10:20 +0000)]
[lldb][CMake] Infer `Clang_DIR` if not passed explicitly

Summary:
If we only get `LLVM_DIR` and find Clang in the same provided build-tree, automatically infer `Clang_DIR` like this:

```
LLVM_DIR = /path/to/build-llvm/lib/cmake/llvm
Clang_DIR = /paht/to/build-llvm/lib/cmake/clang
```

Reviewers: JDevlieghere, jingham, xiaobai, compnerd, labath

Reviewed By: JDevlieghere, labath

Subscribers: mgorny, lldb-commits, #lldb

Tags: #lldb

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

llvm-svn: 372210

4 years ago[cmake] Changes to get Windows self-host working with PGO
Russell Gallop [Wed, 18 Sep 2019 09:43:13 +0000 (09:43 +0000)]
[cmake] Changes to get Windows self-host working with PGO

Fixes quoting of profile arguments to work on Windows
Suppresses adding profile arguments to linker flags when using lld-link
Avoids -fprofile-instr-use being added to rc.exe flags
Removes duplicated adding of -fprofile-instr-use to linker flags (since
r355541)
Move handling LLVM_PROFDATA_FILE to HandleLLVMOptions.cmake

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

llvm-svn: 372209

4 years ago[AMDGPU] Allow FP inline constant in v_madak_f16 and v_fmaak_f16
Tim Renouf [Wed, 18 Sep 2019 09:32:06 +0000 (09:32 +0000)]
[AMDGPU] Allow FP inline constant in v_madak_f16 and v_fmaak_f16

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

Change-Id: Ic38f47cb2079c2c1070a441b5943854844d80a7c
llvm-svn: 372208

4 years ago[Alignment] Add a None() member function
Guillaume Chatelet [Wed, 18 Sep 2019 09:24:40 +0000 (09:24 +0000)]
[Alignment] Add a None() member function

Summary:
This will allow writing `if(A != llvm::Align::None())` which is clearer than `if(A > llvm::Align(1))`

This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790

Reviewers: courbet

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 372207

4 years ago[clang-tidy] Fix a potential infinite loop in readability-isolate-declaration check.
Haojian Wu [Wed, 18 Sep 2019 09:21:35 +0000 (09:21 +0000)]
[clang-tidy] Fix a potential infinite loop in readability-isolate-declaration check.

Reviewers: ilya-biryukov

Subscribers: xazax.hun, cfe-commits

Tags: #clang

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

llvm-svn: 372206

4 years agotsan: allow the Go runtime to return multiple stack frames for a single PC
Dmitry Vyukov [Wed, 18 Sep 2019 09:18:04 +0000 (09:18 +0000)]
tsan: allow the Go runtime to return multiple stack frames for a single PC

This fix allows tsan to report stack traces correctly even in the
presence of mid-stack inlining by the Go compiler.

See https://go-review.googlesource.com/c/go/+/195781 for the Go runtime side of this change.

Author: randall77 (Keith Randall)
Reviewed: https://reviews.llvm.org/D67671
llvm-svn: 372205

4 years ago[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize
Sander de Smalen [Wed, 18 Sep 2019 09:02:44 +0000 (09:02 +0000)]
[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize

This patch fixes a bug exposed by D65653 where a subsequent invocation
of `determineCalleeSaves` ends up with a different size for the callee
save area, leading to different frame-offsets in debug information.

In the invocation by PEI, `determineCalleeSaves` tries to determine
whether it needs to spill an extra callee-saved register to get an
emergency spill slot. To do this, it calls 'estimateStackSize' and
manually adds the size of the callee-saves to this. PEI then allocates
the spill objects for the callee saves and the remaining frame layout
is calculated accordingly.

A second invocation in LiveDebugValues causes estimateStackSize to return
the size of the stack frame including the callee-saves. Given that the
size of the callee-saves is added to this, these callee-saves are counted
twice, which leads `determineCalleeSaves` to believe the stack has
become big enough to require spilling an extra callee-save as emergency
spillslot. It then updates CalleeSavedStackSize with a larger value.

Since CalleeSavedStackSize is used in the calculation of the frame
offset in getFrameIndexReference, this leads to incorrect offsets for
variables/locals when this information is recalculated after PEI.

Reviewers: omjavaid, eli.friedman, thegameg, efriedma

Reviewed By: efriedma

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

llvm-svn: 372204

4 years ago[lldb] Print better diagnostics for user expressions and modules
Raphael Isemann [Wed, 18 Sep 2019 08:53:35 +0000 (08:53 +0000)]
[lldb] Print better diagnostics for user expressions and modules

Summary:
Currently our expression evaluators only prints very basic errors that are not very useful when writing complex expressions.

For example, in the expression below the user made a type error, but it's not clear from the diagnostic what went wrong:
```
(lldb) expr printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
error: invalid operands to binary expression ('int' and 'double')
```

This patch enables full Clang diagnostics in our expression evaluator. After this patch the diagnostics for the expression look like this:

```
(lldb) expr printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
error: <user expression 1>:1:54: invalid operands to binary expression ('int' and 'float')
printf("Modulos are:", foobar%mo1, foobar%mo2, foobar%mo3)
                                               ~~~~~~^~~~
```

To make this possible, we now emulate a user expression file within our diagnostics. This prevents that the user is exposed to
our internal wrapper code we inject.

Note that the diagnostics that refer to declarations from the debug information (e.g. 'note' diagnostics pointing to a called function)
will not be improved by this as they don't have any source locations associated with them, so caret or line printing isn't possible.
We instead just suppress these diagnostics as we already do with warnings as they would otherwise just be a context message
without any context (and the original diagnostic in the user expression should be enough to explain the issue).

Fixes rdar://24306342

Reviewers: JDevlieghere, aprantl, shafik, #lldb

Reviewed By: JDevlieghere, #lldb

Subscribers: usaxena95, davide, jingham, aprantl, arphaman, kadircet, lldb-commits

Tags: #lldb

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

llvm-svn: 372203

4 years agoRevert "r372201: [Support] Replace function with function_ref in writeFileAtomically...
Ilya Biryukov [Wed, 18 Sep 2019 08:47:09 +0000 (08:47 +0000)]
Revert "r372201: [Support] Replace function with function_ref in writeFileAtomically. NFC"

function_ref causes calls to the function to be ambiguous, breaking
compilation.

Reverting for now.

llvm-svn: 372202

4 years ago[Support] Replace function with function_ref in writeFileAtomically. NFC
Ilya Biryukov [Wed, 18 Sep 2019 08:31:28 +0000 (08:31 +0000)]
[Support] Replace function with function_ref in writeFileAtomically. NFC

Summary:
The latter is slightly more efficient and communicates the intent of the
API: writeFileAtomically does not own or copy the callback, it merely
calls it at some point.

Reviewers: jkorous

Reviewed By: jkorous

Subscribers: hiraditya, dexonsmith, jfb, llvm-commits, cfe-commits

Tags: #llvm

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

llvm-svn: 372201

4 years ago[X86] Break non-power of 2 vXi1 vectors into scalars for argument passing with avx512.
Craig Topper [Wed, 18 Sep 2019 06:06:11 +0000 (06:06 +0000)]
[X86] Break non-power of 2 vXi1 vectors into scalars for argument passing with avx512.

This generates worse code, but matches what is done for avx2 and
prevents crashes when more arguments are passed than we have
registers for.

llvm-svn: 372200

4 years ago[X86] Add test case for passing a v17i1 vector with avx512
Craig Topper [Wed, 18 Sep 2019 06:06:07 +0000 (06:06 +0000)]
[X86] Add test case for passing a v17i1 vector with avx512

llvm-svn: 372199

4 years ago[BPF] Permit all user instructed offset relocatiions
Yonghong Song [Wed, 18 Sep 2019 03:49:07 +0000 (03:49 +0000)]
[BPF] Permit all user instructed offset relocatiions

Currently, not all user specified relocations
(with clang intrinsic __builtin_preserve_access_index())
will turn into relocations.

In the current implementation, a __builtin_preserve_access_index()
chain is turned into relocation only if the result of the clang
intrinsic is used in a function call or a nonzero offset computation
of getelementptr. For all other cases, the relocatiion request
is ignored and the __builtin_preserve_access_index() is turned
into regular getelementptr instructions.
The main reason is to mimic bpf_probe_read() requirement.

But there are other use cases where relocatable offset is
generated but not used for bpf_probe_read(). This patch
relaxed previous constraints when to generate relocations.
Now, all user __builtin_preserve_access_index() will have
relocations generated.

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

llvm-svn: 372198

4 years ago[X86] Prevent assertion when calling a function that returns double with -mno-sse2...
Craig Topper [Wed, 18 Sep 2019 01:57:46 +0000 (01:57 +0000)]
[X86] Prevent assertion when calling a function that returns double with -mno-sse2 on x86-64.

As seen in the most recent updates to PR10498

llvm-svn: 372197

4 years agoClean up this test.
Jim Ingham [Wed, 18 Sep 2019 01:53:52 +0000 (01:53 +0000)]
Clean up this test.

I don't know what the intent of parts of this test were.  We set a
bunch of breakpoints and ran from one to the other, doing "self.runCmd("thread backtrace")"
then continuing to the next one.  We didn't actually verify the contents of the backtrace,
nor that we hit the breakpoints we set in any particular order.  The only actual test was
to run sel_getName at two of these stops.

So I reduced the test to just stopping at the places where we were actually going to run
an expression, and tested the expression.

llvm-svn: 372196

4 years ago[Remarks] Allow the RemarkStreamer to be used directly with a stream
Francis Visoiu Mistrih [Wed, 18 Sep 2019 01:04:45 +0000 (01:04 +0000)]
[Remarks] Allow the RemarkStreamer to be used directly with a stream

The filename in the RemarkStreamer should be optional to allow clients
to stream remarks to memory or to existing streams.

This introduces a new overload of `setupOptimizationRemarks`, and avoids
enforcing the presence of a filename at different places.

llvm-svn: 372195

4 years agoCache PYTHON_EXECUTABLE for windows
Haibo Huang [Wed, 18 Sep 2019 01:00:12 +0000 (01:00 +0000)]
Cache PYTHON_EXECUTABLE for windows

Summary: This way it can be overwritten when cross compiling.

Subscribers: mgorny, lldb-commits

Tags: #lldb

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

llvm-svn: 372194

4 years agoTestFoundationDisassembly.py is not dependent on debug information.
Jim Ingham [Wed, 18 Sep 2019 00:40:49 +0000 (00:40 +0000)]
TestFoundationDisassembly.py is not dependent on debug information.

This test is about disassembling symbols in a framework without debug information.
So we don't need to run it once per debug info flavor.

llvm-svn: 372193

4 years ago[ScriptInterpreter] Limit LLDB's globals to interactive mode.
Jonas Devlieghere [Wed, 18 Sep 2019 00:30:01 +0000 (00:30 +0000)]
[ScriptInterpreter] Limit LLDB's globals to interactive mode.

Jim pointed out that the LLDB global variables should only be available
in interactive mode. When used from a command for example, their values
might be stale or not at all what the user expects. Therefore we want to
explicitly make these variables unavailable.

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

llvm-svn: 372192

4 years ago[Timers] Fix printing some `-ftime-report` sections twice. Fixes PR40328.
Volodymyr Sapsai [Wed, 18 Sep 2019 00:05:45 +0000 (00:05 +0000)]
[Timers] Fix printing some `-ftime-report` sections twice. Fixes PR40328.

Starting from r324788 timer groups aren't cleared automatically when
printed out. As a result some timer groups were printed one more time.
For example, "Pass execution timing report" was printed again in
`ManagedStatic<PassTimingInfo>` destructor, "DWARF Emission" in
`ManagedStatic<Name2PairMap> NamedGroupedTimers` destructor.

Fix by clearing timer groups manually.

Reviewers: thegameg, george.karpenkov

Reviewed By: thegameg

Subscribers: aprantl, jkorous, dexonsmith, ributzka, aras-p, cfe-commits

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

llvm-svn: 372191

4 years ago[ScriptInterpreter] Remove ScriptInterpreterPythonImpl::Clear() (NFC)
Jonas Devlieghere [Wed, 18 Sep 2019 00:01:52 +0000 (00:01 +0000)]
[ScriptInterpreter] Remove ScriptInterpreterPythonImpl::Clear() (NFC)

This method is never called.

llvm-svn: 372190

4 years ago[PGO] Change hardcoded thresholds for cold/inlinehint to use summary
Teresa Johnson [Tue, 17 Sep 2019 23:12:13 +0000 (23:12 +0000)]
[PGO] Change hardcoded thresholds for cold/inlinehint to use summary

Summary:
The PGO counter reading will add cold and inlinehint (hot) attributes
to functions that are very cold or hot. This was using hardcoded
thresholds, instead of the profile summary cutoffs which are used in
other hot/cold detection and are more dynamic and adaptable. Switch
to using the summary-based cold/hot detection.

The hardcoded limits were causing some code that had a medium level of
hotness (per the summary) to be incorrectly marked with a cold
attribute, blocking inlining.

Reviewers: davidxl

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 372189

4 years ago[CodeGen] Handle outlining of CopyStmts.
Michael Kruse [Tue, 17 Sep 2019 22:59:43 +0000 (22:59 +0000)]
[CodeGen] Handle outlining of CopyStmts.

Since the removal of extensions nodes from schedule trees in r362257 it
is possible to emit parallel code for SCoPs containing
matrix-multiplications. However, the code looking for references used in
outlined statement was not prepared to handle CopyStmts introduced by
the matrix-matrix multiplication detection.

In this case, CopyStmts do not introduce references in addition to the
ones captured by MemoryAccesses, i.e. we change the assertion to accept
CopyStmts and add a regression test for this case.

This fixes llvm.org/PR43164

llvm-svn: 372188

4 years ago[ARM] Update clang for removal of vfp2d16 and vfp2d16sp
Eli Friedman [Tue, 17 Sep 2019 21:43:19 +0000 (21:43 +0000)]
[ARM] Update clang for removal of vfp2d16 and vfp2d16sp

Matching fix for https://reviews.llvm.org/D67375 (r372186).

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

llvm-svn: 372187

4 years ago[ARM] VFPv2 only supports 16 D registers.
Eli Friedman [Tue, 17 Sep 2019 21:42:38 +0000 (21:42 +0000)]
[ARM] VFPv2 only supports 16 D registers.

r361845 changed the way we handle "D16" vs. "D32" targets; there used to
be a negative "d16" which removed instructions from the instruction set,
and now there's a "d32" feature which adds instructions to the
instruction set.  This is good, but there was an oversight in the
implementation: the behavior of VFPv2 was changed.  In particular, the
"vfp2" feature was changed to imply "d32". This is wrong: VFPv2 only
supports 16 D registers.

In practice, this means if you specify -mfpu=vfpv2, the compiler will
generate illegal instructions.

This patch gets rid of "vfp2d16" and "vfp2d16sp", and fixes "vfp2" and
"vfp2sp" so they don't imply "d32".

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

llvm-svn: 372186

4 years agoRevert "Create UsersManual section entitled 'Controlling Floating Point"
Erich Keane [Tue, 17 Sep 2019 21:27:07 +0000 (21:27 +0000)]
Revert "Create UsersManual section entitled 'Controlling Floating Point"

This reverts commit a08d5a4b0ebd44dc64f41049ed4e97a3c6d31498.

llvm-svn: 372185

4 years ago[Sema] Split of versions of -Wimplicit-{float,int}-conversion for Objective-C BOOL
Erik Pilkington [Tue, 17 Sep 2019 21:11:51 +0000 (21:11 +0000)]
[Sema] Split of versions of -Wimplicit-{float,int}-conversion for Objective-C BOOL

Also, add a diagnostic group, -Wobjc-signed-char-bool, to control all these
related diagnostics.

rdar://51954400

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

llvm-svn: 372183

4 years ago[PGO] Don't use comdat groups for counters & data on COFF
Reid Kleckner [Tue, 17 Sep 2019 21:10:49 +0000 (21:10 +0000)]
[PGO] Don't use comdat groups for counters & data on COFF

For COFF, a comdat group is really a symbol marked
IMAGE_COMDAT_SELECT_ANY and zero or more other symbols marked
IMAGE_COMDAT_SELECT_ASSOCIATIVE. Typically the associative symbols in
the group are not external and are not referenced by other TUs, they are
things like debug info, C++ dynamic initializers, or other section
registration schemes. The Visual C++ linker reports a duplicate symbol
error for symbols marked IMAGE_COMDAT_SELECT_ASSOCIATIVE even if they
would be discarded after handling the leader symbol.

Fixes coverage-inline.cpp in check-profile after r372020.

llvm-svn: 372182

4 years agoReland "[docs][Bugpoint]Add notes about multiple crashes"
Jinsong Ji [Tue, 17 Sep 2019 21:09:41 +0000 (21:09 +0000)]
Reland "[docs][Bugpoint]Add notes about multiple crashes"

Fix the warning.
Bugpoint.rst:124:Mismatch: both interpreted text role prefix and
reference suffix.

Note that the line no here is wrong and misleading,
the problem is in line 128, not 124.

llvm-svn: 372181

4 years agoCreate UsersManual section entitled 'Controlling Floating Point
Erich Keane [Tue, 17 Sep 2019 20:45:23 +0000 (20:45 +0000)]
Create UsersManual section entitled 'Controlling Floating Point
Behavior'

Create a new section for documenting the floating point options. Move
all the floating point options into this section, and add new entries
for the floating point options that exist but weren't previously
  described in the UsersManual.

Patch By: mibintc
Differential Revision: https://reviews.llvm.org/D67517

llvm-svn: 372180

4 years agoFix buildbots.
Greg Clayton [Tue, 17 Sep 2019 20:31:01 +0000 (20:31 +0000)]
Fix buildbots.

MSVC doesn't correctly capture constexpr in lambdas, and other builds warn if you do, others will error out if you do. Avoid lambdas.

llvm-svn: 372179

4 years agoIgnore exception specifier mismatch when merging redeclarations
Reid Kleckner [Tue, 17 Sep 2019 20:29:10 +0000 (20:29 +0000)]
Ignore exception specifier mismatch when merging redeclarations

Exception specifiers are now part of the function type in C++17.
Normally, it is illegal to redeclare the same function or specialize a
template with a different exception specifier, but under
-fms-compatibility, we accept it with a warning. Without this change,
the function types would not match due to the exception specifier, and
clang would claim that the types were "incompatible". Now we emit the
warning and merge the redeclaration as we would in C++14 and earlier.

Fixes PR42842, which is about compiling _com_ptr_t in C++17.

Based on a patch by Alex Fusco <alexfusco@google.com>!

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

llvm-svn: 372178

4 years ago[AArch64][GlobalISel] Support -tailcallopt
Jessica Paquette [Tue, 17 Sep 2019 20:24:23 +0000 (20:24 +0000)]
[AArch64][GlobalISel] Support -tailcallopt

This adds support for `-tailcallopt` tail calls to CallLowering. This
piggy-backs off the changes from D67577, since doing it without a bit of
refactoring gets extremely ugly.

Support is basically ported from AArch64ISelLowering. The main difference here
is that tail calls in `-tailcallopt` change the ABI, so there's some extra
bookkeeping for the stack.

Show that we are correctly lowering these by updating tail-call.ll.

Also show that we don't do anything strange in general by updating
fastcc-reserved.ll, which passes `-tailcallopt`, but doesn't emit any tail
calls.

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

llvm-svn: 372177

4 years ago[clang-scan-deps] Add verbose mode
Jan Korous [Tue, 17 Sep 2019 19:45:24 +0000 (19:45 +0000)]
[clang-scan-deps] Add verbose mode

When running in the default mode we don't print anything other than actual output to stdout to make automated processing easier.

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

llvm-svn: 372174

4 years agogn build: Merge r372168
GN Sync Bot [Tue, 17 Sep 2019 19:41:36 +0000 (19:41 +0000)]
gn build: Merge r372168

llvm-svn: 372173

4 years agoAArch64CallLowering::lowerCall(): fix build by not passing InArgs into lowerTailCall()
Roman Lebedev [Tue, 17 Sep 2019 19:37:07 +0000 (19:37 +0000)]
AArch64CallLowering::lowerCall(): fix build by not passing InArgs into lowerTailCall()

llvm-svn: 372172

4 years ago[NFC][InstCombine] dropRedundantMaskingOfLeftShiftInput(): some NFC diff shaving
Roman Lebedev [Tue, 17 Sep 2019 19:32:26 +0000 (19:32 +0000)]
[NFC][InstCombine] dropRedundantMaskingOfLeftShiftInput(): some NFC diff shaving

llvm-svn: 372171

4 years ago[NFC][InstCombine] More tests for "Dropping pointless masking before left shift"...
Roman Lebedev [Tue, 17 Sep 2019 19:32:11 +0000 (19:32 +0000)]
[NFC][InstCombine] More tests for "Dropping pointless masking before left shift" (PR42563)

While we already fold that pattern if the sum of shift amounts is not
smaller than bitwidth, there's painfully obvious generalization:
  https://rise4fun.com/Alive/F5R
I.e. the "sub of shift amounts" tells us how many bits will be left
in the output. If it's less than bitwidth, we simply need to
apply a mask, which is constant.

llvm-svn: 372170

4 years agoRevert "Data Dependence Graph Basics"
Bardia Mahjour [Tue, 17 Sep 2019 19:22:01 +0000 (19:22 +0000)]
Revert "Data Dependence Graph Basics"

This reverts commit c98ec60993a7aa65073692b62f6d728b36e68ccd, which broke the sphinx-docs build.

llvm-svn: 372168

4 years agoNVPTXAsmPrinter - Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 19:16:00 +0000 (19:16 +0000)]
NVPTXAsmPrinter - Don't dereference a dyn_cast result. NFCI.

llvm-svn: 372166

4 years agoWasmEmitter - Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 19:14:11 +0000 (19:14 +0000)]
WasmEmitter - Don't dereference a dyn_cast result. NFCI.

llvm-svn: 372165

4 years ago[AArch64][GlobalISel][NFC] Refactor tail call lowering code
Jessica Paquette [Tue, 17 Sep 2019 19:08:44 +0000 (19:08 +0000)]
[AArch64][GlobalISel][NFC] Refactor tail call lowering code

When you begin implementing -tailcallopt, this gets somewhat hairy. Refactor
the call lowering code so that the tail call lowering stuff gets its own
function.

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

llvm-svn: 372164

4 years agogn build: Merge r372162
GN Sync Bot [Tue, 17 Sep 2019 19:00:41 +0000 (19:00 +0000)]
gn build: Merge r372162

llvm-svn: 372163

4 years agoData Dependence Graph Basics
Bardia Mahjour [Tue, 17 Sep 2019 18:55:44 +0000 (18:55 +0000)]
Data Dependence Graph Basics

Summary:
This is the first patch in a series of patches that will implement data dependence graph in LLVM. Many of the ideas used in this implementation are based on the following paper:
D. J. Kuck, R. H. Kuhn, D. A. Padua, B. Leasure, and M. Wolfe (1981). DEPENDENCE GRAPHS AND COMPILER OPTIMIZATIONS.
This patch contains support for a basic DDGs containing only atomic nodes (one node for each instruction). The edges are two fold: def-use edges and memory-dependence edges.
The implementation takes a list of basic-blocks and only considers dependencies among instructions in those basic blocks. Any dependencies coming into or going out of instructions that do not belong to those basic blocks are ignored.

The algorithm for building the graph involves the following steps in order:

  1. For each instruction in the range of basic blocks to consider, create an atomic node in the resulting graph.
  2. For each node in the graph establish def-use edges to/from other nodes in the graph.
  3. For each pair of nodes containing memory instruction(s) create memory edges between them. This part of the algorithm goes through the instructions in lexicographical order and creates edges in reverse order if the sink of the dependence occurs before the source of it.

Authored By: bmahjour

Reviewer: Meinersbur, fhahn, myhsu, xtian, dmgreen, kbarton, jdoerfert

Reviewed By: Meinersbur, fhahn, myhsu

Subscribers: ychen, arphaman, simoll, a.elovikov, mgorny, hiraditya, jfb, wuzish, llvm-commits, jsji, Whitney, etiotto

Tag: #llvm

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

llvm-svn: 372162

4 years ago[docs][Bugpoint] Revert 5584ead50 a5aa3353
Jinsong Ji [Tue, 17 Sep 2019 18:39:04 +0000 (18:39 +0000)]
[docs][Bugpoint] Revert 5584ead50 a5aa3353

No sure why there are still warnings, revert while I investigate.

llvm-svn: 372161

4 years ago[docs][Bugpoint] Fix build break.
Jinsong Ji [Tue, 17 Sep 2019 18:23:06 +0000 (18:23 +0000)]
[docs][Bugpoint] Fix build break.

Bugpoint.rst:124: WARNING: Mismatch: both interpreted text role prefix
and reference suffix.

llvm-svn: 372160

4 years ago[X86] Use APInt::operator<<= and APInt::lshrInPlace. NFC
Craig Topper [Tue, 17 Sep 2019 18:19:06 +0000 (18:19 +0000)]
[X86] Use APInt::operator<<= and APInt::lshrInPlace. NFC

llvm-svn: 372159

4 years ago[SimplifyDemandedBits] Use APInt::intersects to instead of ANDing and comparing to...
Craig Topper [Tue, 17 Sep 2019 18:19:02 +0000 (18:19 +0000)]
[SimplifyDemandedBits] Use APInt::intersects to instead of ANDing and comparing to 0 separately. NFC

llvm-svn: 372158

4 years ago[docs][Bugpoint]Add notes about multiple crashes
Jinsong Ji [Tue, 17 Sep 2019 18:10:09 +0000 (18:10 +0000)]
[docs][Bugpoint]Add notes about multiple crashes

Summary:
    When reducing case for a CodeGenCrash, bugpoint may generate a new
    reduced
    testcase that exposes/causes another crash or break something due to
    limitation.

    Bugpoint does not distiguish different crashes currently,
    so when this happens, bugpoint will go on reducing for the new crash,
    or just abort, we can't get the case reduced for the origial crash.

    An advice is added into usage doc to connect to recommend checking error
    message with scripts and `-compile-command`.

Reviewers: modocache, bogner, sebpop, reames, vsk, MatzeB

Reviewed By: vsk

Subscribers: mehdi_amini, llvm-commits

Tags: #llvm

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

llvm-svn: 372157

4 years ago[X86] Simplify b2b KSHIFTL+KSHIFTR using demanded elts.
Craig Topper [Tue, 17 Sep 2019 18:02:56 +0000 (18:02 +0000)]
[X86] Simplify b2b KSHIFTL+KSHIFTR using demanded elts.

llvm-svn: 372155

4 years ago[X86] Call SimplifyDemandedVectorElts on KSHIFTL/KSHIFTR nodes during DAG combine.
Craig Topper [Tue, 17 Sep 2019 18:02:52 +0000 (18:02 +0000)]
[X86] Call SimplifyDemandedVectorElts on KSHIFTL/KSHIFTR nodes during DAG combine.

llvm-svn: 372154

4 years ago[X86] Simplify some code in LowerBUILD_VECTORvXi1. NFCI
Craig Topper [Tue, 17 Sep 2019 18:02:46 +0000 (18:02 +0000)]
[X86] Simplify some code in LowerBUILD_VECTORvXi1. NFCI

The case were Immediate is 0 and HasConstElts is true should never
happen since that would mean the constant elts were all zero. But
we check for all zero build vector earlier. So just use HasConstElts
and blindly take Immediate without checking if its 0.

Move the code that bitcasts and extract the immediate into the
the HasConstElts case since the other code just creates an undef
with the right type. No casting needed.

llvm-svn: 372153

4 years agoUse 'BOOL' instead of BOOL in diagnostic messages
Erik Pilkington [Tue, 17 Sep 2019 18:02:45 +0000 (18:02 +0000)]
Use 'BOOL' instead of BOOL in diagnostic messages

Type names should be enclosed in single quotes.

llvm-svn: 372152

4 years ago[AMDGPU] Added MI bit IsDOT
Stanislav Mekhanoshin [Tue, 17 Sep 2019 17:56:13 +0000 (17:56 +0000)]
[AMDGPU] Added MI bit IsDOT

NFC, needed for future commit.

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

llvm-svn: 372151

4 years agogn build: Merge r372149
GN Sync Bot [Tue, 17 Sep 2019 17:51:27 +0000 (17:51 +0000)]
gn build: Merge r372149

llvm-svn: 372150

4 years agoGSYM: Add the llvm::gsym::Header header class with tests
Greg Clayton [Tue, 17 Sep 2019 17:46:13 +0000 (17:46 +0000)]
GSYM: Add the llvm::gsym::Header header class with tests

This patch adds the llvm::gsym::Header class which appears at the start of a stand alone GSYM file, or in the first bytes of the GSYM data in a GSYM section within a file. Added encode and decode methods with full error handling and full tests.

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

llvm-svn: 372149

4 years ago[OPENMP] Rework the test, NFC.
Alexey Bataev [Tue, 17 Sep 2019 17:44:27 +0000 (17:44 +0000)]
[OPENMP] Rework the test, NFC.

llvm-svn: 372148

4 years ago[OPENMP5.0]Introduce attribute for declare variant directive.
Alexey Bataev [Tue, 17 Sep 2019 17:36:49 +0000 (17:36 +0000)]
[OPENMP5.0]Introduce attribute for declare variant directive.

Added attribute for declare variant directive. It will allow to handle
declare variant directive at the codegen and will allow to add extra
checks.

llvm-svn: 372147

4 years ago[TableGen] CodeGenMapTable - Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 17:32:15 +0000 (17:32 +0000)]
[TableGen] CodeGenMapTable - Don't dereference a dyn_cast result. NFCI.

The static analyzer is warning about potential null dereferences of dyn_cast<> results - in these cases we can safely use cast<> directly as we know that these cases should all be the correct type, which is why its working atm and anyway cast<> will assert if they aren't.

llvm-svn: 372146

4 years ago[ARM][AsmParser] Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 17:26:14 +0000 (17:26 +0000)]
[ARM][AsmParser] Don't dereference a dyn_cast result. NFCI.

The static analyzer is warning about potential null dereferences of dyn_cast<> results - in these cases we can safely use cast<> directly as we know that these cases should all be the correct type, which is why its working atm and anyway cast<> will assert if they aren't.

llvm-svn: 372145

4 years agoFix MSVC lambda capture warnings. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 17:24:55 +0000 (17:24 +0000)]
Fix MSVC lambda capture warnings. NFCI.

llvm-svn: 372144

4 years agoRemove asan test for strncat(x, y, 0)
David Bolvansky [Tue, 17 Sep 2019 17:17:30 +0000 (17:17 +0000)]
Remove asan test for strncat(x, y, 0)

llvm-svn: 372143

4 years agoReland "[SLC] Preserve attrs for strncpy(x, "", y) -> memset(align 1 x, '\0', y)"
David Bolvansky [Tue, 17 Sep 2019 17:12:24 +0000 (17:12 +0000)]
Reland "[SLC] Preserve attrs for strncpy(x, "", y) -> memset(align 1 x, '\0', y)"

llvm-svn: 372142

4 years ago[ASAN] Adjust asan tests due to new optimizations
David Bolvansky [Tue, 17 Sep 2019 17:07:31 +0000 (17:07 +0000)]
[ASAN] Adjust asan tests due to new optimizations

llvm-svn: 372141

4 years ago[PowerPC] Exploit single instruction load-and-splat for word and doubleword
Nemanja Ivanovic [Tue, 17 Sep 2019 16:45:20 +0000 (16:45 +0000)]
[PowerPC] Exploit single instruction load-and-splat for word and doubleword

We currently produce a load, followed by (possibly a move for integers and) a
splat as separate instructions. VSX has always had a splatting load for
doublewords, but as of Power9, we have it for words as well. This patch just
exploits these instructions.

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

llvm-svn: 372139

4 years ago[MemorySSA] Fix phi insertion when inserting a def.
Alina Sbirlea [Tue, 17 Sep 2019 16:33:35 +0000 (16:33 +0000)]
[MemorySSA] Fix phi insertion when inserting a def.

Summary:
When inserting a Def, the current algorithm is walking edges backward
and inserting new Phis where needed. There may be additional Phis needed
in the IDF of the newly inserted Def and Phis.
Adding Phis in the IDF of the Def was added ina  previous patch, but we
may also need other Phis in the IDF of the newly added Phis.

Reviewers: george.burgess.iv

Subscribers: Prazek, sanjoy.google, llvm-commits

Tags: #llvm

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

llvm-svn: 372138

4 years ago[MemorySSA] Update MSSA for non-conventional AA.
Alina Sbirlea [Tue, 17 Sep 2019 16:31:37 +0000 (16:31 +0000)]
[MemorySSA] Update MSSA for non-conventional AA.

Summary:
Regularly when moving an instruction that may not read or write memory,
the instruction is not modelled in MSSA, so not action is necessary.
For a non-conventional AA pipeline, MSSA needs to explicitly check when
creating accesses, so as to not model instructions that may not read and
write memory.

Reviewers: george.burgess.iv

Subscribers: Prazek, sanjoy.google, llvm-commits

Tags: #llvm

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

llvm-svn: 372137

4 years agoMove DK_Misexpect for compatability with getNextAvailablePluginDiagnosticKind
Petr Hosek [Tue, 17 Sep 2019 16:27:36 +0000 (16:27 +0000)]
Move DK_Misexpect for compatability with getNextAvailablePluginDiagnosticKind

First identified after D66324 landed.

Patch By: paulkirth
Differential Revision: https://reviews.llvm.org/D67648

llvm-svn: 372136

4 years agoGSYM: add encoding and decoding to FunctionInfo
Greg Clayton [Tue, 17 Sep 2019 16:15:49 +0000 (16:15 +0000)]
GSYM: add encoding and decoding to FunctionInfo

This patch adds encoding and decoding of the FunctionInfo objects along with full error handling and tests. Full details of the FunctionInfo encoding format appear in the FunctionInfo.h header file.

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

llvm-svn: 372135

4 years ago[ARM] Add a SelectTAddrModeImm7 for MVE narrow loads and stores
David Green [Tue, 17 Sep 2019 15:32:28 +0000 (15:32 +0000)]
[ARM] Add a SelectTAddrModeImm7 for MVE narrow loads and stores

We were previously using the SelectT2AddrModeImm7 for both normal and narrowing
MVE loads/stores. As the narrowing instructions do not accept sp as a register,
it makes little sense to optimise a FrameIndex into the load, only to have to
recover that later on. This adds a SelectTAddrModeImm7 which does not do that
folding, and uses it for narrowing load/store patterns.

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

llvm-svn: 372134

4 years ago[ARM] Fixup pipeline test. NFC
David Green [Tue, 17 Sep 2019 15:25:24 +0000 (15:25 +0000)]
[ARM] Fixup pipeline test. NFC

llvm-svn: 372133

4 years ago[ARM] Reserve an emergency spill slot for fp16 addressing modes that need it
David Green [Tue, 17 Sep 2019 15:23:09 +0000 (15:23 +0000)]
[ARM] Reserve an emergency spill slot for fp16 addressing modes that need it

Similar to D67327, but this time for the FP16 VLDR and VSTR instructions that
use the AddrMode5FP16 addressing mode. We need to reserve an emergency spill
slot for instructions that will be out of range to use sp directly.
AddrMode5FP16 is 8 bits with a scale of 2.

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

llvm-svn: 372132

4 years ago[OPENMP]Try to rework the test to pacify the buildbots, NFC.
Alexey Bataev [Tue, 17 Sep 2019 15:11:52 +0000 (15:11 +0000)]
[OPENMP]Try to rework the test to pacify the buildbots, NFC.

llvm-svn: 372130

4 years ago[clang-format] Fix cleanup of `AnnotatedLine` to include children nodes.
Yitzhak Mandelbaum [Tue, 17 Sep 2019 15:10:39 +0000 (15:10 +0000)]
[clang-format] Fix cleanup of `AnnotatedLine` to include children nodes.

Summary:
AnnotatedLine has a tree structure, and things like the body of a lambda will be
a child of the lambda expression. For example,

    [&]() { foo(a); };

will have an AnnotatedLine with a child:

    [&]() {};
     '- foo(a);

Currently, when the `Cleaner` class analyzes the affected lines, it does not
cleanup the lines' children nodes, which results in missed cleanup
opportunities, like the lambda body in the example above.

This revision extends the algorithm to visit children, thereby fixing the above problem.

Patch by Eric Li.

Reviewers: krasimir

Subscribers: cfe-commits

Tags: #clang

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

llvm-svn: 372129

4 years ago[clangd] Fix another TSAN issue
Benjamin Kramer [Tue, 17 Sep 2019 14:56:11 +0000 (14:56 +0000)]
[clangd] Fix another TSAN issue

llvm-svn: 372128

4 years ago[RISCV] Unbreak the build
Benjamin Kramer [Tue, 17 Sep 2019 14:27:31 +0000 (14:27 +0000)]
[RISCV] Unbreak the build

llvm-svn: 372127

4 years ago[ARM] Fix for buildbots
Sam Parker [Tue, 17 Sep 2019 14:21:36 +0000 (14:21 +0000)]
[ARM] Fix for buildbots

Remove setPreservesCFG from ARMConstantIslandPass and add a couple
of -verify-machine-dom-info instances into the existing codegen
tests.

llvm-svn: 372126

4 years agoRevert "[SLC] Preserve attrs for strncpy(x, "", y) -> memset(align 1 x, '\0', y)"
Krasimir Georgiev [Tue, 17 Sep 2019 14:15:23 +0000 (14:15 +0000)]
Revert "[SLC] Preserve attrs for strncpy(x, "", y) -> memset(align 1 x, '\0', y)"

Summary:
This reverts commit r372101.

Causes ASAN build bot failures:

http://lab.llvm.org:8011/builders/sanitizer-ppc64be-linux/builds/14176
From http://lab.llvm.org:8011/builders/sanitizer-ppc64be-linux/builds/14176/steps/64-bit%20check-asan/logs/stdio:

```
[ RUN      ] AddressSanitizer.StrNCatOOBTest
/home/buildbots/ppc64be-sanitizer/sanitizer-ppc64be/build/llvm-project/compiler-rt/lib/asan/tests/asan_str_test.cpp:462: Failure
Death test: strncat(to - 1, from, 0)
    Result: failed to die.
```

Subscribers: llvm-commits

Tags: #llvm

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

llvm-svn: 372125

4 years agoAdd SpellingNotCalculated to Attribute Enums to suppress UBSan warnings
Erich Keane [Tue, 17 Sep 2019 14:11:51 +0000 (14:11 +0000)]
Add SpellingNotCalculated to Attribute Enums to suppress UBSan warnings

UBSan downstreams noticed that the assignment of SpellingNotCalculated
to the spellings caused warnings.

llvm-svn: 372124

4 years agogn build: (manually) merge r372076
Nico Weber [Tue, 17 Sep 2019 14:06:05 +0000 (14:06 +0000)]
gn build: (manually) merge r372076

llvm-svn: 372123

4 years ago[llvm-readobj/llvm-objdump] - Improve how tool locate the dynamic table and report...
George Rimar [Tue, 17 Sep 2019 13:58:46 +0000 (13:58 +0000)]
[llvm-readobj/llvm-objdump] - Improve how tool locate the dynamic table and report warnings about that.

Before this patch we gave a priority to a dynamic table found
from the section header.

It was discussed (here: https://reviews.llvm.org/D67078?id=218356#inline-602082)
that probably preferring the table from PT_DYNAMIC is better,
because it is what runtime loader sees.

This patch makes the table from PT_DYNAMIC be chosen at first place if it is available.
But also it adds logic to fall back to SHT_DYNAMIC if the table from the dynamic segment is
broken or fall back to use no table if both are broken.

It adds a few more diagnostic warnings for the logic above.

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

llvm-svn: 372122

4 years ago[ARM] Fix for buildbots
Sam Parker [Tue, 17 Sep 2019 13:46:26 +0000 (13:46 +0000)]
[ARM] Fix for buildbots

Add --verifymachineinstrs and update the remaining low overhead loop
tests.

llvm-svn: 372121

4 years ago[RISCV][NFC] Use NoRegister instead of 0 literal
Luis Marques [Tue, 17 Sep 2019 13:34:17 +0000 (13:34 +0000)]
[RISCV][NFC] Use NoRegister instead of 0 literal

Summary: Trivial cleanup.

Reviewers: asb, lenary

Reviewed By: lenary

Subscribers: hiraditya, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, pzheng, llvm-commits

Tags: #llvm

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

llvm-svn: 372120

4 years ago[OpenCL] Tidy up some comments; NFC
Sven van Haastregt [Tue, 17 Sep 2019 13:32:56 +0000 (13:32 +0000)]
[OpenCL] Tidy up some comments; NFC

llvm-svn: 372119

4 years ago[X86] X86DAGToDAGISel::tryFoldLoad - assert root/parent pointers are non-null. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 13:27:02 +0000 (13:27 +0000)]
[X86] X86DAGToDAGISel::tryFoldLoad - assert root/parent pointers are non-null. NFCI.

Silences a static analyzer warning.

llvm-svn: 372118

4 years agoInterleavedAccessInfo - Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 13:25:56 +0000 (13:25 +0000)]
InterleavedAccessInfo - Don't dereference a dyn_cast result. NFCI.

llvm-svn: 372117

4 years ago[LoopVectorize] Don't dereference a dyn_cast result. NFCI.
Simon Pilgrim [Tue, 17 Sep 2019 13:24:54 +0000 (13:24 +0000)]
[LoopVectorize] Don't dereference a dyn_cast result. NFCI.

The static analyzer is warning about potential null dereferences of dyn_cast<> results, we can use cast<> directly as we know that these cases should all be CastInst, which is why its working atm and anyway cast<> will assert if they aren't.

llvm-svn: 372116

4 years ago[ARM] Fix for MVE load/store stack accesses
David Green [Tue, 17 Sep 2019 12:58:51 +0000 (12:58 +0000)]
[ARM] Fix for MVE load/store stack accesses

MVE loads and stores have a 7 bit immediate range, scaled by the length of the type. This needs to be taught to the stack estimation code to ensure that an emergency spill slot is reserved in case we run out of registers when materialising stack indices.

Also the narrowing loads/stores can be created with frame indices even though they do not accept SP as a register. We need in those cases to make sure we have an emergency register to use as the frame base, as SP can never be used.

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

llvm-svn: 372114

4 years agoHide implementation details in namespaces.
Benjamin Kramer [Tue, 17 Sep 2019 12:56:29 +0000 (12:56 +0000)]
Hide implementation details in namespaces.

llvm-svn: 372113

4 years agolldb: move a test input to the test Inputs dir
Krasimir Georgiev [Tue, 17 Sep 2019 12:23:03 +0000 (12:23 +0000)]
lldb: move a test input to the test Inputs dir

Summary:
This makes the input file for a new test added in r372060 directly
available in the Inputs subdirectory of the test dir.

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

llvm-svn: 372112

4 years ago[ARM][LowOverheadLoops] Add LR def safety check
Sam Parker [Tue, 17 Sep 2019 12:19:32 +0000 (12:19 +0000)]
[ARM][LowOverheadLoops] Add LR def safety check

Converting the *LoopStart pseudo instructions into DLS/WLS results in
LR being defined. These instructions were inserted on the assumption
that LR would already contain the loop counter because a mov is
introduced during ISel as the the consumers in the loop can only use
LR. That assumption proved wrong!

So perform a safety check, finding an appropriate place to insert the
DLS/WLS instructions or revert if this isn't possible.

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

llvm-svn: 372111