platform/upstream/llvm.git
4 years agoPR46377: Fix dependence calculation for function types and typedef
Richard Smith [Tue, 28 Jul 2020 19:09:16 +0000 (12:09 -0700)]
PR46377: Fix dependence calculation for function types and typedef
types.

We previously did not treat a function type as dependent if it had a
parameter pack with a non-dependent type -- such a function type depends
on the arity of the pack so is dependent even though none of the
parameter types is dependent. In order to properly handle this, we now
treat pack expansion types as always being dependent types (depending on
at least the pack arity), and always canonically being pack expansion
types, even in the unusual case when the pattern is not a dependent
type. This does mean that we can have canonical types that are pack
expansions that contain no unexpanded packs, which is unfortunate but
not inaccurate.

We also previously did not treat a typedef type as
instantiation-dependent if its canonical type was not
instantiation-dependent. That's wrong because instantiation-dependence
is a property of the type sugar, not of the type; an
instantiation-dependent type can have a non-instantiation-dependent
canonical type.

4 years agoReland [Coverage] Add comment to skipped regions
Zequan Wu [Thu, 23 Jul 2020 02:04:59 +0000 (19:04 -0700)]
Reland [Coverage] Add comment to skipped regions

Bug filled here: https://bugs.llvm.org/show_bug.cgi?id=45757.
Add comment to skipped regions so we don't track execution count for lines containing only comments.

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

4 years ago[lld][linkerscript] Fix handling of DEFINED.
Hafiz Abid Qadeer [Thu, 16 Jul 2020 20:40:31 +0000 (21:40 +0100)]
[lld][linkerscript] Fix handling of DEFINED.

Current implementation did not check that symbols is actually defined. Only checked for presence.  GNU ld documentation says,

"Return 1 if symbol is in the linker global symbol table and is defined before the statement using DEFINED in the script, otherwise return 0."

https://sourceware.org/binutils/docs/ld/Builtin-Functions.html#Builtin-Functions

Reviewed By: MaskRay

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

4 years ago[llvm][NFC] refactor setBlockFrequency for clarity.
Mircea Trofin [Tue, 28 Jul 2020 20:04:11 +0000 (13:04 -0700)]
[llvm][NFC] refactor setBlockFrequency for clarity.

The refactoring encapsulates frequency calculation in MachineBlockFrequencyInfo,
and renames the API to clarify its motivation. It should clarify
frequencies may not be reset 'freely' by users of the analysis, as the
API serves as a partial update to avoid a full analysis recomputation.

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

4 years ago[MLIR][Linalg] Fixed obsolete examples in the MLIR Linalg Dialect doc
Vincent Zhao [Tue, 28 Jul 2020 19:40:55 +0000 (19:40 +0000)]
[MLIR][Linalg] Fixed obsolete examples in the MLIR Linalg Dialect doc

This diff fixes some obsolete examples in the Linalg dialect documentation: https://mlir.llvm.org/docs/Dialects/Linalg/

These examples are used to explain the basic properties of the Linalg dialect, which are not automatically generated from TableGen and are using out-of-date MLIR/Linalg syntax.

This diff extends each example by adding essential attributes and changing its syntax to make it processible by `mlir-opt`. There is also a command attached to each example that says how the example can be processed.

Reviewed By: ftynse

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

4 years ago[NewGVN] Add test cases for remaining known issues.
Florian Hahn [Tue, 28 Jul 2020 19:31:57 +0000 (20:31 +0100)]
[NewGVN] Add test cases for remaining known issues.

This patch adds IR tests for the known NewGVN issues. The intention is
that adding them now will make it easier to keep track of fixes.

4 years ago[openacc] Add missing newline at end of file
clementval [Tue, 28 Jul 2020 19:26:27 +0000 (15:26 -0400)]
[openacc] Add missing newline at end of file

4 years ago[PowerPC] Mark allocator_oom_test.cpp unsupported on PowerPC
Ahsan Saghir [Tue, 28 Jul 2020 18:29:25 +0000 (13:29 -0500)]
[PowerPC] Mark allocator_oom_test.cpp unsupported on PowerPC

This patch marks compiler-rt/test/asan/TestCases/Linux/allocator_oom_test.cpp
unsupported on PowerPC 64bit-LE architecture since this test fails when run
on a machine with larger system memory.

Reviewed By: #powerpc, nemanjai

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

4 years ago[InstSimplify] allow undefs in icmp with vector constant folds
Sanjay Patel [Tue, 28 Jul 2020 19:13:19 +0000 (15:13 -0400)]
[InstSimplify] allow undefs in icmp with vector constant folds

This is the main icmp simplification shortcoming seen in D84655.

Alive2 agrees that the basic examples are correct at least:

define <2 x i1> @src(<2 x i8> %x) {
%0:
  %r = icmp sle <2 x i8> { undef, 128 }, %x
  ret <2 x i1> %r
}
=>
define <2 x i1> @tgt(<2 x i8> %x) {
%0:
  ret <2 x i1> { 1, 1 }
}
Transformation seems to be correct!

define <2 x i1> @src(<2 x i32> %X) {
%0:
  %A = or <2 x i32> %X, { 63, 63 }
  %B = icmp ult <2 x i32> %A, { undef, 50 }
  ret <2 x i1> %B
}
=>
define <2 x i1> @tgt(<2 x i32> %X) {
%0:
  ret <2 x i1> { 0, 0 }
}
Transformation seems to be correct!

https://alive2.llvm.org/ce/z/omt2ee
https://alive2.llvm.org/ce/z/GW4nP_

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

4 years ago[libc++] Provide std::aligned_alloc and std::timespec_get on Apple platforms
Louis Dionne [Mon, 27 Jul 2020 18:25:03 +0000 (14:25 -0400)]
[libc++] Provide std::aligned_alloc and std::timespec_get on Apple platforms

rdar://66113878

4 years ago[libc++] Clean up tests for "optional" C11 features
Louis Dionne [Tue, 28 Jul 2020 17:41:12 +0000 (13:41 -0400)]
[libc++] Clean up tests for "optional" C11 features

First, add a TEST_HAS_QUICK_EXIT macro to mirror other C11 features like
TEST_HAS_ALIGNED_ALLOC, and update the tests for that.

Second, get rid of TEST_HAS_C11_FEATURES and _LIBCPP_HAS_C11_FEATURES,
which were only used to ensure that feature macros don't get out of
sync between <__config> and "test_macros.h". This is not necessary
anymore, since we have tests for each individual macro now.

4 years ago[X86] Merge the two 'Emit the normal disp32 encoding' cases in SIB byte handling...
Craig Topper [Tue, 28 Jul 2020 19:03:54 +0000 (12:03 -0700)]
[X86] Merge the two 'Emit the normal disp32 encoding' cases in SIB byte handling in emitMemModRMByte. NFCI

By repeating the Disp.isImm() check in a couple spots we can
make the normal case for immediate and for expression the same.
And then always rely on the ForceDisp32 flag to remove a later
non-zero immediate check.

This should make {disp32} pseudo prefix handling
slightly easier as we need the normal disp32 handler to handle a
immediate of 0.

4 years ago[mlir][GPUToSPIRV] Add a test pass to set workgroup size for kernel
MaheshRavishankar [Tue, 28 Jul 2020 18:47:30 +0000 (11:47 -0700)]
[mlir][GPUToSPIRV] Add a test pass to set workgroup size for kernel
functions.

This allows using command line flags to lowere from GPU to SPIR-V. The
pass added is only for testing/example purposes. Most uses cases will
need more fine-grained control on setting workgroup sizes for kernel
functions.

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

4 years ago[InstCombine] avoid crashing on vector constant expression (PR46872)
Sanjay Patel [Tue, 28 Jul 2020 19:02:36 +0000 (15:02 -0400)]
[InstCombine] avoid crashing on vector constant expression (PR46872)

4 years ago[InstSimplify] add tests for icmp with partial undef constant; NFC
Sanjay Patel [Tue, 28 Jul 2020 15:13:05 +0000 (11:13 -0400)]
[InstSimplify] add tests for icmp with partial undef constant; NFC

4 years ago[NFC][XCOFF] Use getFunctionEntryPointSymbol from TLOF to simplify logic
jasonliu [Tue, 28 Jul 2020 17:56:13 +0000 (17:56 +0000)]
[NFC][XCOFF] Use getFunctionEntryPointSymbol from TLOF to simplify logic

Reviewed By: Xiangling_L

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

4 years ago[libc][NFC] Zero out padding bits in the uint form of x86 FPBits<long double>.
Siva Chandra Reddy [Tue, 28 Jul 2020 18:43:04 +0000 (11:43 -0700)]
[libc][NFC] Zero out padding bits in the uint form of x86 FPBits<long double>.

4 years ago[scudo][standalone] mallopt runtime configuration options
Kostya Kortchinsky [Mon, 27 Jul 2020 16:13:42 +0000 (09:13 -0700)]
[scudo][standalone] mallopt runtime configuration options

Summary:
Partners have requested the ability to configure more parts of Scudo
at runtime, notably the Secondary cache options (maximum number of
blocks cached, maximum size) as well as the TSD registry options
(the maximum number of TSDs in use).

This CL adds a few more Scudo specific `mallopt` parameters that are
passed down to the various subcomponents of the Combined allocator.

- `M_CACHE_COUNT_MAX`: sets the maximum number of Secondary cached items
- `M_CACHE_SIZE_MAX`: sets the maximum size of a cacheable item in the Secondary
- `M_TSDS_COUNT_MAX`: sets the maximum number of TSDs that can be used (Shared Registry only)

Regarding the TSDs maximum count, this is a one way option, only
allowing to increase the count.

In order to allow for this, I rearranged the code to have some `setOption`
member function to the relevant classes, using the `scudo::Option` class
enum to determine what is to be set.

This also fixes an issue where a static variable (`Ready`) was used in
templated functions without being set back to `false` every time.

Reviewers: pcc, eugenis, hctim, cferris

Subscribers: jfb, llvm-commits, #sanitizers

Tags: #sanitizers

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

4 years ago[CostModel][X86] Add smax/smin/umin/umax intrinsics cost model tests
Simon Pilgrim [Tue, 28 Jul 2020 18:55:55 +0000 (19:55 +0100)]
[CostModel][X86] Add smax/smin/umin/umax intrinsics cost model tests

Costs currently fall back to scalar generic intrinsic calls

4 years ago[DAG] isSplatValue - add support for TRUNCATE/SIGN_EXTEND/ZERO_EXTEND
Simon Pilgrim [Tue, 28 Jul 2020 18:48:35 +0000 (19:48 +0100)]
[DAG] isSplatValue - add support for TRUNCATE/SIGN_EXTEND/ZERO_EXTEND

These are just pass-throughs to the source operand - we can't assume that ANY_EXTEND(splat) will still be a splat though.

4 years ago[CostModel][X86] Add abs intrinsics cost model tests
Simon Pilgrim [Tue, 28 Jul 2020 18:37:40 +0000 (19:37 +0100)]
[CostModel][X86] Add abs intrinsics cost model tests

abs costs currently falls back in scalar generic intrinsic calls

4 years ago[X86][XOP] Shuffle v16i8 using VPPERM(X,Y) instead of OR(PSHUFB(X),PSHUFB(Y))
Simon Pilgrim [Tue, 28 Jul 2020 12:08:22 +0000 (13:08 +0100)]
[X86][XOP] Shuffle v16i8 using VPPERM(X,Y) instead of OR(PSHUFB(X),PSHUFB(Y))

4 years ago[AMDGPU] Spill CSR VGPR which is reserved for SGPR spills
Austin Kerbow [Mon, 13 Jul 2020 22:38:29 +0000 (15:38 -0700)]
[AMDGPU] Spill CSR VGPR which is reserved for SGPR spills

Update logic for reserving VGPR for SGPR spills. A CSR VGPR being reserved for
SGPR spills could be clobbered if there were no free lower VGPR's available.
Create a stack object so that it will be spilled in the prologue. Also
adds more tests.

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

4 years ago[MLIR] Vector store to load forwarding
Anand Kodnani [Tue, 28 Jul 2020 17:37:16 +0000 (10:37 -0700)]
[MLIR] Vector store to load forwarding

The MemRefDataFlow pass does store to load forwarding
only for affine store/loads. This patch updates the pass
to use affine read/write interface which enables vector
forwarding.

Reviewed By: dcaballe, bondhugula, ftynse

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

4 years agoRevert "Switch to using -debug-info-kind=constructor as default (from =limited)"
Amy Huang [Tue, 28 Jul 2020 18:23:59 +0000 (11:23 -0700)]
Revert "Switch to using -debug-info-kind=constructor as default (from =limited)"

This reverts commit 227db86a1b7dd6f96f7df14890fcd071bc4fe1f5.

Causing debug info errors in google3 LTO builds; also causes a
debuginfo-test failure.

4 years ago[JumpThreading] Add a basic support for freeze instruction
Juneyoung Lee [Tue, 28 Jul 2020 18:11:57 +0000 (03:11 +0900)]
[JumpThreading] Add a basic support for freeze instruction

This patch adds a basic support for freeze instruction to JumpThreading
by making ComputeValueKnownInPredecessorsImpl look into its operand.

Reviewed By: efriedma, nikic

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

4 years ago[LLD] [MinGW] Implement the --no-seh flag
Martin Storsjö [Mon, 27 Jul 2020 20:44:41 +0000 (23:44 +0300)]
[LLD] [MinGW] Implement the --no-seh flag

Previously this flag was just ignored. If set, set the
IMAGE_DLL_CHARACTERISTICS_NO_SEH bit, regardless of the normal safeSEH
machinery.

In mingw configurations, the safeSEH bit might not be set in e.g. object
files built from handwritten assembly, making it impossible to use the
normal safeseh flag. As mingw setups don't generally use SEH on 32 bit
x86 at all, it should be fine to set that flag bit though - hook up
the existing GNU ld flag for controlling that.

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

4 years ago[lldb] Change the definition of ANSI_UNFAINT
Shu Anzai [Tue, 28 Jul 2020 18:05:44 +0000 (11:05 -0700)]
[lldb] Change the definition of ANSI_UNFAINT

Change the definition of ANSI_UNFAINT in Editline.cpp.

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

4 years ago[libc][obvious] Move ErrnoSetterMatcher to test/ErrnoSetterMetcher.h.
Siva Chandra Reddy [Tue, 28 Jul 2020 17:57:00 +0000 (10:57 -0700)]
[libc][obvious] Move ErrnoSetterMatcher to test/ErrnoSetterMetcher.h.

4 years ago[lld-macho] Fix no-filelist test on Windows
Jez Ng [Tue, 28 Jul 2020 18:04:43 +0000 (11:04 -0700)]
[lld-macho] Fix no-filelist test on Windows

4 years ago[X86] Simplify some code in emitMemModRMByte. NFCI
Craig Topper [Tue, 28 Jul 2020 17:46:04 +0000 (10:46 -0700)]
[X86] Simplify some code in emitMemModRMByte. NFCI

4 years ago[X86] Merge disp8 and cdisp8 handling into a single helper function to reduce some...
Craig Topper [Tue, 28 Jul 2020 16:53:42 +0000 (09:53 -0700)]
[X86] Merge disp8 and cdisp8 handling into a single helper function to reduce some code.

We currently handle EVEX and non-EVEX separately in two places. By sinking the EVEX
check into the existing helper for CDisp8 we can simplify these two places.

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

4 years ago[libTooling] Add a `between` range-selector combinator.
Yitzhak Mandelbaum [Tue, 28 Jul 2020 17:26:12 +0000 (17:26 +0000)]
[libTooling] Add a `between` range-selector combinator.

Adds the `between` combinator and registers it with the parser. As a driveby, updates some deprecated names to their current versions.

Reviewed By: gribozavr2

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

4 years ago[JumpThreading] Add tests that have a cast of freeze and vice versa
Juneyoung Lee [Tue, 28 Jul 2020 17:16:34 +0000 (02:16 +0900)]
[JumpThreading] Add tests that have a cast of freeze and vice versa

4 years ago[mlir][Vector] Drop declarative transforms
Nicolas Vasilache [Tue, 28 Jul 2020 13:58:44 +0000 (09:58 -0400)]
[mlir][Vector] Drop declarative transforms

For the purpose of vector transforms, the Tablegen-based infra is subsumed by simple C++ pattern application. Deprecate declarative transforms whose complexity does not pay for itself.

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

4 years agoNFC: Add whitespace changing revisions to .git-blame-ignore-revs
Louis Dionne [Tue, 28 Jul 2020 17:09:32 +0000 (13:09 -0400)]
NFC: Add whitespace changing revisions to .git-blame-ignore-revs

4 years ago[lld-macho] Fix segment filesize calculation
Jez Ng [Tue, 28 Jul 2020 16:56:55 +0000 (09:56 -0700)]
[lld-macho] Fix segment filesize calculation

The previous approach of adding up the file sizes of the
component sections ignored the fact that the sections did not have to be
contiguous in the file. As such, it was underestimating the true size.

I discovered this issue because `codesign` checks whether `__LINKEDIT`
extends to the end of the file. Since we were underestimating segment
sizes, this check failed.

Reviewed By: #lld-macho, compnerd

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

4 years ago[lld-macho] Support -filelist
Jez Ng [Tue, 28 Jul 2020 16:56:50 +0000 (09:56 -0700)]
[lld-macho] Support -filelist

XCode passes files in using this flag

Reviewed By: #lld-macho, compnerd

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

4 years ago[ASTImporter] Add Visitor for TypedefNameDecl's
Vince Bridgers [Thu, 16 Jul 2020 22:46:48 +0000 (17:46 -0500)]
[ASTImporter] Add Visitor for TypedefNameDecl's

We found a case where Typedef Name Declarations were not being added
correctly when importing builtin types. This exposed the need for a
TypedefNameDecl visitor so these types can be added by RecordDecl and
fields.

This code is covered by the ASTImporterTest cases that use the implicit
struct __NSConstantString_tag definitions.

Thanks to @martong for the debugging assist!

Depends on D83970.

Reviewed By: martong

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

4 years ago[Darwin] Cleanup code via improved GetMacosAlignedVersion()
Julian Lettner [Tue, 28 Jul 2020 16:44:02 +0000 (09:44 -0700)]
[Darwin] Cleanup code via improved GetMacosAlignedVersion()

Checking the OS version via `GetMacosAlignedVersion()` now works in
simulators [1].  Let's use it to simplify `DyldNeedsEnvVariable()`.

[1] 3fb0de820796cc6e322c8378713d375d9870a353

Reviewed By: delcypher

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

4 years ago[ELF] --reproduce should include lto sample profile
Christy Lee [Tue, 28 Jul 2020 16:41:27 +0000 (09:41 -0700)]
[ELF] --reproduce should include lto sample profile

Reviewed By: MaskRay

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

4 years ago[ARM][MVE] Teach MVEGatherScatterLowering to merge successive getelementpointers
Anna Welker [Tue, 28 Jul 2020 16:28:19 +0000 (17:28 +0100)]
[ARM][MVE] Teach MVEGatherScatterLowering to merge successive getelementpointers

A patch following up on the introduction of pointer induction variables, adding
a preprocessing step to the address optimisation in the MVEGatherScatterLowering
pass. If the getelementpointer that is the address is itself using a
getelementpointer as base, they will be merged into one by summing up the
offsets, after checking that this will not cause an overflow (this can be
repeated recursively).

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

4 years ago[Darwin] Fix OS version checks inside simulators
Julian Lettner [Fri, 24 Jul 2020 18:24:34 +0000 (11:24 -0700)]
[Darwin] Fix OS version checks inside simulators

compiler-rt checks OS versions by querying the Darwin kernel version.
This is not necessarily correct inside the simulators if the simulator
runtime is not aligned with the host macOS.  Let's instead check the
`SIMULATOR_RUNTIME_VERSION` env var.

rdar://63031937

Reviewed By: delcypher

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

4 years ago[CompilerRT] Don't pass global compile test flags in non-standalone build
Arthur Eubanks [Thu, 23 Jul 2020 21:17:37 +0000 (14:17 -0700)]
[CompilerRT] Don't pass global compile test flags in non-standalone build

In a build with -DLLVM_ENABLE_LTO=Thin:

$ ninja TSanitizer-x86_64-Test-Nolibc
[1/1] Generating Sanitizer-x86_64-Test-Nolibc
FAILED: projects/compiler-rt/lib/sanitizer_common/tests/Sanitizer-x86_64-Test-Nolibc
sanitizer_nolibc_test_main.x86_64.o: file not recognized: file format not recognized

because -flto=thin is getting passed to the clang_compile step.

For non-standalone builds, global compilation flags shouldn't be passed to compiler-rt tests, only the flags the test specifies.

Reviewed By: vitalybuka

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

4 years ago[FIX] Resolve test failure in polly/test/ScopInfo/memcpy-raw-source.ll
Wei Wang [Tue, 28 Jul 2020 16:12:31 +0000 (09:12 -0700)]
[FIX] Resolve test failure in polly/test/ScopInfo/memcpy-raw-source.ll

scoped-noalias -> scoped-noalias-aa

reference: https://reviews.llvm.org/D84542

Reviewed By: aeubanks

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

4 years ago[NewPM][Sancov] Pin RUN lines with -sancov to legacy PM
Arthur Eubanks [Mon, 27 Jul 2020 18:31:34 +0000 (11:31 -0700)]
[NewPM][Sancov] Pin RUN lines with -sancov to legacy PM

Since the NPM pass is named sancov-module, not sancov.
This makes all tests under Instrumentation/SanitizerCoverage pass when
-enable-new-pm is on by default.

Reviewed By: vitalybuka

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

4 years ago[FunctionAttrs] Rename functionattrs -> function-attrs
Arthur Eubanks [Tue, 28 Jul 2020 16:08:08 +0000 (09:08 -0700)]
[FunctionAttrs] Rename functionattrs -> function-attrs

To match NewPM pass name, and also for readability.
Also rename rpo-functionattrs -> rpo-function-attrs while we're here.

Reviewed By: arsenm

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

4 years ago[OldPM] Print out a bit more when passes lie about changing IR
Jon Roelofs [Mon, 27 Jul 2020 18:34:36 +0000 (12:34 -0600)]
[OldPM] Print out a bit more when passes lie about changing IR

https://reviews.llvm.org/D84686

4 years agoGlobalISel: Translate llvm.convert.{to|from}.fp16 intrinsics
Matt Arsenault [Sat, 25 Jul 2020 20:58:15 +0000 (16:58 -0400)]
GlobalISel: Translate llvm.convert.{to|from}.fp16 intrinsics

I think these were added as a workaround for SelectionDAG lacking half
legalization support in the past. I think they should probably be
removed from the IR, but clang does still have a target control to
emit these instead of the native half fpext/fptrunc.

4 years agoAMDGPU/GlobalISel: Mark GlobalISel classes as final
Matt Arsenault [Sun, 26 Jul 2020 14:52:51 +0000 (10:52 -0400)]
AMDGPU/GlobalISel: Mark GlobalISel classes as final

4 years agoAMDGPU/GlobalISel: Merge identical select cases
Matt Arsenault [Sun, 26 Jul 2020 16:20:29 +0000 (12:20 -0400)]
AMDGPU/GlobalISel: Merge identical select cases

4 years ago[MLIR][Shape] Lower `shape.const_shape` to `tensor_from_elements`
Frederik Gossen [Tue, 28 Jul 2020 15:39:49 +0000 (15:39 +0000)]
[MLIR][Shape] Lower `shape.const_shape` to `tensor_from_elements`

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

4 years agoAMDGPU/GlobalISel: Use clamp modifier for [us]addsat/[us]subsat
Matt Arsenault [Sun, 12 Jul 2020 18:16:36 +0000 (14:16 -0400)]
AMDGPU/GlobalISel: Use clamp modifier for [us]addsat/[us]subsat

We also have never handled this for SelectionDAG, which needs
additional work.

4 years ago[SCEV] Add additional tests.
Florian Hahn [Sun, 12 Jul 2020 22:05:43 +0000 (23:05 +0100)]
[SCEV] Add additional tests.

Increase test coverage for upcoming changes to how SCEV deals with LCSSA
phis.

4 years agoOrder of libraries and source files in the f18 frontend
Camille Coti [Mon, 27 Jul 2020 22:58:39 +0000 (16:58 -0600)]
Order of libraries and source files in the f18 frontend

When the f18 frontend calls the link editor, put the libraries and object files in the correct order.

Fixes the issues reported here https://github.com/flang-compiler/flang/issues/897

Reviewed By: sscalpone, AlexisPerry

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

4 years ago[DWARFYAML] Rename checkListEntryOperands() to checkOperandCount(). NFC.
Xing GUO [Tue, 28 Jul 2020 14:20:10 +0000 (22:20 +0800)]
[DWARFYAML] Rename checkListEntryOperands() to checkOperandCount(). NFC.

This patch renames checkListEntryOperands() to checkOperandCount(), so
that we are able to check DWARF expression operands using the same
function.

Reviewed By: jhenderson, labath

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

4 years ago[AArch64][SVE] Fix epilogue for SVE when the stack is realigned.
Sander de Smalen [Tue, 28 Jul 2020 11:11:09 +0000 (12:11 +0100)]
[AArch64][SVE] Fix epilogue for SVE when the stack is realigned.

While deallocating the stackframe, the offset used to reload the
callee-saved registers was not pointing to the SVE callee-saves,
but rather to the whole SVE area.

   +--------------+
   | GRP callee   |
   |     saves    |
   +--------------+ <- FP
   | SVE callee   |
   |     saves    |
   +--------------+ <- Should restore SVE callee saves from here
   |  SVE Spills  |
   |  and Locals  |
   +--------------+ <- instead of from here.
   |              |
   :              :
   |              |
   +--------------+ <- SP

Reviewed By: paulwalker-arm

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

4 years ago[AArch64][SVE] Don't align the last SVE callee save.
Sander de Smalen [Mon, 27 Jul 2020 13:16:55 +0000 (14:16 +0100)]
[AArch64][SVE] Don't align the last SVE callee save.

Instead of aligning the last callee-saved-register slot to the stack
alignment (16 bytes), just align the SVE callee-saved block. This also
simplifies the code that allocates space for the callee-saves.

This change is needed to make sure the offset to which the callee-saved
register is spilled, corresponds to the offset used for e.g. unwind call
frame instructions.

Reviewers: efriedma, paulwalker-arm, david-arm, rengolin

Reviewed By: efriedma

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

4 years ago[AArch64][SVE] Don't support fixedStack for SVE objects.
Sander de Smalen [Mon, 27 Jul 2020 11:57:41 +0000 (12:57 +0100)]
[AArch64][SVE] Don't support fixedStack for SVE objects.

Fixed stack objects are preallocated and defined to be allocated before
any of the regular stack objects. These are normally used to model stack
arguments.

The AAPCS does not support passing SVE registers on the stack by value
(only by reference). The current layout also doesn't place them before
all stack objects, but rather before all SVE objects. Removing this
simplifies the code that emits the allocation/deallocation
around callee-saved registers (D84042).

This patch also removes all uses of fixedStack from from
framelayout-sve.mir, where this was used purely for testing purposes.

Reviewers: paulwalker-arm, efriedma, rengolin

Reviewed By: paulwalker-arm

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

4 years ago[clang][NFC] Add some documentation about the use of NamedDecl::getDeclName in diagno...
Bruno Ricci [Tue, 28 Jul 2020 14:39:17 +0000 (15:39 +0100)]
[clang][NFC] Add some documentation about the use of NamedDecl::getDeclName in diagnostics.

As explained in eb10b065f2a870b425dcc2040b9955e0eee464b4, sending a NamedDecl*
in a diagnostic should generally be preferred over sending the DeclarationName
from getDeclName(). Let's document that.

4 years ago[Support][NFC] Fix a Wdocumentation warning in FileSystem.h
Bruno Ricci [Tue, 28 Jul 2020 14:35:31 +0000 (15:35 +0100)]
[Support][NFC] Fix a Wdocumentation warning in FileSystem.h

4 years agoClean up cuda-runtime-wrappers API.
Christian Sigg [Tue, 28 Jul 2020 14:29:29 +0000 (16:29 +0200)]
Clean up cuda-runtime-wrappers API.

Do not return error code, instead return created resource handles or void. Error reporting is done by the library function.

Reviewed By: herhut

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

4 years ago[DWARFYAML] Add support for emitting custom range list content.
Xing GUO [Tue, 28 Jul 2020 14:10:44 +0000 (22:10 +0800)]
[DWARFYAML] Add support for emitting custom range list content.

This patch adds support for emitting custom range list content.

We are able to handcraft a custom range list via the following syntax.

```
debug_rnglists:
  - Lists:
      - Entries:
          - Operator: DW_RLE_startx_endx
            Values:   [ 0x1234, 0x1234 ]
      - Content: '1234567890abcdef'
      - Content: 'abcdef1234567890'
```

Reviewed By: jhenderson

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

4 years agoRe-land "[PowerPC] Remove QPX/A2Q BGQ/BGP CNK support"
Jinsong Ji [Tue, 28 Jul 2020 03:02:20 +0000 (03:02 +0000)]
Re-land "[PowerPC] Remove QPX/A2Q BGQ/BGP CNK support"

This reverts commit bf544fa1c3cb80f24d85e84559fb11193846259f.

Fixed the typo in PPCInstrInfo.cpp.

4 years ago[clang-tidy][NFC] Make OptionsView methods as const where missing
Nathan James [Tue, 28 Jul 2020 13:52:32 +0000 (14:52 +0100)]
[clang-tidy][NFC] Make OptionsView methods as const where missing

4 years ago[yaml2obj] - Add a way to override sh_type section field.
Georgii Rymar [Tue, 28 Jul 2020 09:53:06 +0000 (12:53 +0300)]
[yaml2obj] - Add a way to override sh_type section field.

This adds the `ShType` key similar to others `Sh*` keys we have.

My use case is the following. Imagine we have a `SHT_SYMTAB_SHNDX`
section and want to hide it from a dumper. The natural way would be to
do something like:

```
  - Name:    .symtab_shndx
    Type:    [[TYPE=SHT_SYMTAB_SHNDX]]
    Entries: [ 0, 1 ]

```

and then change the TYPE from `SHT_SYMTAB_SHNDX` to something else,
for example to `SHT_PROGBITS`.

But we have a problem: regular sections does not have `Entries` key,
so yaml2obj will be unable to produce a section.

The solution is to introduce a `ShType` key to override the final type.

This is not the first time I am facing the need to change the type. I
was able to invent workarounds or solved issues differently in the past,
but finally came to conclusion that we just should support the `ShType`.

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

4 years ago[OpenMP] Fix libomptarget negative tests to expect abort
Joel E. Denny [Tue, 28 Jul 2020 12:57:03 +0000 (08:57 -0400)]
[OpenMP] Fix libomptarget negative tests to expect abort

On runtime failures, D83963 causes the runtime to abort instead of
merely exiting with a non-zero value, but many tests in the
libomptarget test suite still expect the former behavior.  This patch
updates the test suite and was discussed in post-commit comments on
D83963 and D84557.

4 years ago[BPI] Fix memory leak reported by sanitizer bots
Evgeniy Brevnov [Tue, 28 Jul 2020 12:50:40 +0000 (19:50 +0700)]
[BPI] Fix memory leak reported by sanitizer bots

There is a silly mistake where release() is used instead of reset() for free resources of unique pointer.

Reviewed By: ebrevnov

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

4 years agoARM: make Thumb1 instructions non-flag-setting in IT block.
Tim Northover [Mon, 27 Jul 2020 13:37:14 +0000 (14:37 +0100)]
ARM: make Thumb1 instructions non-flag-setting in IT block.

Many Thumb1 instructions are defined to set CPSR if executed outside an IT
block, but leave it alone from inside one. In MachineIR this is represented by
whether an optional register is CPSR or NoReg (0), and affects how the
instructions are printed.

This sets the instruction to the appropriate form during if-conversion.

4 years ago[MLIR][Shape] Support transforming shape.num_elements on tensors
Stephan Herhut [Tue, 28 Jul 2020 11:09:45 +0000 (13:09 +0200)]
[MLIR][Shape] Support transforming shape.num_elements on tensors

The current transformation to shape.reduce does not support tensor values.
This adds the required changes to make that work, including fixing the builder
for shape.reduce.

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

4 years ago[Support] Use InitLLVM in llvm-stress, sancov and TableGen
Anirudh Prasad [Tue, 28 Jul 2020 10:40:47 +0000 (06:40 -0400)]
[Support] Use InitLLVM in llvm-stress, sancov and TableGen

This patch refactors the llvm tools namely, llvm-stress and sancov,
as well as the llvm TableGen utility, to use the new InitLLVM
interface which encapsulates PrettyStackTrace.

This is from https://reviews.llvm.org/D70702, but only for LLVM.

Reviewed-by: Kai
Differential Revision: https://reviews.llvm.org/D83484

4 years ago[Attributor] Add override keyword to the print function of AA
Luofan Chen [Tue, 28 Jul 2020 11:19:23 +0000 (19:19 +0800)]
[Attributor] Add override keyword to the print function of AA

The print() function in the `AbstractAttribute` structure overrides
the function in the `AADepGraphNode`, so we need to mark it as
override.

This should fix a buildbot failure introduced by 5ee07dc.

4 years ago[compiler-rt][cmake] Don't pass --version-script to Illumos ld
Rainer Orth [Tue, 28 Jul 2020 11:21:36 +0000 (13:21 +0200)]
[compiler-rt][cmake] Don't pass --version-script to Illumos ld

Neither the Illumos `ld` nor the Solaris 11.3 one support the `--version-script` and
`z gnu-linker-script-compat` options, which breaks the `compiler-rt` build.

This patch checks for both options instead of hardcoding their use.

Tested on `amd-pc-solaris2.11` (all of Solaris 11.4, 11.3, and Illumos).

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

4 years ago[PowerPC] Split s34imm into two types
Stefan Pintilie [Mon, 27 Jul 2020 17:27:30 +0000 (12:27 -0500)]
[PowerPC] Split s34imm into two types

Currently the instruction paddi always takes s34imm as the type for the
34 bit immediate. However, the PC Relative form of the instruction should
not produce the same fixup as the non PC Relative form.
This patch splits the s34imm type into s34imm and s34imm_pcrel so that two
different fixups can be emitted.

Reviewed By: nemanjai, #powerpc, kamaub

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

4 years ago[BPI][NFC] Consolidate code to deal with SCCs under a dedicated data structure.
Evgeniy Brevnov [Fri, 24 Jul 2020 11:57:10 +0000 (18:57 +0700)]
[BPI][NFC] Consolidate code to deal with SCCs under a dedicated data structure.

In order to facilitate review of D79485 here is a small NFC change which restructures code around handling of SCCs in BPI.

Reviewed By: davidxl

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

4 years ago[SystemZ/ZOS] Implement setLastAccessAndModificationTime()
Kai Nacke [Thu, 2 Jul 2020 12:43:42 +0000 (14:43 +0200)]
[SystemZ/ZOS] Implement setLastAccessAndModificationTime()

The function setLastAccessAndModificationTime() uses function
futimens() or futimes() by default. Both functions are not
available in z/OS, therefore functionality is implemented using
__fchattr() on z/OS.

Reviews by: abhina.sreeskantharajan

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

4 years ago[MLIR][Linalg] Retire C++ DotOp in favor of a linalg-ods-gen'd op
lorenzo chelini [Tue, 28 Jul 2020 10:29:54 +0000 (12:29 +0200)]
[MLIR][Linalg] Retire C++ DotOp in favor of a linalg-ods-gen'd op

- replace DotOp, now that DRR rules have been dropped.

- Capture arguments mismatch in the parser. The number of parsed arguments must
  equal the number of expected arguments.

Reviewed By: ftynse, nicolasvasilache

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

4 years agoAvoid use of std::make_unique in compiler-rt/lib/scudo/standalone/tests/combined_test.cpp
Hans Wennborg [Tue, 28 Jul 2020 10:26:37 +0000 (12:26 +0200)]
Avoid use of std::make_unique in compiler-rt/lib/scudo/standalone/tests/combined_test.cpp

make_unique is a C++14 feature, and this prevents us from building on
Ubuntu Trusty. While we do use a C++14 compatible toolchain for building
in general, we fall back to the system toolchain for building the
compiler-rt tests.

The reason is that those tests get cross-compiled for e.g. 32-bit and
64-bit x86, and while the toolchain provides libstdc++ in those
flavours, the resulting compiler-rt test binaries don't get RPATH set
and so won't start if they're linked with that toolchain.

We've tried linking the test binaries against libstdc++ statically, by
passing COMPILER_RT_TEST_COMPILER_CFLAGS=-static-libstdc++. That mostly
works, but some test targets append -lstdc++ to the compiler invocation.

So, after spending way too much time on this, let's just avoid C++14
here for now.

4 years ago[llvm-readobj] - Add comments and formatting to mips-options-sec.test and mips-reginf...
Georgii Rymar [Tue, 28 Jul 2020 10:31:13 +0000 (13:31 +0300)]
[llvm-readobj] - Add comments and formatting to mips-options-sec.test and mips-reginfo.test. NFCI.

This will allow to extend them (needed for D84651).

4 years ago[llvm-readelf] Symbol index in symbol table printing is not reset
Mikhail Kalashnikov [Tue, 28 Jul 2020 10:06:51 +0000 (13:06 +0300)]
[llvm-readelf] Symbol index in symbol table printing is not reset

Stop using static variables for keeping track of symbol indices.

Bugfix for: https://bugs.llvm.org/show_bug.cgi?id=46777

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

4 years ago[Concepts] Fix ast dump for immediately declared constraint.
Haojian Wu [Tue, 28 Jul 2020 09:59:49 +0000 (11:59 +0200)]
[Concepts] Fix ast dump for immediately declared constraint.

Reviewed By: nridge

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

4 years ago[Attributor] Track AA dependency using dependency graph
Luofan Chen [Tue, 28 Jul 2020 10:02:49 +0000 (18:02 +0800)]
[Attributor] Track AA dependency using dependency graph

This patch added dependency graph to the attributor so that we can dump the dependencies between AAs more easily. We can also apply general graph algorithms to the graph, making it easier for us to create deep wrappers.

Reviewed By: jdoerfert

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

4 years ago[clang-format][NFC] Fix a Wdocumentation warning in TokenAnnotator.cpp
Bruno Ricci [Tue, 28 Jul 2020 09:58:34 +0000 (10:58 +0100)]
[clang-format][NFC] Fix a Wdocumentation warning in TokenAnnotator.cpp

4 years ago[Support] Add file lock/unlock functions
Serge Pavlov [Wed, 22 Apr 2020 16:00:12 +0000 (23:00 +0700)]
[Support] Add file lock/unlock functions

This is recommit of f51bc4fb60fb, reverted in 8577595e03fa, because
the function `flock` is not available on Solaris. In this variant
`flock` was replaced with `fcntl`, which is a POSIX function.

New functions `lockFile`, `tryLockFile` and `unlockFile` implement
simple file locking. They lock or unlock entire file. This must be
enough to support simulataneous writes to log files in parallel builds.

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

4 years ago[clang] Pass the NamedDecl* instead of the DeclarationName into many diagnostics.
Bruno Ricci [Mon, 27 Jul 2020 22:22:21 +0000 (23:22 +0100)]
[clang] Pass the NamedDecl* instead of the DeclarationName into many diagnostics.

Background:
-----------
There are two related argument types which can be sent into a diagnostic to
display the name of an entity: DeclarationName (ak_declarationname) or
NamedDecl* (ak_nameddecl) (there is also ak_identifierinfo for
IdentifierInfo*, but we are not concerned with it here).

A DeclarationName in a diagnostic will just be streamed to the output,
which will directly result in a call to DeclarationName::print.

A NamedDecl* in a diagnostic will also ultimately result in a call to
DeclarationName::print, but with two customisation points along the way:

The first customisation point is NamedDecl::getNameForDiagnostic which is
overloaded by FunctionDecl, ClassTemplateSpecializationDecl and
VarTemplateSpecializationDecl to print the template arguments, if any.

The second customisation point is NamedDecl::printName. By default it just
streams the stored DeclarationName into the output but it can be customised
to provide a user-friendly name for an entity. It is currently overloaded by
DecompositionDecl and MSGuidDecl.

What this patch does:
---------------------
For many diagnostics a DeclarationName is used instead of the NamedDecl*.
This bypasses the two customisation points mentioned above. This patches fix
this for diagnostics in Sema.cpp, SemaCast.cpp, SemaChecking.cpp, SemaDecl.cpp,
SemaDeclAttr.cpp, SemaDecl.cpp, SemaOverload.cpp and SemaStmt.cpp.

I have only modified diagnostics where I could construct a test-case which
demonstrates that the change is appropriate (either with this patch or the next
one).

Reviewed By: erichkeane, aaron.ballman

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

4 years ago[clang-format][NFC] Be more careful about the layout of FormatToken.
Bruno Ricci [Mon, 27 Jul 2020 22:19:02 +0000 (23:19 +0100)]
[clang-format][NFC] Be more careful about the layout of FormatToken.

The underlying ABI forces FormatToken to have a lot of padding.

Currently (on x86-64 linux) `sizeof(FormatToken) == 288`. After this patch
`sizeof(FormatToken) == 232`.

No functional changes.

Reviewed By: MyDeveloperDay

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

4 years ago[OpenMP][Tests] Enable nvptx64 testing for most libomptarget tests
Joachim Protze [Tue, 28 Jul 2020 09:08:24 +0000 (11:08 +0200)]
[OpenMP][Tests] Enable nvptx64 testing for most libomptarget tests

Also add $BUILD/lib to the LIBRARY_PATH to fix
https://bugs.llvm.org/show_bug.cgi?id=46836.

Reviewed By: JonChesterfield

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

4 years ago[X86][SSE] Attempt to match OP(SHUFFLE(X,Y),SHUFFLE(X,Y)) -> SHUFFLE(HOP(X,Y))
Simon Pilgrim [Tue, 28 Jul 2020 08:52:38 +0000 (09:52 +0100)]
[X86][SSE] Attempt to match OP(SHUFFLE(X,Y),SHUFFLE(X,Y)) -> SHUFFLE(HOP(X,Y))

An initial backend patch towards fixing the various poor HADD combines (PR34724, PR41813, PR45747 etc.).

This extends isHorizontalBinOp to check if we have per-element horizontal ops (odd+even element pairs), but not in the expected serial order - in which case we build a "post shuffle mask" that we can apply to the HOP result, assuming we have fast-hops/optsize etc.

The next step will be to extend the SHUFFLE(HOP(X,Y)) combines as suggested on PR41813 - accepting more post-shuffle masks even on slow-hop targets if we can fold it into another shuffle.

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

4 years ago[legacyPM] Do not compute preserved analysis if there's no local change
serge-sans-paille [Tue, 28 Jul 2020 08:55:09 +0000 (10:55 +0200)]
[legacyPM] Do not compute preserved analysis if there's no local change

All analysis are preserved if there's no local change, and thanks to
3667d87a33d3c8d4072a41fd84bb880c59347dc0 this property is enforced for all
passes.

Skipping the dependency computation improves the performance when there's a lot
of small functions, where only a few change happen.

Thanks to Nikita Popov who provided this numbers (extract below)

https://llvm-compile-time-tracker.com/compare.php?from=183342c0a9850e60dd7a004b651c83dfb3a7d25e&to=f2f91e6a2743070471cc9471e4e8c646e50c653c&stat=instructions

O3: (number of instructions)
Benchmark               Old             New
kimwitu++               60783M          59968M          (-1.34%)
sqlite3                 73200M          73083M          (-0.16%)
consumer-typeset        52776M          52712M          (-0.12%)
Bullet                  133709M         132940M         (-0.58%)
tramp3d-v4              123864M         123186M         (-0.55%)
mafft                   55534M          55477M          (-0.10%)
ClamAV                  76292M          76164M          (-0.17%)
lencod                  103190M         103061M         (-0.13%)
SPASS                   64068M          63713M          (-0.55%)
7zip                    197332M         196308M         (-0.52%)
geomean                 85750M          85389M          (-0.42%)

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

4 years ago[llvm-readelf] - Do not treat SHT_ANDROID_RELR sections the same as SHT_RELR.
Georgii Rymar [Thu, 23 Jul 2020 10:32:05 +0000 (13:32 +0300)]
[llvm-readelf] - Do not treat SHT_ANDROID_RELR sections the same as SHT_RELR.

Currently, when dumping section headers, llvm-readelf
prints "RELR" for SHT_ANDROID_RELR/SHT_RELR sections.
The behavior was introduced in D47919 and revealed in D84330.

But "SHT_ANDROID_RELR" has a different value from "SHT_RELR".
Also, "SHT_ANDROID_REL/SHT_ANDROID_RELA" are printed as "ANDROID_REL/ANDROID_RELA",
what makes the handling of the "SHT_ANDROID_RELR" inconsistent.

This patch makes llvm-readelf to print "ANDROID_RELR" instead of "RELR".

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

4 years ago[clang][cmake] Force CMAKE_LINKER for multistage build in case of BOOTSTRAP_LLVM_ENAB...
Kristina Bessonova [Fri, 29 May 2020 11:14:51 +0000 (13:14 +0200)]
[clang][cmake] Force CMAKE_LINKER for multistage build in case of BOOTSTRAP_LLVM_ENABLE_LLD and MSVC

The issue with LLVM_ENABLE_LLD is that it just passes -fuse-ld=lld
to compiler/linker options which makes sense only for those platforms
where cmake invokes a compiler driver for linking. On Windows (MSVC) cmake
invokes the linker directly and requires CMAKE_LINKER to be specified
otherwise it defaults CMAKE_LINKER to be link.exe.

This patch allows BOOTSTRAP_LLVM_ENABLE_LLD to set CMAKE_LINKER in two cases:
* if building for host Windows,
* if crosscompiling for target Windows.

It also skips adding '-fuse-ld=lld' to make lld-link not warning
about 'unknown argument'.

This fixes build with `clang/cmake/caches/DistributionExample.cmake`
on Windows.

Reviewed By: phosek

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

4 years ago[PowerPC] test case for adding dq form to isLegalAddressingMode, nfc
Chen Zheng [Tue, 28 Jul 2020 06:56:35 +0000 (02:56 -0400)]
[PowerPC] test case for adding dq form to isLegalAddressingMode, nfc

4 years ago[GVN] Rewrite IsValueFullyAvailableInBlock(): no recursion, less false-negatives
Roman Lebedev [Tue, 28 Jul 2020 07:16:52 +0000 (10:16 +0300)]
[GVN] Rewrite IsValueFullyAvailableInBlock(): no recursion, less false-negatives

While this doesn't appear to help with the perf issue being exposed by
D84108, the function as-is is very weird, convoluted, and what's worse,
recursive.

There was no need for `SpeculativelyAvaliableAndUsedForSpeculation`,
tri-state choice is enough. We don't even ever check for that state.

The basic idea here is that we need to perform a depth-first traversal
of the predecessors of the basic block in question, either finding a
preexisting state for the block in a map, or inserting a "placeholder"
`SpeculativelyAvaliable`,

If we encounter an `Unavaliable` block, then we need to give up search,
and back-propagate the `Unavaliable` state to the each successor of
said block, more specifically to the each `SpeculativelyAvaliable`
we've just created.

However, if we have traversed entirety of the predecessors and have not
encountered an `Unavaliable` block, then it must mean the value is fully
available. We could update each inserted `SpeculativelyAvaliable` into
a `Avaliable`, but we don't need to, as assertion excersizes,
because we can assume that if we see an `SpeculativelyAvaliable` entry,
it is actually `Avaliable`, because during the time we've produced it,
if we would have found that it has an `Unavaliable` predecessor,
we would have updated it's successors, including this block,
into `Unavaliable`

Reviewed By: fhahn

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

4 years ago[mlir][NFC] Polish copy removal transform
Ehsan Toosi [Fri, 24 Jul 2020 13:43:59 +0000 (15:43 +0200)]
[mlir][NFC] Polish copy removal transform

Address a few remaining comments in copy removal transform.

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

4 years ago[clang-tidy] Suppress one unittest on macOS.
Artem Dergachev [Thu, 23 Jul 2020 18:37:45 +0000 (11:37 -0700)]
[clang-tidy] Suppress one unittest on macOS.

Possibly a linker bug but I'm in a hurry to fix a buildbot.

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

4 years ago[X86] Detect if EFLAGs is live across XBEGIN pseudo instruction. Add it as livein...
Craig Topper [Tue, 28 Jul 2020 04:11:54 +0000 (21:11 -0700)]
[X86] Detect if EFLAGs is live across XBEGIN pseudo instruction. Add it as livein to the basic blocks created when expanding the pseudo

XBEGIN causes several based blocks to be inserted. If flags are live across it we need to make eflags live in the new basic blocks to avoid machine verifier errors.

Fixes PR46827

Reviewed By: ivanbaev

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

4 years ago[X86] Add support for {disp32} to control size of jmp and jcc instructions in the...
Craig Topper [Tue, 28 Jul 2020 04:11:48 +0000 (21:11 -0700)]
[X86] Add support for {disp32} to control size of jmp and jcc instructions in the assembler

By default we pick a 1 byte displacement and let relaxation enlarge it if necessary. The GNU assembler supports a pseudo prefix to basically pre-relax the instruction the larger size.

I plan to add {disp8} and {disp32} support for memory operands in another patch which is why I've included the parsing code and enum for {disp8} pseudo prefix as well.

Reviewed By: echristo

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

4 years ago[X86] Properly encode a 32-bit address with an index register and no base register...
Craig Topper [Tue, 28 Jul 2020 04:11:42 +0000 (21:11 -0700)]
[X86] Properly encode a 32-bit address with an index register and no base register in 16-bit mode.

In 16-bit mode we can encode a 32-bit address using 0x67 prefix.
We were failing to do this when the index register was a 32-bit
register, the base register was not present, and the displacement
fit in 16-bits.

Fixes PR46866.

4 years agoSupplement instr profile with sample profile.
Wei Mi [Wed, 8 Jul 2020 22:19:44 +0000 (15:19 -0700)]
Supplement instr profile with sample profile.

PGO profile is usually more precise than sample profile. However, PGO profile
needs to be collected from loadtest and loadtest may not be representative
enough to the production workload. Sample profile collected from production
can be used as a supplement -- for functions cold in loadtest but warm/hot
in production, we can scale up the related function in PGO profile if the
function is warm or hot in sample profile.

The implementation contains changes in compiler side and llvm-profdata side.
Given an instr profile and a sample profile, for a function cold in PGO
profile but warm/hot in sample profile, llvm-profdata will either mark
all the counters in the profile to be -1 or scale up the max count in the
function to be above hot threshold, depending on the zero counter ratio in
the profile. The assumption is if there are too many counters being zero
in the function profile, the profile is more likely to cause harm than good,
then llvm-profdata will mark all the counters to be -1 indicating the
function is hot but the profile is unaccountable. In compiler side, if a
function profile with all -1 counters is seen, the function entry count will
be set to be above hot threshold but its internal profile will be dropped.

In the long run, it may be useful to let compiler support using PGO profile
and sample profile at the same time, but that requires more careful design
and more substantial changes to make two profiles work seamlessly. The patch
here serves as a simple intermediate solution.

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

4 years agoDon't form a 'context-independent expr' reference to a member during
Richard Smith [Tue, 28 Jul 2020 00:28:06 +0000 (17:28 -0700)]
Don't form a 'context-independent expr' reference to a member during
name annotation.

Instead, defer forming the member access expression or DeclRefExpr until
we build the use of ClassifyName's result. Just build an
UnresolvedLookupExpr to track the LookupResult until we're ready to
consume it.

This also reverts commit 2f7269b6773de2750f9cd1417ef5f21cd6cf7a91 (other
than its testcase). That change was an attempted workaround for the same
problem.