platform/upstream/llvm.git
4 years ago[InstCombine] add tests for abs of select with negated op; NFC (PR39474)
Sanjay Patel [Sun, 23 Aug 2020 18:49:03 +0000 (14:49 -0400)]
[InstCombine] add tests for abs of select with negated op; NFC (PR39474)

4 years agoRevert "Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)""
Raphael Isemann [Mon, 24 Aug 2020 10:54:25 +0000 (12:54 +0200)]
Revert "Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)""

This reverts commit ada2e8ea67393aa8c44fe8e9d46be62df6d1c702. Still breaking
on Fuchsia (and also Fedora) with exit code 1, so back to investigating.

4 years ago[SCEV] Still (again) trying to fix buildbots
Sam Parker [Mon, 24 Aug 2020 10:23:46 +0000 (11:23 +0100)]
[SCEV] Still (again) trying to fix buildbots

4 years agoReland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"
Raphael Isemann [Mon, 24 Aug 2020 09:20:57 +0000 (11:20 +0200)]
Reland "Correctly emit dwoIDs after ASTFileSignature refactoring (D81347)"

This relands D84013 but with a test that relies on less shell features to
hopefully make the test pass on Fuchsia (where the test from the previous patch
version strangely failed with a plain "Exit code 1").

Original summary:

D81347 changes the ASTFileSignature to be an array of 20 uint8_t instead of 5 uint32_t.
However, it didn't update the code in ObjectFilePCHContainerOperations that creates
the dwoID in the module from the ASTFileSignature (`Buffer->Signature` being the
array subclass that is now `std::array<uint8_t, 20>` instead of `std::array<uint32_t, 5>`).

```
  uint64_t Signature = [..] (uint64_t)Buffer->Signature[1] << 32 | Buffer->Signature[0]
```

This code works with the old ASTFileSignature  (where two uint32_t are enough to
fill the uint64_t), but after the patch this only took two bytes from the ASTFileSignature
and only partly filled the Signature uint64_t.

This caused that the dwoID in the module ref and the dwoID in the actual module no
longer match (which in turns causes that LLDB keeps warning about the dwoID's not
matching when debugging -gmodules-compiled binaries).

This patch just unifies the logic for turning the ASTFileSignature into an uint64_t which
makes the dwoID match again (and should prevent issues like that in the future).

Reviewed By: aprantl, dang

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

4 years ago[lld] s/dyn_cast/isa in InputSection.cpp
Pavel Labath [Mon, 24 Aug 2020 09:44:28 +0000 (11:44 +0200)]
[lld] s/dyn_cast/isa in InputSection.cpp

Avoids a -Wunused-variable with gcc.

4 years ago[lldb/Utility] Remove some Scalar type accessors
Pavel Labath [Thu, 20 Aug 2020 07:20:55 +0000 (09:20 +0200)]
[lldb/Utility] Remove some Scalar type accessors

Now that the number of Scalar "types" has been reduced, these don't make
sense anymore.

4 years ago[SCEV] Still trying to fix windows buildbots
Sam Parker [Mon, 24 Aug 2020 09:26:48 +0000 (10:26 +0100)]
[SCEV] Still trying to fix windows buildbots

4 years agoAdd support for AVR attiny441 and attiny841
Julien Etienne [Mon, 24 Aug 2020 08:24:14 +0000 (20:24 +1200)]
Add support for AVR attiny441 and attiny841

Reviewed By: dylanmckay

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

Patch by Julien Etienne

4 years ago[NFCI][SimplifyCFG] Combine select costs and checks
Sam Parker [Mon, 24 Aug 2020 08:13:08 +0000 (09:13 +0100)]
[NFCI][SimplifyCFG] Combine select costs and checks

Combine the cost modelling and validity checks for the phi to select
conversion in SpeculativelyExecuteBB, extracting the logic out into
a function.

4 years ago[SelectionDAG] Fix miscompile bug in expandFunnelShift
Bjorn Pettersson [Sat, 22 Aug 2020 17:06:06 +0000 (19:06 +0200)]
[SelectionDAG] Fix miscompile bug in expandFunnelShift

This is a fixup of commit 0819a6416fd217 (D77152) which could
result in miscompiles. The miscompile could only happen for targets
where isOperationLegalOrCustom could return different values for
FSHL and FSHR.

The commit mentioned above added logic in expandFunnelShift to
convert between FSHL and FSHR by swapping direction of the
funnel shift. However, that transform is only legal if we know
that the shift count (modulo bitwidth) isn't zero.

Basically, since fshr(-1,0,0)==0 and fshl(-1,0,0)==-1 then doing a
rewrite such as fshr(X,Y,Z) => fshl(X,Y,0-Z) would be incorrect if
Z modulo bitwidth, could be zero.

```
$ ./alive-tv /tmp/test.ll

----------------------------------------
define i32 @src(i32 %x, i32 %y, i32 %z) {
%0:
  %t0 = fshl i32 %x, i32 %y, i32 %z
  ret i32 %t0
}
=>
define i32 @tgt(i32 %x, i32 %y, i32 %z) {
%0:
  %t0 = sub i32 32, %z
  %t1 = fshr i32 %x, i32 %y, i32 %t0
  ret i32 %t1
}
Transformation doesn't verify!
ERROR: Value mismatch

Example:
i32 %x = #x00000000 (0)
i32 %y = #x00000400 (1024)
i32 %z = #x00000000 (0)

Source:
i32 %t0 = #x00000000 (0)

Target:
i32 %t0 = #x00000020 (32)
i32 %t1 = #x00000400 (1024)
Source value: #x00000000 (0)
Target value: #x00000400 (1024)
```

It could be possible to add back the transform, given that logic
is added to check that (Z % BW) can't be zero. Since there were
no test cases proving that such a transform actually would be useful
I decided to simply remove the faulty code in this patch.

Reviewed By: foad, lebedev.ri

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

4 years ago[SCEV] Attempt to fix windows buildbots
Sam Parker [Mon, 24 Aug 2020 07:29:04 +0000 (08:29 +0100)]
[SCEV] Attempt to fix windows buildbots

4 years agoAdd an assertion to protect against missing Dialect registration in a pass pipeline...
Mehdi Amini [Mon, 24 Aug 2020 05:03:59 +0000 (05:03 +0000)]
Add an assertion to protect against missing Dialect registration in a pass pipeline (NFC)

Reviewed By: rriddle

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

4 years ago[SCEV] Add operand methods to Cast and UDiv
Sam Parker [Tue, 18 Aug 2020 08:59:41 +0000 (09:59 +0100)]
[SCEV] Add operand methods to Cast and UDiv

Add methods to access operands in a similar manner to NAryExpr.

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

4 years ago[LiveDebugVariables] Internalize class DbgVariableValue. NFC
Fangrui Song [Mon, 24 Aug 2020 05:53:23 +0000 (22:53 -0700)]
[LiveDebugVariables] Internalize class DbgVariableValue. NFC

4 years agoAdd initial python bindings for attributes.
Stella Laurenzo [Wed, 19 Aug 2020 22:33:02 +0000 (15:33 -0700)]
Add initial python bindings for attributes.

* Generic mlir.ir.Attribute class.
* First standard attribute (mlir.ir.StringAttr), following the same pattern as generic vs standard types.
* NamedAttribute class.

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

4 years ago[PowerPC] Support lowering int-to-fp on ppc_fp128
Qiu Chaofan [Mon, 24 Aug 2020 03:18:16 +0000 (11:18 +0800)]
[PowerPC] Support lowering int-to-fp on ppc_fp128

D70867 introduced support for expanding most ppc_fp128 operations. But
sitofp/uitofp is missing. This patch adds that after D81669.

Reviewed By: uweigand

Differntial Revision: https://reviews.llvm.org/D81918

4 years ago[PowerPC] Allow constrained FP intrinsics in mightUseCTR
Qiu Chaofan [Mon, 24 Aug 2020 03:09:58 +0000 (11:09 +0800)]
[PowerPC] Allow constrained FP intrinsics in mightUseCTR

We may meet Invalid CTR loop crash when there's constrained ops inside.
This patch adds constrained FP intrinsics to the list so that CTR loop
verification doesn't complain about it.

Reviewed By: steven.zhang

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

4 years ago[DAGCombine] Remove dead node when it is created by getNegatedExpression
QingShan Zhang [Mon, 24 Aug 2020 02:50:58 +0000 (02:50 +0000)]
[DAGCombine] Remove dead node when it is created by getNegatedExpression

We hit the compiling time reported by https://bugs.llvm.org/show_bug.cgi?id=46877
and the reason is the same as D77319. So we need to remove the dead node we created
to avoid increase the problem size of DAGCombiner.

Reviewed By: Spatel

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

4 years ago[PowerPC] Support constrained vector fp/int conversion
Qiu Chaofan [Mon, 24 Aug 2020 02:10:27 +0000 (10:10 +0800)]
[PowerPC] Support constrained vector fp/int conversion

This patch makes these operations legal, and add necessary codegen
patterns.

There's still some issue similar to D77033 for conversion from v1i128
type. But normal type tests synced in vector-constrained-fp-intrinsic
are passed successfully.

Reviewed By: uweigand

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

4 years ago[NFC][OpenMP] Remove outdated comments about potential issues
Shilei Tian [Mon, 24 Aug 2020 01:21:06 +0000 (01:21 +0000)]
[NFC][OpenMP] Remove outdated comments about potential issues

The issue mentioned has been fixed in D84996

4 years ago[clang][Driver] Implement addLibCxxIncludePaths and getCompilerRT for the OpenBSD...
Brad Smith [Mon, 24 Aug 2020 00:44:29 +0000 (20:44 -0400)]
[clang][Driver] Implement addLibCxxIncludePaths and getCompilerRT for the OpenBSD clang driver.

4 years ago[clang][Driver] Implement AddClangSystemIncludeArgs and HasNativeLLVMSupport for...
Brad Smith [Mon, 24 Aug 2020 00:01:38 +0000 (20:01 -0400)]
[clang][Driver] Implement AddClangSystemIncludeArgs and HasNativeLLVMSupport for the OpenBSD clang driver.

If not overridden, AddClangSystemIncludeArgs's implementation is empty, so by
default, no system include args are added to the Clang driver. This means that
invoking Clang without the frontend must include a manual -I/usr/include flag,
which is inconsistent behavior. Therefore, override and implement this method
to match. Some boilerplate is also borrowed for handling of the other driver
flags.

While we are here, also override and enable HasNativeLLVMSupport.

Patch by: 3405691582 (dana koch)

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

4 years ago[flang][openacc] Fix wait-argument for wait clause + add tests
Valentin Clement [Mon, 24 Aug 2020 00:01:10 +0000 (20:01 -0400)]
[flang][openacc] Fix wait-argument for wait clause + add tests

This patch fix the usage of the wait-argument in a clause and add several tests and fix the unparsing of
the wait-argument.

Reviewed By: sscalpone

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

4 years agoUpdate FIR registration to not rely on the global MLIR dialect registry (NFC)
Mehdi Amini [Sun, 23 Aug 2020 21:20:49 +0000 (21:20 +0000)]
Update FIR registration to not rely on the global MLIR dialect registry (NFC)

MLIR is removing "soon" the global dialect registry, this patch is
transitionning FIR to not rely on it anymore.

4 years ago[InstCombine] Negator: freeze is freely negatible if it's operand is negatible
Roman Lebedev [Sun, 23 Aug 2020 19:53:05 +0000 (22:53 +0300)]
[InstCombine] Negator: freeze is freely negatible if it's operand is negatible

4 years ago[NFC][InstCombine] Add tests for negation of freeze
Roman Lebedev [Sun, 23 Aug 2020 19:48:16 +0000 (22:48 +0300)]
[NFC][InstCombine] Add tests for negation of freeze

4 years ago[llvm-reduce] Skip terminators when reducing instructions.
Florian Hahn [Sun, 23 Aug 2020 15:13:43 +0000 (16:13 +0100)]
[llvm-reduce] Skip terminators when reducing instructions.

Removing terminators will result in invalid IR, making further
reductions pointless. I do not think there is any valid use case where
we actually want to create invalid IR as part of a reduction.

Reviewed By: lebedev.ri

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

4 years ago[X86][FastISel] Support materializing floating-point constants for large code model...
Fangrui Song [Sun, 23 Aug 2020 15:35:59 +0000 (08:35 -0700)]
[X86][FastISel] Support materializing floating-point constants for large code model & PIC

The following program miscompiles because rL216012 added static
relocation model support but not for PIC.

```
// clang -fpic -mcmodel=large -O0 a.cc
double foo() { return 42.0; }
```

This patch adds PIC support.

Reviewed By: craig.topper

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

4 years ago[X86] Enable constexpr on ROTL/ROTR intrinsics (PR31446)
Simon Pilgrim [Sun, 23 Aug 2020 15:11:39 +0000 (16:11 +0100)]
[X86] Enable constexpr on ROTL/ROTR intrinsics (PR31446)

This enables constexpr rotate intrinsics defined in ia32intrin.h, including the MS specific builtins.

4 years ago[DSE,MemorySSA] Keep single DL instance in DSEState (NFC).
Florian Hahn [Sun, 23 Aug 2020 14:55:48 +0000 (15:55 +0100)]
[DSE,MemorySSA] Keep single DL instance in DSEState (NFC).

Small cleanup, also removes one instance of getting DataLayout without
using it later.

4 years ago[DAGCombiner] restrict store merge of truncs to early combining
Sanjay Patel [Sun, 23 Aug 2020 12:36:46 +0000 (08:36 -0400)]
[DAGCombiner] restrict store merge of truncs to early combining

The pattern matching does not account for truncating stores,
so it is unlikely to work at later stages. So we are likely
wasting compile-time with no hope of improvement by running
this later.

4 years ago[analyzer] Add modeling for unque_ptr::get()
Nithin Vadukkumchery Rajendrakumar [Sun, 23 Aug 2020 12:50:26 +0000 (14:50 +0200)]
[analyzer] Add modeling for unque_ptr::get()

Summary: Implemented  modeling for get() method in SmartPtrModeling

Reviewers: NoQ, Szelethus, vsavchenko, xazax.hun

Reviewed By: NoQ, xazax.hun

Subscribers: martong, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D86029

4 years ago[ORC] Add a LLJITWithThinLTOSummaries example in OrcV2Examples
Stefan Gränitz [Fri, 14 Aug 2020 15:03:26 +0000 (17:03 +0200)]
[ORC] Add a LLJITWithThinLTOSummaries example in OrcV2Examples

The example demonstrates how to use a module summary index file produced for ThinLTO to:
* find the module that defines the main entry point
* find all extra modules that are required for the build

A LIT test runs the example as part of the LLVM test suite [1] and shows how to create a module summary index file.
The code also provides two Error types that can be useful when working with ThinLTO summaries.

[1] if LLVM_BUILD_EXAMPLES=ON and platform is not Windows

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

4 years ago[docs] Add an initial (non-exhaustive) list of intrinsics that can be used in constan...
Simon Pilgrim [Sun, 23 Aug 2020 09:55:14 +0000 (10:55 +0100)]
[docs] Add an initial (non-exhaustive) list of intrinsics that can be used in constant expressions

As suggested by @rsmith on D86398 - we should try to document the intrinsics that can be used in constexpr

4 years ago[X86] Enable constexpr on _cast fp<-> uint intrinsics (PR31446)
Simon Pilgrim [Sun, 23 Aug 2020 09:27:46 +0000 (10:27 +0100)]
[X86] Enable constexpr on _cast fp<-> uint intrinsics (PR31446)

As suggested by @rsmith on PR47267, by replacing the builtin_memcpy bitcast pattern with builtin_bit_cast we can use _castf32_u32, _castu32_f32, _castf64_u64 and _castu64_f64 inside constant expresssions (constexpr). Although __builtin_bit_cast was added for c++20 it works on all clang c/c++ modes.

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

4 years agoReword the documentation for the `mlirTranslateMain` API (NFC)
Mehdi Amini [Sun, 23 Aug 2020 04:35:58 +0000 (04:35 +0000)]
Reword the documentation for the `mlirTranslateMain` API (NFC)

Address post-commit review in https://reviews.llvm.org/D86408

4 years agoCreate ${swig_target}-scripts target instead of lldb-python-scripts
António Afonso [Sat, 22 Aug 2020 18:53:08 +0000 (11:53 -0700)]
Create ${swig_target}-scripts target instead of lldb-python-scripts

This addresses the issue raised here https://reviews.llvm.org/rG02bf5632a94da6c3570df002804f8d3f79c11bfc
The `finish_swig_python` function might be called more than once so we need to create the distribution
component target based on the swig target.

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

4 years agoAdd a `dialect_registration` callback for "translations" registered with mlir-translate
Mehdi Amini [Sun, 23 Aug 2020 00:57:47 +0000 (00:57 +0000)]
Add a `dialect_registration` callback for "translations" registered with mlir-translate

This will allow out-of-tree translation to register the dialects they expect
to see in their input, on the model of getDependentDialects() for passes.

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

4 years agoRefactor `mlir-translate` to extract the `main()` logic in a helper on the model...
Mehdi Amini [Sun, 23 Aug 2020 00:57:39 +0000 (00:57 +0000)]
Refactor `mlir-translate` to extract the `main()` logic in a helper on the model of `MlirOptMain()` (NFC)

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

4 years agoUse TranslateFromMLIRRegistration for SPIRV roundtrip (NFC)
Mehdi Amini [Sun, 23 Aug 2020 00:40:16 +0000 (00:40 +0000)]
Use TranslateFromMLIRRegistration for SPIRV roundtrip (NFC)

This is aligning it with the other "translation" which operates on a MLIR input.

4 years ago[libunwind] Make findUnwindSectionsByPhdr static
Ryan Prichard [Sun, 23 Aug 2020 00:12:52 +0000 (17:12 -0700)]
[libunwind] Make findUnwindSectionsByPhdr static

Currently, this function is present in the dynsym table of
libunwind.so (on ELF targets). Make the function static instead.

In the previous release (LLVM 10.x), this function was instead a lambda
function inside LocalAddressSpace::findUnwindSections, and because
LocalAddressSpace was marked with _LIBUNWIND_HIDDEN, the lambda
function was also a hidden symbol.

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

4 years ago[X86] Allow 32-bit mode only CPUs with -mtune on 64-bit targets
Craig Topper [Sat, 22 Aug 2020 23:05:01 +0000 (16:05 -0700)]
[X86] Allow 32-bit mode only CPUs with -mtune on 64-bit targets

gcc errors on this, but I'm nervous that since -mtune has been
ignored by clang for so long that there may be code bases out
there that pass 32-bit cpus to clang.

4 years ago[DebugInfo][test] Fix dwarf-callsite-related-attrs.ll after llvm-dwarfdump --statisti...
Fangrui Song [Sat, 22 Aug 2020 21:09:19 +0000 (14:09 -0700)]
[DebugInfo][test] Fix dwarf-callsite-related-attrs.ll after llvm-dwarfdump --statistics change

4 years ago[llvm-dwarfdump] --statistics: break lines and indent by 2
Fangrui Song [Fri, 21 Aug 2020 16:32:20 +0000 (09:32 -0700)]
[llvm-dwarfdump] --statistics: break lines and indent by 2

so that the user does not have to pipe the output to `jq` or `python -m json.tool`.
This change makes testing more convenient because `-NEXT` patterns can be used.
The "prettify by default" is a good tradeoff to make. The output size increases a bit.

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

4 years ago[DAGCombiner] add early exit for store merging of truncs
Sanjay Patel [Sat, 22 Aug 2020 20:21:10 +0000 (16:21 -0400)]
[DAGCombiner] add early exit for store merging of truncs

This should be NFC in terms of output because the endian
check further down would bail out too, but we are wasting
time by waiting to that point to give up. If we generalize
that function to deal with more than i8 types, we should
not have to deal with the degenerate case.

4 years agoRevert "[Polly] Ensure consistent Scop::InstStmtMap. NFC."
Michael Kruse [Sat, 22 Aug 2020 20:07:45 +0000 (15:07 -0500)]
Revert "[Polly] Ensure consistent Scop::InstStmtMap. NFC."

This reverts commit 8e06bf6b3a2e8d25e56cd52dca0cf3ff1b37b5d1.

It broke the polly-x86_64-linux-test-suite and
aosp-O3-polly-before-vectorizer-unprofitable buildbots.

4 years ago[LLD][COFF] Reset outputSections for successive runs
Bas Zalmstra [Sat, 22 Aug 2020 20:04:22 +0000 (23:04 +0300)]
[LLD][COFF] Reset outputSections for successive runs

The global variable outputSections in the COFF writer was not
cleared between runs which caused successive calls to lld::coff::link
to generate invalid binaries. These binaries when loaded would result
in "invalid win32 applications" and/or "bad image" errors.

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

4 years ago[flang][msvc] Split class declaration and constexpr variable definition. NFC.
Michael Kruse [Sat, 22 Aug 2020 17:24:52 +0000 (12:24 -0500)]
[flang][msvc] Split class declaration and constexpr variable definition. NFC.

Msvc has trouble defining a struct/class and defining a constexpr symbol in the same declarator. It reports the following error:
```
basic-parsers.h(809): error C2131: expression did not evaluate to a constant
basic-parsers.h(809): note: failure was caused by call of undefined function or one not declared 'constexpr'
basic-parsers.h(809): note: see usage of 'Fortran::parser::OkParser::OkParser'
```

Fix the msvc compilation by splitting the two definitions into two separate declarators.

This patch is part of the series to [[ http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html | make flang compilable with MS Visual Studio ]].

Reviewed By: DavidTruby, klausler

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

4 years ago[libunwind] Ensure enough alignment for unw_cursor_t for SEH build configurations
Martin Storsjö [Mon, 17 Aug 2020 19:41:58 +0000 (22:41 +0300)]
[libunwind] Ensure enough alignment for unw_cursor_t for SEH build configurations

When built in SEH mode, UnwindCursor contains a CONTEXT struct,
which is aligned to 16 bytes in most configurations, causing the
whole UnwindCursor object to have 16 byte alignment.

This fixes backtraces using _Unwind_Backtrace on x86_64 mingw,
where an unw_cursor_t allocated on the stack was misaligned before.

This is an ABI break for this struct for this configuration, but very
few callers call libunwind directly (and even fewer directly allocate
an unw_cursor_t anyway).

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

4 years ago[AArch64] add tests for store merge of truncs; NFC
Sanjay Patel [Sat, 22 Aug 2020 18:38:08 +0000 (14:38 -0400)]
[AArch64] add tests for store merge of truncs; NFC

4 years agoFollow-up build fix for rGae6f78824031
Jeremy Morse [Sat, 22 Aug 2020 18:05:25 +0000 (19:05 +0100)]
Follow-up build fix for rGae6f78824031

One of the bots objects to brace-initializing a tuple:

  http://lab.llvm.org:8011/builders/clang-cmake-x86_64-sde-avx512-linux/builds/43595/steps/build%20stage%201/logs/stdio

As the tuple constructor is apparently explicit. Fall back to the (not
as pretty) explicit construction of a tuple. I'd thought this was
permitted behaviour; will investigate why this fails later.

4 years ago[LiveDebugValues] Delete unneeded copy constructor after D83047
Fangrui Song [Sat, 22 Aug 2020 17:55:28 +0000 (10:55 -0700)]
[LiveDebugValues] Delete unneeded copy constructor after D83047

It will suppress the implicitly-declared copy assignment operator in C++20.

4 years agoMove Py_buffer_RAII to .h file so SWIG 2 doesnt have to parse it
António Afonso [Sat, 22 Aug 2020 17:43:02 +0000 (10:43 -0700)]
Move Py_buffer_RAII to .h file so SWIG 2 doesnt have to parse it

`struct Py_buffer_RAII` definition uses explicit deleted functions which are not supported by SWIG 2 (only 3).
To get around this I moved this struct to an .h file that is included to avoid being parsed by swig.

Reviewed By: lawrence_danna

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

4 years ago[gn build] Port ae6f7882403
LLVM GN Syncbot [Sat, 22 Aug 2020 17:32:25 +0000 (17:32 +0000)]
[gn build] Port ae6f7882403

4 years ago[LiveDebugValues] Add instruction-referencing LDV implementation
Jeremy Morse [Sat, 22 Aug 2020 15:07:39 +0000 (16:07 +0100)]
[LiveDebugValues] Add instruction-referencing LDV implementation

This patch imports the instruction-referencing implementation of
LiveDebugValues proposed here:

  http://lists.llvm.org/pipermail/llvm-dev/2020-June/142368.html

The new implementation is unreachable in this patch, it's the next patch
that enables it behind a command line switch. Briefly, rather than
tracking variable locations by just their location as the 'VarLoc'
implementation does, this implementation does it by value:
 * Each value defined in a function is numbered, and propagated through
   dataflow,
 * Each DBG_VALUE reads a machine value number from a machine location,
 * Variable _values_ are propagated through dataflow,
 * Variable values are translated back into locations, DBG_VALUEs
   inserted to specify where those locations are.

The ultimate aim of this is to enable referring to variable values
throughout post-isel code, rather than locations. Those patches will
build on top of this new LiveDebugValues implementation in later patches
-- it can't be done with the VarLoc implementation as we don't have
value information, only locations.

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

4 years ago[llvm-reduce] make llvm-reduce save the best reduction it has when it crashes
Tyker [Sat, 22 Aug 2020 17:04:20 +0000 (19:04 +0200)]
[llvm-reduce] make llvm-reduce save the best reduction it has when it crashes

This helps with both debugging llvm-reduce and sometimes getting usefull result even if llvm-reduce crashes

Reviewed By: lebedev.ri

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

4 years ago[flang][msvc] Disambiguate injected class name.
Michael Kruse [Sat, 22 Aug 2020 17:05:17 +0000 (12:05 -0500)]
[flang][msvc] Disambiguate injected class name.

The identifier `Expr` within the scope of the Expr class (including its temple specializations) refers to the current template/instantiation (see https://en.cppreference.com/w/cpp/language/injected-class-name for details). The `MapTemplate` template expect a non-instantiated template as the first template argument, not the concrete instantiation of `Expr`.

At least msvc interprets `Expr` as the injected class name, whereas gcc and clang use the global `flang::evaluate::Expr` template. Disambiguate by explicitly using the namespace.

This patch is part of the series to [[ http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html | make flang compilable with MS Visual Studio ]].

Reviewed By: DavidTruby

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

4 years ago[flang] Fix assert on bad character kind
Tim Keith [Sat, 22 Aug 2020 17:11:36 +0000 (10:11 -0700)]
[flang] Fix assert on bad character kind

When we report an error for a bad character kind, don't keep it in the
`DeclTypeSpec`. Otherwise there could be further problems. In this case,
`ComputeOffsets()` got an assertion error because we didn't recognize
`CHARACTER(*,8)` as needing a descriptor because of the bad kind.

Fixes https://bugs.llvm.org/show_bug.cgi?id=47173

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

4 years ago[lldb] Extract reproducer providers & co into their own header.
Jonas Devlieghere [Sat, 22 Aug 2020 07:36:32 +0000 (00:36 -0700)]
[lldb] Extract reproducer providers & co into their own header.

Extract all the provider related logic from Reproducer.h and move it
into its own header ReproducerProvider.h. These classes are seeing most
of the development these days and this reorganization reduces
incremental compilation from ~520 to ~110 files when making changes to
the new header.

4 years ago[Polly] Ensure consistent Scop::InstStmtMap. NFC.
Michael Kruse [Sat, 22 Aug 2020 15:14:20 +0000 (10:14 -0500)]
[Polly] Ensure consistent Scop::InstStmtMap. NFC.

InstStmtMap became inconsistent with ScopStmt::getInstructions() after
the statement's instructions is modified, e.g. by being considered
unused by the Simplify pass or being moved by ForwardOpTree.

Change ScopStmt::setInstructions() to also update its parent's
InstStmtMap. Also add assertions checking the consistency.

4 years ago[Polly] Fix use-after-free.
Michael Kruse [Sat, 22 Aug 2020 14:47:10 +0000 (09:47 -0500)]
[Polly] Fix use-after-free.

VirtualUse of type UseKind::Inter expects the definition of a
llvm::Value to be represented in another statement. In the bug report
that statement has been removed due to its domain being empty.
Scop::InstStmtMap for the llvm::Value's defintion still pointed to the
removed statement, which resulted in the use-after-free.

The defintion statement was removed by Simplify because it was
considered to not be reachable by other uses; trivially because it is
never executed due to its empty domain. However, no such thing happend
to the using statement using the value altough its domain is also empty.

Fix by always removing statements with empty domains in Simplify since
these are not properly analyzable. A UseKind::Inter should always have a
statement with its defintion due to LLVM's SSA form.
Scop::removeStmtNotInDomainMap() also removes statements with empty
domains but does so without considering the context as used by
Simplify's analyzes.

In another angle, InstStmtMap pointing to removed statements should not
happen either and ForwardOpTree would have bailed out if the llvm::Value
definition was not represented by a statement. This will be corrected in
a followup-commit.

This fixes llvm.org/PR47098

4 years agoGlobalISel: Merge FewerElements for G_BUILD_VECTOR/G_CONCAT_VECTORS
Matt Arsenault [Mon, 3 Aug 2020 22:37:29 +0000 (18:37 -0400)]
GlobalISel: Merge FewerElements for G_BUILD_VECTOR/G_CONCAT_VECTORS

This switches from using G_EXTRACT in odd cases to widen with undef
and unmerge.

4 years ago[X86] ia32intrin.h - pull out common attributes used in cast helpers into define...
Simon Pilgrim [Sat, 22 Aug 2020 14:09:44 +0000 (15:09 +0100)]
[X86] ia32intrin.h - pull out common attributes used in cast helpers into define. NFCI.

4 years agoFix some builds after 20bb9fe565a
Jeremy Morse [Sat, 22 Aug 2020 14:18:52 +0000 (15:18 +0100)]
Fix some builds after 20bb9fe565a

-Wsuggest-override indicates this VarLocBasedLDV method needs the
override keyword.

4 years ago[gn build] Port 20bb9fe565a
LLVM GN Syncbot [Sat, 22 Aug 2020 13:52:08 +0000 (13:52 +0000)]
[gn build] Port 20bb9fe565a

4 years ago[LiveDebugValues] Install an implementation-picking LiveDebugValues pass
Jeremy Morse [Sat, 22 Aug 2020 13:10:16 +0000 (14:10 +0100)]
[LiveDebugValues] Install an implementation-picking LiveDebugValues pass

This patch renames the current LiveDebugValues class to "VarLocBasedLDV"
and removes the pass-registration code from it. It creates a separate
LiveDebugValues class that deals with pass registration and management,
that calls through to VarLocBasedLDV::ExtendRanges when
runOnMachineFunction is called. This is done through the "LDVImpl"
abstract class, so that a future patch can install the new
instruction-referencing LiveDebugValues implementation and have it
picked at runtime.

No functional change is intended, just shuffling responsibilities.

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

4 years agoEnable constexpr on BITREVERSE builtin intrinsics (PR47249)
Simon Pilgrim [Sat, 22 Aug 2020 13:41:40 +0000 (14:41 +0100)]
Enable constexpr on BITREVERSE builtin intrinsics (PR47249)

This enables us to use the __builtin_bitreverse 8/16/32/64 intrinsics inside constexpr code.

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

4 years agoEnable constexpr on ROTATELEFT/ROTATERIGHT builtin intrinsics (PR47249)
Simon Pilgrim [Sat, 22 Aug 2020 13:34:08 +0000 (14:34 +0100)]
Enable constexpr on ROTATELEFT/ROTATERIGHT builtin intrinsics (PR47249)

This enables us to use the __builtin_rotateleft / __builtin_rotateright 8/16/32/64 intrinsics inside constexpr code.

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

4 years ago[InstCombine] canonicalize 'not' ops before logical shifts
Sanjay Patel [Sat, 22 Aug 2020 13:38:13 +0000 (09:38 -0400)]
[InstCombine] canonicalize 'not' ops before logical shifts

This reverses the existing transform that would uniformly canonicalize any 'xor' after any shift. In the case of logical shifts, that turns a 'not' into an arbitrary 'xor' with constant, and that's probably not as good for analysis, SCEV, or codegen.

The SCEV motivating case is discussed in:
http://bugs.llvm.org/PR47136

There's an analysis motivating case at:
http://bugs.llvm.org/PR38781

I did draft a patch that would do the same for 'ashr' but that's questionable because it's just swapping the position of a 'not' and uncovers at least 2 missing folds that we would probably need to deal with as preliminary steps.

Alive proofs:
https://rise4fun.com/Alive/BBV

  Name: shift right of 'not'
  Pre: C2 == (-1 u>> C1)
  %a = lshr i8 %x, C1
  %r = xor i8 %a, C2
  =>
  %n = xor i8 %x, -1
  %r = lshr i8 %n, C1

  Name: shift left of 'not'
  Pre: C2 == (-1 << C1)
  %a = shl i8 %x, C1
  %r = xor i8 %a, C2
  =>
  %n = xor i8 %x, -1
  %r = shl i8 %n, C1

  Name: ashr of 'not'
  %a = ashr i8 %x, C1
  %r = xor i8 %a, -1
  =>
  %n = xor i8 %x, -1
  %r = ashr i8 %n, C1

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

4 years ago[DAGCombiner] clean up merge of truncated stores; NFC
Sanjay Patel [Fri, 21 Aug 2020 21:30:57 +0000 (17:30 -0400)]
[DAGCombiner] clean up merge of truncated stores; NFC

This code handles the special-case of i8 stores,
but it could be generalized to deal with other types.

4 years ago[docs] Replace "constexpr expressions" with "constant expressions".
Simon Pilgrim [Sat, 22 Aug 2020 13:12:05 +0000 (14:12 +0100)]
[docs] Replace "constexpr expressions" with "constant expressions".

Based off comment from @rsmith on D86339

4 years ago[clang-tidy] readability-simplify-boolean-expr detects negated literals
Nathan James [Sat, 22 Aug 2020 12:57:34 +0000 (13:57 +0100)]
[clang-tidy] readability-simplify-boolean-expr detects negated literals

Adds support for detecting cases like `if (!true) ...`.
Addresses [[ https://bugs.llvm.org/show_bug.cgi?id=47166 | readability-simplify-boolean-expr not detected for negated boolean literals. ]]

Reviewed By: aaron.ballman

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

4 years ago[gn build] Port fba06e3c85a
LLVM GN Syncbot [Sat, 22 Aug 2020 12:40:06 +0000 (12:40 +0000)]
[gn build] Port fba06e3c85a

4 years ago[LiveDebugValues][NFC] Move LiveDebugValues source for refactor
Jeremy Morse [Sat, 22 Aug 2020 11:53:49 +0000 (12:53 +0100)]
[LiveDebugValues][NFC] Move LiveDebugValues source for refactor

This is a pure file move of LiveDebugValues.cpp ahead of the pass being
refactored, with an experimental new implementation to follow.

The motivation for these changes can be found here:

  http://lists.llvm.org/pipermail/llvm-dev/2020-June/142368.html

And the other related changes can be found in the phabricator stack for
this revision:

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

4 years agoInstantiate Error in Target::GetEntryPointAddress() only when necessary
Dimitry Andric [Fri, 21 Aug 2020 19:03:00 +0000 (21:03 +0200)]
Instantiate Error in Target::GetEntryPointAddress() only when necessary

When `Target::GetEntryPointAddress()` calls `exe_module->GetObjectFile()->GetEntryPointAddress()`, and the returned
`entry_addr` is valid, it can immediately be returned.

However, just before that, an `llvm::Error` value has been setup, but in this case it is not consumed before returning, like is done further below in the function.

In https://bugs.freebsd.org/248745 we got a bug report for this, where a very simple test case aborts and dumps core:

```
* thread #1, name = 'testcase', stop reason = breakpoint 1.1
    frame #0: 0x00000000002018d4 testcase`main(argc=1, argv=0x00007fffffffea18) at testcase.c:3:5
   1 int main(int argc, char *argv[])
   2 {
-> 3     return 0;
   4 }
(lldb) p argc
Program aborted due to an unhandled Error:
Error value was Success. (Note: Success values must still be checked prior to being destroyed).

Thread 1 received signal SIGABRT, Aborted.
thr_kill () at thr_kill.S:3
3 thr_kill.S: No such file or directory.
(gdb) bt
#0  thr_kill () at thr_kill.S:3
#1  0x00000008049a0004 in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:52
#2  0x0000000804916229 in abort () at /usr/src/lib/libc/stdlib/abort.c:67
#3  0x000000000451b5f5 in fatalUncheckedError () at /usr/src/contrib/llvm-project/llvm/lib/Support/Error.cpp:112
#4  0x00000000019cf008 in GetEntryPointAddress () at /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:267
#5  0x0000000001bccbd8 in ConstructorSetup () at /usr/src/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp:67
#6  0x0000000001bcd2c0 in ThreadPlanCallFunction () at /usr/src/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp:114
#7  0x00000000020076d4 in InferiorCallMmap () at /usr/src/contrib/llvm-project/lldb/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp:97
#8  0x0000000001f4be33 in DoAllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp:604
#9  0x0000000001fe51b9 in AllocatePage () at /usr/src/contrib/llvm-project/lldb/source/Target/Memory.cpp:347
#10 0x0000000001fe5385 in AllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Target/Memory.cpp:383
#11 0x0000000001974da2 in AllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Target/Process.cpp:2301
#12 CanJIT () at /usr/src/contrib/llvm-project/lldb/source/Target/Process.cpp:2331
#13 0x0000000001a1bf3d in Evaluate () at /usr/src/contrib/llvm-project/lldb/source/Expression/UserExpression.cpp:190
#14 0x00000000019ce7a2 in EvaluateExpression () at /usr/src/contrib/llvm-project/lldb/source/Target/Target.cpp:2372
#15 0x0000000001ad784c in EvaluateExpression () at /usr/src/contrib/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:414
#16 0x0000000001ad86ae in DoExecute () at /usr/src/contrib/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:646
#17 0x0000000001a5e3ed in Execute () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandObject.cpp:1003
#18 0x0000000001a6c4a3 in HandleCommand () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:1762
#19 0x0000000001a6f98c in IOHandlerInputComplete () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2760
#20 0x0000000001a90b08 in Run () at /usr/src/contrib/llvm-project/lldb/source/Core/IOHandler.cpp:548
#21 0x00000000019a6c6a in ExecuteIOHandlers () at /usr/src/contrib/llvm-project/lldb/source/Core/Debugger.cpp:903
#22 0x0000000001a70337 in RunCommandInterpreter () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2946
#23 0x0000000001d9d812 in RunCommandInterpreter () at /usr/src/contrib/llvm-project/lldb/source/API/SBDebugger.cpp:1169
#24 0x0000000001918be8 in MainLoop () at /usr/src/contrib/llvm-project/lldb/tools/driver/Driver.cpp:675
#25 0x000000000191a114 in main () at /usr/src/contrib/llvm-project/lldb/tools/driver/Driver.cpp:890```

Fix the incorrect error catch by only instantiating an `Error` object if it is necessary.

Reviewed By: JDevlieghere

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

4 years ago[DSE,MemorySSA] Use BatchAA for AA queries.
Florian Hahn [Sat, 22 Aug 2020 07:36:35 +0000 (08:36 +0100)]
[DSE,MemorySSA] Use BatchAA for AA queries.

We can use BatchAA to avoid some repeated AA queries. We only remove
stores, so I think we will get away with using a single BatchAA instance
for the complete run.

The changes in AliasAnalysis.h mirror the changes in D85583.

The change improves compile-time by roughly 1%.
http://llvm-compile-time-tracker.com/compare.php?from=67ad786353dfcc7633c65de11601d7823746378e&to=10529e5b43809808e8c198f88fffd8f756554e45&stat=instructions

This is part of the patches to bring down compile-time to the level
referenced in
http://lists.llvm.org/pipermail/llvm-dev/2020-August/144417.html

Reviewed By: asbirlea

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

4 years ago[MLIR][SPIRVToLLVM] Updated the documentation for the conversion
George Mitenkov [Sat, 22 Aug 2020 07:03:27 +0000 (10:03 +0300)]
[MLIR][SPIRVToLLVM] Updated the documentation for the conversion

This patch updates the SPIR-V to LLVM conversion manual.
Particularly, the following sections are added:
- `spv.EntryPoint`/`spv.ExecutionMode` handling
- Mapping for `spv.AccessChain`
- Change in allowed storage classes for `spv.globalVariable`
- Change of the runner section name

Reviewed By: mravishankar

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

4 years ago[DebugInfo][test] Move distringtype.ll to X86/ subdir to fix failures when X86 target...
Fangrui Song [Sat, 22 Aug 2020 06:14:35 +0000 (23:14 -0700)]
[DebugInfo][test] Move distringtype.ll to X86/ subdir to fix failures when X86 target is not built

4 years ago[MLIR][NFC] Update MLIR vim syntax file - std ops + types
Uday Bondhugula [Fri, 21 Aug 2020 20:07:36 +0000 (01:37 +0530)]
[MLIR][NFC] Update MLIR vim syntax file - std ops + types

Update vim syntax file to include more std ops, and for int types.

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

4 years agoFix arm bot failure after f91d18eaa946b2
Sourabh Singh Tomar [Sat, 22 Aug 2020 05:31:42 +0000 (11:01 +0530)]
Fix arm bot failure after f91d18eaa946b2

llc doesn't seem to automatically pick default `--triple`.
using `%llc_dwarf` should fix this.

Builder:
http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/20310

Error log:
bin/llc: error: : error: unable to get target for 'x86_64-unknown-linux-gnu', see --version and --triple.

4 years ago[DebugInfo][flang]Added support for representing Fortran assumed length strings
Sourabh Singh Tomar [Thu, 20 Aug 2020 10:41:22 +0000 (16:11 +0530)]
[DebugInfo][flang]Added support for representing Fortran assumed length strings

This patch adds support for representing Fortran `character(n)`.

Primarily patch is based out of D54114 with appropriate modifications.

Test case IR is generated using our downstream classic-flang. We're in process
of upstreaming flang PR's but classic-flang has dependencies on llvm, so
this has to get in first.

Patch includes functional test case for both IR and corresponding
dwarf, furthermore it has been manually tested as well using GDB.

Source snippet:
```
 program assumedLength
   call sub('Hello')
   call sub('Goodbye')
   contains
   subroutine sub(string)
           implicit none
           character(len=*), intent(in) :: string
           print *, string
   end subroutine sub
 end program assumedLength
```

GDB:
```
(gdb) ptype string
type = character (5)
(gdb) p string
$1 = 'Hello'
```

Reviewed By: aprantl, schweitz

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

4 years ago[lldb] Don't pass --rerun-all-issues on Windows.
Jonas Devlieghere [Sat, 22 Aug 2020 02:57:50 +0000 (19:57 -0700)]
[lldb] Don't pass --rerun-all-issues on Windows.

The functionality has been removed for a while and now the dotest
argument has been removed asll.

4 years agoFix llvm/test/tools/lto/hide-linkonce-odr.ll
Azharuddin Mohammed [Fri, 21 Aug 2020 23:13:10 +0000 (16:13 -0700)]
Fix llvm/test/tools/lto/hide-linkonce-odr.ll

Remove unnecessary dependency on libSystem.

4 years agolld: link libatomic if needed for Timer
Josh Stone [Mon, 17 Aug 2020 22:31:32 +0000 (15:31 -0700)]
lld: link libatomic if needed for Timer

D80298 made Timer::total atomic, but this requires linking libatomic
on some targets.

Reviewed By: aaronpuchert

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

4 years ago[DomTree] Extend update API to allow a post CFG view.
Alina Sbirlea [Wed, 26 Feb 2020 21:33:02 +0000 (13:33 -0800)]
[DomTree] Extend update API to allow a post CFG view.

Extend the `applyUpdates` in DominatorTree to allow a post CFG view,
different from the current CFG.
This patch implements the functionality of updating an already up to
date DT, to the desired PostCFGView.
Combining a set of updates towards an up to date DT and a PostCFGView is
not yet supported.

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

4 years ago[Attributor][test] Add REQUIRES: asserts after D86129
Fangrui Song [Fri, 21 Aug 2020 23:20:41 +0000 (16:20 -0700)]
[Attributor][test] Add REQUIRES: asserts after D86129

4 years agoFix swig scripts install target name
António Afonso [Wed, 19 Aug 2020 18:21:10 +0000 (11:21 -0700)]
Fix swig scripts install target name

LLVM install component targets needs to be in the form of: install-{target}[-stripped]

I tested with:
```
cmake ... -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLVM_DISTRIBUTION_COMPONENTS="lldb;liblldb;lldb-python-scripts;" ...
DESTDIR=... ninja install-distribution
```

@JDevlieghere `finish_swig_python_scripts` is a really weird name for a distribution component, any reason that it has to be this way?

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

4 years agoReplace TableGen range piece punctuator with '...'
Paul C. Anagnostopoulos [Fri, 21 Aug 2020 21:22:06 +0000 (23:22 +0200)]
Replace TableGen range piece punctuator with '...'

The TableGen range piece punctuator is currently '-' (e.g., {0-9}),
which interacts oddly with the fact that an integer literal's sign
is part of the literal. This patch replaces the '-' with the new
punctuator '...'. The '-' punctuator is deprecated.

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

Change-Id: I3d53d14e23f878b142d8f84590dd465a0fb6c09c

4 years agoTemporairly revert "[SimplifyCFG][LoopRotate] SimplifyCFG: disable common instruction...
Roman Lebedev [Fri, 21 Aug 2020 21:24:13 +0000 (00:24 +0300)]
Temporairly revert "[SimplifyCFG][LoopRotate] SimplifyCFG: disable common instruction hoisting by default, enable late in pipeline"

As disscussed in post-commit review starting with
https://reviews.llvm.org/D84108#2227365
while this appears to be mostly a win overall, especially code-size-wise,
this appears to shake //certain// code pattens in a way that is extremely
unfavorable for performance (+30% runtime regression)
on certain CPU's (i personally can't reproduce).

So until the behaviour is better understood, and a path forward is mapped,
let's back this out for now.

This reverts commit 1d51dc38d89bd33fb8874e242ab87b265b4dec1c.

4 years ago[NFC][documentation] clarify comment in test
Christopher Tetreault [Fri, 21 Aug 2020 20:47:56 +0000 (13:47 -0700)]
[NFC][documentation] clarify comment in test

test referenced a relative path to a file, but the path was not correct
relative to the project the test is in

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

4 years ago[lldb] Remove --rerun-all-issues as its functionality no longer exists
Jonas Devlieghere [Fri, 21 Aug 2020 21:16:55 +0000 (14:16 -0700)]
[lldb] Remove --rerun-all-issues as its functionality no longer exists

The logic behind --rerun-all-issues was removed when we switched to LIT
as the test driver. This patch just removes the dotest option and
corresponding entry in configuration.py.

4 years agoFix two bugs in TGParser::ParseValue
Nicolai Hähnle [Fri, 21 Aug 2020 21:19:36 +0000 (23:19 +0200)]
Fix two bugs in TGParser::ParseValue

TGParser::ParseValue contains two recursive calls, one to parse the RHS of a list paste operator and one to parse the RHS of a paste operator in a class/def name. Both of these calls neglect to check the return value to see if it is null (because of some error). This causes a crash in the next line of code, which uses the return value. The code now checks for null returns.

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

4 years agoNew TableGen Programmer's Reference document
Paul C. Anagnostopoulos [Fri, 21 Aug 2020 21:07:30 +0000 (23:07 +0200)]
New TableGen Programmer's Reference document

This new TableGen Programmer's Reference document replaces the current Language Introduction and Language Reference documents. It brings all the TableGen reference information into one document.

As an experiment, I numbered the sections in the document. See what you think about that.

Reviewed By: lattner

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

(changes by Nicolai Hähnle <nicolai.haehnle@amd.com>:
- fixed build error due to toctree in docs/LangRef/index.rst
- fixed reference to ProgRef)

Change-Id: Ifbdfa39768b8a460aae2873103d31c7b347aff00

4 years ago[opt][NewPM] Add basic-aa in legacy PM compatibility mode
Arthur Eubanks [Tue, 18 Aug 2020 19:34:19 +0000 (12:34 -0700)]
[opt][NewPM] Add basic-aa in legacy PM compatibility mode

The legacy PM alias analysis pipeline by default includes basic-aa.
When running `opt -foo-pass` under the NPM and -disable-basic-aa is not
specified, use basic-aa.

This decreases the number of check-llvm failures under NPM from 913 to 752.

Reviewed By: ychen, asbirlea

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

4 years agoMachineSSAUpdater: Allow initialization with just a register class
Nicolai Hähnle [Mon, 18 May 2020 14:28:34 +0000 (16:28 +0200)]
MachineSSAUpdater: Allow initialization with just a register class

The register class is required for inserting PHIs, but the "current
virtual register" isn't actually used for anything, so let's remove it
while we're at it.

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

Change-Id: I1e647f31570ef21a7ea8e20db3454178e98a6a8b

4 years ago[Attributor] Function seed allow list
kuterd [Fri, 21 Aug 2020 17:46:27 +0000 (20:46 +0300)]
[Attributor] Function seed allow list

  -  Adds a command line option to seed only selected functions.
  - Makes seed allow listing exclusive to assertions enabled builds.

Reviewed By: sstefan1

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

4 years ago[DomTree] Avoid creating an empty GD to reduce compile time.
Alina Sbirlea [Fri, 21 Aug 2020 20:24:25 +0000 (13:24 -0700)]
[DomTree] Avoid creating an empty GD to reduce compile time.

4 years ago[lldb] Fix build error in TestSimulatorPlatform.py
Jonas Devlieghere [Fri, 21 Aug 2020 20:33:51 +0000 (13:33 -0700)]
[lldb] Fix build error in TestSimulatorPlatform.py

Before e5d08fcbac72 the Makefile would always compute the min-version,
even if it wasn't set in the triple. This nuance got lost when passing
the ARCH_CFLAGS directly from TestSimulatorPlatform.

4 years ago[Attributor] fix AANoUndef initialization
Shinji Okumura [Fri, 21 Aug 2020 20:06:14 +0000 (05:06 +0900)]
[Attributor] fix AANoUndef initialization

Currently, `AANoUndefImpl::initialize` mistakenly always indicates optimistic fixpoint for function returned position.
 This is because an associated value is `Function` in the case, and `isGuaranteedNotToBeUndefOrPoison` returns true for Function.

Reviewed By: jdoerfert

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

4 years ago[Cloning] Fix to cloning DISubprograms.
Amy Huang [Fri, 21 Aug 2020 18:54:27 +0000 (11:54 -0700)]
[Cloning] Fix to cloning DISubprograms.

When trying to enable -debug-info-kind=constructor there was an assert
that occurs during debug info cloning ("mismatched subprogram between
llvm.dbg.value variable and !dbg attachment").
It appears that during llvm::CloneFunctionInto, a DISubprogram could be
duplicated when MapMetadata is called, and then added to the MD map again
when DIFinder gets a list of subprograms. This results in two different
versions of the DISubprogram.

This patch switches the order so that the DIFinder subprograms are
added before MapMetadata is called.

Fixes https://bugs.llvm.org/show_bug.cgi?id=46784

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