platform/upstream/llvm.git
2 years agoRevert @llvm.isnan intrinsic patchset.
Roman Lebedev [Thu, 2 Sep 2021 10:03:31 +0000 (13:03 +0300)]
Revert @llvm.isnan intrinsic patchset.

Please refer to
https://lists.llvm.org/pipermail/llvm-dev/2021-September/152440.html
(and that whole thread.)

TLDR: the original patch had no prior RFC, yet it had some changes that
really need a proper RFC discussion. It won't be productive to discuss
such an RFC, once it's actually posted, while said patch is already
committed, because that introduces bias towards already-committed stuff,
and the tree is potentially in broken state meanwhile.

While the end result of discussion may lead back to the current design,
it may also not lead to the current design.

Therefore i take it upon myself
to revert the tree back to last known good state.

This reverts commit 4c4093e6e39fe6601f9c95a95a6bc242ef648cd5.
This reverts commit 0a2b1ba33ae6dcaedb81417f7c4cc714f72a5968.
This reverts commit d9873711cb03ac7aedcaadcba42f82c66e962e6e.
This reverts commit 791006fb8c6fff4f33c33cb513a96b1d3f94c767.
This reverts commit c22b64ef66f7518abb6f022fcdfd86d16c764caf.
This reverts commit 72ebcd3198327da12804305bda13d9b7088772a8.
This reverts commit 5fa6039a5fc1b6392a3c9a3326a76604e0cb1001.
This reverts commit 9efda541bfbd145de90f7db38d935db6246dc45a.
This reverts commit 94d3ff09cfa8d7aecf480e54da9a5334e262e76b.

2 years ago[clang] NFC: Remove duplicate DependentSizedMatrixType methods
Cullen Rhodes [Thu, 2 Sep 2021 08:47:42 +0000 (08:47 +0000)]
[clang] NFC: Remove duplicate DependentSizedMatrixType methods

Inherited from MatrixType.

Reviewed By: fhahn

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

2 years ago[lldb] [client] Implement follow-fork-mode
Michał Górny [Mon, 12 Apr 2021 22:15:51 +0000 (00:15 +0200)]
[lldb] [client] Implement follow-fork-mode

Implement a new target.process.follow-fork-mode setting to control
LLDB's behavior on fork.  If set to 'parent', the forked child is
detached and parent continues being traced.  If set to 'child',
the parent is detached and child becomes traced instead.

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

2 years ago[libomptarget][amdgpu] Drop env variables
Jon Chesterfield [Thu, 2 Sep 2021 10:02:37 +0000 (11:02 +0100)]
[libomptarget][amdgpu] Drop env variables

Use the same debug print as the rest of libomptarget plugins with
the same environment control. Also drop the max queue size debugging hook as
I don't believe it is still in use, can bring it back near the rest of the env
handling in rtl.cpp if someone objects.

That makes most of rt.h and all of utils.cpp unused. Clean that up and simplify
control flow in a couple of places.

Behaviour change is that debug prints that used to use the old environment
variable now use the new one and print in slightly different format, and the
removal of the max queue size variable.

Reviewed By: pdhaliwal

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

2 years ago[X86] Fold PMADD(x,0) or PMADD(0,x) -> 0
Simon Pilgrim [Thu, 2 Sep 2021 09:10:08 +0000 (10:10 +0100)]
[X86] Fold PMADD(x,0) or PMADD(0,x) -> 0

Pulled out of D108522 - handle zero-operand cases for PMADDWD/VPMADDUBSW ops

2 years ago[X86][SSE] Add combine-pmadd.ll for PMADDWD/VPMADDUBSW combines
Simon Pilgrim [Wed, 1 Sep 2021 16:42:21 +0000 (17:42 +0100)]
[X86][SSE] Add combine-pmadd.ll for PMADDWD/VPMADDUBSW combines

Pre-commit for D108522 to show failure to fold multiply by zero operands

2 years ago[libunwind] Compile with -Wunused-but-set-variable
Daniel Kiss [Thu, 2 Sep 2021 09:37:09 +0000 (11:37 +0200)]
[libunwind] Compile with -Wunused-but-set-variable

-Wunused-but-set-variable triggers a warning even the block of code is effectively dead.

Reviewed By: MaskRay

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

2 years agoRevert "[OpenMP][OpenMPIRBuilder] Implement loop unrolling."
Roman Lebedev [Thu, 2 Sep 2021 09:40:22 +0000 (12:40 +0300)]
Revert "[OpenMP][OpenMPIRBuilder] Implement loop unrolling."

Breaks build with -DBUILD_SHARED_LIBS=ON
```
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
  "LLVMFrontendOpenMP" of type SHARED_LIBRARY
    depends on "LLVMPasses" (weak)
  "LLVMipo" of type SHARED_LIBRARY
    depends on "LLVMFrontendOpenMP" (weak)
  "LLVMCoroutines" of type SHARED_LIBRARY
    depends on "LLVMipo" (weak)
  "LLVMPasses" of type SHARED_LIBRARY
    depends on "LLVMCoroutines" (weak)
    depends on "LLVMipo" (weak)
At least one of these targets is not a STATIC_LIBRARY.  Cyclic dependencies are allowed only among static libraries.
CMake Generate step failed.  Build files cannot be regenerated correctly.
```

This reverts commit 707ce34b06190e275572c3c46843036db1bab6d1.

2 years ago[Unwind] Harmonise exception class for EHABI spec.
Daniel Kiss [Thu, 2 Sep 2021 09:30:26 +0000 (11:30 +0200)]
[Unwind] Harmonise exception class for EHABI spec.

EHABI defines the exception class as char[8] instead of uint64_t [1].
For ABI compatibility the ABI the definition needs to be updated.

[1] https://github.com/ARM-software/abi-aa/blob/main/ehabi32/ehabi32.rst#82language-independent-unwinding-types-and-functions

Reviewed By: manojgupta, MaskRay, #libunwind

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

2 years ago[RISCV][test] Add more tests for (mul (add x, c1), c2)
Ben Shi [Mon, 23 Aug 2021 13:09:12 +0000 (21:09 +0800)]
[RISCV][test] Add more tests for (mul (add x, c1), c2)

Reviewed By: asb

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

2 years ago[RISCV][test] Add tests for optimization with SH*ADD in the zba extension
Ben Shi [Mon, 30 Aug 2021 03:47:22 +0000 (11:47 +0800)]
[RISCV][test] Add tests for optimization with SH*ADD in the zba extension

Reviewed By: asb

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

2 years ago[LegalizeTypes][VP] Add splitting support for binary VP ops
Fraser Cormack [Wed, 11 Aug 2021 15:47:12 +0000 (16:47 +0100)]
[LegalizeTypes][VP] Add splitting support for binary VP ops

This patch extends D107904's introduction of vector-predicated (VP)
operation legalization to include vector splitting.

When the result of a binary VP operation needs splitting, all of its
operands are split in kind. The two operands and the mask are split as
usual, and the vector-length parameter EVL is "split" such that the low
and high halves each execute the correct number of elements.

Tests have been added to the RISC-V target to show splitting several
scenarios for fixed- and scalable-vector types. Without support for
`umax` (e.g. in the `B` extension) the generated code starts to branch.
Ideally a cost model would prevent their insertion in the first place.

Through these tests many opportunities for better codegen can be seen:
combining known-undef VP operations and for constant-folding operations
on `ISD::VSCALE`, to name but a few.

Reviewed By: RKSimon

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

2 years ago[VP] Declaration and docs for vp.select intrinsic
Simon Moll [Thu, 2 Sep 2021 07:53:53 +0000 (09:53 +0200)]
[VP] Declaration and docs for vp.select intrinsic

llvm.vp.select extends the regular select instruction with an explicit
vector length (%evl).

All lanes with indexes at and above %evl are
undefined. Lanes below %evl are taken from the first input where the
mask is true and from the second input otherwise.

Reviewed By: rogfer01

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

2 years ago[lldb server] Tidy up LLDB server return codes and associated tests
Sebastian Schwartz [Thu, 2 Sep 2021 09:14:49 +0000 (11:14 +0200)]
[lldb server] Tidy up LLDB server return codes and associated tests

This diff modifies the LLDB server return codes to more accurately reflect usage
error paths. Specifically we always propagate the return codes from the main
entrypoints into GDB remote LLDB server, and platform LLDB server. This way, the
top-level caller of LLDB server will be able to correctly check whether the
executable exited with or without an error.

We additionally modify and extend the associated shell unit tests to expect
nonzero return codes on error conditions.

Test Plan:
LLDB tests pass:

```
ninja check-lldb
```

Reviewed By: teemperor

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

2 years ago[mlir][linalg] Expose function to create op on buffers during bufferization.
Alexander Belyaev [Thu, 2 Sep 2021 09:06:49 +0000 (11:06 +0200)]
[mlir][linalg] Expose function to create op on buffers during bufferization.

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

2 years ago[SVE] Fix the FP arithmetic instruction costs for SVE
David Sherwood [Tue, 31 Aug 2021 13:07:50 +0000 (14:07 +0100)]
[SVE] Fix the FP arithmetic instruction costs for SVE

Several FP instructions (fadd, fsub, etc.) were incorrectly assigned
a higher cost for SVE because they have custom lowering, however we
know they are legal. This patch explicitly assigns a cost of 2 to
these opcodes.

Tests added here:

  Analysis/CostModel/AArch64/arith-fp-sve.ll

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

2 years ago[MC] Set SHF_INFO_LINK on SHT_REL/SHT_RELA sections
Fangrui Song [Thu, 2 Sep 2021 08:00:51 +0000 (01:00 -0700)]
[MC] Set SHF_INFO_LINK on SHT_REL/SHT_RELA sections

sh_info links to a section, therefore SHF_INFO_LINK should be set as GNU as
does. The issue has been benign because linkers kindly combines relocation
sections w/ and w/o the flag.

2 years ago[SelectionDAG][VP] Fix VP memory ops' EVL/Mask indices
Fraser Cormack [Wed, 1 Sep 2021 14:32:58 +0000 (15:32 +0100)]
[SelectionDAG][VP] Fix VP memory ops' EVL/Mask indices

This patch corrects the auto-generated EVL and Mask index positions of
the `VP_LOAD`/`VP_STORE`/`VP_GATHER`/`VP_SCATTER` nodes.

Reviewed By: simoll

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

2 years ago[OpenMP][OpenMPIRBuilder] Implement loop unrolling.
Michael Kruse [Thu, 2 Sep 2021 06:08:55 +0000 (01:08 -0500)]
[OpenMP][OpenMPIRBuilder] Implement loop unrolling.

Add methods for loop unrolling to the OpenMPIRBuilder class and use them in Clang if `-fopenmp-enable-irbuilder` is enabled. The unrolling methods are:

 * `unrollLoopFull`
 * `unrollLoopPartial`
 * `unrollLoopHeuristic`

`unrollLoopPartial` and `unrollLoopHeuristic` can use compiler heuristics to automatically determine the unroll factor. If possible, that is if no CanonicalLoopInfo is required to pass to another method, metadata for LLVM's LoopUnrollPass is added. Otherwise the unroll factor is determined using the same heurstics as user by LoopUnrollPass. Not requiring a CanonicalLoopInfo, especially with `unrollLoopHeuristic` allows greater flexibility.

With full unrolling and partial unrolling with known unroll factor, instead of duplicating instructions by the OpenMPIRBuilder, the full unroll is still delegated to the LoopUnrollPass. In case of partial unrolling the loop is first tiled using the existing `tileLoops` methods, then the inner loop fully unrolled using the same mechanism.

Reviewed By: jdoerfert, kiranchandramohan

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

2 years ago[LoopDistribute] Add tests inspired by PR50296, PR50288.
Florian Hahn [Wed, 1 Sep 2021 13:32:59 +0000 (15:32 +0200)]
[LoopDistribute] Add tests inspired by PR50296, PR50288.

2 years ago[CSSPGO] Use preinliner decision by default when available
Wenlei He [Wed, 1 Sep 2021 23:25:59 +0000 (16:25 -0700)]
[CSSPGO] Use preinliner decision by default when available

For CSSPGO, turn on `sample-profile-use-preinliner` by default. This simplifies the use of llvm-profgen preinliner as it's now simply driven by ContextShouldBeInlined flag for each context profile without needing extra compiler switch.

Note that llvm-profgen's preinliner is still off by default, under switch `csspgo-preinliner`.

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

2 years ago[docs] Mention that the legacy PM is deprecated and will be removed after 14
Arthur Eubanks [Wed, 1 Sep 2021 18:53:53 +0000 (11:53 -0700)]
[docs] Mention that the legacy PM is deprecated and will be removed after 14

Per https://lists.llvm.org/pipermail/llvm-dev/2021-August/152305.html.

Reviewed By: MaskRay, fhahn

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

2 years ago[NPM] Added opt option -print-pipeline-passes.
Markus Lavin [Thu, 2 Sep 2021 06:23:33 +0000 (08:23 +0200)]
[NPM] Added opt option -print-pipeline-passes.

Added opt option -print-pipeline-passes to print a -passes compatible
string describing the built pass pipeline.

As an example:
$ opt -enable-new-pm=1 -adce -licm -simplifycfg -o /dev/null /dev/null -print-pipeline-passes
verify,function(adce),function(loop-mssa(licm)),function(simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),verify,BitcodeWriterPass

At the moment this is best-effort only and there are some known
limitations:
- Not all passes accepting parameters will print their parameters
  (currently only implemented for simplifycfg).
- Some ClassName to pass-name mappings are not unique.
- Some ClassName to pass-name mappings are missing (e.g.
  BitcodeWriterPass).

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

2 years agoRevert "[NPM] Added opt option -print-pipeline-passes."
Markus Lavin [Thu, 2 Sep 2021 06:22:17 +0000 (08:22 +0200)]
Revert "[NPM] Added opt option -print-pipeline-passes."

This reverts commit c71869ed4c24b3d4d13e2f83ee2c0104013ca129.

2 years ago[NPM] Added opt option -print-pipeline-passes.
Markus Lavin [Thu, 2 Sep 2021 05:47:23 +0000 (07:47 +0200)]
[NPM] Added opt option -print-pipeline-passes.

Added opt option -print-pipeline-passes to print a -passes compatible
string describing the built pass pipeline.

As an example:
$ opt -enable-new-pm=1 -adce -licm -simplifycfg -o /dev/null /dev/null -print-pipeline-passes
verify,function(adce),function(loop-mssa(licm)),function(simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),verify,BitcodeWriterPass

At the moment this is best-effort only and there are some known
limitations:
- Not all passes accepting parameters will print their parameters
  (currently only implemented for simplifycfg).
- Some ClassName to pass-name mappings are not unique.
- Some ClassName to pass-name mappings are missing (e.g.
  BitcodeWriterPass).

2 years ago[libc++][nfc] Fixes ppc64le-sanitizer build issue.
Mark de Wever [Thu, 2 Sep 2021 06:09:10 +0000 (08:09 +0200)]
[libc++][nfc] Fixes ppc64le-sanitizer build issue.

After landing D103357 the worker ppc64le-sanitizer fails on `__bool`.
This replaces all occurrences with `__boolean`.

2 years ago[DAGCombine] Add node level checks for fp-contract and fp-ninf in visitFMULForFMADist...
Abinav Puthan Purayil [Mon, 2 Aug 2021 11:12:23 +0000 (16:42 +0530)]
[DAGCombine] Add node level checks for fp-contract and fp-ninf in visitFMULForFMADistributiveCombine().

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

2 years agoFix missing argument introduced by D108788
Arthur Eubanks [Thu, 2 Sep 2021 06:00:58 +0000 (23:00 -0700)]
Fix missing argument introduced by D108788

Reviewed By: aeubanks

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

2 years ago[test] Precommit/fix up existing test for MemorySSA/invariant.group
Arthur Eubanks [Thu, 2 Sep 2021 02:28:22 +0000 (19:28 -0700)]
[test] Precommit/fix up existing test for MemorySSA/invariant.group

2 years ago[libomptarget] Move HostDataToTargetTy states into StatesTy
Ye Luo [Thu, 2 Sep 2021 04:36:05 +0000 (23:36 -0500)]
[libomptarget] Move HostDataToTargetTy states into StatesTy

Use unique_ptr to achieve the effect of mutable.

Remove mutable keyword of DynRefCount and HoldRefCount
Remove std::shared_ptr from UpdateMtx

Reviewed By: tianshilei1992, grokos

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

2 years ago[NFC][PowerPC] Small code refactor in LoopInstrFormPrep
Jinsong Ji [Thu, 2 Sep 2021 03:15:27 +0000 (03:15 +0000)]
[NFC][PowerPC] Small code refactor in LoopInstrFormPrep

Avoid some duplicate code.

Reviewed By: #powerpc, shchenz

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

2 years ago[CSSPGO] Add stats for pre-inliner
Wenlei He [Wed, 1 Sep 2021 21:57:09 +0000 (14:57 -0700)]
[CSSPGO] Add stats for pre-inliner

Add some stats to help tuning pre-inliner.

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

2 years ago[InstrProfiling] Add AIX triple to more tests
Jinsong Ji [Thu, 2 Sep 2021 02:39:51 +0000 (02:39 +0000)]
[InstrProfiling] Add AIX triple to more tests

Following patch of https://reviews.llvm.org/D108490.
Add AIX triples to tests in /Instrumentation/InstrProfiling/ to make
sure we can catch regressions earlier.

Reviewed By: MaskRay

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

2 years ago[AArch64][test] Add new tests for (mul (add x, c0), c1)
Ben Shi [Fri, 27 Aug 2021 12:47:12 +0000 (20:47 +0800)]
[AArch64][test] Add new tests for (mul (add x, c0), c1)

Reviewed By: dmgreen

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

2 years agoReland [MemorySSA] Add pass to print results of MemorySSA walker
Arthur Eubanks [Tue, 31 Aug 2021 21:43:21 +0000 (14:43 -0700)]
Reland [MemorySSA] Add pass to print results of MemorySSA walker

Reviewed By: asbirlea

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

2 years agoRevert "[MemorySSA] Add pass to print results of MemorySSA walker"
Arthur Eubanks [Thu, 2 Sep 2021 01:45:19 +0000 (18:45 -0700)]
Revert "[MemorySSA] Add pass to print results of MemorySSA walker"

This reverts commit 8f98477c2d2bcbf5b6aa36278b59bf2a861426a1.

Breaks bots

2 years ago[PowerPC] small code format refactor ; NFC
Chen Zheng [Thu, 2 Sep 2021 01:37:38 +0000 (01:37 +0000)]
[PowerPC] small code format refactor ; NFC

address the code review comments in patch https://reviews.llvm.org/D105872

2 years ago[MemorySSA] Add pass to print results of MemorySSA walker
Arthur Eubanks [Tue, 31 Aug 2021 21:43:21 +0000 (14:43 -0700)]
[MemorySSA] Add pass to print results of MemorySSA walker

Reviewed By: asbirlea

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

2 years agoPR50294: Fix a performance regression from 2c9dbcd.
Richard Smith [Thu, 2 Sep 2021 00:57:48 +0000 (17:57 -0700)]
PR50294: Fix a performance regression from 2c9dbcd.

Per the contract of ReadLateParsedTemplates, we should not be returning
the same results multiple times. No functionality change intended, other
than to runtime.

Thanks to Luboš Luňák for identifying the cause of the regression!

2 years ago[OpenMP] Fix -Wunused-but-set-parameter in -DLLVM_ENABLE_ASSERTIONS=off builds. NFC
Fangrui Song [Thu, 2 Sep 2021 00:55:13 +0000 (17:55 -0700)]
[OpenMP] Fix -Wunused-but-set-parameter in -DLLVM_ENABLE_ASSERTIONS=off builds. NFC

2 years ago[HeaderSearch] Use `isImport` only for imported headers and not for `#pragma once`.
Volodymyr Sapsai [Wed, 16 Jun 2021 01:44:38 +0000 (18:44 -0700)]
[HeaderSearch] Use `isImport` only for imported headers and not for `#pragma once`.

There is a separate field `isPragmaOnce` and when `isImport` combines
both, it complicates HeaderFileInfo serialization as `#pragma once` is
the inherent property of the header while `isImport` reflects how other
headers use it. The usage of the header can be different in different
contexts, that's why `isImport` requires tracking separate from `#pragma once`.

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

2 years agoRevert "snapshot - do not push"
Philip Reames [Wed, 1 Sep 2021 23:59:23 +0000 (16:59 -0700)]
Revert "snapshot - do not push"

This reverts commit 91f4655d9273ecefab1b7f0ea26d44f5de6fd0af.

This wasn't intented to be pushed, sorry.

2 years agoFix a missing MemorySSA update in breakLoopBackedge
Philip Reames [Wed, 1 Sep 2021 23:58:04 +0000 (16:58 -0700)]
Fix a missing MemorySSA update in breakLoopBackedge

This is a case I'd missed in 6a8237. The odd bit here is that missing the edge removal update seems to produce MemorySSA which verifies, but is still corrupt in a way which bothers following passes. I wasn't able to reduce a single pass test case, which is why the reported test case is taken as is.

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

2 years agosnapshot - do not push
Philip Reames [Wed, 1 Sep 2021 21:13:11 +0000 (14:13 -0700)]
snapshot - do not push

2 years ago[mlir][sparse] sparse runtime support library improvements
Aart Bik [Wed, 1 Sep 2021 01:21:23 +0000 (18:21 -0700)]
[mlir][sparse] sparse runtime support library improvements

(1) renamed SparseTensor to SparseTensorCOO, the other one remains SparseTensorStorage to focus on contrast

(2) documents difference between public API exclusively for compiler-generated code and methods that could be used by other runtimes (TBD) that want to interact with MLIR

Reviewed By: bixia

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

2 years agoRevert "[AArch64][GlobalISel] Legalize bswap <2 x i16>"
Jon Roelofs [Wed, 1 Sep 2021 23:49:20 +0000 (16:49 -0700)]
Revert "[AArch64][GlobalISel] Legalize bswap <2 x i16>"

This reverts commit 5cd63e9ec2a385de2682949c0bbe928afaf35c91.

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

The sequence feeding in/out of the rev32/ushr isn't quite right:

 _swap:
         ldr     h0, [x0]
         ldr     h1, [x0, #2]
-        mov     v0.h[1], v1.h[0]
+        mov     v0.s[1], v1.s[0]
         rev32   v0.8b, v0.8b
         ushr    v0.2s, v0.2s, #16
-        mov     h1, v0.h[1]
+        mov     s1, v0.s[1]
         str     h0, [x0]
         str     h1, [x0, #2]
         ret

2 years ago[mlir][capi] Add NameLoc
Jacques Pienaar [Wed, 1 Sep 2021 23:16:35 +0000 (16:16 -0700)]
[mlir][capi] Add NameLoc

Add method to get NameLoc. Treat null child location as unknown to avoid
needing to create UnknownLoc in C API where child loc is not needed.

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

2 years ago[AMDGPU] Use S_BITCMP1_* to replace AND in optimizeCompareInstr
Stanislav Mekhanoshin [Wed, 1 Sep 2021 18:40:53 +0000 (11:40 -0700)]
[AMDGPU] Use S_BITCMP1_* to replace AND in optimizeCompareInstr

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

2 years ago[AMDGPU] Introduce optimizeCompareInstr
Stanislav Mekhanoshin [Tue, 31 Aug 2021 22:10:59 +0000 (15:10 -0700)]
[AMDGPU] Introduce optimizeCompareInstr

The following patterns are currently handled:

s_cmp_eq_u32 (s_and_b32 $src, 1), 1 => s_and_b32 $src, 1
s_cmp_eq_i32 (s_and_b32 $src, 1), 1 => s_and_b32 $src, 1
s_cmp_eq_u64 (s_and_b64 $src, 1), 1 => s_and_b64 $src, 1
s_cmp_ge_u32 (s_and_b32 $src, 1), 1 => s_and_b32 $src, 1
s_cmp_ge_i32 (s_and_b32 $src, 1), 1 => s_and_b32 $src, 1
s_cmp_lg_u32 (s_and_b32 $src, 1), 0 => s_and_b32 $src, 1
s_cmp_lg_i32 (s_and_b32 $src, 1), 0 => s_and_b32 $src, 1
s_cmp_lg_u64 (s_and_b64 $src, 1), 0 => s_and_b64 $src, 1
s_cmp_gt_u32 (s_and_b32 $src, 1), 0 => s_and_b32 $src, 1
s_cmp_gt_i32 (s_and_b32 $src, 1), 0 => s_and_b32 $src, 1

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

2 years ago[MemorySSAUpdater] Simplify updates when only deleting edges.
Alina Sbirlea [Wed, 1 Sep 2021 21:38:53 +0000 (14:38 -0700)]
[MemorySSAUpdater] Simplify updates when only deleting edges.

When performing only edge deletion, we don't need to do the DT updates
back and forth. Check for the existance of insert updates to simplify
this.

2 years ago[OpenMP][AMDGPU] Remove unneeded XFAILs
Joel E. Denny [Wed, 1 Sep 2021 21:59:40 +0000 (17:59 -0400)]
[OpenMP][AMDGPU] Remove unneeded XFAILs

2 years ago[Codegen][TLI][X86] SimplifyMultipleUseDemandedBits(): 0'th vec subreg widening is...
Roman Lebedev [Wed, 1 Sep 2021 21:42:09 +0000 (00:42 +0300)]
[Codegen][TLI][X86] SimplifyMultipleUseDemandedBits(): 0'th vec subreg widening is free, try to perform it earlier

I believe, the profitability reasoning here is correct
"sub"reg is already located within the 0'th subreg of wider reg,
so if we have suvector insertion at index 0 into undef,
then it's always free do to.

After this, D109065 finally avoids the regression in D108382.

Reviewed By: RKSimon

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

2 years ago[InstrProfiling] Use llvm.compiler.used if applicable for Mach-O
Fangrui Song [Wed, 1 Sep 2021 21:46:51 +0000 (14:46 -0700)]
[InstrProfiling] Use llvm.compiler.used if applicable for Mach-O

Similar to D97585.

D25456 used `S_ATTR_LIVE_SUPPORT` to ensure the data variable will be retained
or discarded as a unit with the counter variable, so llvm.compiler.used is
sufficient. It allows ld to dead strip unneeded profc and profd variables.

Reviewed By: vsk

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

2 years ago[llvm-profdata] Fix assertion from invalid iterator
Wenlei He [Wed, 1 Sep 2021 21:37:18 +0000 (14:37 -0700)]
[llvm-profdata] Fix assertion from invalid iterator

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

2 years ago[RISCV] Fix typo in RISCVSchedSiFive7.td
Alexander Pivovarov [Wed, 1 Sep 2021 21:26:51 +0000 (16:26 -0500)]
[RISCV] Fix typo in RISCVSchedSiFive7.td

Fix typo in "microarchitecure".

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

2 years ago[ARM] Add MVE lowering for fptosi.sat
David Green [Wed, 1 Sep 2021 21:38:47 +0000 (22:38 +0100)]
[ARM] Add MVE lowering for fptosi.sat

This adds lowering of the llvm.fptosi.sat and llvm.fptoui.sat intinsics,
selecting a VCVT instruction which under MVE will inherently perform the
saturate.

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

2 years ago[OpenMP] Use IsHostPtr where needed in rest of omptarget.cpp
Joel E. Denny [Wed, 1 Sep 2021 20:24:39 +0000 (16:24 -0400)]
[OpenMP] Use IsHostPtr where needed in rest of omptarget.cpp

As started in D107925, this patch replaces the remaining occurrences
of `UNIFIED_SHARED_MEMORY && TgtPtrBegin == HstPtrBegin` in
`omptarget.cpp` with `IsHostPtr`.  The former condition is broken in
the rare case that the device and host happen to use the same address
for their mapped allocations.  I don't know how to write a test that's
likely to reveal this case.

Reviewed By: grokos

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

2 years ago[OpenMP] Use IsHostPtr where needed for targetDataBegin
Joel E. Denny [Wed, 1 Sep 2021 20:24:34 +0000 (16:24 -0400)]
[OpenMP] Use IsHostPtr where needed for targetDataBegin

As discussed in D105990, without this patch, `targetDataBegin`
determines whether to transfer data (as opposed to assuming it's in
shared memory) using the condition `!UseUSM || HasCloseModifier`.
However, this condition is broken if use of discrete memory was forced
by `omp_target_associate_ptr`.  This patch extends
`unified_shared_memory/associate_ptr.c` to reveal this case, and it
fixes it using `!IsHostPtr` in `DeviceTy::getTargetPointer` to replace
this condition.

Reviewed By: grokos

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

2 years ago[OpenMP][NFC] Eliminate CopyMember from targetDataEnd
Joel E. Denny [Wed, 1 Sep 2021 20:24:28 +0000 (16:24 -0400)]
[OpenMP][NFC] Eliminate CopyMember from targetDataEnd

This patch is based on comments in D105990.  It is NFC according to
the following observations:

1. `CopyMember` is computed as `!IsHostPtr && IsLast`.
2. `DelEntry` is true only if `IsLast` is true.

We apply those observations in order:

```
if ((DelEntry || Always || CopyMember) && !IsHostPtr)

if ((DelEntry || Always || IsLast) && !IsHostPtr)

if ((Always || IsLast) && !IsHostPtr)
```

Reviewed By: grokos

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

2 years ago[OpenMP] Use IsHostPtr where needed for targetDataEnd
Joel E. Denny [Wed, 1 Sep 2021 20:24:14 +0000 (16:24 -0400)]
[OpenMP] Use IsHostPtr where needed for targetDataEnd

As discussed in D105990, without this patch, `targetDataEnd`
determines whether to transfer data or delete a device mapping (as
opposed to assuming it's in shared memory) using two different
conditions, each of which is broken for some cases:

1. `!(UNIFIED_SHARED_MEMORY && TgtPtrBegin == HstPtrBegin)`: The
   broken case is rare: the device and host might happen to use the
   same address for their mapped allocations.  I don't know how to
   write a test that's likely to reveal this case, but this patch does
   fix it, as discussed below.
2. `!UNIFIED_SHARED_MEMORY || HasCloseModifier`: There are at least
   two broken cases:
    1. The `close` modifier might have been specified on an `omp
      target enter data` but not the corresponding `omp target exit
      data`, which thus might falsely assume a mapping is in shared
      memory.  The test `unified_shared_memory/close_enter_exit.c`
      already has a missing deletion as a result, and this patch adds
      a check for that.  This patch also adds the new test
      `close_member.c` to reveal a missing transfer and deletion.
    2. Use of discrete memory might have been forced by
      `omp_target_associate_ptr`, as in the test
      `unified_shared_memory/api.c`.  In the current `targetDataEnd`
      implementation, this condition turns out not be used for this
      case: because the reference count is infinite, a transfer is
      possible only with an `always` modifier, and this condition is
      never used in that case.  To ensure it's never used for that
      case in the future, this patch adds the test
      `unified_shared_memory/associate_ptr.c`.

Fortunately, `DeviceTy::getTgtPtrBegin` already has a solution: it
reports whether the allocation was found in shared memory via the
variable `IsHostPtr`.

After this patch, `HasCloseModifier` is no longer used in
`targetDataEnd`, and I wonder if the `close` modifier is ever useful
on an `omp target data end`.

Reviewed By: grokos

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

2 years ago[OpaquePtr] Cleanup some uses of getPointerElementType() in TailRecursionElimination
Arthur Eubanks [Wed, 1 Sep 2021 21:21:58 +0000 (14:21 -0700)]
[OpaquePtr] Cleanup some uses of getPointerElementType() in TailRecursionElimination

2 years ago[InstrProfiling][test] Combine profiling.ll and linkage.ll
Fangrui Song [Wed, 1 Sep 2021 21:21:42 +0000 (14:21 -0700)]
[InstrProfiling][test] Combine profiling.ll and linkage.ll

The latter mostly covers the former.

2 years ago[SCEV] Clarify requirements for zero-stride to be UB
Philip Reames [Wed, 1 Sep 2021 20:56:25 +0000 (13:56 -0700)]
[SCEV] Clarify requirements for zero-stride to be UB

There's a silent bug in our reasoning about zero strides. We assume that having a single static exit implies that if that exit is not taken, then the loop must be infinite. This ignores the potential for abnormal exits via exceptions. Consider the following example:

for (uint_8 i = 0; i < 1; i += 0) {
  throw_on_thousandth_call();
}

Our reasoning is such that we'd conclude this loop can't take the backedge as that would lead to a (presumed) infinite loop.

In practice, this is a silent bug because the loopIsFiniteByAssumption returns false strictly more often than the loopHaNoAbnormalExits property. We could reasonable want to change that in the future, so fixing the codeflow now is worthwhile.

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

2 years ago[openmp] Drop test from D109057, disproportionately difficult to run on windows
Jon Chesterfield [Wed, 1 Sep 2021 20:51:51 +0000 (21:51 +0100)]
[openmp] Drop test from D109057, disproportionately difficult to run on windows

2 years ago [AMDGPU] enable scalar compare in truncate selection
alex-t [Wed, 1 Sep 2021 20:31:33 +0000 (23:31 +0300)]
 [AMDGPU] enable scalar compare in truncate selection

Currently, the truncate selection dag node is expanded as a bitwise AND plus compare to 1.  This change enables scalar comparison in the pattern if the truncate node is uniform.

Reviewed By: rampitec

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

2 years ago[LoopDeletion] Separate logic in breakBackedgeIfNotTaken using symboic max trip count...
Philip Reames [Wed, 1 Sep 2021 20:29:10 +0000 (13:29 -0700)]
[LoopDeletion] Separate logic in breakBackedgeIfNotTaken using symboic max trip count [nfc]

As mentioned in D108833, the logic for figuring out if a backedge is dead was somewhat interwoven with the SCEV based logic and the symbolic eval logic. This is my attempt at making the code easier to follow.

Note that this is only NFC after the work done in 29fa37ec.  Thanks to Nikita for catching that case.

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

2 years ago[openmp] Accept directory for libomptarget-bc-path
Jon Chesterfield [Wed, 1 Sep 2021 18:46:20 +0000 (19:46 +0100)]
[openmp] Accept directory for libomptarget-bc-path

The commandline flag to specify a particular openmp devicertl library
currently errors like:
```
fatal error: cannot open file
      './runtimes/runtimes-bins/openmp/libomptarget':
      Is a directory
```
CommonArgs successfully appends the directory to the commandline args then
mlink-builtin-bitcode rejects it.

This patch is a point fix to that. If --libomptarget-amdgcn-bc-path=directory
then append the expected name for the current architecture and go on as before.
This is useful for test runners that don't hardcode the architecture.

Reviewed By: jdoerfert

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

2 years ago[WebAssembly] Support opaque pointers in FixFunctionBitcasts
Nikita Popov [Sat, 28 Aug 2021 21:38:12 +0000 (23:38 +0200)]
[WebAssembly] Support opaque pointers in FixFunctionBitcasts

With opaque pointers, no actual bitcasts will be present. Instead,
there will be a mismatch between the call FunctionType and the
function ValueType. Change the code to collect CallBases
specifically (rather than general Uses) and compare these types.

RAUW is no longer performed, as there would no longer be any
bitcasts that can be RAUWd.

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

2 years ago[lld][Hexagon] Add checks for instructions that can have TLS relocations
Sid Manning [Thu, 26 Aug 2021 15:18:33 +0000 (08:18 -0700)]
[lld][Hexagon] Add checks for instructions that can have TLS relocations

Several instructions with potential TLS relocations were missing.  This
issue was found when building the Canadian LLVM toolchain.

2 years ago[mlir][SPIRV] Add Image Operands for Image Instructions
Weiwei Li [Wed, 1 Sep 2021 18:39:05 +0000 (02:39 +0800)]
[mlir][SPIRV] Add Image Operands for Image Instructions

This patch is to add Image Operands in SPIR-V Dialect and also let ImageDrefGather to use Image Operands.

Image Operands are used in many image instructions. "Image Operands encodes what oprands follow, as per Image Operands". And ususally, they are optional to image instructions.

The format of image operands looks like:

    %0 = spv.ImageXXXX %1, ... %3 : f32 ["Bias|Lod"](%4, %5 : f32, f32) -> ...

This patch doesn’t implement all operands (see Section 3.14 in SPIR-V Spec) but provides a skeleton of it. There is TODO in verifyImageOperands function.

Co-authored: Alan Liu <alanliu.yf@gmail.com>

Reviewed by: antiagainst

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

2 years ago[SCEVExpander] Prefer pointer expansion for overflow checks
Philip Reames [Wed, 1 Sep 2021 20:07:32 +0000 (13:07 -0700)]
[SCEVExpander] Prefer pointer expansion for overflow checks

We'd special cased this logic to use pointer types for non-integral pointers, but there's no reason we can't do that for all pointer types.   Doing it this was has a few advantages:
a) The code itself becomes more straight forward, and easier to test.
b) We avoid introducing ptrtoint into programs which didn't have them in the source.
c) The resulting codegen is easier to analyze and simplify (mostly due to lack of ptrtoint).

Note that there are some test diffs, but a) running them through instcombine helps a ton, and b) there's enough missing obvious transforms on both before and after IR that it's clear this isn't performance sensitive.

This is mostly motivated by cleaning up mentions of non-integrals to have a clearer idea of what we actually need to support.

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

2 years ago[AMDGPU] Update Call Convention docs for GFX90A
Scott Linder [Wed, 1 Sep 2021 20:02:40 +0000 (20:02 +0000)]
[AMDGPU] Update Call Convention docs for GFX90A

Document the CSR AGPRs for GFX90A.

Remove the TODO for gfx908, as the answer is that we don't mark any
AGPRs as callee-saved except for GFX90A, i.e. the docs as-is are correct
for gfx908.

Reviewed By: rampitec

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

2 years agoVFS: Document goals of 'use-external-name' and related logic, NFC
Duncan P. N. Exon Smith [Wed, 1 Sep 2021 19:35:34 +0000 (15:35 -0400)]
VFS: Document goals of 'use-external-name' and related logic, NFC

Document 'use-external-name' and the various bits of logic that make it
work, to avoid others having to repeat the archival work (given that I
added getFileRefReturnsCorrectNameForDifferentStatPath to
FileManagerTest, seems possible I understood this once before!).

b59cf679e81483cbb3a9252056b7528f4c49586c added 'use-external-name' to
  RedirectingFileSystem. This causes `stat`s to return the external
  name for a redirected file instead of the name it was accessed by,
  leaking it through the VFS.
d066d4c849be06a01c0d17e8dc206913f4e7bfe3 propagated the external name
  further through clang::FileManager.
4dc5573acc0d2e7c59d8bac2543eb25cb4b32984, which added
  clang::FileEntryRef to clang::FileManager, has complicated concession
  to account for this as well (since refactored a bit).

The goal of 'use-external-name' is to enable Clang to report "real" file
paths to users (via diagnostics) and to external tools (such as
debuggers reading debug info and build systems reading `.d` files).

I've added FIXMEs to look at other channels for communicating the
external names, since the current implementation adds complexity to
FileManager and exposes an inconsistent interface to clients.

Besides that, the FileManager logic appears to be kicking in outside of
'use-external-name'. Seems that *some* vfs::FileSystem implementations
canonicalize some paths returned by `stat` in *some* cases (the bug
isn't fully understood yet). Volodymyr Sapsai is investigating, this at
least better documents what *is* understood.

2 years agoRevert "[openmp] Accept directory for libomptarget-bc-path"
Jon Chesterfield [Wed, 1 Sep 2021 19:45:41 +0000 (20:45 +0100)]
Revert "[openmp] Accept directory for libomptarget-bc-path"

Windows separator problem. Fixing that broke another regex.
This reverts commit 0173e024fd9e779a94503040a532bcf125277f86.

2 years agoRevert "[openmp] No longer use LIBRARY_PATH to find devicertl"
Jon Chesterfield [Wed, 1 Sep 2021 19:43:14 +0000 (20:43 +0100)]
Revert "[openmp] No longer use LIBRARY_PATH to find devicertl"

This reverts commit 7a228f872fbbefa6a6eba1d51da192761879fcca.
Failing test case under CI

2 years ago[libc] Add a skeleton for C standard condition variable functions.
Siva Chandra Reddy [Fri, 27 Aug 2021 18:49:40 +0000 (18:49 +0000)]
[libc] Add a skeleton for C standard condition variable functions.

This patch adds a skeleton as a preparatory step for the next patch which
adds the actual implementations of the condition variable functions.

Reviewed By: michaelrj

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

2 years ago[RISCV] Fold (RISCVISD::SELECT_CC X, Y, CC, Z, Z) -> Z.
Craig Topper [Wed, 1 Sep 2021 19:11:37 +0000 (12:11 -0700)]
[RISCV] Fold (RISCVISD::SELECT_CC X, Y, CC, Z, Z) -> Z.

If the true and false values are the same, we don't need a SELECT_CC.

This would normally be folded before a select is legalized to
select_cc. The test case exploits the late legalization of vscale
to trigger a case where they become identical after legalization.

This works around an issue found on a test case in D107957. In that
case the true/false values were both eventually 0 and the select was
used by a vector AVL operand. The select_cc got expanded to control
flow and a phi, but the phi inputs were both copies from X0. MachineIR
optimizations simplified this to a single copy from X0 going into the
vector instruction. This became the input of a vsetvli after vsetvli
insertion. Then register coalescing folded the copy into the vsetvli.
X0 as the source of a vsetvli is a special encoding and should not be
created by coalesing. We need to fix our vsetvli handling to make sure
this can never happen any other way, but removing the unneeded select
is still a worthwhile optimization.

2 years ago[ubsan] warn inside the sigaction interceptor if static linking is suspected, and...
Kostya Serebryany [Wed, 1 Sep 2021 18:11:45 +0000 (11:11 -0700)]
[ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref

[ubsan] warn inside the sigaction interceptor if static linking is suspected, and continue instead of crashing on null deref

Reviewed By: kostik

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

2 years ago[libomptarget] Drop path separator from test to fix windows build
Jon Chesterfield [Wed, 1 Sep 2021 19:34:58 +0000 (20:34 +0100)]
[libomptarget] Drop path separator from test to fix windows build

2 years ago[openmp] No longer use LIBRARY_PATH to find devicertl
Jon Chesterfield [Wed, 1 Sep 2021 19:24:34 +0000 (20:24 +0100)]
[openmp] No longer use LIBRARY_PATH to find devicertl

Given D109057, change test runner to use the libomptarget-x-bc-path
argument instead of the LIBRARY_PATH environment variable to find the device
library.

Also drop the use of LIBRARY_PATH environment variable as it is far
too easy to pull in the device library from an unrelated toolchain by accident
with the current setup. No loss in flexibility to developers as the clang
commandline used here is still available.

Reviewed By: jdoerfert

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

2 years ago[CSSPGO] Sort function offset table to speed up profile loading.
Hongtao Yu [Tue, 31 Aug 2021 23:30:49 +0000 (16:30 -0700)]
[CSSPGO] Sort function offset table to speed up profile loading.

With the context split work, the context-based (an array of strings) sorting performed at profile load time is way more expansive than single-string-based sorting. This is likely due to auxiliary operations done on each array element, such as indirect references, std::min operations, also likely cache misses. In this change I'm presorting profiles during profile generation time to avoid sorting at compile time.

Compared to the previous context-split work, this effectively cuts down compile time by 20% for one of our large services and brings us closer to non-CS build, with still a small gap in build time.

Reviewed By: wenlei, wmi

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

2 years ago[IVDescriptors] Make pointer inductions compatible with opaque pointers
Nikita Popov [Wed, 23 Jun 2021 11:01:44 +0000 (13:01 +0200)]
[IVDescriptors] Make pointer inductions compatible with opaque pointers

Store the used element type in the InductionDescriptor. For typed
pointers, it remains the pointer element type. For opaque pointers,
we always use an i8 element type, such that the step is a simple
offset.

A previous version of this patch instead tried to guess the element
type from an induction GEP, but this is not reliable, as the GEP
may be hidden (see @both in iv_outside_user.ll).

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

2 years ago[libc] Mark return value of memcpy in strcpy as initialized for msan.
Siva Chandra Reddy [Wed, 1 Sep 2021 06:52:12 +0000 (06:52 +0000)]
[libc] Mark return value of memcpy in strcpy as initialized for msan.

Reviewed By: michaelrj

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

2 years agoRemove deprecated registration APIs (NFC)
Mehdi Amini [Wed, 1 Sep 2021 18:38:07 +0000 (18:38 +0000)]
Remove deprecated registration APIs (NFC)

In D104421, we changed the API for pass registration.
Before you would write:

      void registerPass("my-pass", "My Pass Description.",
                        [] { return createMyPass(); });
while now you’d only write:

      void registerPass([] { return createMyPass(); });

If you’re using TableGen to define your pass registration, you shouldn’t have anything to do. If you’re using directly the C++ API here are some changes.
Your project may also be broken even if you use TableGen and you call the
generated registration API in case your pass implementation didn’t inherit from
the MyPassBase class generated by TableGen.

If you don't use TableGen, the "my-pass" and "My Pass Description." fields must
be provided by overriding methods on the pass itself:

  llvm::StringRef getArgument() const final { return "my-pass"; }
  llvm::StringRef getDescription() const final {
    return "My Pass Description.";
  }

Reviewed By: rriddle

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

2 years ago[SCEV] If max BTC is zero, then so is the exact BTC [2 of 2]
Philip Reames [Wed, 1 Sep 2021 18:33:15 +0000 (11:33 -0700)]
[SCEV] If max BTC is zero, then so is the exact BTC [2 of 2]

This extends D108921 into a generic rule applied to constructing ExitLimits along all paths. The remaining paths (primarily howFarToZero) don't have the same reasoning about UB sensitivity as the howManyLessThan ones did. Instead, the remain cause for max counts being more precise than exact counts is that we apply context sensitive loop guards on the max path, and not on the exact path. That choice is mildly suspect, but out of scope of this patch.

The MVETailPredication.cpp change deserves a bit of explanation. We were previously figuring out that two SCEVs happened to be equal because the happened to be identical. When we optimized one with context sensitive information, but not the other, we lost the ability to prove them equal. So, cover this case by subtracting and then applying loop guards again. Without this, we see changes in test/CodeGen/Thumb2/mve-blockplacement.ll

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

2 years ago[clang] Add a -canonical-prefixes option
Nico Weber [Fri, 27 Aug 2021 14:14:27 +0000 (10:14 -0400)]
[clang] Add a -canonical-prefixes option

In https://reviews.llvm.org/D47480 I complained that there's no positive
form of this flag, so let's add one :)

https://gcc.gnu.org/PR29931 also has a pending patch to add the positive
form to gcc (but there's admittedly not a lot of movement on that bug).

This doesn't change any defaults.

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

2 years ago[DWARF] Find offset of attribute.
Alexander Yermolovich [Wed, 1 Sep 2021 18:13:34 +0000 (11:13 -0700)]
[DWARF] Find offset of attribute.

This is used by BOLT to do patching of DebugInfo section, and Line Table. Directly by using find, and through getAttrFieldOffsetForUnit.

Reviewed By: dblaikie

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

2 years ago[openmp] Accept directory for libomptarget-bc-path
Jon Chesterfield [Wed, 1 Sep 2021 18:46:20 +0000 (19:46 +0100)]
[openmp] Accept directory for libomptarget-bc-path

The commandline flag to specify a particular openmp devicertl library
currently errors like:
```
fatal error: cannot open file
      './runtimes/runtimes-bins/openmp/libomptarget':
      Is a directory
```
CommonArgs successfully appends the directory to the commandline args then
mlink-builtin-bitcode rejects it.

This patch is a point fix to that. If --libomptarget-amdgcn-bc-path=directory
then append the expected name for the current architecture and go on as before.
This is useful for test runners that don't hardcode the architecture.

Reviewed By: jdoerfert

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

2 years ago[InstCombine] allow more min/max with 'not' folds for intrinsics
Sanjay Patel [Wed, 1 Sep 2021 18:40:00 +0000 (14:40 -0400)]
[InstCombine] allow more min/max with 'not' folds for intrinsics

isFreeToInvert allows min/max with 'not' on both operands,
so easing the argument restriction catches the case where
that operand has one use.

We already handle the sub-patterns when there are less uses:
https://alive2.llvm.org/ce/z/8Jatm_

...but this is another step towards parity with the
equivalent icmp+select idioms ( D98152 ).

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

2 years ago[InstCombine] use isFreeToInvert to generalize min/max with 'not'
Sanjay Patel [Wed, 1 Sep 2021 18:33:04 +0000 (14:33 -0400)]
[InstCombine] use isFreeToInvert to generalize min/max with 'not'

This mimics the code for the corresponding cmp-select idiom.

This also prevents an infinite loop because isFreeToInvert
does not match constant expressions.

So this patch solves the same problem as D108814 and obsoletes
it, but my main motivation is to enhance the pattern matching
to allow more invertible ops. That change will be a follow-up
patch on top of this one.

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

2 years ago[NFC] Remove redundant code added in 04ce2de3
Arthur Eubanks [Wed, 1 Sep 2021 18:30:07 +0000 (11:30 -0700)]
[NFC] Remove redundant code added in 04ce2de3

2 years ago[NFC] Use newly introduced *AtIndex methods
Arthur Eubanks [Fri, 20 Aug 2021 17:49:36 +0000 (10:49 -0700)]
[NFC] Use newly introduced *AtIndex methods

Introduced in D108788. These are clearer.

2 years agoTighten heuristic for coroutine debug info workaround.
Adrian Prantl [Wed, 1 Sep 2021 18:09:16 +0000 (11:09 -0700)]
Tighten heuristic for coroutine debug info workaround.

The OutermostLoad condition is supposed to strip the outermost
DW_OP_deref operation because dbg.declares are implicitly
indirect. This patch makes sure the heuristic is only applied to
dbg.declare intrinsics and only if the outermost instruction is a
load.

This was found while qualifying the latest Swift compiler rebranch.

rdar://82037764

2 years ago[RISCV] Add a test case showing an extra sext.w near a sh2add with multiple uses...
Craig Topper [Wed, 1 Sep 2021 16:48:46 +0000 (09:48 -0700)]
[RISCV] Add a test case showing an extra sext.w near a sh2add with multiple uses. NFC

See description in test.

Reviewed By: frasercrmck

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

2 years ago[gn build] Port 0922ce56f4f0
LLVM GN Syncbot [Wed, 1 Sep 2021 17:49:53 +0000 (17:49 +0000)]
[gn build] Port 0922ce56f4f0

2 years ago[libomptarget] Set runpath on libomptarget, use that to drop LD_LIBRARY_PATH from...
Jon Chesterfield [Wed, 1 Sep 2021 17:47:55 +0000 (18:47 +0100)]
[libomptarget] Set runpath on libomptarget, use that to drop LD_LIBRARY_PATH from test runner

Using rpath instead of LD_LIBRARY_PATH to find libomp.so and
libomptarget.so lets one rerun the already built test executables without
setting environment variables and removes the risk of the test runner picking
up different libraries to the developer debugging the failure.

rpath usually means runpath, which is not transitive, so set runpath on
libomptarget itself so that it can find the plugins located next to it,
spelled $ORIGIN. This provides sufficient functionality to drop D102043

Reviewed By: tianshilei1992

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

2 years ago[IRLinker] Suppress linker warnings when linking with CUDA libdevice.
Artem Belevich [Fri, 27 Aug 2021 18:18:11 +0000 (11:18 -0700)]
[IRLinker] Suppress linker warnings when linking with CUDA libdevice.

libdevice bitcode provided by NVIDIA is linked with clang/LLVM-generated IR
which uses nvptx*-nvidia-cuda triple. We need to mark them as compatible.

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

2 years ago[libc++][format] Add __format_arg_store.
Mark de Wever [Sat, 5 Dec 2020 10:45:21 +0000 (11:45 +0100)]
[libc++][format] Add __format_arg_store.

This implements the struct `__format_arg_store` and its dependencies:
* the class basic_format_arg,
* the class basic_format_args,
* the class basic_format_context,
* the function make_format_args,
* the function wmake_format_args,
* the function visit_format_arg,
* several Standard required typedefs.

The following parts will be implemented in a later patch:

* the child class `basic_format_arg::handle`,
* the function `basic_format_arg::basic_format_arg(const T* p)`.

The following extension has been implemented:
* the class basic_format_arg supports `__[u]int128_t` on platform where libc++ supports 128 bit integrals.

Implements parts of:
* P0645 Text Formatting

Completes:
* LWG3371 visit_format_arg and make_format_args are not hidden friends
* LWG3542 basic_format_arg mishandles basic_string_view with custom traits

Note https://mordante.github.io/blog/2021/06/05/format.html gives a bit more information about the goals and non-goals of this initial patch series.

Reviewed By: #libc, ldionne, vitaut

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

2 years ago[NFC] Rename attribute methods that work with indexes
Arthur Eubanks [Fri, 20 Aug 2021 17:49:36 +0000 (10:49 -0700)]
[NFC] Rename attribute methods that work with indexes

This is part one of a couple of patches to fully rename these methods.

I've made the mistake of assuming that these indexes are for parameters
multiple times, but actually they're based off of a weird indexing
scheme AttributeList::AttrIndex where 0 is the return value and ~0 is
the function. Hopefully renaming these methods will make this clearer.
Ideally users should use more specific methods like
AttributeList::getFnAttr().

This patch simply adds the name that we want in the end. This is so the
removal of the methods with the original names happens in a separate
change to make it easier for downstream users.

This touches all relevant methods in AttributeList, CallBase, and Function.

Reviewed By: rnk

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

2 years ago[WebAssembly] Lower v2f32 to v2f64 extending loads with promote_low
Thomas Lively [Wed, 1 Sep 2021 17:27:41 +0000 (10:27 -0700)]
[WebAssembly] Lower v2f32 to v2f64 extending loads with promote_low

Previously extra wide v4f32 to v4f64 extending loads would be legalized to v2f32
to v2f64 extending loads, which would then be scalarized by legalization. (v2f32
to v2f64 extending loads not produced by legalization were already being emitted
correctly.) Instead, mark v2f32 to v2f64 extending loads as legal and explicitly
lower them using promote_low. This regresses the addressing modes supported for
the extloads not produced by legalization, but that's a fine trade off for now.

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