DeForest Richards [Fri, 27 Sep 2019 19:12:00 +0000 (19:12 +0000)]
[Docs] Adds new section to User Guides page
Adds a section to the User Guides page for articles related to building, packaging, and distributing LLVM. Includes sub-sections for CMake, Clang, and Docker.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373113
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 27 Sep 2019 18:38:51 +0000 (18:38 +0000)]
[InstSimplify] add tests for fma/fmuladd with undef operand; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373109
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 27 Sep 2019 18:23:55 +0000 (18:23 +0000)]
[X86] Call SimplifyDemandedBits in combineGatherScatter any time the mask element is wider than i1, not just when AVX512 is disabled.
The AVX2 intrinsics can still be used when AVX512 is enabled and
those go through this path. So we should simplify them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373108
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 27 Sep 2019 18:23:46 +0000 (18:23 +0000)]
[X86] Add test case to show failure to perform SimplifyDemandedBits on mask of avx2 gather intrinsics when avx512 is enabled.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373107
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Fri, 27 Sep 2019 18:12:15 +0000 (18:12 +0000)]
[InstCombine] Simplify shift-by-sext to shift-by-zext
Summary:
This is valid for any `sext` bitwidth pair:
```
Processing /tmp/opt.ll..
----------------------------------------
%signed = sext %y
%r = shl %x, %signed
ret %r
=>
%unsigned = zext %y
%r = shl %x, %unsigned
ret %r
%signed = sext %y
Done: 2016
Optimization is correct!
```
(This isn't so for funnel shifts, there it's illegal for e.g. i6->i7.)
Main motivation is the C++ semantics:
```
int shl(int a, char b) {
return a << b;
}
```
ends as
```
%3 = sext i8 %1 to i32
%4 = shl i32 %0, %3
```
https://godbolt.org/z/0jgqUq
which is, as this shows, too pessimistic.
There is another problem here - we can only do the fold
if sext is one-use. But we can trivially have cases
where several shifts have the same sext shift amount.
This should be resolved, later.
Reviewers: spatel, nikic, RKSimon
Reviewed By: spatel
Subscribers: efriedma, hiraditya, nlopes, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68103
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373106
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakub Kuderski [Fri, 27 Sep 2019 17:41:17 +0000 (17:41 +0000)]
XFAIL a codegen test AArch64/tailmerging_in_mbp.ll
This test fails when machine dominator tree verifier is run.
Needs more investigation, as this is not a new failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373103
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakub Kuderski [Fri, 27 Sep 2019 17:25:39 +0000 (17:25 +0000)]
[Dominators][CodeGen] Clean up MachineDominators
Summary: This is a cleanup patch for MachineDominatorTree. It would be an NFC, except for replacing custom DomTree verification with the generic one.
Reviewers: tstellar, tpr, nhaehnle, arsenm, NutshellySima, grosser, hliao
Reviewed By: arsenm
Subscribers: wdng, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67976
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373101
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 16:56:07 +0000 (16:56 +0000)]
Fix MSVC "not all control paths return a value" warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373100
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 16:55:49 +0000 (16:55 +0000)]
ModuleUtils - silence static analyzer dyn_cast<> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373099
91177308-0d34-0410-b5e6-
96231b3b80d8
Kai Nacke [Fri, 27 Sep 2019 16:19:15 +0000 (16:19 +0000)]
Change -march=systemz to triple and fix test
These two test cases use -march=systemz instead of a triple. In
particular, the used file format is then based on the default host
triple. This leads to different behaviour on different platforms.
The SystemZ implementation uses the integrated assembler for a
long time now. The mature-mc-support test can be fully enabled.
Differential Revision: https://reviews.llvm.org/D68129
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373098
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 15:49:19 +0000 (15:49 +0000)]
FunctionImportGlobalProcessing::processGlobalForThinLTO - silence static analyzer dyn_cast<FunctionSummary> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<FunctionSummary> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373097
91177308-0d34-0410-b5e6-
96231b3b80d8
Luis Marques [Fri, 27 Sep 2019 15:49:10 +0000 (15:49 +0000)]
[RISCV] Rename FPRs and use Register arithmetic
The new names for FPRs ensure that the Register values within the same class are
enumerated consecutively (the order is determined by the `LessRecordRegister`
function object). Where there were tables mapping between 32- and 64-bit FPRs
(and vice versa) this patch replaces them with Register arithmetic. The
enumeration order between different register classes is expected to continue to
be arbitrary, although it does impact the conversion from the (overloaded) asm
FPR names to Register values, and therefore might require updates to the target
if the sorting algorithm is changed. Static asserts were added to ensure that
changes to the ordering that would impact the current implementation are
detected.
Differential Revision: https://reviews.llvm.org/D67423
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373096
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 15:49:10 +0000 (15:49 +0000)]
SCCP - silence static analyzer dyn_cast<StructType> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<StructType> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373095
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitry Preobrazhensky [Fri, 27 Sep 2019 15:41:31 +0000 (15:41 +0000)]
[AMDGPU][MC] Corrected parsing of registers
Summary of changes:
refactored code for better readability and future improvements;
fixed bug 41281: https://bugs.llvm.org/show_bug.cgi?id=41281
Reviewers: artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D65224
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373094
91177308-0d34-0410-b5e6-
96231b3b80d8
Djordje Todorovic [Fri, 27 Sep 2019 13:52:43 +0000 (13:52 +0000)]
[DebugInfo] Exclude memory location values as parameter entry values
Abandon describing of loaded values due to safety concerns. Loaded
values are described as derefed memory location at caller point.
At callee we can unintentionally change that memory location which
would lead to different entry being printed value before and after
the memory location clobbering. This problem is described in
llvm.org/PR43343.
Patch by Nikola Prica
Differential Revision: https://reviews.llvm.org/D67717
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373089
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Fri, 27 Sep 2019 13:21:37 +0000 (13:21 +0000)]
[llvm-exegesis] Fix r373083: Module -> Mod.
SnippetRepetitorTest.cpp:66:27: error: declaration of ‘std::unique_ptr<llvm::Module> llvm::exegesis::{anonymous}::X86SnippetRepetitorTest::Module’ [-fpermissive]
std::unique_ptr<Module> Module;
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373087
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Fri, 27 Sep 2019 13:14:34 +0000 (13:14 +0000)]
gn build: (manually) merge r373082
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373086
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Fri, 27 Sep 2019 13:04:46 +0000 (13:04 +0000)]
gn build: Merge r373083
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373085
91177308-0d34-0410-b5e6-
96231b3b80d8
Jesper Antonsson [Fri, 27 Sep 2019 13:01:37 +0000 (13:01 +0000)]
[CodeGenPrepare] Mend "avoid crashing from replacing a phi twice" fix.
Summary:
An erroneously negated if-statement by an earlier (March 2019) bugfix left phi replacement/simplification under optimizeMemoryInst() in CodeGenPrepare largely inactivated. The error was found when csmith found that the same assert as in the original bug report could still be triggered in a different way. This patch fixes the bugfix. The original bug was:
https://bugs.llvm.org/show_bug.cgi?id=41052
... and the previous fix was D59358.
Reviewers: aprantl, skatkov
Reviewed By: skatkov
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67838
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373084
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Fri, 27 Sep 2019 12:56:24 +0000 (12:56 +0000)]
[llvm-exegesis] Add loop mode for repeating the snippet.
Summary:
Before this change the Executable function was made by duplicating the
snippet. This change adds a --repetion-mode={loop|duplicate} flag that
allows choosing between this behaviour and wrapping the snippet instructions
in a loop.
The new mode can help measurements when the snippet fits in the DSB by
short-cirtcuiting decoding. The loop adds a dec + jmp to the measurements, but
since these are not part of the critical path, they execute in parallel
with the measured code and do not impact measurements in practice.
Overview of the change:
- New SnippetRepetitor abstraction that handles repeating the snippet.
The assembler delegates repeating the instructions to this class.
- ExegesisTarget learns how to decrement loop counter and jump.
- Some refactoring of the assembler into FunctionFiller/BasicBlockFiller.
Reviewers: gchatelet
Subscribers: mgorny, tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68125
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373083
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Fri, 27 Sep 2019 12:54:21 +0000 (12:54 +0000)]
[Alignment][NFC] Remove unneeded llvm:: scoping on Align types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373081
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Fri, 27 Sep 2019 11:37:59 +0000 (11:37 +0000)]
Reland "gn build: (manually) merge r373028"
This relands r373029, reverted in 373033, because r373028 relanded in r373066.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373070
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Parker [Fri, 27 Sep 2019 10:33:53 +0000 (10:33 +0000)]
[NFC][ARM] Add some tail-predication tests
Use different data types for some simple loops.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373064
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 10:04:25 +0000 (10:04 +0000)]
[SLPVectorizer][X86] Regenerate arith-fp tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373063
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 27 Sep 2019 10:04:16 +0000 (10:04 +0000)]
[UpdateTestChecks] Fix wildcard support on DOS prompts
D64572 / rL365818 changed the way that the file paths were collected, which meant we lost the file pattern expansion necessary when working with DOS command prompt
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373062
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Fri, 27 Sep 2019 09:54:26 +0000 (09:54 +0000)]
Revert r372893 "[CodeGen] Replace -max-jump-table-size with -max-jump-table-targets"
This caused severe compile-time regressions, see PR43455.
> Modern processors predict the targets of an indirect branch regardless of
> the size of any jump table used to glean its target address. Moreover,
> branch predictors typically use resources limited by the number of actual
> targets that occur at run time.
>
> This patch changes the semantics of the option `-max-jump-table-size` to limit
> the number of different targets instead of the number of entries in a jump
> table. Thus, it is now renamed to `-max-jump-table-targets`.
>
> Before, when `-max-jump-table-size` was specified, it could happen that
> cluster jump tables could have targets used repeatedly, but each one was
> counted and typically resulted in tables with the same number of entries.
> With this patch, when specifying `-max-jump-table-targets`, tables may have
> different lengths, since the number of unique targets is counted towards the
> limit, but the number of unique targets in tables is the same, but for the
> last one containing the balance of targets.
>
> Differential revision: https://reviews.llvm.org/D60295
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373060
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Preud'homme [Fri, 27 Sep 2019 09:39:13 +0000 (09:39 +0000)]
[sancov][NFC] Make filename Regexes "const"
Summary:
The const-correctness of match() was fixed in rL372764, which allows
such static Regex objects to be marked const.
Reviewers: thopre
Reviewed By: thopre
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68091
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373058
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Fri, 27 Sep 2019 09:09:15 +0000 (09:09 +0000)]
[NFC][InstCombine] Revisit shift-by-signext tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373055
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Fri, 27 Sep 2019 08:56:43 +0000 (08:56 +0000)]
[Alignment][NFC] MaybeAlign in GVNExpression
Summary:
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67922
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373054
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexandros Lamprineas [Fri, 27 Sep 2019 08:22:24 +0000 (08:22 +0000)]
[MC][ARM] vscclrm disassembles as vldmia
Happens only when the mve.fp subtarget feature is enabled:
$ llvm-mc -triple thumbv8.1m.main -mattr=+mve.fp,+8msecext -disassemble <<< "0x9f,0xec,0x08,0x0b"
.text
vldmia pc, {d0, d1, d2, d3}
$ llvm-mc -triple thumbv8.1m.main -mattr=+8msecext -disassemble <<< "0x9f,0xec,0x08,0x0b"
.text
vscclrm {d0, d1, d2, d3, vpr}
Assembling returns the correct encoding with or without mve.fp:
$ llvm-mc -triple thumbv8.1m.main -mattr=+mve.fp,+8msecext -show-encoding <<< "vscclrm {d0-d3, vpr}"
.text
vscclrm {d0, d1, d2, d3, vpr} @ encoding: [0x9f,0xec,0x08,0x0b]
$ llvm-mc -triple thumbv8.1m.main -mattr=+8msecext -show-encoding <<< "vscclrm {d0-d3, vpr}"
.text
vscclrm {d0, d1, d2, d3, vpr} @ encoding: [0x9f,0xec,0x08,0x0b]
The problem seems to be in the TableGen description of VSCCLRMD.
The least significant bit should be set to zero.
Differential Revision: https://reviews.llvm.org/D68025
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373052
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Fri, 27 Sep 2019 08:04:10 +0000 (08:04 +0000)]
[llvm-exegesis] Refactor how forbidden registers are computed.
Summary:
Right now latency generation can incorrectly select the scratch register
as a dependency-carrying register.
- Move the logic for preventing register selection from Uops
implementation to common SnippetGenerator class.
- Aliasing detection now takes a set of forbidden registers just like
random register assignment does.
Reviewers: gchatelet
Subscribers: tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68084
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373048
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Fri, 27 Sep 2019 05:43:31 +0000 (05:43 +0000)]
[LoopInfo] Remove duplicates in ExitBlocks to reduce the compile time of
hasDedicatedExits.
For the compile time problem described in https://reviews.llvm.org/D67359,
turns out the root cause is there are many duplicates in ExitBlocks so
the algorithm complexity of hasDedicatedExits gets very high. If we remove
the duplicates, the compile time issue is gone.
Thanks to Philip Reames for raising a good question and it leads me to
find the root cause.
Differential Revision: https://reviews.llvm.org/D68107
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373045
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Fri, 27 Sep 2019 05:43:30 +0000 (05:43 +0000)]
Revert "[LoopInfo] Limit the iterations to check whether a loop has dedicated
exits"
Get a better approach in https://reviews.llvm.org/D68107 to solve the problem.
Revert the initial patch and will commit the new one soon.
This reverts commit rL372990.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373044
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Lively [Fri, 27 Sep 2019 02:11:40 +0000 (02:11 +0000)]
[WebAssembly] v128.andnot
Summary:
As specified at
https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md#bitwise-and-not
Reviewers: aheejin
Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68113
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373041
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Lively [Fri, 27 Sep 2019 02:06:50 +0000 (02:06 +0000)]
[WebAssembly] SIMD Load and extend operations
Summary:
As specified at
https://github.com/webassembly/simd/blob/master/proposals/simd/SIMD.md#load-and-extend.
These instructions are behind the unimplemented-simd128 target feature
for now because they have not been implemented in V8 yet.
Reviewers: aheejin
Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68058
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373040
91177308-0d34-0410-b5e6-
96231b3b80d8
Nicholas Allegra [Fri, 27 Sep 2019 01:58:31 +0000 (01:58 +0000)]
Revert r373034
It breaks the build on MSVC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373039
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 27 Sep 2019 01:35:04 +0000 (01:35 +0000)]
Speculative fix for gcc build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373038
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 27 Sep 2019 01:02:10 +0000 (01:02 +0000)]
hwasan: Compatibility fixes for short granules.
We can't use short granules with stack instrumentation when targeting older
API levels because the rest of the system won't understand the short granule
tags stored in shadow memory.
Moreover, we need to be able to let old binaries (which won't understand
short granule tags) run on a new system that supports short granule
tags. Such binaries will call the __hwasan_tag_mismatch function when their
outlined checks fail. We can compensate for the binary's lack of support
for short granules by implementing the short granule part of the check in
the __hwasan_tag_mismatch function. Unfortunately we can't do anything about
inline checks, but I don't believe that we can generate these by default on
aarch64, nor did we do so when the ABI was fixed.
A new function, __hwasan_tag_mismatch_v2, is introduced that lets code
targeting the new runtime avoid redoing the short granule check. Because tag
mismatches are rare this isn't important from a performance perspective; the
main benefit is that it introduces a symbol dependency that prevents binaries
targeting the new runtime from running on older (i.e. incompatible) runtimes.
Differential Revision: https://reviews.llvm.org/D68059
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373035
91177308-0d34-0410-b5e6-
96231b3b80d8
Nicholas Allegra [Thu, 26 Sep 2019 23:47:18 +0000 (23:47 +0000)]
[Consumed][NFC] Refactor handleCall to take function argument list.
Differential Revision: https://reviews.llvm.org/D67569
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373034
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitri Gribenko [Thu, 26 Sep 2019 23:30:47 +0000 (23:30 +0000)]
Revert "gn build: (manually) merge r373028"
This reverts commit r373029, which depends on r373028, which I reverted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373033
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 23:22:15 +0000 (23:22 +0000)]
[X86] Remove CodeGenOnly instructions added in r373021, but keep the isel patterns and add COPY_TO_REGCLASS to them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373031
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Thu, 26 Sep 2019 23:17:25 +0000 (23:17 +0000)]
gn build: (manually) merge r373028
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373029
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 22:56:19 +0000 (22:56 +0000)]
[X86] Remove unused arguments from a tablegen multiclass. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373026
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 22:56:06 +0000 (22:56 +0000)]
[X86] Add VMOVSSZrrk/VMOVSDZrrk/VMOVSSZrrkz/VMOVSDZrrkz to getUndefRegClearance.
We have isel patterns that can put an IMPLICIT_DEF on one of
the sources for these instructions. So we should make sure
we break any dependencies there. This should be done by
just using one of the other sources.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373025
91177308-0d34-0410-b5e6-
96231b3b80d8
Changpeng Fang [Thu, 26 Sep 2019 22:53:44 +0000 (22:53 +0000)]
Remove the AliasAnalysis argument in function areMemAccessesTriviallyDisjoint
Reviewers:
arsenm
Differential Revision:
https://reviews.llvm.org/D58360
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373024
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 22:23:09 +0000 (22:23 +0000)]
[X86] Add CodeGenOnly instructions for (f32 (X86selects $mask, (loadf32 addr), fp32imm0) to use masked MOVSS from memory.
Similar for f64 and having a non-zero passthru value.
We were previously not trying to fold the load at all. Using
a CodeGenOnly instruction allows us to use FR32X/FR64X as the
register class to avoid a bunch of COPY_TO_REGCLASS.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373021
91177308-0d34-0410-b5e6-
96231b3b80d8
Jordan Rupprecht [Thu, 26 Sep 2019 22:09:17 +0000 (22:09 +0000)]
Revert [SLP] Fix for PR31847: Assertion failed: (isLoopInvariant(Operands[i], L) && "SCEVAddRecExpr operand is not loop-invariant!")
This reverts r372626 (git commit
6a278d9073bdc158d31d4f4b15bbe34238f22c18)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373019
91177308-0d34-0410-b5e6-
96231b3b80d8
Kit Barton [Thu, 26 Sep 2019 21:42:45 +0000 (21:42 +0000)]
[LoopFusion] Add ability to fuse guarded loops
Summary:
This patch extends the current capabilities in loop fusion to fuse guarded loops
(as defined in https://reviews.llvm.org/D63885). The patch adds the necessary
safety checks to ensure that it safe to fuse the guarded loops (control flow
equivalent, no intervening code, and same guard conditions). It also provides an
alternative method to perform the actual fusion of guarded loops. The mechanics
to fuse guarded loops are slightly different then fusing non-guarded loops, so I
opted to keep them separate methods. I will be cleaning this up in later
patches, and hope to converge on a single method to fuse both guarded and
non-guarded loops, but for now I think the review will be easier to keep them
separate.
Reviewers: jdoerfert, Meinersbur, dmgreen, etiotto, Whitney
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65464
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373018
91177308-0d34-0410-b5e6-
96231b3b80d8
Zhaoshi Zheng [Thu, 26 Sep 2019 21:40:27 +0000 (21:40 +0000)]
[Unroll] Do NOT unroll a loop with small runtime upperbound
For a runtime loop if we can compute its trip count upperbound:
Don't unroll if:
1. loop is not guaranteed to run either zero or upperbound iterations; and
2. trip count upperbound is less than UnrollMaxUpperBound
Unless user or TTI asked to do so.
If unrolling, limit unroll factor to loop's trip count upperbound.
Differential Revision: https://reviews.llvm.org/D62989
Change-Id: I6083c46a9d98b2e22cd855e60523fdc5a4929c73
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373017
91177308-0d34-0410-b5e6-
96231b3b80d8
Stanislav Mekhanoshin [Thu, 26 Sep 2019 21:06:17 +0000 (21:06 +0000)]
[AMDGPU] copy OtherPredicates from pseudo to VOP3_Real
Differential Revision: https://reviews.llvm.org/D68102
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373015
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Thu, 26 Sep 2019 20:49:49 +0000 (20:49 +0000)]
[DAGCombine][X86][AArch64][NFC] Add tests for shift-by-signext
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373014
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Thu, 26 Sep 2019 20:49:30 +0000 (20:49 +0000)]
[InstCombine][NFC] Add tests for shift-by-signext
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373013
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Thu, 26 Sep 2019 20:49:21 +0000 (20:49 +0000)]
[InstCombine][NFC] Regenerate load-cmp.ll test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373012
91177308-0d34-0410-b5e6-
96231b3b80d8
Whitney Tsang [Thu, 26 Sep 2019 20:20:42 +0000 (20:20 +0000)]
[LOOPGUARD] Disable loop with multiple loop exiting blocks.
Summary: As discussed in the loop group meeting. With the current
definition of loop guard, we should not allow multiple loop exiting
blocks. For loops that has multiple loop exiting blocks, we can simply
unable to find the loop guard.
When getUniqueExitBlock() obtains a vector size not equals to one, that
means there is either no exit blocks or there exists more than one
unique block the loop exit to.
If we don't disallow loop with multiple loop exit blocks, then with our
current implementation, there can exist exit blocks don't post dominated
by the non pre-header successor of the guard block.
Reviewer: reames, Meinersbur, kbarton, etiotto, bmahjour
Reviewed By: Meinersbur, kbarton
Subscribers: fhahn, hiraditya, llvm-commits
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D66529
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373011
91177308-0d34-0410-b5e6-
96231b3b80d8
Xiangling Liao [Thu, 26 Sep 2019 19:38:32 +0000 (19:38 +0000)]
[AIX]Emit function descriptor csect in assembly
This patch emits the function descriptor csect for functions with definitions
under both 32-bit/64-bit mode on AIX.
Differential Revision: https://reviews.llvm.org/D66724
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373009
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Haarman [Thu, 26 Sep 2019 19:36:01 +0000 (19:36 +0000)]
[NFC][emacs] remove out-of-date comment from tablegen-mode.el
Summary:
The syntax table was originally based on and attributed to
jasmin.el, but was rewritten in r45192, so the comment that
says the code comes from jasmin.el is no longer accurate. This
change removes the comment, shortening the code a bit.
Reviewers: MaskRay, lattner
Reviewed By: MaskRay
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68042
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373008
91177308-0d34-0410-b5e6-
96231b3b80d8
David Bolvansky [Thu, 26 Sep 2019 19:01:18 +0000 (19:01 +0000)]
[NFC] Precommit tests for D68089
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373006
91177308-0d34-0410-b5e6-
96231b3b80d8
Kevin P. Neal [Thu, 26 Sep 2019 17:50:25 +0000 (17:50 +0000)]
Document requirement of function attributes with constrained floating
point.
Reviewed by: andrew.w.kaylor, uweigand, efriedma
Approved by: andrew.w.kaylor
Differential Revision: https://reviews.llvm.org/D67839
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373002
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 17:38:47 +0000 (17:38 +0000)]
DAGISelMatcherOpt - TGParser::ParseOperation - silence static analyzer cast_or_null<CheckTypeMatcher> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, replace with an null/isa assertion and cast<CheckTypeMatcher>.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373001
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 17:20:50 +0000 (17:20 +0000)]
[InstCombine] Use m_Zero instead of isNullValue() when checking if a GEP index is all zeroes to prevent an infinite loop.
The test case here previously infinite looped. Only one element from the GEP is used so SimplifyDemandedVectorElts would replace the other lanes in each index with undef leading to the first index being <0, undef, undef, undef>. But there's a GEP transform that tries to replace an index into a 0 sized type with a zero index. But the zero index check only works on ConstantInt 0 or ConstantAggregateZero so it would turn the index back to zeroinitializer. Resulting in a loop.
The fix is to use m_Zero() to allow a vector of zeroes and undefs.
Differential Revision: https://reviews.llvm.org/D67977
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373000
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 17:11:02 +0000 (17:11 +0000)]
TGParser::ParseOperation - silence static analyzer dyn_cast<TypedInit> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<TypedInit> directly and if not assert will fire for us.
I've also pulled out the repeated getType() call which was the only user of the pointer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372997
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 16:30:36 +0000 (16:30 +0000)]
ConstantFold - silence static analyzer dyn_cast<ExtractValueInst> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<ExtractValueInst> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372993
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 16:05:55 +0000 (16:05 +0000)]
ARMBaseInstrInfo getOperandLatency - silence static analyzer dyn_cast<> null dereference warnings. NFCI.
The static analyzer is warning about potential null dereferences, but we should be able to use cast<> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372992
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Thu, 26 Sep 2019 15:49:11 +0000 (15:49 +0000)]
[PowerPC] Fix typo in rL372985
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372991
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Thu, 26 Sep 2019 15:36:25 +0000 (15:36 +0000)]
[LoopInfo] Limit the iterations to check whether a loop has dedicated exits
for extreme large case.
We had a case that a single loop which has 4000 exits and the average number
of predecessors of each exit is > 1000, and we found compiling the case spent
a significant amount of time on checking whether a loop has dedicated exits.
This patch adds a limit for the iterations to the check. With the patch, the
time to compile our testcase reduced from 1000s to 200s (clang release build).
Differential Revision: https://reviews.llvm.org/D67359
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372990
91177308-0d34-0410-b5e6-
96231b3b80d8
Jakub Kuderski [Thu, 26 Sep 2019 15:20:17 +0000 (15:20 +0000)]
Handle successor's PHI node correctly when flattening CFG merges two if-regions
Summary:
FlattenCFG merges two 'if' basicblocks by inserting one basicblock
to another basicblock. The inserted basicblock can have a successor
that contains a PHI node whoes incoming basicblock is the inserted
basicblock. Since the existing code does not handle it, it becomes
a badref.
if (cond1)
statement
if (cond2)
statement
successor - contains PHI node whose predecessor is cond2
-->
if (cond1 || cond2)
statement
(BB for cond2 was deleted)
successor - contains PHI node whose predecessor is cond2 --> bad ref!
Author: Jaebaek Seo
Reviewers: asbirlea, kuhar, tstellar, chandlerc, davide, dexonsmith
Reviewed By: kuhar
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68032
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372989
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Thu, 26 Sep 2019 15:20:16 +0000 (15:20 +0000)]
Fix typo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372988
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Thu, 26 Sep 2019 15:13:05 +0000 (15:13 +0000)]
[NFC] Rearrange Value::getPointerAlignment
Reviewers: courbet
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67918
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372987
91177308-0d34-0410-b5e6-
96231b3b80d8
Sean Fertile [Thu, 26 Sep 2019 15:12:30 +0000 (15:12 +0000)]
Updated comments in LWZtoc pseudo expansion.
Refined a couple of the comments in the LWZtoc expansion code based on
a post commit review comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372986
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Thu, 26 Sep 2019 15:11:33 +0000 (15:11 +0000)]
[PowerPC] Add missing pattern for VSX Scalar Negative Multiply-Subtract Single Precision
Summary:
This was found during review of https://reviews.llvm.org/D66050.
In the simple test of fdiv, we miss to fold
```
fneg 2, 2
xsmaddasp 3, 2, 0
```
to
```
xsnmsubasp 3, 2, 0
```
We have the patterns for Double Precision and vectors, just missing
Single Precision, the patch add that.
Reviewers: #powerpc, hfinkel, nemanjai, steven.zhang
Reviewed By: #powerpc, steven.zhang
Subscribers: wuzish, hiraditya, kbarton, MaskRay, shchenz, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67595
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372985
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Thu, 26 Sep 2019 14:57:55 +0000 (14:57 +0000)]
build_llvm_package.bat: Bootstrap with VS 2019
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372984
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 13:33:15 +0000 (13:33 +0000)]
[FlattenCFG] Silence static analyzer dyn_cast<BranchInst> null dereference warnings. NFCI.
The static analyzer is warning about a potential null dereferences, but we should be able to use cast<BranchInst> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372977
91177308-0d34-0410-b5e6-
96231b3b80d8
Owen Reynolds [Thu, 26 Sep 2019 12:32:11 +0000 (12:32 +0000)]
[llvm-ar][test] Move MRI tests from "llvm/test/Object/"
llvm/test/Object/ contains tests for the ArchiveWriter library, however
support for MRI scripts is found in llvm-ar and not the library. This
diff moves the MRI related tests and removes those that are duplicates.
Differential Revision: https://reviews.llvm.org/D68038
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372973
91177308-0d34-0410-b5e6-
96231b3b80d8
Bjorn Pettersson [Thu, 26 Sep 2019 12:16:01 +0000 (12:16 +0000)]
[InstCombine] Don't assume CmpInst has been visited in getFlippedStrictnessPredicateAndConstant
Summary:
Removing an assumption (assert) that the CmpInst already has been
simplified in getFlippedStrictnessPredicateAndConstant. Solution is
to simply bail out instead of hitting the assertion. Instead we
assume that any profitable rewrite will happen in the next iteration
of InstCombine.
The reason why we can't assume that the CmpInst already has been
simplified is that the worklist does not guarantee such an ordering.
Solves https://bugs.llvm.org/show_bug.cgi?id=43376
Reviewers: spatel, lebedev.ri
Reviewed By: lebedev.ri
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68022
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372972
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Thu, 26 Sep 2019 11:32:44 +0000 (11:32 +0000)]
[llvm-exegesis][NFC] Remove dead code.
Summary: `hasAliasingImplicitRegistersThrough()` is no longer used.
Reviewers: gchatelet
Subscribers: tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68078
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372968
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 11:30:47 +0000 (11:30 +0000)]
MetadataLoader lazyLoadOneMetadata - silence static analyzer dyn_cast<MDNode> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<MDNode> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372966
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 11:30:35 +0000 (11:30 +0000)]
Remove local shadow constant. NFCI.
ValueTracking.cpp already has a local static MaxDepth = 6 constant - this one seems to have been missed when rL124183 landed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372964
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 11:09:08 +0000 (11:09 +0000)]
[ValueTracking] Silence static analyzer dyn_cast<Operator> null dereference warnings. NFCI.
The static analyzer is warning about a potential null dereferences, but since the pointer is only used in a switch statement for Operator::getOpcode() (with an empty default) then its easiest just to wrap this in a null test as the dyn_cast might return null here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372962
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:56:14 +0000 (10:56 +0000)]
MemorySanitizer - silence static analyzer dyn_cast<> null dereference warnings. NFCI.
The static analyzer is warning about a potential null dereferences, but we should be able to use cast<> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372960
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:56:07 +0000 (10:56 +0000)]
PGOMemOPSizeOpt - silence static analyzer dyn_cast<MemIntrinsic> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<MemIntrinsic> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372959
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:55:57 +0000 (10:55 +0000)]
[BPF] Remove unused variables. NFCI.
Fixes a dyn_cast<> null dereference warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372958
91177308-0d34-0410-b5e6-
96231b3b80d8
Petar Avramovic [Thu, 26 Sep 2019 10:48:07 +0000 (10:48 +0000)]
[MIPS GlobalISel] Lower aggregate structure return arguments
Implement aggregate structure split to simpler types in splitToValueTypes.
splitToValueTypes is used for return values.
According to MipsABIInfo from clang/lib/CodeGen/TargetInfo.cpp,
aggregate structure arguments for O32 always get simplified and thus
will remain unsupported by the MIPS GlobalISel for the time being.
For O32, aggregate structures can be encountered only for complex number
returns e.g. 'complex float' or 'complex double' from <complex.h>.
Differential Revision: https://reviews.llvm.org/D67963
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372957
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:35:19 +0000 (10:35 +0000)]
HexagonAsmParser::ParseDirectiveFalign - silence static analyzer dyn_cast<MCConstantExpr> null dereference warning. NFCI.
The static analyzer is warning about a potential null dereference, but we should be able to use cast<MCConstantExpr> directly and if not assert will fire for us.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372956
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:23:57 +0000 (10:23 +0000)]
[SLPVectorizer][X86] Add SSE common check prefix to let us merge SSE2+SLM checks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372955
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 26 Sep 2019 10:14:38 +0000 (10:14 +0000)]
[CostModel][X86] Fix SLM <2 x i64> icmp costs
SLM is 2 x slower for <2 x i64> comparison ops than other vector types, we should account for this like we do for SLM <2 x i64> add/sub/mul costs.
This should remove some of the SLM codegen diffs in D43582
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372954
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Thu, 26 Sep 2019 08:38:07 +0000 (08:38 +0000)]
[SystemZ] Recognize mnop-mcount in backend
With -pg -mfentry -mnop-mcount, a nop is emitted instead of the call to
fentry.
Review: Ulrich Weigand
https://reviews.llvm.org/D67765
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372950
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 07:27:26 +0000 (07:27 +0000)]
[X86] Remove isCodeGenOnly from (V)ROUND.*_Int and put it on the non _Int form instead.
This matches what's done for VRNDSCALE and most other instructions.
This mainly determines which instruction will be preferred by
disassembler and assembly parser. The printing and encoding
information is the same.
We prefer the _Int form since it uses the VR128 class due to
intrinsic interface. For some of EVEX features like embedded
rounding, we only select from intrinsics today. So there is
only a VR128 version. So making the VR128 version the preferred
is overally consistent.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372947
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikael Holmen [Thu, 26 Sep 2019 06:35:55 +0000 (06:35 +0000)]
[IfConversion] Disallow TBB == FBB for valid triangles
Summary:
Previously the case
EBB
| \_
| |
| TBB
| /
FBB
was treated as a valid triangle also when TBB and FBB was the same basic
block. This could then lead to an invalid CFG when we removed the edge
from EBB to TBB, since that meant we would also remove the edge from EBB
to FBB.
Since TBB == FBB is quite a degenerated case of a triangle, we now
don't treat it as a valid triangle anymore, and thus we will avoid the
trouble with updating the CFG.
Reviewers: efriedma, dmgreen, kparzysz
Reviewed By: efriedma
Subscribers: bjope, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67832
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372943
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 26 Sep 2019 04:42:58 +0000 (04:42 +0000)]
[X86] Mark the EVEX encoded PSADBW instructions as commutable to enable load folding of the other operand.
The SSE and VEX versions are already correct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372941
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Thu, 26 Sep 2019 02:07:51 +0000 (02:07 +0000)]
[ConstantFolding] Use FoldBitCast correctly
Previously we might attempt to use a BitCast to turn bits into vectors of pointers,
but that requires an inttoptr cast to be legal. Add an assertion to detect the formation of illegal bitcast attempts
early (in the tests, we often constant-fold away the result before getting to this assertion check),
while being careful to still handle the early-return conditions without adding extra complexity in the result.
Patch by Jameson Nash <jameson@juliacomputing.com>.
Differential Revision: https://reviews.llvm.org/D65057
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372940
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Thu, 26 Sep 2019 00:58:55 +0000 (00:58 +0000)]
Improve C API support for atomicrmw and cmpxchg.
atomicrmw and cmpxchg have a volatile flag, so allow them to be get and set with LLVM{Get,Set}Volatile. atomicrmw and fence have orderings, so allow them to be get and set with LLVM{Get,Set}Ordering. Add missing LLVMAtomicRMWBinOpFAdd and LLVMAtomicRMWBinOpFSub enum constants. AtomicCmpXchg also has a weak flag, add a getter/setter for that too. Add a getter/setter for the binary-op of an atomicrmw.
atomicrmw and cmpxchg have a volatile flag, so allow it to be set/get with LLVMGetVolatile and LLVMSetVolatile. Add missing LLVMAtomicRMWBinOpFAdd and LLVMAtomicRMWBinOpFSub enum constants. AtomicCmpXchg also has a weak flag, add a getter/setter for that too. Add a getter/setter for the binary-op of an atomicrmw.
Add LLVMIsA## for CatchSwitchInst, CallBrInst and FenceInst, as well as AtomicCmpXchgInst and AtomicRMWInst.
Update llvm-c-test to include atomicrmw and fence, and to copy volatile for the four applicable instructions.
Differential Revision: https://reviews.llvm.org/D67132
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372938
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Raoux [Thu, 26 Sep 2019 00:16:01 +0000 (00:16 +0000)]
[TargetLowering] Make allowsMemoryAccess methode virtual.
Rename old function to explicitly show that it cares only about alignment.
The new allowsMemoryAccess call the function related to alignment by default
and can be overridden by target to inform whether the memory access is legal or
not.
Differential Revision: https://reviews.llvm.org/D67121
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372935
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Clegg [Wed, 25 Sep 2019 23:33:16 +0000 (23:33 +0000)]
[MC][WebAssembly] Error on data symbols in the text section.
Previously we had an assert but this can actually occur in valid user
code so we need to handle this in release builds too.
Differential Revision: https://reviews.llvm.org/D67997
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372934
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 25 Sep 2019 23:25:15 +0000 (23:25 +0000)]
[X86] Use VR512_0_15RegClass intead of VR512RegClass in X86VZeroUpper.
This pass is only concerned with ZMM0-15 and YMM0-15. For YMM
we use VR256 which only contains YMM0-15, but for ZMM we were
using VR512 which contains ZMM0-31. Using VR512_0_15 is more
correct.
Given that the ABI and register allocator will use registers in
order, its unlikely that register from 16-31 would be used
without also using 0-15. So this probably doesn't functionally
matter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372933
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Wed, 25 Sep 2019 23:24:39 +0000 (23:24 +0000)]
[MemorySSA] Avoid adding Phis in the presence of unreachable blocks.
Summary:
If a block has all incoming values with the same MemoryAccess (ignoring
incoming values from unreachable blocks), then use that incoming
MemoryAccess and do not create a Phi in the first place.
Revert IDF work-around added in rL372673; it should not be required unless
the Def inserted is the first in its block.
The patch also cleans up a series of tests, added during the many
iterations on insertDef.
The patch also fixes PR43438.
The same issue that occurs in insertDef with "adding phis, hence the IDF of
Phis is needed", can also occur in fixupDefs: the `getPreviousRecursive`
call only adds Phis walking on the predecessor edges, which means there
may be the case of a Phi added walking the CFG "backwards" which
triggers the needs for an additional Phi in successor blocks.
Such Phis are added during fixupDefs only in the presence of unreachable
blocks.
Hence this highlights the need to avoid adding Phis in blocks with
unreachable predecessors in the first place.
Reviewers: george.burgess.iv
Subscribers: Prazek, sanjoy.google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67995
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372932
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 25 Sep 2019 22:59:59 +0000 (22:59 +0000)]
[InstCombine] foldUnsignedUnderflowCheck(): one last pattern with 'sub' (PR43251)
https://rise4fun.com/Alive/0j9
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372930
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 25 Sep 2019 22:59:48 +0000 (22:59 +0000)]
[NFC][InstCombine] Tests for 'base u<= offset && (base - offset) != 0' pattern (PR43251)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372929
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 25 Sep 2019 22:59:41 +0000 (22:59 +0000)]
[InstSimplify] Handle more 'A </>/>=/<= B &&/|| (A - B) !=/== 0' patterns (PR43251)
https://rise4fun.com/Alive/sl9s
https://rise4fun.com/Alive/2plN
https://bugs.llvm.org/show_bug.cgi?id=43251
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372928
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 25 Sep 2019 22:59:24 +0000 (22:59 +0000)]
[NFC][InstSimplify] More exaustive test coverage for 'A </>/>=/<= B &&/|| (A - B) !=/== 0' pattern (PR43251)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372927
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Wed, 25 Sep 2019 22:35:47 +0000 (22:35 +0000)]
[LICM] Don't verify domtree/loopinfo unless EXPENSIVE_CHECKS is enabled.
For large functions, verifying the whole function after each loop takes
non-linear time.
Differential Revision: https://reviews.llvm.org/D67571
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372924
91177308-0d34-0410-b5e6-
96231b3b80d8