platform/upstream/llvm.git
3 years ago[X86][GlobalISel] Remove unneeded code for handling zext i8->16, i8->i64, i16->i64...
Craig Topper [Sun, 9 Aug 2020 07:24:53 +0000 (00:24 -0700)]
[X86][GlobalISel] Remove unneeded code for handling zext i8->16, i8->i64, i16->i64, i32->i64.

These all seem to be handled by tablegen pattern imports.

3 years ago[MLIR][NFC] Fix misleading diagnostic error + clang-tidy fix
Uday Bondhugula [Sat, 8 Aug 2020 21:48:04 +0000 (03:18 +0530)]
[MLIR][NFC] Fix misleading diagnostic error + clang-tidy fix

Fix misleading diagnostic error in affine.yield verifier + a clang-tidy fix.

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

3 years ago[DAGCombiner] Teach SimplifySetCC SETUGE X, SINTMIN -> SETLT X, 0 and SETULE X, SINTM...
Craig Topper [Sun, 9 Aug 2020 05:09:21 +0000 (22:09 -0700)]
[DAGCombiner] Teach SimplifySetCC SETUGE X, SINTMIN -> SETLT X, 0 and SETULE X, SINTMAX  -> SETGT X, -1.

These aren't the canonical forms we'd get from InstCombine, but
we do have X86 tests for them. Recognizing them is pretty cheap.

While there make use of APInt:isSignedMinValue/isSignedMaxValue
instead of creating a new APInt to compare with. Also use
SelectionDAG::getAllOnesConstant helper to hide the all ones
APInt creation.

3 years ago[X86] Autogenerate complete checks. NFC
Craig Topper [Sun, 9 Aug 2020 00:12:20 +0000 (17:12 -0700)]
[X86] Autogenerate complete checks. NFC

3 years agoRevert "[NFC][StackSafety] Add index test"
Vitaly Buka [Sun, 9 Aug 2020 04:26:35 +0000 (21:26 -0700)]
Revert "[NFC][StackSafety] Add index test"

This reverts commit 5fd49911db546cda6b35dffb6be440385e8d96d5.

GUIDs don't match.

3 years ago[NFC][StackSafety] Add index test
Vitaly Buka [Sun, 9 Aug 2020 02:09:34 +0000 (19:09 -0700)]
[NFC][StackSafety] Add index test

This directly covers generateParamAccessSummary

3 years ago[NFC][StackSafety] noinline in alias tests
Vitaly Buka [Sat, 8 Aug 2020 00:22:08 +0000 (17:22 -0700)]
[NFC][StackSafety] noinline in alias tests

3 years ago[ELF] --wrap: don't leave the original symbol as SHN_UNDEF in .symtab or .dynsym
Fangrui Song [Sun, 9 Aug 2020 01:17:38 +0000 (18:17 -0700)]
[ELF] --wrap: don't leave the original symbol as SHN_UNDEF in .symtab or .dynsym

3 years ago[llvm-profdata] Implement llvm-profdata overlap for sample profiles
weihe [Sun, 9 Aug 2020 00:49:33 +0000 (17:49 -0700)]
[llvm-profdata] Implement llvm-profdata overlap for sample profiles

Implemented the `llvm-profdata overlap` feature for sample profiles. It reports weighted //similarity// and unweighted //overlap// metrics at program and function level for two input profiles. Similarity metrics are symmetric with regards to the order of two input profiles. By default, the tool only reports program-level summary. Users can look into function-level details via additional options `--function`, `--similarity-cutoff`, and `--value-cutoff`.

The similarity metrics are designed as follows:
* Program-level summary
    * Whole program profile similarity is an aggregate over function-level similarity `FS`: `PS = sum(FS(A) * avg_weight(A))` for all function `A`.
    * Whole program sample overlap: `PSO = common_samples / total_samples`.
    * Function overlap: `FO = #common_function / #total_function`.
    * Hot-function overlap: `HFO = #common_hot_function / #total_hot_function`.
    * Hot-block overlap: `HBO = #common_hot_block / #total_hot_block`.
* Function-level details
    * Function-level similarity is an aggregate over line/block-level similarities `BS` of all sample lines/blocks in the function, weighted by the closeness of the function's weights in two profiles: `FS = sum(BS(i)) * (1 - weight_distance(A))`.
    * Function-level sample overlap: `FSO = common_samples / total_samples` for samples in the function.

Reviewed By: wenlei, hoyFB, wmi

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

3 years agoRevert "[CMake] Simplify CMake handling for zlib"
Petr Hosek [Sun, 9 Aug 2020 00:08:23 +0000 (17:08 -0700)]
Revert "[CMake] Simplify CMake handling for zlib"

This reverts commit ccbc1485b55ff4acd21bcfafbf7aec4ed0fd818d which
is still failing on the Windows MLIR bots.

3 years ago[CMake] Simplify CMake handling for zlib
Petr Hosek [Thu, 30 Apr 2020 20:07:13 +0000 (13:07 -0700)]
[CMake] Simplify CMake handling for zlib

Rather than handling zlib handling manually, use find_package from CMake
to find zlib properly. Use this to normalize the LLVM_ENABLE_ZLIB,
HAVE_ZLIB, HAVE_ZLIB_H. Furthermore, require zlib if LLVM_ENABLE_ZLIB is
set to YES, which requires the distributor to explicitly select whether
zlib is enabled or not. This simplifies the CMake handling and usage in
the rest of the tooling.

This is a reland of abb0075 with all followup changes and fixes that
should address issues that were reported in PR44780.

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

3 years agoBackout a test that is dependent on an uncommited diff. Fix another.
Brad Smith [Sat, 8 Aug 2020 22:39:43 +0000 (18:39 -0400)]
Backout a test that is dependent on an uncommited diff. Fix another.

3 years ago[WebAssembly] Fix FastISel address calculation bug
Thomas Lively [Sat, 8 Aug 2020 22:23:11 +0000 (15:23 -0700)]
[WebAssembly] Fix FastISel address calculation bug

Fixes PR47040, in which an assertion was improperly triggered during
FastISel's address computation. The issue was that an `Address` set to
be relative to the FrameIndex with offset zero was incorrectly
considered to have an unset base. When the left hand side of an add
set the Address to be 0 off the FrameIndex, the right side would not
detect that the Address base had already been set and could try to set
the Address to be relative to a register instead, triggering an
assertion.

This patch fixes the issue by explicitly tracking whether an `Address`
has been set rather than interpreting an offset of zero to mean the
`Address` has not been set.

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

3 years agofix typo
Brad Smith [Sat, 8 Aug 2020 21:58:13 +0000 (17:58 -0400)]
fix typo

3 years agoHook up OpenBSD 64-bit PowerPC support
Brad Smith [Sat, 8 Aug 2020 21:51:19 +0000 (17:51 -0400)]
Hook up OpenBSD 64-bit PowerPC support

3 years ago[MLIR] Consider AffineIfOp when getting the index set of an Op wrapped in nested...
Vincent Zhao [Sat, 8 Aug 2020 21:41:44 +0000 (03:11 +0530)]
[MLIR] Consider AffineIfOp when getting the index set of an Op wrapped in nested loops

This diff attempts to resolve the TODO in `getOpIndexSet` (formerly
known as `getInstIndexSet`), which states "Add support to handle IfInsts
surronding `op`".

Major changes in this diff:

1. Overload `getIndexSet`. The overloaded version considers both
`AffineForOp` and `AffineIfOp`.
2. The `getInstIndexSet` is updated accordingly: its name is changed to
`getOpIndexSet` and its implementation is based on a new API `getIVs`
instead of `getLoopIVs`.
3. Add `addAffineIfOpDomain` to `FlatAffineConstraints`, which extracts
new constraints from the integer set of `AffineIfOp` and merges it to
the current constraint system.
4. Update how a `Value` is determined as dim or symbol for
`ValuePositionMap` in `buildDimAndSymbolPositionMaps`.

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

3 years ago[X86] Remove a DCI.isBeforeLegalize() call from combineVSelectWithAllOnesOrZeros.
Craig Topper [Sat, 8 Aug 2020 21:05:51 +0000 (14:05 -0700)]
[X86] Remove a DCI.isBeforeLegalize() call from combineVSelectWithAllOnesOrZeros.

This was blocking isTypeLegal call so that we could do a particular
transform on illegal types before type legalization. But the we
create a target specific node using that type. We shouldn't do
that if the type isn't legal. So I think we should just always
make sure the type is legal.

I suspect that in order to get the condition VT to not be a vector
of i1 we already completed type legalization anyway so this probably
doesn't matter much in practice.

3 years ago[Reduce] Rewrite function body delta pass again
Roman Lebedev [Sat, 8 Aug 2020 20:21:08 +0000 (23:21 +0300)]
[Reduce] Rewrite function body delta pass again

It is not enough to replace all uses of users of the function with undef,
the users, we only drop instruction users, so they may stick around.

Let's try different approach - first drop bodies for all the functions
we will drop, which should take care of blockaddress issue the previous
rewrite was dealing with; then, after dropping *all* such bodies,
replace remaining uses with undef (thus all the uses are either
outside of functions, or are in kept functions)
and then finally drop functions.

This seems to work, and passes the *existing* test coverage,
but it is possible that a new issue will be discovered later :)

A new (previously crashing) test added.

3 years ago[libcxx-fuzzing] Fixed bug found by -Wstring-concatenation
Dávid Bolvanský [Sat, 8 Aug 2020 20:44:14 +0000 (22:44 +0200)]
[libcxx-fuzzing] Fixed bug found by -Wstring-concatenation

3 years ago[X86] Support matching VPTERNLOG when the root node is X86ISD::ANDNP.
Craig Topper [Sat, 8 Aug 2020 19:58:49 +0000 (12:58 -0700)]
[X86] Support matching VPTERNLOG when the root node is X86ISD::ANDNP.

3 years ago[X86] Add VPTERNLOG test cases where the root node will be X86ISD::ANDNP. NFC
Craig Topper [Sat, 8 Aug 2020 19:50:33 +0000 (12:50 -0700)]
[X86] Add VPTERNLOG test cases where the root node will be X86ISD::ANDNP. NFC

We currently fail to match this.

3 years ago[AArch64RegisterInfo] Supress new warning
Dávid Bolvanský [Sat, 8 Aug 2020 19:47:01 +0000 (21:47 +0200)]
[AArch64RegisterInfo] Supress new warning

3 years ago[X86] Remove isSafeToClobberEFLAGS helper and just inline it into the call sites.
Craig Topper [Sat, 8 Aug 2020 19:00:15 +0000 (12:00 -0700)]
[X86] Remove isSafeToClobberEFLAGS helper and just inline it into the call sites.

This is just a thin wrapper around computeRegisterLivness which
we can just call directly. The only real difference is that
isSafeToClobberEFLAGS returns a bool and computeRegisterLivness
returns an enum. So we need to check for the specific enum value
that isSafeToClobberEFLAGS was hiding.

I've also adjusted which sites pass an explicit value for
Neighborhood since the default for computeRegisterLivness is 10.

3 years ago[LLDB] Fix timeout value on expect_gdbremote_sequence
Muhammad Omair Javaid [Fri, 7 Aug 2020 22:35:15 +0000 (03:35 +0500)]
[LLDB] Fix timeout value on expect_gdbremote_sequence

D83904 seems to have changed timeout value on expect_gdbremote_sequence which
was 120 previously. This seems to be causing intermittent failures on
lldb-aarch64-ubuntu buildbot.

This patch fixes the timeout value to see the impact on test suite.

Example:
http://lab.llvm.org:8011/builders/lldb-aarch64-ubuntu/builds/7401/steps/test/logs/stdio

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

3 years agoRecommit "[X86] Increase the number of instructions searched for isSafeToClobberEFLAG...
Craig Topper [Sat, 8 Aug 2020 18:38:50 +0000 (11:38 -0700)]
Recommit "[X86] Increase the number of instructions searched for isSafeToClobberEFLAGS in a couple places"

I messed up the bug numbers in the commit message before

Previously this function searched 4 instructions forwards or
backwards to determine if it was ok to clobber eflags.

This is called in 3 places: rematerialization, turning 2 operand
leas into adds or splitting 3 ops leas into an lea and add on some
CPU targets.

This patch increases the search limit to 10 instructions for
rematerialization and 2 operand lea to add. I've left the old
treshold for 3 ops lea spliting as that increases code size.

Fixes PR47024 and PR46315.

3 years agoRevert "[X86] Increase the number of instructions searched for isSafeToClobberEFLAGS...
Craig Topper [Sat, 8 Aug 2020 18:38:26 +0000 (11:38 -0700)]
Revert "[X86] Increase the number of instructions searched for isSafeToClobberEFLAGS in a couple places"

This reverts commit 44b260cb0aab387d85e4d59c16fc7b8866264f5e.

I messed up the bug number in the commit message so I'm reverting
to fix it.

3 years ago[FileCheckTest] Supress new warning
Dávid Bolvanský [Sat, 8 Aug 2020 18:45:24 +0000 (20:45 +0200)]
[FileCheckTest] Supress new warning

3 years ago[X86][SSE] combineTargetShuffle - use scaleShuffleMask helper to widen shuffle mask...
Simon Pilgrim [Sat, 8 Aug 2020 18:35:57 +0000 (19:35 +0100)]
[X86][SSE] combineTargetShuffle - use scaleShuffleMask helper to widen shuffle mask. NFCI.

Use scaleShuffleMask helper for the shuffle(hadd,hadd) canonicalization.

3 years ago[X86] Increase the number of instructions searched for isSafeToClobberEFLAGS in a...
Craig Topper [Sat, 8 Aug 2020 18:03:16 +0000 (11:03 -0700)]
[X86] Increase the number of instructions searched for isSafeToClobberEFLAGS in a couple places

Previously this function searched 4 instructions forwards or
backwards to determine if it was ok to clobber eflags.

This is called in 3 places: rematerialization, turning 2 operand
leas into adds or splitting 3 ops leas into an lea and add on some
CPU targets.

This patch increases the search limit to 10 instructions for
rematerialization and 2 operand lea to add. I've left the old
treshold for 3 ops lea spliting as that increases code size.

Fixes PR47024 and PR43014

3 years ago[InstCombine] Use CreateVectorSplat(ElementCount) variant directly
Simon Pilgrim [Sat, 8 Aug 2020 18:26:02 +0000 (19:26 +0100)]
[InstCombine] Use CreateVectorSplat(ElementCount) variant directly

This was introduced at rGe20223672100, and the CreateVectorSplat(unsigned NumElements) variant calls it internally

3 years agoFix MSVC "not all control paths return a value" warning. NFC.
Simon Pilgrim [Sat, 8 Aug 2020 18:12:11 +0000 (19:12 +0100)]
Fix MSVC "not all control paths return a value" warning. NFC.

3 years agoChange the default target CPU for OpenBSD/i386 to i586
Brad Smith [Sat, 8 Aug 2020 17:49:45 +0000 (13:49 -0400)]
Change the default target CPU for OpenBSD/i386 to i586

3 years ago[Clang] Fixed buildboit failure; bot defaults to older C++ standard
Dávid Bolvanský [Sat, 8 Aug 2020 17:37:50 +0000 (19:37 +0200)]
[Clang] Fixed buildboit failure; bot defaults to older C++ standard

3 years ago[Clang] Avoid whitespace in fixit note
Dávid Bolvanský [Sat, 8 Aug 2020 17:34:07 +0000 (19:34 +0200)]
[Clang] Avoid whitespace in fixit note

3 years ago[Diagnostics] Diagnose missing comma in string array initialization
Dávid Bolvanský [Sat, 8 Aug 2020 17:22:44 +0000 (19:22 +0200)]
[Diagnostics] Diagnose missing comma in string array initialization

Motivation (from PR37674):

const char *ss[] = {
  "foo", "bar",
  "baz", "qux"  // <-- Missing comma!
  "abc", "xyz"
  };

This kind of bug was recently also found in LLVM codebase (see PR47030).

Solves PR47038, PR37674

Reviewed By: aaron.ballman

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

3 years ago[SimplifyCFG] Fix invoke->call fold w/ multiple invokes in presence of lifetime intri...
Roman Lebedev [Sat, 8 Aug 2020 14:57:32 +0000 (17:57 +0300)]
[SimplifyCFG] Fix invoke->call fold w/ multiple invokes in presence of lifetime intrinsics

SimplifyCFG has two main folds for resumes - one when resume is directly
using the landingpad, and the other one where resume is using a PHI node.

While for the first case, we were already correctly ignoring all the
PHI nodes, and both the debug info intrinsics and lifetime intrinsics,
in the PHI-based-one, we weren't ignoring PHI's in the resume block,
and weren't ignoring lifetime intrinsics. That is clearly a bug.

On RawSpeed library, this results in +9.34% (+81) more invoke->call folds,
-0.19% (-39) landing pads, -0.24% (-81) invoke instructions
but +51 call instructions and -132 basic blocks.

Though, the run-time performance impact appears to be within the noise.

3 years ago[NFC][SimplifyCFG] Rewrite isCleanupBlockEmpty() to be iterator_range-based
Roman Lebedev [Sat, 8 Aug 2020 14:20:36 +0000 (17:20 +0300)]
[NFC][SimplifyCFG] Rewrite isCleanupBlockEmpty() to be iterator_range-based

3 years ago[NFC][SimplifyCFG] Add a test showing invoke->call simplification failure
Roman Lebedev [Sat, 8 Aug 2020 13:53:30 +0000 (16:53 +0300)]
[NFC][SimplifyCFG] Add a test showing invoke->call simplification failure

3 years ago[NFC][SimplifyCFG] Count the number of invokes turned into calls due to empty cleanup...
Roman Lebedev [Sat, 8 Aug 2020 13:46:31 +0000 (16:46 +0300)]
[NFC][SimplifyCFG] Count the number of invokes turned into calls due to empty cleanup blocks

3 years ago[ELF] --wrap: set isUsedInRegularObj of __wrap_ if it is defined or shared
Fangrui Song [Sat, 8 Aug 2020 16:24:08 +0000 (09:24 -0700)]
[ELF] --wrap: set isUsedInRegularObj of __wrap_ if it is defined or shared

Fixes PR47017 (a regression when fixing PR46169): if __wrap_ is shared,
it is not exported.

3 years ago[DAGCombiner] reassociate reciprocal sqrt expression to eliminate FP division, part 2
Sanjay Patel [Fri, 7 Aug 2020 20:57:27 +0000 (16:57 -0400)]
[DAGCombiner] reassociate reciprocal sqrt expression to eliminate FP division, part 2

Follow-up to D82716 / rGea71ba11ab11
We do not have the fabs removal fold in IR yet for the case
where the sqrt operand is repeated, so that's another potential
improvement.

3 years ago[x86] add tests for another reciprocal sqrt pattern; NFC
Sanjay Patel [Fri, 7 Aug 2020 16:27:55 +0000 (12:27 -0400)]
[x86] add tests for another reciprocal sqrt pattern; NFC

3 years agolib/CodeGen doesn't depend on lib/Passes.
Benjamin Kramer [Sat, 8 Aug 2020 11:40:24 +0000 (13:40 +0200)]
lib/CodeGen doesn't depend on lib/Passes.

3 years ago[test][DebugInfo] Adapt two tests for Sun assembler syntax on Sparc
Rainer Orth [Sat, 8 Aug 2020 07:13:47 +0000 (09:13 +0200)]
[test][DebugInfo] Adapt two tests for Sun assembler syntax on Sparc

Two DebugInfo tests currently `FAIL` on Sparc:

  LLVM :: DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll
  LLVM :: DebugInfo/Generic/array.ll

both in a similar way.  E.g.

  : 'RUN: at line 1';   /var/llvm/local-sparcv9-A/bin/llc -O2 /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll -o - | /var/llvm/local-sparcv9-A/bin/FileCheck /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll

  /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll:4:10: error: CHECK: expected string not found in input
  ; CHECK: debug_info,
           ^

On `amd64-pc-solaris2.11`, the corresponding line is

  .section        .debug_info,"",@progbits

while on `sparcv9-sun-solaris2.11` we have only

  .section        .debug_info

This happens because Sparc currently emits `.section` directives using the
style of the Solaris/SPARC assembler (controlled by `SunStyleELFSectionSwitchSyntax`).

This patch takes the easy way out and allows both forms while tightening the
check to only match the `.section` directive.

Tested on `sparcv9-sun-solaris2.11`, `amd64-pc-solaris2.11`,
`x86_64-pc-linux-gnu`, and `x86_64-apple-darwin20.0.0`.

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

3 years ago[libc][NFC] Disable a loader test as ld.gold fails to link.
Siva Chandra Reddy [Sat, 8 Aug 2020 06:45:18 +0000 (23:45 -0700)]
[libc][NFC] Disable a loader test as ld.gold fails to link.

Will be reenabled after investigating and fixing the problem.

3 years ago[libc][NFC] Add library of floating point test matchers.
Siva Chandra Reddy [Thu, 6 Aug 2020 07:19:08 +0000 (00:19 -0700)]
[libc][NFC] Add library of floating point test matchers.

This eliminates UnitTest's dependency on FPUtil and hence prevents
non-math tests from depending indirectly on FPUtil. The patch
essentially moves some of the existing pieces into a library of its own.

Along the way, renamed add_math_unittest to add_fp_unittest.

Reviewed By: lntue

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

3 years agoAdd the inline interface to the shape dialect
Feng Liu [Sat, 8 Aug 2020 06:23:06 +0000 (23:23 -0700)]
Add the inline interface to the shape dialect

This patch also fixes a minor issue that shape.rank should allow
returning !shape.size. The dialect doc has such an example for
shape.rank.

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

3 years ago[InstCombine] Optimize select(freeze(icmp eq/ne x, y), x, y)
Juneyoung Lee [Fri, 7 Aug 2020 12:12:52 +0000 (21:12 +0900)]
[InstCombine] Optimize select(freeze(icmp eq/ne x, y), x, y)

This patch adds an optimization that folds select(freeze(icmp eq/ne x, y), x, y)
to x or y.
This was needed to resolve slowdown after D84940 is applied.

I tried to bake this logic into foldSelectInstWithICmp, but it wasn't clear.
This patch conservatively writes the pattern in a separate function,
foldSelectWithFrozenICmp.

The output does not need freeze; https://alive2.llvm.org/ce/z/X49hNE (from @nikic)

Reviewed By: nikic

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

3 years ago[libc] Setup TLS in x86_64 loader.
Siva Chandra Reddy [Wed, 24 Jun 2020 21:12:46 +0000 (14:12 -0700)]
[libc] Setup TLS in x86_64 loader.

The new code added is still very x86_64 specific. AArch64 support will
be added very soon and refactoring of the loader code will be done as
part of the patches adding it.

Reviewed By: asteinhauser

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

3 years ago[InstCombine] Add tests for select(freeze(icmp x, y), x, y); NFC
Juneyoung Lee [Fri, 7 Aug 2020 12:11:58 +0000 (21:11 +0900)]
[InstCombine] Add tests for select(freeze(icmp x, y), x, y); NFC

3 years ago[X86] Limit the scope of the min/max canonicalization in combineSelect
Craig Topper [Sat, 8 Aug 2020 05:51:49 +0000 (22:51 -0700)]
[X86] Limit the scope of the min/max canonicalization in combineSelect

Previously the transform was doing these two canonicalizations
(x > y) ? x : y -> (x >= y) ? x : y
(x < y) ? x : y -> (x <= y) ? x : y

But those don't seem to be useful generally. And they actively
pessimize the cases in PR47049.

This patch limits it to
(x > 0) ? x : 0 -> (x >= 0) ? x : 0
(x < -1) ? x : -1 -> (x <= -1) ? x : -1

These are the cases mentioned in the comments as the motivation
for the canonicalization. These allow the CMOV to use the S
flag from the compare thus improving opportunities to use a TEST
or the flags from an arithmetic instruction.

3 years agoRemove unused static helper getMemRefTypeFromTensorType() (NFC)
Mehdi Amini [Sat, 8 Aug 2020 05:37:42 +0000 (05:37 +0000)]
Remove unused static helper getMemRefTypeFromTensorType() (NFC)

3 years agoRemove unused class member (NFC)
Mehdi Amini [Sat, 8 Aug 2020 05:36:41 +0000 (05:36 +0000)]
Remove unused class member (NFC)

Fix include/mlir/Reducer/ReductionNode.h:79:18: warning: private field 'parent' is not used [-Wunused-private-field]

3 years agoRevert "[mlir] Add a utility class, ThreadLocalCache, for storing non static thread...
Mehdi Amini [Sat, 8 Aug 2020 05:31:25 +0000 (05:31 +0000)]
Revert "[mlir] Add a utility class, ThreadLocalCache, for storing non static thread local objects."

This reverts commit 9f24640b7e6e61b0f293c724155a90a5e446dd7a.

We hit some dead-locks on thread exit in some configurations: TLS exit handler is taking a lock.
Temporarily reverting this change as we're debugging what is going on.

3 years ago[ELF] Support .cfi_signal_frame
Fangrui Song [Sat, 8 Aug 2020 05:08:00 +0000 (22:08 -0700)]
[ELF] Support .cfi_signal_frame

glibc/sysdeps/unix/sysv/linux/x86_64/sigaction.c libc.a(sigaction.o) has a CIE
with the augmentation string "zRS". Support 'S' to allow --icf={safe,all}.

3 years ago[MLIR] Add tiling validity check to loop tiling pass
Vincent Zhao [Thu, 6 Aug 2020 20:25:49 +0000 (01:55 +0530)]
[MLIR] Add tiling validity check to loop tiling pass

This revision aims to provide a new API, `checkTilingLegality`, to
verify that the loop tiling result still satisifes the dependence
constraints of the original loop nest.

Previously, there was no check for the validity of tiling. For instance:

```
func @diagonal_dependence() {
  %A = alloc() : memref<64x64xf32>

  affine.for %i = 0 to 64 {
    affine.for %j = 0 to 64 {
      %0 = affine.load %A[%j, %i] : memref<64x64xf32>
      %1 = affine.load %A[%i, %j - 1] : memref<64x64xf32>
      %2 = addf %0, %1 : f32
      affine.store %2, %A[%i, %j] : memref<64x64xf32>
    }
  }

  return
}
```

You can find more information about this example from the Section 3.11
of [1].

In general, there are three types of dependences here: two flow
dependences, one in direction `(i, j) = (0, 1)` (notation that depicts a
vector in the 2D iteration space), one in `(i, j) = (1, -1)`; and one
anti dependence in the direction `(-1, 1)`.

Since two of them are along the diagonal in opposite directions, the
default tiling method in `affine`, which tiles the iteration space into
rectangles, will violate the legality condition proposed by Irigoin and
Triolet [2]. [2] implies two tiles cannot depend on each other, while in
the `affine` tiling case, two rectangles along the same diagonal are
indeed dependent, which simply violates the rule.

This diff attempts to put together a validator that checks whether the
rule from [2] is violated or not when applying the default tiling method
in `affine`.

The canonical way to perform such validation is by examining the effect
from adding the constraint from Irigoin and Triolet to the existing
dependence constraints.

Since we already have the prior knowlegde that `affine` tiles in a
hyper-rectangular way, and the resulting tiles will be scheduled in the
same order as their respective loop indices, we can simplify the
solution to just checking whether all dependence components are
non-negative along the tiling dimensions.

We put this algorithm into a new API called `checkTilingLegality` under
`LoopTiling.cpp`. This function iterates every `load`/`store` pair, and
if there is any dependence between them, we get the dependence component
  and check whether it has any negative component. This function returns
  `failure` if the legality condition is violated.

[1]. Bondhugula, Uday. Effective Automatic parallelization and locality optimization using the Polyhedral model. https://dl.acm.org/doi/book/10.5555/1559029
[2]. Irigoin, F. and Triolet, R. Supernode Partitioning. https://dl.acm.org/doi/10.1145/73560.73588

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

3 years agoPR47025, PR47043: Diagnose unexpanded parameter packs in concept
Richard Smith [Sat, 8 Aug 2020 01:17:24 +0000 (18:17 -0700)]
PR47025, PR47043: Diagnose unexpanded parameter packs in concept
declarations and requires-expressions.

3 years ago[X86] Don't produce bad x86andp nodes for i1 vectors
Keno Fischer [Fri, 7 Aug 2020 20:38:15 +0000 (16:38 -0400)]
[X86] Don't produce bad x86andp nodes for i1 vectors

In D85499, I attempted to fix this same issue by canonicalizing
andnp for i1 vectors, but since there was some opposition to such
a change, this commit just fixes the bug by using two different
forms depending on which kind of vector type is in use. We can
then always decide to switch the canonical forms later.

Description of the original bug:
We have a DAG combine that tries to fold (vselect cond, 0000..., X) -> (andnp cond, x).
However, it does so by attempting to create an i64 vector with the number
of elements obtained by truncating division by 64 from the bitwidth. This is
bad for mask vectors like v8i1, since that division is just zero. Besides,
we don't want i64 vectors anyway. For i1 vectors, switch the pattern
to (andnp (not cond), x), which is the canonical form for `kandn`
on mask registers.

Fixes https://github.com/JuliaLang/julia/issues/36955.

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

3 years ago[gn build] Port f5b5ccf2a68
LLVM GN Syncbot [Fri, 7 Aug 2020 23:43:14 +0000 (23:43 +0000)]
[gn build] Port f5b5ccf2a68

3 years agoReland "Revert "[NewPM][CodeGen] Introduce machine pass and machine pass manager""
Yuanfang Chen [Fri, 7 Aug 2020 19:57:38 +0000 (12:57 -0700)]
Reland "Revert "[NewPM][CodeGen] Introduce machine pass and machine pass manager""

This relands commit 320eab2d558fde0b61437e9b9075bfd301c2c474.

The test failed because it was looking for x86-linux target
unconditionally. Now it gets the default target.

3 years ago[flang] Handle DATA initialization of EQUIVALENCE'd objects
peter klausler [Fri, 7 Aug 2020 20:25:11 +0000 (13:25 -0700)]
[flang] Handle DATA initialization of EQUIVALENCE'd objects

Objects that are storage associated by EQUIVALENCE and
initialized with DATA are initialized by creating a
compiler temporary data object in the same scope,
assigning it an offset, type, and size that covers the
transitive closure of the associated initialized original
symbols, and combining their initializers into one common
initializer for the temporary.

Some problems with offset assignment of EQUIVALENCE'd objects
in COMMON were exposed and corrected, and some more error
cases are checked.

Remove obsolete function.
Small bugfix (nested implied dos).
Add a test.
Fix struct/class warning.

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

3 years agoAMDGPU: Avoid explicitly listing all the memory nodes
Matt Arsenault [Thu, 6 Aug 2020 23:59:25 +0000 (19:59 -0400)]
AMDGPU: Avoid explicitly listing all the memory nodes

3 years ago[NFC][StackSafety] Fix statistics
Vitaly Buka [Fri, 7 Aug 2020 23:18:10 +0000 (16:18 -0700)]
[NFC][StackSafety] Fix statistics

3 years ago[sanitizer] Fix comment (NFC)
Teresa Johnson [Fri, 7 Aug 2020 22:52:50 +0000 (15:52 -0700)]
[sanitizer] Fix comment (NFC)

As pointed out in D85387, part of the comment for MapDynamicShadow
refactored to sanitizer_common in D83247 was incorrect for non-Linux
versions. Update the comment to reflect that.

3 years agoCreate Reduction Tree Pass
Mauricio Sifontes [Fri, 7 Aug 2020 23:17:27 +0000 (23:17 +0000)]
Create Reduction Tree Pass

Implement the Reduction Tree Pass framework as part of the MLIR Reduce tool. This is a parametarizable pass that allows for the implementation of custom reductions passes in the tool.
Implement the FunctionReducer class as an example of a Reducer class parameter for the instantiation of a Reduction Tree Pass.
Create a pass pipeline with a Reduction Tree Pass with the FunctionReducer class specified as parameter.

Reviewed By: jpienaar

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

3 years agoRevert "[Clang] implement -fno-eliminate-unused-debug-types"
Nick Desaulniers [Fri, 7 Aug 2020 23:11:41 +0000 (16:11 -0700)]
Revert "[Clang] implement -fno-eliminate-unused-debug-types"

This reverts commit e486921fd6cf96ae9114adac455f7c0b5c1088a7.

Breaks windows builds and osx builds.

3 years agoRevert "fix windows build for D80242"
Nick Desaulniers [Fri, 7 Aug 2020 23:11:26 +0000 (16:11 -0700)]
Revert "fix windows build for D80242"

This reverts commit cbd8ec93709376fbf404c99f4eee399790e26db7.

3 years ago[OpenMP 5.0] Fix PR-45212: Shouldn't error out while using overloaded operator for...
cchen [Fri, 7 Aug 2020 23:04:56 +0000 (18:04 -0500)]
[OpenMP 5.0] Fix PR-45212: Shouldn't error out while using overloaded operator for map clause

LValue map checker should handle CXXOperatorCallExpr

Reviewed By: jdoerfert

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

3 years ago[mlir] Centralize handling of memref element types.
Sean Silva [Fri, 7 Aug 2020 18:40:58 +0000 (11:40 -0700)]
[mlir] Centralize handling of memref element types.

This also beefs up the test coverage:
- Make unranked memref testing consistent with ranked memrefs.
- Add testing for the invalid element type cases.

This is not quite NFC: index types are now allowed in unranked memrefs.

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

3 years ago[lldb] Assert the process has exited before we gets its output.
Jonas Devlieghere [Fri, 7 Aug 2020 22:06:14 +0000 (15:06 -0700)]
[lldb] Assert the process has exited before we gets its output.

3 years ago[NewPM] Print 'Skipping pass' as pass instrumentation
Arthur Eubanks [Fri, 7 Aug 2020 02:03:09 +0000 (19:03 -0700)]
[NewPM] Print 'Skipping pass' as pass instrumentation

If OptNoneInstrumentation prints it instead, 'Skipping pass' will print for even required passes.

Reviewed By: ychen

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

3 years agofix windows build for D80242
Nick Desaulniers [Fri, 7 Aug 2020 21:59:35 +0000 (14:59 -0700)]
fix windows build for D80242

3 years ago[NFC][MLInliner] Refactor logging implementation
Mircea Trofin [Fri, 7 Aug 2020 21:56:31 +0000 (14:56 -0700)]
[NFC][MLInliner] Refactor logging implementation

This prepares it for logging externally-specified outputs.

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

3 years agoAdd a setting to force stepping to always run all threads.
Jim Ingham [Fri, 7 Aug 2020 21:44:01 +0000 (14:44 -0700)]
Add a setting to force stepping to always run all threads.
Also allow ScriptedThreadPlans to set & get their StopOthers
state.

<rdar://problem/64229484>

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

3 years ago[llvm-libtool-darwin] Add support for -D and -U options
Sameer Arora [Mon, 20 Jul 2020 23:10:07 +0000 (16:10 -0700)]
[llvm-libtool-darwin] Add support for -D and -U options

Add support for `-D` and `-U` options for llvm-libtool-darwin. `-D`
allows for using zero for timestamps and UIDs/GIDs. `-U` allows for
using actual timestamps and UIDs/GIDs.

Reviewed by jhenderson, smeenai

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

3 years ago[llvm-libtool-darwin] Add support for -filelist option
Sameer Arora [Mon, 20 Jul 2020 21:27:48 +0000 (14:27 -0700)]
[llvm-libtool-darwin] Add support for -filelist option

Add support for `-filelist` option for llvm-libtool-darwin. `-filelist`
option allows for passing in a file containing a list of filenames.

Reviewed by jhenderson, smeenai

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

3 years agoFactor out reference-counting code from PlatformApple*
Adrian Prantl [Fri, 7 Aug 2020 21:24:03 +0000 (14:24 -0700)]
Factor out reference-counting code from PlatformApple*

into PlatformAppleSimulator. This is legal because that is the only
entry point for the Terminate/Initialize functions.

3 years ago[Clang] implement -fno-eliminate-unused-debug-types
Nick Desaulniers [Fri, 7 Aug 2020 21:10:04 +0000 (14:10 -0700)]
[Clang] implement -fno-eliminate-unused-debug-types

Fixes pr/11710.
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed By: dblaikie

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

3 years ago[llvm-libtool-darwin] Add constant CPU_SUBTYPE_ARM64_V8
Sameer Arora [Fri, 31 Jul 2020 18:52:47 +0000 (11:52 -0700)]
[llvm-libtool-darwin] Add constant CPU_SUBTYPE_ARM64_V8

Add support for constant MachO::CPU_SUBTYPE_ARM64_V8. This constant is
needed so as to match `llvm-libtool-darwin`'s behavior to that of
cctools' libtool when `-arch_only` flag is passed in on command line.

Reviewed by jhenderson, alexshap, smeenai

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

3 years agoRevert "[StackSafety] Skip ambiguous lifetime analysis"
Vitaly Buka [Fri, 7 Aug 2020 20:59:22 +0000 (13:59 -0700)]
Revert "[StackSafety] Skip ambiguous lifetime analysis"

This reverts commit 0b2616a8045cb776ea1514c3401d0a8577de1060.

Crashes with safe-stack.

3 years ago[StackSafety,NFC] Add Stats counters
Vitaly Buka [Fri, 7 Aug 2020 20:58:10 +0000 (13:58 -0700)]
[StackSafety,NFC] Add Stats counters

3 years ago[OpenMP,MLIR] Translation of parallel operation: num_threads, if clauses 3/n
Kiran Chandramohan [Fri, 7 Aug 2020 18:33:46 +0000 (18:33 +0000)]
[OpenMP,MLIR] Translation of parallel operation: num_threads, if clauses 3/n

This simple patch translates the num_threads and if clauses of the parallel
operation. Also includes test cases.
A minor change was made to parsing of the if clause to parse AnyType and
return the parsed type. Updates to test cases also.

Reviewed by: SouraVX
Differential Revision: https://reviews.llvm.org/D84798

3 years ago[OpenMP] Split OpenMP/target_map_codegen test [NFC]
Artem Belevich [Fri, 7 Aug 2020 19:59:49 +0000 (12:59 -0700)]
[OpenMP] Split OpenMP/target_map_codegen test [NFC]

The test file is the single longest test among clang's tests and ends up about
doubling the wall time of clang tests on machines with high number of cores.

The test appears to consist of multiple independent subtests and does not have
to be in one file. Splitting it into smaller parts reduces test time on my
machine from ~80s down to ~45.

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

3 years agoAdd symlinks for `libtool` and `install_name_tool`
Sameer Arora [Fri, 31 Jul 2020 22:22:16 +0000 (15:22 -0700)]
Add symlinks for `libtool` and `install_name_tool`

Add symlinks for `llvm-libtool-darwin` and
`llvm-install-name-tool`.

Reviewed by jhenderson, smeenai

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

3 years ago[flang] Update FirOpsDialect constructor to pass its TypeID
River Riddle [Fri, 7 Aug 2020 20:41:42 +0000 (13:41 -0700)]
[flang] Update FirOpsDialect constructor to pass its TypeID

3 years ago[mlir][Type] Remove usages of Type::getKind
River Riddle [Fri, 7 Aug 2020 20:30:43 +0000 (13:30 -0700)]
[mlir][Type] Remove usages of Type::getKind

This is in preparation for removing the use of "kinds" within attributes and types in MLIR.

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

3 years ago[mlir][Attribute] Remove usages of Attribute::getKind
River Riddle [Fri, 7 Aug 2020 20:30:29 +0000 (13:30 -0700)]
[mlir][Attribute] Remove usages of Attribute::getKind

This is in preparation for removing the use of "kinds" within attributes and types in MLIR.

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

3 years ago[mlir] Remove the need to define `kindof` on attribute and type classes.
River Riddle [Fri, 7 Aug 2020 20:30:17 +0000 (13:30 -0700)]
[mlir] Remove the need to define `kindof` on attribute and type classes.

This revision refactors the default definition of the attribute and type `classof` methods to use the TypeID of the concrete class instead of invoking the `kindof` method. The TypeID is already used as part of uniquing, and this allows for removing the need for users to define any of the type casting utilities themselves.

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

3 years ago[mlir][Types] Remove the subclass data from Type
River Riddle [Fri, 7 Aug 2020 20:29:55 +0000 (13:29 -0700)]
[mlir][Types] Remove the subclass data from Type

Subclass data is useful when a certain amount of memory is allocated, but not all of it is used. In the case of Type, that hasn't been the case for a while and the subclass is just taking up a full `unsigned`. Removing this frees up ~8 bytes for almost every type instance.

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

3 years ago[mlir] Add a utility class, ThreadLocalCache, for storing non static thread local...
River Riddle [Fri, 7 Aug 2020 20:29:36 +0000 (13:29 -0700)]
[mlir] Add a utility class, ThreadLocalCache, for storing non static thread local objects.

This class allows for defining thread local objects that have a set non-static lifetime. This internals of the cache use a static thread_local map between the various different non-static objects and the desired value type. When a non-static object destructs, it simply nulls out the entry in the static map. This will leave an entry in the map, but erase any of the data for the associated value. The current use cases for this are in the MLIRContext, meaning that the number of items in the static map is ~1-2 which aren't particularly costly enough to warrant the complexity of pruning. If a use case arises that requires pruning of the map, the functionality can be added.

This is especially useful in the context of MLIR for implementing thread-local caching of context level objects that would otherwise have very high lock contention. This revision adds a thread local cache in the MLIRContext for attributes, identifiers, and types to reduce some of the locking burden. This led to a speedup of several hundred miliseconds when compiling a conversion pass on a very large mlir module(>300K operations).

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

3 years ago[mlir] Refactor StorageUniquer to require registration of possible storage types
River Riddle [Fri, 7 Aug 2020 20:29:11 +0000 (13:29 -0700)]
[mlir] Refactor StorageUniquer to require registration of possible storage types

This allows for bucketing the different possible storage types, with each bucket having its own allocator/mutex/instance map. This greatly reduces the amount of lock contention when multi-threading is enabled. On some non-trivial .mlir modules (>300K operations), this led to a compile time decrease of a single conversion pass by around half a second(>25%).

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

3 years ago[ELF]: --icf: don't fold sections referencing sections with LCDA after D84610
Fangrui Song [Fri, 7 Aug 2020 20:42:09 +0000 (13:42 -0700)]
[ELF]: --icf: don't fold sections referencing sections with LCDA after D84610

3 years agoGlobalISel: Handle zext(sext x) in artifact combiner
Matt Arsenault [Fri, 7 Aug 2020 13:08:00 +0000 (09:08 -0400)]
GlobalISel: Handle zext(sext x) in artifact combiner

This eliminates the illegal intermediate s8 value in the added test.

3 years agolldbutil: add a retry mechanism for the ios simulator
Adrian Prantl [Fri, 7 Aug 2020 20:28:05 +0000 (13:28 -0700)]
lldbutil: add a retry mechanism for the ios simulator

We've been seeing this failure on green dragon when the system is
under high load. Unfortunately this is outside of LLDB's control.

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

3 years ago[FileCheck] Add docs for --allow-empty
Sameer Arora [Mon, 13 Jul 2020 14:39:29 +0000 (07:39 -0700)]
[FileCheck] Add docs for --allow-empty

This diff adds documentation for `allow-empty` flag under FileCheck
docs.

Reviewed by jhenderson, smeenai, thopre

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

3 years ago[flang] Support DATA statement initialization of numeric with Hollerith/CHARACTER
peter klausler [Fri, 7 Aug 2020 00:58:40 +0000 (17:58 -0700)]
[flang] Support DATA statement initialization of numeric with Hollerith/CHARACTER

This is a common Fortran language extension.

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

3 years ago[libc] Add strcpsn and strpbrk implementation.
cgyurgyik [Fri, 7 Aug 2020 20:13:48 +0000 (16:13 -0400)]
[libc] Add strcpsn and strpbrk implementation.

Reviewed By: sivachandra

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

3 years ago[flang] Descriptor-based I/O data item transfers
peter klausler [Fri, 7 Aug 2020 00:30:01 +0000 (17:30 -0700)]
[flang] Descriptor-based I/O data item transfers

Add support for OutputDescriptor() and InputDescriptor()
in the I/O runtime.  Change existing scalar formatted I/O
functions to drive descriptor-based I/O routines internally.

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

3 years ago[lldb] Only check for --apple-sdk argument on Darwin
Jonas Devlieghere [Fri, 7 Aug 2020 20:04:16 +0000 (13:04 -0700)]
[lldb] Only check for --apple-sdk argument on Darwin

3 years ago[llvm-install-name-tool] Adds docs for llvm-install-name-tool
Sameer Arora [Fri, 12 Jun 2020 14:39:46 +0000 (07:39 -0700)]
[llvm-install-name-tool] Adds docs for llvm-install-name-tool

Adding documentation for llvm-install-name-tool.

Reviewed by smeenai, Ktwu

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