platform/upstream/llvm.git
3 years ago[flang] Add new documentation main page
Richard Barton [Fri, 11 Sep 2020 13:17:19 +0000 (14:17 +0100)]
[flang] Add new documentation main page

Add a new index page to be the Flang documentation mainpage instead of
Overview.md, which jumps straight into the compiler Design. The index file
needs to be in .rst format to use the toctree directive to create table of
contents.

Also use the sphinx_markdown_tables extension to generate html tables form
markdown.

A number of additional style changes to the existing docs were needed to make
this work well:
 * Convert all headings to the # style, which works better with toctree's
   titlesonly option. Ensure that there is only one top-level heading per
   document.
 * Add a title to documents that don't have one for rendering on the index.
 * Convert the grammar docs from .txt to .md. for better rendering
 * Fixed broken link to a section in another document - sphinx does not seem to
   support anchor links in markdown files.

Depends on D87226

Reviewed By: sameeranjoshi

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

3 years ago[ARM] Update arm-storebytesmerge.ll test. NFC
David Green [Fri, 11 Sep 2020 12:56:57 +0000 (13:56 +0100)]
[ARM] Update arm-storebytesmerge.ll test. NFC

This test was using a very odd combination of cortex-m7 and Neon. I have
changed it to thumbv7em only.

3 years ago[libTooling] Fix use of `char` in comparison.
Yitzhak Mandelbaum [Wed, 9 Sep 2020 19:11:47 +0000 (19:11 +0000)]
[libTooling] Fix use of `char` in comparison.

Fixes Transformer's `Range` parser to handle `char` in a platform-independent way.

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

3 years ago[MLIR][Linalg] Undo spurious parameter name change
Nicolas Vasilache [Fri, 11 Sep 2020 12:19:00 +0000 (08:19 -0400)]
[MLIR][Linalg] Undo spurious parameter name change

3 years ago[analyzer][MacroExpansion] Fix a crash where multiple parameters resolved to __VA_ARGS__
Kristóf Umann [Fri, 11 Sep 2020 11:51:54 +0000 (13:51 +0200)]
[analyzer][MacroExpansion] Fix a crash where multiple parameters resolved to __VA_ARGS__

In short, macro expansions handled the case where a variadic parameter mapped to
multiple arguments, but not the other way around. An internal ticket was
submitted that demonstrated that we fail an assertion. Macro expansion so far
worked by lexing the source code token-by-token and using the Preprocessor to
turn these tokens into identifiers or just get their proper spelling, but what
this counter intuitively doesn't do, is actually expand these macros, so we have
to do the heavy lifting -- in this case, figure out what __VA_ARGS__ expands
into. Since this case can only occur in a nested macro, the information we
gathered from the containing macro does contain this information. If a parameter
resolves to __VA_ARGS__, we need to temporarily stop getting our tokens from the
lexer, and get the tokens from what __VA_ARGS__ maps to.

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

3 years ago[mlir][Linalg] Refactor StructuredOpInterface - NFC
Nicolas Vasilache [Fri, 11 Sep 2020 10:19:07 +0000 (06:19 -0400)]
[mlir][Linalg] Refactor StructuredOpInterface - NFC

This revision refactors and cleans up a bunch of things to simplify StructuredOpInterface
before work can proceed on Linalg on tensors:
- break out pieces of the StructuredOps trait that are part of the StructuredOpInterface,
- drop referenceIterators and referenceIndexingMaps that end up being more confusing than useful,
- drop NamedStructuredOpTrait

3 years ago[analyzer][MacroExpansion][NFC] Fix a missing test output check
Kirstóf Umann [Wed, 12 Aug 2020 17:00:24 +0000 (19:00 +0200)]
[analyzer][MacroExpansion][NFC] Fix a missing test output check

3 years ago[NFC] Fix the signature and definition of findByPrefix
Andrzej Warzynski [Fri, 11 Sep 2020 11:17:51 +0000 (12:17 +0100)]
[NFC] Fix the signature and definition of findByPrefix

In https://reviews.llvm.org/rG257b29715bb27b7d9f6c3c40c481b6a4af0b37e5,
the definition of OptTable::Info::Flags was changed from `unsigned
short` to `unsigned int`, but the definition/declaration of
OptTable::findByPrefix wasn't updated to reflect that.

This patch updates findByPrefix accordingly.

3 years ago[analyzer][MacroExpansion][NFC] Fix incorrectly calling parameters arguments
Kirstóf Umann [Wed, 12 Aug 2020 15:54:49 +0000 (17:54 +0200)]
[analyzer][MacroExpansion][NFC] Fix incorrectly calling parameters arguments

3 years ago[analyzer][MacroExpansion] Add a few dumps functions
Kirstóf Umann [Wed, 12 Aug 2020 14:33:22 +0000 (16:33 +0200)]
[analyzer][MacroExpansion] Add a few dumps functions

3 years ago[LiveDebugValues][NFC] Re-land 60db26a66d, add instr-ref tests
Jeremy Morse [Fri, 11 Sep 2020 11:10:55 +0000 (12:10 +0100)]
[LiveDebugValues][NFC] Re-land 60db26a66d, add instr-ref tests

This was landed but reverted in 5b9c2b1bea7 due to asan picking up a memory
leak. This is fixed in the change to InstrRefBasedImpl.cpp. Original
commit message follows:

[LiveDebugValues][NFC] Add instr-ref tests, adapt old tests

This patch adds a few tests in DebugInfo/MIR/InstrRef/ of interesting
behaviour that the instruction referencing implementation of
LiveDebugValues has. Mostly, these tests exist to ensure that if you
give the "-experimental-debug-variable-locations" command line switch,
the right implementation runs; and to ensure it behaves the same way as
the VarLoc LiveDebugValues implementation.

I've also touched roughly 30 other tests, purely to make the tests less
rigid about what output to accept. DBG_VALUE instructions are usually
printed with a trailing !debug-location indicating its scope:

  !debug-location !1234

However InstrRefBasedLDV produces new DebugLoc instances on the fly,
meaning there sometimes isn't a numbered node when they're printed,
making the output:

  !debug-location !DILocation(line: 0, blah blah)

Which causes a ton of these tests to fail. This patch removes checks for
that final part of each DBG_VALUE instruction. None of them appear to
be actually checking the scope is correct, just that it's present, so
I don't believe there's any loss in coverage here.

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

3 years ago[IPO] Remove unnecessary Module.h includes. NFCI.
Simon Pilgrim [Fri, 11 Sep 2020 11:12:18 +0000 (12:12 +0100)]
[IPO] Remove unnecessary Module.h includes. NFCI.

Uses of Module are all implicit to PassInfoMixin<> so we can guarantee PassManager.h to handle it for us.

3 years agoAttributor.h - remove unused includes. NFCI.
Simon Pilgrim [Fri, 11 Sep 2020 10:44:03 +0000 (11:44 +0100)]
Attributor.h - remove unused includes. NFCI.

3 years agoPluginLoader.h - only include CommandLine.h if required. NFCI.
Simon Pilgrim [Fri, 11 Sep 2020 10:24:59 +0000 (11:24 +0100)]
PluginLoader.h - only include CommandLine.h if required. NFCI.

We only need this if DONT_GET_PLUGIN_LOADER_OPTION isn't defined.

3 years ago[DFSan] XFail a test that's suffering too much optimization
Jeremy Morse [Fri, 11 Sep 2020 10:22:27 +0000 (11:22 +0100)]
[DFSan] XFail a test that's suffering too much optimization

See https://bugs.llvm.org/show_bug.cgi?id=47488 , rGfb109c42d9 is
optimizing out part of this test.

3 years ago[clang][aarch64] Fix mangling of bfloat16 neon vectors
Cullen Rhodes [Thu, 10 Sep 2020 15:41:36 +0000 (15:41 +0000)]
[clang][aarch64] Fix mangling of bfloat16 neon vectors

The AAPCS64 specifies the internal type is used for c++ mangling. For
bfloat16 it was defined as `BFloat16` when it should be `Bfloat16`, i.e.
lowercase 'f'.

For more information, see:

https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#appendix-support-for-advanced-simd-extensions

Reviewed By: stuij

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

3 years ago[flang][driver] Add the new flang compiler and frontend drivers
Caroline Concatto [Fri, 11 Sep 2020 09:17:31 +0000 (10:17 +0100)]
[flang][driver] Add the new flang compiler and frontend drivers

Summary:

This is the first patch implementing the new Flang driver as outlined in [1],
[2] & [3]. It creates Flang driver (`flang-new`) and Flang frontend driver
(`flang-new -fc1`). These will be renamed as `flang` and `flang -fc1` once the
current Flang throwaway driver, `flang`, can be replaced with `flang-new`.

Currently only 2 options are supported: `-help` and `--version`.

`flang-new` is implemented in terms of libclangDriver, defaulting the driver
mode to `FlangMode` (added to libclangDriver in [4]). This ensures that the
driver runs in Flang mode regardless of the name of the binary inferred from
argv[0].

The design of the new Flang compiler and frontend drivers is inspired by it
counterparts in Clang [3]. Currently, the new Flang compiler and frontend
drivers re-use Clang libraries: clangBasic, clangDriver and clangFrontend.

To identify Flang options, this patch adds FlangOption/FC1Option enums.
Driver::printHelp is updated so that `flang-new` prints only Flang options.
The new Flang driver is disabled by default. To enable it, set
`-DBUILD_FLANG_NEW_DRIVER=ON` when configuring CMake and add clang to
`LLVM_ENABLE_PROJECTS` (e.g. -DLLVM_ENABLE_PROJECTS=“clang;flang;mlir”).

[1] “RFC: new Flang driver - next steps”
http://lists.llvm.org/pipermail/flang-dev/2020-July/000470.html
[2] “RFC: Adding a fortran mode to the clang driver for flang”
http://lists.llvm.org/pipermail/cfe-dev/2019-June/062669.html
[3] “RFC: refactoring libclangDriver/libclangFrontend to share with Flang”
http://lists.llvm.org/pipermail/cfe-dev/2020-July/066393.html
[4] https://reviews.llvm.org/rG6bf55804924d5a1d902925ad080b1a2b57c5c75c

co-authored-by: Andrzej Warzynski <andrzej.warzynski@arm.com>

Reviewed By: richard.barton.arm, sameeranjoshi

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

3 years ago[clang][aarch64] Fix ILP32 ABI for arm_sve_vector_bits
Cullen Rhodes [Tue, 8 Sep 2020 17:14:17 +0000 (17:14 +0000)]
[clang][aarch64] Fix ILP32 ABI for arm_sve_vector_bits

The element types of scalable vectors are defined in terms of stdint
types in the ACLE. This patch fixes the mapping to builtin types for the
ILP32 ABI when creating VLS types with the arm_sve_vector_bits, where
the mapping is as follows:

  int32_t -> LongTy
  int64_t -> LongLongTy
  uint32_t -> UnsignedLongTy
  uint64_t -> UnsignedLongLongTy

This is implemented by leveraging getBuiltinVectorTypeInfo which is
target agnostic since it calls ASTContext::getIntTypeForBitwidth for
integer types. The element type for svfloat16_t is changed from
Float16Ty to HalfTy when creating VLS types since this is what is used
elsewhere.

For more information, see:

https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#types-varying-by-data-model
https://github.com/ARM-software/abi-aa/blob/master/aapcs64/aapcs64.rst#appendix-support-for-scalable-vectors

Reviewed By: efriedma

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

3 years ago[X86] Keep variables from getDataLayout/getDebugLoc calls as const reference. NFCI.
Simon Pilgrim [Fri, 11 Sep 2020 09:09:10 +0000 (10:09 +0100)]
[X86] Keep variables from getDataLayout/getDebugLoc calls as const reference. NFCI.

These are only ever used as references in the called functions, so just pass the original reference instead of copying it.

3 years agoBasicTTIImpl.h - remove unused MCSchedule.h include. NFCI.
Simon Pilgrim [Thu, 10 Sep 2020 17:03:41 +0000 (18:03 +0100)]
BasicTTIImpl.h - remove unused MCSchedule.h include. NFCI.

3 years ago[clangd][NFC] Get rid of an `else after return`
Kadir Cetinkaya [Fri, 11 Sep 2020 09:30:06 +0000 (11:30 +0200)]
[clangd][NFC] Get rid of an `else after return`

3 years ago[AMDGPU] Make movreld-bug test case more robust
Jay Foad [Fri, 11 Sep 2020 09:23:04 +0000 (10:23 +0100)]
[AMDGPU] Make movreld-bug test case more robust

Without this, future optimizer improvements can optimize the entire
function to "return 0".

3 years ago[CodeGenPrepare] Simplify code. NFCI.
Benjamin Kramer [Fri, 11 Sep 2020 09:24:08 +0000 (11:24 +0200)]
[CodeGenPrepare] Simplify code. NFCI.

3 years ago[mlir][Linalg] Print both types for linalg.transpose
Benjamin Kramer [Thu, 10 Sep 2020 15:56:15 +0000 (17:56 +0200)]
[mlir][Linalg] Print both types for linalg.transpose

Previously only the input type was printed, and the parser applied it to
both input and output, creating an invalid transpose. Print and parse
both types, and verify that they match.

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

3 years agoRevert "[ORC] Make MaterializationResponsibility immovable, pass by unique_ptr."
Florian Hahn [Fri, 11 Sep 2020 08:35:20 +0000 (09:35 +0100)]
Revert "[ORC] Make MaterializationResponsibility immovable, pass by unique_ptr."

This reverts commit c74900ca67241bf963b7a4cfa1fae8eadf6bb8cd.

This appears to be breaking some builds on macOS and has been causing
build failures on Green Dragon (see below). I am reverting this for now,
to unblock testing on Green Dragon.

http://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-incremental/18144/console

[65/187] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -DBUILD_EXAMPLES -DGTEST_HAS_RTTI=0 -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iexamples/ThinLtoJIT -I/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT -Iinclude -I/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fdiagnostics-color -O3  -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -mmacosx-version-min=10.9    -fno-exceptions -fno-rtti -UNDEBUG -std=c++14 -MD -MT examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o -MF examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o.d -o examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o -c /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT/ThinLtoDiscoveryThread.cpp
FAILED: examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -DBUILD_EXAMPLES -DGTEST_HAS_RTTI=0 -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iexamples/ThinLtoJIT -I/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT -Iinclude -I/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/include -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fdiagnostics-color -O3  -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -mmacosx-version-min=10.9    -fno-exceptions -fno-rtti -UNDEBUG -std=c++14 -MD -MT examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o -MF examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o.d -o examples/ThinLtoJIT/CMakeFiles/ThinLtoJIT.dir/ThinLtoDiscoveryThread.cpp.o -c /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT/ThinLtoDiscoveryThread.cpp
In file included from /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT/ThinLtoDiscoveryThread.cpp:7:
/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/examples/ThinLtoJIT/ThinLtoInstrumentationLayer.h:37:68: error: non-virtual member function marked 'override' hides virtual member function
  void emit(MaterializationResponsibility R, ThreadSafeModule TSM) override;
                                                                   ^
/Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-incremental/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Layer.h:103:16: note: hidden overloaded virtual function 'llvm::orc::IRLayer::emit' declared here: type mismatch at 1st parameter ('std::unique_ptr<MaterializationResponsibility>' vs 'llvm::orc::MaterializationResponsibility')
  virtual void emit(std::unique_ptr<MaterializationResponsibility> R,
               ^
1 error generated.

3 years ago[MC] [Win64EH] Fix builds with expensive checks enabled
Martin Storsjö [Fri, 11 Sep 2020 08:14:45 +0000 (11:14 +0300)]
[MC] [Win64EH] Fix builds with expensive checks enabled

This fixes a failed assert if expensive checks are enabled,
since 1308bb99e06752ab0b5175c92da31083f91af921.

3 years ago[mlir] Fix generation of AVX512 dialect documentation
Marius Brehler [Thu, 10 Sep 2020 15:37:56 +0000 (17:37 +0200)]
[mlir] Fix generation of AVX512 dialect documentation

This changes adjusts the documentation generation for the AVX512 dialect. The machanism to generate documentation was changed with https://github.com/llvm/llvm-project/commit/1a083f027f33f4014247df4c0e757e23d5cdab64.

Reviewed By: nicolasvasilache

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

3 years agoUncapitalize word in LanguageExtensions.rst
Guillaume Chatelet [Fri, 11 Sep 2020 08:08:02 +0000 (10:08 +0200)]
Uncapitalize word in LanguageExtensions.rst

3 years ago[clang][Sparc] Default to -mcpu=v9 for Sparc V8 on Solaris
Rainer Orth [Fri, 11 Sep 2020 07:53:19 +0000 (09:53 +0200)]
[clang][Sparc] Default to -mcpu=v9 for Sparc V8 on Solaris

As reported in Bug 42535, `clang` doesn't inline atomic ops on 32-bit
Sparc, unlike `gcc` on Solaris.  In a 1-stage build with `gcc`, only two
testcases are affected (currently `XFAIL`ed), while in a 2-stage build more
than 100 tests `FAIL` due to this issue.

The reason for this `gcc`/`clang` difference is that `gcc` on 32-bit
Solaris/SPARC defaults to `-mpcu=v9` where atomic ops are supported, unlike
with `clang`'s default of `-mcpu=v8`.  This patch changes `clang` to use
`-mcpu=v9` on 32-bit Solaris/SPARC, too.

Doing so uncovered two bugs:

`clang -m32 -mcpu=v9` chokes with any Solaris system headers included:

  /usr/include/sys/isa_defs.h:461:2: error: "Both _ILP32 and _LP64 are defined"
  #error "Both _ILP32 and _LP64 are defined"

While `clang` currently defines `__sparcv9` in a 32-bit `-mcpu=v9`
compilation, neither `gcc` nor Studio `cc` do.  In fact, the Studio 12.6
`cc(1)` man page clearly states:

            These predefinitions are valid in all modes:
  [...]
               __sparcv8 (SPARC)
               __sparcv9 (SPARC -m64)

At the same time, the patch defines `__GCC_HAVE_SYNC_COMPARE_AND_SWAP_[1248]`
for a 32-bit Sparc compilation with any V9 cpu.  I've also changed
`MaxAtomicInlineWidth` for V9, matching what `gcc` does and the Oracle
Developer Studio 12.6: C User's Guide documents (Ch. 3, Support for Atomic
Types, 3.1 Size and Alignment of Atomic C Types).

The two testcases that had been `XFAIL`ed for Bug 42535 are un-`XFAIL`ed
again.

Tested on `sparcv9-sun-solaris2.11` and `amd64-pc-solaris2.11`.

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

3 years ago[mlir][Linalg] Make LinalgBaseTilingPattern not delete the original operation.
MaheshRavishankar [Fri, 11 Sep 2020 06:56:34 +0000 (23:56 -0700)]
[mlir][Linalg] Make LinalgBaseTilingPattern not delete the original operation.

The LinalgTilingPattern class dervied from the base deletes the
original operation. This allows for the use case where the more
transformations are necessary on the original operation after
tiling. In such cases the pattern can derive from
LinalgBaseTilingPattern instead of LinalgTilingPattern.

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

3 years ago[SVE][CodeGen] Fix InlineFunction for scalable vectors
David Sherwood [Thu, 3 Sep 2020 10:57:55 +0000 (11:57 +0100)]
[SVE][CodeGen] Fix InlineFunction for scalable vectors

When inlining functions containing allocas of scalable vectors we
cannot specify the size in the lifetime markers, since we don't
know this at compile time.

Added new test here:

  test/Transforms/Inline/AArch64/sve-alloca-merge.ll

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

3 years ago[NewPM] Introduce PreserveCFG check
Yevgeny Rouban [Fri, 11 Sep 2020 05:55:24 +0000 (12:55 +0700)]
[NewPM] Introduce PreserveCFG check

Check that all passes, which report they preserve CFG,
are really preserving CFG.
A new standard instrumentation is introduced. It can be
switched on/off by the flag verify-cfg-preserved, which
is on by default for debug builds.

Reviewers: kuhar, fedor.sergeev

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

3 years ago[MC] [Win64EH] Write packed ARM64 epilogues if possible
Martin Storsjö [Mon, 7 Sep 2020 21:00:07 +0000 (00:00 +0300)]
[MC] [Win64EH] Write packed ARM64 epilogues if possible

This gives a pretty substantial size reduction; for a 6.5 MB
DLL with 300 KB .xdata, the .xdata shrinks by 66 KB.

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

3 years ago[MC] [Win64EH] Canonicalize ARM64 unwind opcodes
Martin Storsjö [Mon, 7 Sep 2020 11:45:37 +0000 (14:45 +0300)]
[MC] [Win64EH] Canonicalize ARM64 unwind opcodes

Convert 2-byte opcodes to equivalent 1-byte ones.

Adjust the existing exhaustive testcase to avoid being altered by
the simplification rules (to keep that test exercising all individual
opcodes).

Fix the assembler parser limits for register pairs; for .seh_save_regp
and .seh_save_regp_x, we can allow up to x29, for a x29+x30 pair
(which gets remapped to the UOP_SaveFPLR(X) opcodes), for .seh_save_fregp
and .seh_save_fregpx, allow up to d14+d15.

Not creating .seh_save_next for float register pairs, as the
actual unwinder implementation in current versions of Windows is buggy
for that case.

This gives a minimal but measurable size reduction. (For a 6.5 MB
DLL with 300 KB .xdata, the .xdata shrinks by 48 bytes. The opcode
sequences are padded to a 4 byte boundary, so very small improvements
might not end up mattering directly.)

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

3 years ago[CodeGen] [WinException] Remove a redundant explicit section switch for aarch64
Martin Storsjö [Thu, 10 Sep 2020 09:37:34 +0000 (12:37 +0300)]
[CodeGen] [WinException] Remove a redundant explicit section switch for aarch64

The following EmitWinEHHandlerData() implicitly switches to .xdata, just
like on x86_64.

This became orphaned from the original code requiring it in
0b61d220c9b1f0 / https://reviews.llvm.org/D61095.

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

3 years ago[Clang] Clarify __builtin_memcpy_inline documentation
Guillaume Chatelet [Thu, 10 Sep 2020 14:27:27 +0000 (14:27 +0000)]
[Clang] Clarify __builtin_memcpy_inline documentation

This patch updates the documentation about `__builtin_memcpy_inline` and reorders the sections so it is more consitent and understandable.

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

3 years ago[NFC][PowerPC] Add tests of constants-i64.
Esme-Yi [Fri, 11 Sep 2020 07:16:58 +0000 (07:16 +0000)]
[NFC][PowerPC] Add tests of constants-i64.

3 years ago[EarlyCSE] Remove unnecessary operand swap.
Michael Liao [Fri, 11 Sep 2020 05:58:11 +0000 (01:58 -0400)]
[EarlyCSE] Remove unnecessary operand swap.

- As min/max are commutative operators, there is no need to swap
  operands. That breaks the convention calculating the hash value.

3 years ago[DebugInfo] Fixing CodeView assert related to lowerBound field of DISubrange.
Alok Kumar Sharma [Fri, 11 Sep 2020 05:41:39 +0000 (11:11 +0530)]
[DebugInfo] Fixing CodeView assert related to lowerBound field of DISubrange.

    This is to fix CodeView build failure https://bugs.llvm.org/show_bug.cgi?id=47287
    after DIsSubrange upgrade D80197

    Assert condition is now removed and Count is calculated in case LowerBound
    is absent or zero and Count or UpperBound is constant. If Count is unknown
    it is later handled as VLA (currently Count is set to zero).

Reviewed By: rnk

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

3 years ago[NFC][MLInliner] Presort instruction successions.
Mircea Trofin [Fri, 11 Sep 2020 03:25:42 +0000 (20:25 -0700)]
[NFC][MLInliner] Presort instruction successions.

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

3 years agolibclc/spirv: Add missing files from D85911
Jan Vesely [Thu, 10 Sep 2020 19:43:28 +0000 (15:43 -0400)]
libclc/spirv: Add missing files from D85911

Fixes: 060c8e083dd637866854acb6a0823c45b2ef68ef
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
3 years ago[EarlyCSE] Fix and recommit the revised c9826829d74e637163fdb0351870b8204e62d6e6
Michael Liao [Fri, 11 Sep 2020 03:11:22 +0000 (23:11 -0400)]
[EarlyCSE] Fix and recommit the revised c9826829d74e637163fdb0351870b8204e62d6e6

In addition to calculate hash consistently by swapping SELECT's
operands, we also need to inverse the select pattern favor to match the
original logic.

[EarlyCSE] Equivalent SELECTs should hash equally

DenseMap<SimpleValue> assumes that, if its isEqual method returns true
for two elements, then its getHashValue method must return the same value
for them. This invariant is broken when one SELECT node is a min/max
operation, and the other can be transformed into an equivalent min/max by
inverting its predicate and swapping its operands. This patch fixes an
assertion failure that would occur intermittently while compiling the
following IR:

    define i32 @t(i32 %i) {
      %cmp = icmp sle i32 0, %i
      %twin1 = select i1 %cmp, i32 %i, i32 0
      %cmpinv = icmp sgt i32 0, %i
      %twin2 = select i1 %cmpinv,  i32 0, i32 %i
      %sink = add i32 %twin1, %twin2
      ret i32 %sink
    }

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

3 years ago[Asan] Fix __asan_update_allocation_context
Vitaly Buka [Fri, 11 Sep 2020 02:59:31 +0000 (19:59 -0700)]
[Asan] Fix __asan_update_allocation_context

Update both thread and stack.
Update thread and stack as atomic operation.
Keep all 32bit of TID as now we have enough bits.

Depends on D87135.

Reviewed By: morehouse

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

3 years agoRevert "[EarlyCSE] Equivalent SELECTs should hash equally"
Michael Liao [Fri, 11 Sep 2020 02:37:35 +0000 (22:37 -0400)]
Revert "[EarlyCSE] Equivalent SELECTs should hash equally"

This reverts commit c9826829d74e637163fdb0351870b8204e62d6e6 as it
breaks regression tests.

3 years agoRemove dependency on clangASTMatchers.
Michael Liao [Fri, 11 Sep 2020 02:16:42 +0000 (22:16 -0400)]
Remove dependency on clangASTMatchers.

- It seems no long required for shared library builds.

3 years agoscudo: Remove the THREADLOCAL macro.
Peter Collingbourne [Thu, 10 Sep 2020 19:38:42 +0000 (12:38 -0700)]
scudo: Remove the THREADLOCAL macro.

Replace all remaining uses with thread_local, which is a C++11
standard feature.

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

3 years agoscudo: Introduce a new mechanism to let Scudo access a platform-specific TLS slot
Peter Collingbourne [Wed, 9 Sep 2020 22:15:46 +0000 (15:15 -0700)]
scudo: Introduce a new mechanism to let Scudo access a platform-specific TLS slot

An upcoming change to Scudo will change how we use the TLS slot
in tsd_shared.h, which will be a little easier to deal with if
we can remove the code path that calls pthread_getspecific and
pthread_setspecific. The only known user of this code path is Fuchsia.

We can't eliminate this code path by making Fuchsia use ELF TLS
because although Fuchsia supports ELF TLS, it is not supported within
libc itself. To address this, Roland McGrath on the Fuchsia team has
proposed that Scudo will optionally call a platform-provided function
to access a TLS slot reserved for Scudo. Android also has a reserved
TLS slot, but the code that accesses the TLS slot lives in Scudo.

We can eliminate some complexity and duplicated code by having Android
use the same mechanism that was proposed for Fuchsia, which is what
this change does. A separate change to Android implements it.

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

3 years ago[mlir][Analysis] Allow Slice Analysis to work with linalg::LinalgOp
MaheshRavishankar [Thu, 10 Sep 2020 23:47:29 +0000 (16:47 -0700)]
[mlir][Analysis] Allow Slice Analysis to work with linalg::LinalgOp

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

3 years ago[lldb] Add missing LLDB_REGISTER_CONSTRUCTOR in SBPlatform
Jonas Devlieghere [Fri, 11 Sep 2020 01:48:24 +0000 (18:48 -0700)]
[lldb] Add missing LLDB_REGISTER_CONSTRUCTOR in SBPlatform

This fixes the following assertion in TestPlatformPython.py.

  Assertion failed: (id != 0 && "Forgot to add function to
  registry?")

3 years ago[obj2yaml] Add support for dumping the .debug_ranges section.
Xing GUO [Fri, 11 Sep 2020 00:42:16 +0000 (08:42 +0800)]
[obj2yaml] Add support for dumping the .debug_ranges section.

This patch adds support for dumping the .debug_ranges section to
elf2yaml.

Reviewed By: jhenderson

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

3 years agoRemove unused variable introduce in 0448d11a06b451a causing build
Zarko Todorovski [Fri, 11 Sep 2020 00:07:11 +0000 (20:07 -0400)]
Remove unused variable introduce in 0448d11a06b451a causing build
failures with -Werror on.

3 years agoFix wrong comment about enabling optimizations to work around a bug
Reid Kleckner [Thu, 10 Sep 2020 23:45:20 +0000 (16:45 -0700)]
Fix wrong comment about enabling optimizations to work around a bug

3 years ago[AArch64][GlobalISel] Don't emit a branch for a fallthrough G_BR at -O0.
Amara Emerson [Thu, 10 Sep 2020 21:57:16 +0000 (14:57 -0700)]
[AArch64][GlobalISel] Don't emit a branch for a fallthrough G_BR at -O0.

With optimizations we leave the decision to eliminate fallthrough branches to
bock placement, but at -O0 we should do it in the selector to save code size.

This regressed -O0 with a recent change to a combiner.

3 years agoUse pragmas to work around MSVC x86_32 debug miscompile bug
Reid Kleckner [Thu, 10 Sep 2020 18:23:42 +0000 (11:23 -0700)]
Use pragmas to work around MSVC x86_32 debug miscompile bug

Halide users reported this here: https://llvm.org/pr46176
I reported the issue to MSVC here:
https://developercommunity.visualstudio.com/content/problem/1179643/msvc-copies-overaligned-non-trivially-copyable-par.html

This codepath is apparently not covered by LLVM's unit tests, so I added
coverage in a unit test.

If we want to support this configuration going forward, it means that is
in general not safe to pass a SmallVector<T, N> by value if alignof(T)
is greater than 4. This doesn't appear to come up often because passing
a SmallVector by value is inefficient and not idiomatic: it copies the
inline storage. In this case, the SmallVector<LLT,4> is captured by
value by a lambda, and the lambda is passed by value into std::function,
and that's how we hit the bug.

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

3 years ago[flang] Fix assert on constant folding of extended types
Peter Steinfeld [Fri, 4 Sep 2020 15:44:52 +0000 (08:44 -0700)]
[flang] Fix assert on constant folding of extended types

When we define a derived type that extends another derived type, we can then
create a structure constructor that contains values for the fields of both the
child type and its parent.  The compiler's internal representation of that
value contains the name of the parent type where a component name would
normally appear.  This caused an assert during contant folding.

There are three cases for components that appear in structure constructors.
The first is the normal case of a component appearing in a structure
constructor for its type.

  The second is a component of the parent (or grandparent) type appearing in a
  structure constructor for the child type.

  The third is the parent type component, which can appear in the structure
  constructor of its child.

There are also cases where the component can be arrays.

I created the test case folding12.f90 that covers all of these cases and
modified the code to handle them.

Most of my changes were to the "Find()" method of the type
"StructureConstructor" where I added code to cover the second and third cases
described above.  To handle these cases, I needed to create a
"StructureConstructor" for the parent type component and return it.  To handle
returning a newly created "StructureConstructor", I changed the return type of
"Find()" to be "std::optional" rather than an ordinary pointer.

This change supersedes D86172.

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

3 years ago[ELF] Make two PPC64.cpp variables constexpr. NFC
Fangrui Song [Thu, 10 Sep 2020 21:30:00 +0000 (14:30 -0700)]
[ELF] Make two PPC64.cpp variables constexpr. NFC

Why are they mutable? :)

3 years ago[DSE] Switch to MemorySSA-backed DSE by default.
Florian Hahn [Thu, 10 Sep 2020 21:00:10 +0000 (22:00 +0100)]
[DSE] Switch to MemorySSA-backed DSE by default.

The tests have been updated and I plan to move them from the MSSA
directory up.

Some end-to-end tests needed small adjustments. One difference to the
legacy DSE is that legacy DSE also deletes trivially dead instructions
that are unrelated to memory operations. Because MemorySSA-backed DSE
just walks the MemorySSA, we only visit/check memory instructions. But
removing unrelated dead instructions is not really DSE's job and other
passes will clean up.

One noteworthy change is in llvm/test/Transforms/Coroutines/ArgAddr.ll,
but I think this comes down to legacy DSE not handling instructions that
may throw correctly in that case. To cover this with MemorySSA-backed
DSE, we need an update to llvm.coro.begin to treat it's return value to
belong to the same underlying object as the passed pointer.

There are some minor cases MemorySSA-backed DSE currently misses, e.g. related
to atomic operations, but I think those can be implemented after the switch.

This has been discussed on llvm-dev:
http://lists.llvm.org/pipermail/llvm-dev/2020-August/144417.html

For the MultiSource/SPEC2000/SPEC2006 the number of eliminated stores
goes from ~17500 (legayc DSE) to ~26300 (MemorySSA-backed). More numbers
and details in the thread on llvm-dev.

Impact on CTMark:
```
                                     Legacy Pass Manager
                        exec instrs    size-text
O3                       + 0.60%        - 0.27%
ReleaseThinLTO           + 1.00%        - 0.42%
ReleaseLTO-g.            + 0.77%        - 0.33%
RelThinLTO (link only)   + 0.87%        - 0.42%
RelLO-g (link only)      + 0.78%        - 0.33%
```
http://llvm-compile-time-tracker.com/compare.php?from=3f22e96d95c71ded906c67067d75278efb0a2525&to=ae8be4642533ff03803967ee9d7017c0d73b0ee0&stat=instructions
```
                                     New Pass Manager
                       exec instrs.   size-text
O3                       + 0.95%       - 0.25%
ReleaseThinLTO           + 1.34%       - 0.41%
ReleaseLTO-g.            + 1.71%       - 0.35%
RelThinLTO (link only)   + 0.96%       - 0.41%
RelLO-g (link only)      + 2.21%       - 0.35%
```
http://195.201.131.214:8000/compare.php?from=3f22e96d95c71ded906c67067d75278efb0a2525&to=ae8be4642533ff03803967ee9d7017c0d73b0ee0&stat=instructions

Reviewed By: asbirlea, xbolva00, nikic

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

3 years ago[EarlyCSE] Equivalent SELECTs should hash equally
Bryan Chan [Sat, 29 Aug 2020 21:25:16 +0000 (17:25 -0400)]
[EarlyCSE] Equivalent SELECTs should hash equally

DenseMap<SimpleValue> assumes that, if its isEqual method returns true
for two elements, then its getHashValue method must return the same value
for them. This invariant is broken when one SELECT node is a min/max
operation, and the other can be transformed into an equivalent min/max by
inverting its predicate and swapping its operands. This patch fixes an
assertion failure that would occur intermittently while compiling the
following IR:

    define i32 @t(i32 %i) {
      %cmp = icmp sle i32 0, %i
      %twin1 = select i1 %cmp, i32 %i, i32 0
      %cmpinv = icmp sgt i32 0, %i
      %twin2 = select i1 %cmpinv,  i32 0, i32 %i
      %sink = add i32 %twin1, %twin2
      ret i32 %sink
    }

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

3 years ago[libc][obvious] Include Sqrt.h in SqrtLongDoubleX86.h.
Siva Chandra Reddy [Thu, 10 Sep 2020 19:39:50 +0000 (12:39 -0700)]
[libc][obvious] Include Sqrt.h in SqrtLongDoubleX86.h.

This makes SqrtLongDoubleX86.h includable by itself.

3 years ago[ORC] Make MaterializationResponsibility immovable, pass by unique_ptr.
Lang Hames [Thu, 10 Sep 2020 20:10:27 +0000 (13:10 -0700)]
[ORC] Make MaterializationResponsibility immovable, pass by unique_ptr.

Making MaterializationResponsibility instances immovable allows their
associated VModuleKeys to be updated by the ExecutionSession while the
responsibility is still in-flight. This will be used in the upcoming
removable code feature to enable safe merging of resource keys even if
there are active compiles using the keys being merged.

3 years ago[DemandedBits][BDCE] Add support for min/max intrinsics
Nikita Popov [Fri, 4 Sep 2020 20:40:46 +0000 (22:40 +0200)]
[DemandedBits][BDCE] Add support for min/max intrinsics

Add DemandedBits / BDCE support for min/max intrinsics: If the low
bits are not demanded in the result, they also aren't demanded in
the operands.

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

3 years ago[DemandedBits] Add braces to large if (NFC)
Nikita Popov [Thu, 10 Sep 2020 20:11:04 +0000 (22:11 +0200)]
[DemandedBits] Add braces to large if (NFC)

While the if only contains a single statement, it happens to be
a huge switch. Add braces to make this code easier to read.

3 years ago[InstCombine] Add more tests for select op replacement (NFC)
Nikita Popov [Thu, 10 Sep 2020 16:53:08 +0000 (18:53 +0200)]
[InstCombine] Add more tests for select op replacement (NFC)

3 years ago[InstCombine] Regenerate test checks (NFC)
Nikita Popov [Thu, 10 Sep 2020 16:51:34 +0000 (18:51 +0200)]
[InstCombine] Regenerate test checks (NFC)

3 years agoGlobalISel: Combine fneg(fneg x) to x
Volkan Keles [Thu, 10 Sep 2020 19:57:38 +0000 (12:57 -0700)]
GlobalISel: Combine fneg(fneg x) to x

https://reviews.llvm.org/D87473

3 years agoDiable sanitizer options for amdgpu
Yaxun (Sam) Liu [Thu, 10 Sep 2020 15:51:31 +0000 (11:51 -0400)]
Diable sanitizer options for amdgpu

Currently AMDGPU does not support sanitizer. Disable
sanitizer options for now until they are supported.

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

3 years ago[libc][NFC][obvious] Remove a redudant dep of strcmp implementation.
Siva Chandra Reddy [Thu, 10 Sep 2020 18:45:21 +0000 (11:45 -0700)]
[libc][NFC][obvious] Remove a redudant dep of strcmp implementation.

3 years ago[ImplicitNullChecks] NFC: Remove unused PointerReg arg in dep analysis
Anna Thomas [Thu, 10 Sep 2020 19:30:42 +0000 (15:30 -0400)]
[ImplicitNullChecks] NFC: Remove unused PointerReg arg in dep analysis

The PointerReg arg was passed into the dependence function for an
assertion which no longer exists. So, this patch updates the dependence
functions to avoid the PointerReg in the signature.

Tests-Run: make check

3 years ago[SVE] Bail from VectorUtils heuristics for scalable vectors
Christopher Tetreault [Thu, 10 Sep 2020 18:29:16 +0000 (11:29 -0700)]
[SVE] Bail from VectorUtils heuristics for scalable vectors

Bail from maskIsAllZeroOrUndef and maskIsAllOneOrUndef prior to iterating over the number of
elements for scalable vectors.

Assert that the mask type is not scalable in possiblyDemandedEltsInMask .

Assert that the types are correct in all three functions.

Reviewed By: efriedma

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

3 years ago[Hexagon] Split pair-based masked memops
Krzysztof Parzyszek [Thu, 10 Sep 2020 19:15:37 +0000 (14:15 -0500)]
[Hexagon] Split pair-based masked memops

3 years agoFix operator!= for Dialects.
Federico Lebrón [Thu, 10 Sep 2020 19:18:07 +0000 (19:18 +0000)]
Fix operator!= for Dialects.

Currently the global operator!=(bool, bool) is selected due to the implicit bool
conversion operator. Since this is never the desired semantics, we give it a
standard operator!= and make the bool conversion explicit.

Depends On D86809

Reviewed By: rriddle

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

3 years ago[gn build] (semi-manually) port 009cd4e4910
Nico Weber [Thu, 10 Sep 2020 19:10:12 +0000 (15:10 -0400)]
[gn build] (semi-manually) port 009cd4e4910

3 years agoAllow Dialects to be initialized via nullptr.
Federico Lebrón [Thu, 10 Sep 2020 19:14:42 +0000 (19:14 +0000)]
Allow Dialects to be initialized via nullptr.

This allows Dialect to follow the MLIR style of nullable objects, and in fact is expected by `Dialect::operator bool() const` which already tests whether `def == nullptr`. This just wasn't a reachable situation, because the constructor was dereferencing the pointer unconditionally.

Reviewed By: rriddle

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

3 years agoMake struct dialects have the same field name as everything else, 'dialect'.
Federico Lebrón [Thu, 10 Sep 2020 19:00:49 +0000 (19:00 +0000)]
Make struct dialects have the same field name as everything else, 'dialect'.

Also make the behavior of getting a dialect more forgiving, in the case where
there isn't a dialect associated with an attribute.

Depends On D86807

Reviewed By: mehdi_amini

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

3 years ago[WebAssembly] Set unreachable as canonical to permit disassembly
Dominic Chen [Thu, 10 Sep 2020 05:02:13 +0000 (01:02 -0400)]
[WebAssembly] Set unreachable as canonical to permit disassembly

Currently, using llvm-objdump to disassemble a function containing
unreachable will trigger an assertion while decoding the opcode, since both
unreachable and debug_unreachable have the same encoding. To avoid this, set
unreachable as the canonical decoding.

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

3 years agoRevert "[Support] Use unique_function rather than std::function for ThreadPool TaskTy."
Lang Hames [Thu, 10 Sep 2020 18:36:13 +0000 (11:36 -0700)]
Revert "[Support] Use unique_function rather than std::function for ThreadPool TaskTy."

This reverts commit d9c8b0256cfc673c2413b13993c9440be598818f.

Some MSVC std::packaged_task implementations are not compatible with move-only types.
This caused failures on some of the Windows builders (e.g.
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/69412).

Reverting until I can come up with a workaround.

3 years ago[SLPVectorizer][X86][AMDGPU] Remove fcmp+select to fmin/fmax reduction support.
Craig Topper [Wed, 9 Sep 2020 20:45:36 +0000 (13:45 -0700)]
[SLPVectorizer][X86][AMDGPU] Remove fcmp+select to fmin/fmax reduction support.

Previously we could match fcmp+select to a reduction if the fcmp had
the nonans fast math flag. But if the select had the nonans fast
math flag, InstCombine would turn it into a fminnum/fmaxnum intrinsic
before SLP gets to it. Seems fairly likely that if one of the
fcmp+select pair have the fast math flag, they both would.

My plan is to start vectorizing the fmaxnum/fminnum version soon,
but I wanted to get this code out as it had some of the strangest
fast math flag behaviors.

3 years ago[compiler-rt] [netbsd] Regenerate syscall hooks
Kamil Rytarowski [Thu, 10 Sep 2020 18:11:35 +0000 (20:11 +0200)]
[compiler-rt] [netbsd] Regenerate syscall hooks

Sync with NetBSD 9.99.72.

3 years ago[compiler-rt] [netbsd] Update generate_netbsd_syscalls.awk
Kamil Rytarowski [Thu, 10 Sep 2020 18:09:53 +0000 (20:09 +0200)]
[compiler-rt] [netbsd] Update generate_netbsd_syscalls.awk

Sync with NetBSD 9.99.72.

3 years ago[PGO] Skip if an IndirectBrInst critical edge cannot be split
Fangrui Song [Thu, 10 Sep 2020 18:03:48 +0000 (11:03 -0700)]
[PGO] Skip if an IndirectBrInst critical edge cannot be split

PGOInstrumentation runs `SplitIndirectBrCriticalEdges` but some IndirectBrInst
critical edge cannot be split. `getInstrBB` will crash when calling `SplitCriticalEdge`, e.g.

  int foo(char *p) {
    void *targets[2];
    targets[0] = &&indirect;
    targets[1] = &&end;
    for (;; p++)
      if (*p == 7) {
  indirect:
        goto *targets[p[1]]; // the self loop is critical in -O
      }
  end:
    return 0;
  }

Skip such critical edges to prevent a crash.

Reviewed By: davidxl, lebedev.ri

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

3 years ago[NFC] Fix whitespace in lldb-vscode --help
Jordan Rupprecht [Thu, 10 Sep 2020 17:57:08 +0000 (10:57 -0700)]
[NFC] Fix whitespace in lldb-vscode --help

3 years ago[Support] Use unique_function rather than std::function for ThreadPool TaskTy.
Lang Hames [Thu, 10 Sep 2020 17:05:46 +0000 (10:05 -0700)]
[Support] Use unique_function rather than std::function for ThreadPool TaskTy.

This will allow non-copyable function objects (e.g. lambdas that capture
unique_ptrs) to be used with ThreadPool.

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

3 years ago[ImplicitNullCheck] Handle instructions that preserve zero value
Anna Thomas [Thu, 10 Sep 2020 17:14:44 +0000 (13:14 -0400)]
[ImplicitNullCheck] Handle instructions that preserve zero value

This is the first in a series of patches to make implicit null checks
more general. This patch identifies instructions that preserves zero
value of a register and considers that as a valid instruction to hoist
along with the faulting load. See added testcases.

Reviewed-By: reames, dantrushin
Differential Revision: https://reviews.llvm.org/D87108

3 years ago[compiler-rt] [netbsd] Improve code formatting
Kamil Rytarowski [Thu, 10 Sep 2020 17:31:41 +0000 (19:31 +0200)]
[compiler-rt] [netbsd] Improve code formatting

No functional change.

3 years ago[compiler-rt] [netbsd] Add fallback definitions for MKISCSI=no
Kamil Rytarowski [Thu, 10 Sep 2020 17:26:59 +0000 (19:26 +0200)]
[compiler-rt] [netbsd] Add fallback definitions for MKISCSI=no

Add dev/iscsi/iscsi_ioctl.h fallback ioctl(2) operations.

3 years agoRevert D86875 "[Flang][NFC] Remove license comments from files in docs/ folder."
Sourabh Singh Tomar [Thu, 10 Sep 2020 17:34:37 +0000 (23:04 +0530)]
Revert D86875 "[Flang][NFC] Remove license comments from files in docs/ folder."

This reverts commit f787c9a90c69f, this was causing some build issues.

3 years ago[NFC][ThinLTO] Let llvm::EmbedBitcodeInModule handle serialization.
Mircea Trofin [Wed, 9 Sep 2020 00:18:04 +0000 (17:18 -0700)]
[NFC][ThinLTO] Let llvm::EmbedBitcodeInModule handle serialization.

llvm::EmbedBitcodeInModule handles serializing the passed-in module, if
the provided MemoryBufferRef is invalid. This is already the path taken
in one of the uses of the API - clang::EmbedBitcode, when called from
BackendConsumer::HandleTranslationUnit - so might as well do the same
here and reduce (by very little) code duplication.

The only difference this patch introduces is that the serialization happens
with ShouldPreserveUseListOrder set to true.

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

3 years ago[gcov] Delete flush_fn_list (unused since D83149)
Fangrui Song [Thu, 10 Sep 2020 17:15:27 +0000 (10:15 -0700)]
[gcov] Delete flush_fn_list (unused since D83149)

3 years ago[lldb, tests] Correctly configure the yaml2obj paths
Stella Stamenova [Thu, 10 Sep 2020 17:09:35 +0000 (10:09 -0700)]
[lldb, tests] Correctly configure the yaml2obj paths

They are currently not being set correctly for the case of multi-config generators like XCode and VS. There's also a typo in one of the cmake files.

Reviewed By: JDevlieghere

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

3 years ago[ArgumentPromotion]: Copy function metadata after promoting arguments
Ettore Tiotto [Thu, 10 Sep 2020 17:08:57 +0000 (13:08 -0400)]
[ArgumentPromotion]: Copy function metadata after promoting arguments

The argument promotion pass currently fails to copy function annotations
over to the modified function after promoting arguments.
This patch copies the original function annotation to the new function.

Reviewed By: fhann

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

3 years ago[PPC][GlobalISel] Add initial GlobalIsel infrastructure
Kit Barton [Mon, 17 Aug 2020 20:33:47 +0000 (15:33 -0500)]
[PPC][GlobalISel] Add initial GlobalIsel infrastructure

This adds the initial GlobalISel skeleton for PowerPC. It can only run
ir-translator and legalizer for `ret void`.

This is largely based on the initial GlobalISel patch for RISCV
(https://reviews.llvm.org/D65219).

Reviewed By: arsenm

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

3 years ago[gn build] Port c01d28dc51b
LLVM GN Syncbot [Thu, 10 Sep 2020 16:54:11 +0000 (16:54 +0000)]
[gn build] Port c01d28dc51b

3 years agoRevert "[gcov] Delete flush_fn_list (unused since D83149)"
Azharuddin Mohammed [Thu, 10 Sep 2020 16:49:45 +0000 (09:49 -0700)]
Revert "[gcov] Delete flush_fn_list (unused since D83149)"

This reverts commit 01cdab0b335e21321987505e66f34c24dc55b0d7.

It was causing the instrprof-darwin-exports.c test to fail.
```
Undefined symbols for architecture x86_64:
  "_flush_fn_list", referenced from:
     -exported_symbol[s_list] command line option
```

3 years agoIntroduce linalg.vecmat
Eugene Burmako [Thu, 10 Sep 2020 16:48:13 +0000 (18:48 +0200)]
Introduce linalg.vecmat

This patch adds a new named structured op to accompany linalg.matmul and
linalg.matvec. We needed it for our codegen, so I figured it would be useful
to add it to Linalg.

Reviewed By: nicolasvasilache, mravishankar

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

3 years agoFix typo in dsymutil.rst
YangZhihui [Thu, 10 Sep 2020 16:45:13 +0000 (09:45 -0700)]
Fix typo in dsymutil.rst

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

3 years ago[SyntaxTree] Specialize `TreeTestBase` for `BuildTreeTest`, `MutationsTest` and ...
Eduardo Caldas [Wed, 9 Sep 2020 08:36:39 +0000 (08:36 +0000)]
[SyntaxTree] Specialize `TreeTestBase` for `BuildTreeTest`, `MutationsTest` and `SynthesisTest`

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

3 years agoSwitchLoweringUtils.h - reduce TargetLowering.h include. NFCI.
Simon Pilgrim [Thu, 10 Sep 2020 16:35:02 +0000 (17:35 +0100)]
SwitchLoweringUtils.h - reduce TargetLowering.h include. NFCI.

Only include the headers we actually need, and move the remaining includes down to implicit dependent files.

3 years agoMark FMOV constant materialization as being as cheap as a move.
Owen Anderson [Tue, 8 Sep 2020 18:41:56 +0000 (18:41 +0000)]
Mark FMOV constant materialization as being as cheap as a move.

This prevents us from doing things like LICM'ing it out of a loop,
which is usually a net loss because we end up having to spill a
callee-saved FPR to accomodate it.

This does perturb instruction scheduling around this instruction,
so a number of tests had to be updated to account for it.

Reviewed By: t.p.northover

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

3 years ago[libcxx] Make sure we pass -isysroot when linking AND when compiling
Louis Dionne [Thu, 10 Sep 2020 16:20:18 +0000 (12:20 -0400)]
[libcxx] Make sure we pass -isysroot when linking AND when compiling

3 years agoHexagon.h - remove unnecessary includes. NFCI.
Simon Pilgrim [Thu, 10 Sep 2020 15:52:05 +0000 (16:52 +0100)]
Hexagon.h - remove unnecessary includes. NFCI.

Replace with forward declarations and move includes to implicit dependent files.