Matt Arsenault [Thu, 19 Sep 2019 01:33:14 +0000 (01:33 +0000)]
GlobalISel: Don't materialize immarg arguments to intrinsics
Encode them directly as an imm argument to G_INTRINSIC*.
Since now intrinsics can now define what parameters are required to be
immediates, avoid using registers for them. Intrinsics could
potentially want a constant that isn't a legal register type. Also,
since G_CONSTANT is subject to CSE and legalization, transforms could
potentially obscure the value (and create extra work for the
selector). The register bank of a G_CONSTANT is also meaningful, so
this could throw off future folding and legalization logic for AMDGPU.
This will be much more convenient to work with than needing to call
getConstantVRegVal and checking if it may have failed for every
constant intrinsic parameter. AMDGPU has quite a lot of intrinsics wth
immarg operands, many of which need inspection during lowering. Having
to find the value in a register is going to add a lot of boilerplate
and waste compile time.
SelectionDAG has always provided TargetConstant for constants which
should not be legalized or materialized in a register. The distinction
between Constant and TargetConstant was somewhat fuzzy, and there was
no automatic way to force usage of TargetConstant for certain
intrinsic parameters. They were both ultimately ConstantSDNode, and it
was inconsistently used. It was quite easy to mis-select an
instruction requiring an immediate. For SelectionDAG, start emitting
TargetConstant for these arguments, and using timm to match them.
Most of the work here is to cleanup target handling of constants. Some
targets process intrinsics through intermediate custom nodes, which
need to preserve TargetConstant usage to match the intrinsic
expectation. Pattern inputs now need to distinguish whether a constant
is merely compatible with an operand or whether it is mandatory.
The GlobalISelEmitter needs to treat timm as a special case of a leaf
node, simlar to MachineBasicBlock operands. This should also enable
handling of patterns for some G_* instructions with immediates, like
G_FENCE or G_EXTRACT.
This does include a workaround for a crash in GlobalISelEmitter when
ARM tries to uses "imm" in an output with a "timm" pattern source.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372285
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Thu, 19 Sep 2019 01:03:39 +0000 (01:03 +0000)]
gn build: Merge r372282
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372283
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Thu, 19 Sep 2019 00:59:27 +0000 (00:59 +0000)]
llvm-reduce: Add pass to reduce instructions
Patch by Diego Treviño!
Differential Revision: https://reviews.llvm.org/D66263
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372282
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Thu, 19 Sep 2019 00:35:32 +0000 (00:35 +0000)]
llvm-reduce: Avoid use-after-free when removing a branch instruction
Found my msan buildbot & pointed out by Nico Weber - thanks Nico!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372280
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Shaposhnikov [Thu, 19 Sep 2019 00:02:12 +0000 (00:02 +0000)]
[Object] Extend MachOUniversalBinary::getObjectForArch
Make the method MachOUniversalBinary::getObjectForArch return MachOUniversalBinary::ObjectForArch
and add helper methods MachOUniversalBinary::getMachOObjectForArch, MachOUniversalBinary::getArchiveForArch
for those who explicitly expect to get a MachOObjectFile or an Archive.
Differential revision: https://reviews.llvm.org/D67700
Test plan: make check-all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372278
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Wed, 18 Sep 2019 23:44:17 +0000 (23:44 +0000)]
[utils] Add minimal support for MIR inputs to update_llc_test_checks.py
update_{llc,mir}_test_checks.py applicability is determined by the
output (assembly or MIR), not the input, which makes
update_llc_test_checks.py the right tool to generate tests that start at
MIR and stop at the final assembly.
This commit adds the minimal support for this path. Main limitation that
remains:
- MIR has to have LLVM IR section, and the CHECK lines will be inserted
into the LLVM IR functions that correspond to the MIR functions.
Running
../utils/update_llc_test_checks.py --llc-binary ./bin/llc
on a slightly modified ../test/CodeGen/X86/bad-tls-fold.mir
produces the following diff:
+# NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+# RUN: llc %s -o - | FileCheck %s
--- |
target triple = "x86_64-unknown-linux-gnu"
@@ -6,17 +7,31 @@
@i = external thread_local global i32
define i32 @or() {
+ ; CHECK-LABEL: or:
+ ; CHECK: # %bb.0: # %entry
+ ; CHECK-NEXT: movq {{.*}}(%rip), %rax
+ ; CHECK-NEXT: orq $7, %rax
+ ; CHECK-NEXT: movq i@{{.*}}(%rip), %rcx
+ ; CHECK-NEXT: orq %rax, %rcx
+ ; CHECK-NEXT: movl %fs:(%rcx), %eax
+ ; CHECK-NEXT: retq
entry:
ret i32 undef
}
-
define i32 @and() {
+ ; CHECK-LABEL: and:
+ ; CHECK: # %bb.0: # %entry
+ ; CHECK-NEXT: movq {{.*}}(%rip), %rax
+ ; CHECK-NEXT: orq $7, %rax
+ ; CHECK-NEXT: movq i@{{.*}}(%rip), %rcx
+ ; CHECK-NEXT: andq %rax, %rcx
+ ; CHECK-NEXT: movl %fs:(%rcx), %eax
+ ; CHECK-NEXT: retq
entry:
ret i32 undef
}
...
(not applied)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372277
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Wed, 18 Sep 2019 23:44:16 +0000 (23:44 +0000)]
[utils] Amend update_llc_test_checks.py to non-llc tooling, NFC
Very minor change aiming to make it easier to extend the script
downstream to support non-llc, but llc-like tools. The main objective is
to decrease the probability of merge conflicts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372276
91177308-0d34-0410-b5e6-
96231b3b80d8
Thomas Lively [Wed, 18 Sep 2019 23:18:16 +0000 (23:18 +0000)]
[WebAssembly] Restore defaults for stores per memop
Summary:
Large slowdowns were observed in Rust due to many small, constant
sized copies in conjunction with poorly-optimized memory.copy
implementations. Since memory.copy cannot be expected to be inlined
efficiently by engines at this time, stop using it for the smallest
copies. We continue to lower all memcpy intrinsics to memory.copy,
though.
Reviewers: aheejin, alexcrichton
Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, JDevlieghere, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67639
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372275
91177308-0d34-0410-b5e6-
96231b3b80d8
DeForest Richards [Wed, 18 Sep 2019 23:04:31 +0000 (23:04 +0000)]
[Docs] Moves topics to new categories
This commit moves several topics to new categories. It also removes a few duplicate links in Subsystem Documentation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372274
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Wed, 18 Sep 2019 22:42:25 +0000 (22:42 +0000)]
[AArch64][GlobalISel] Support lowering musttail calls
Since we now lower most tail calls, it makes sense to support musttail.
Instead of always falling back to SelectionDAG, only fall back when a musttail
call was not able to be emitted as a tail call. Once we can handle most
incoming and outgoing arguments, we can change this to a `report_fatal_error`
like in ISelLowering.
Remove the assert that we don't have varargs and a musttail, and replace it
with a return false. Implementing this requires that we implement
`saveVarArgRegisters` from AArch64ISelLowering, which is an entirely different
patch.
Add GlobalISel lines to vararg-tallcall.ll to make sure that we produce correct
code. Right now we only fall back, but eventually this will be relevant.
Differential Revision: https://reviews.llvm.org/D67681
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372273
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Wed, 18 Sep 2019 22:38:56 +0000 (22:38 +0000)]
Remove the obsolete BlockByRefStruct flag from LLVM IR
DIFlagBlockByRefStruct is an unused DIFlag that originally was used by
clang to express (Objective-)C block captures in debug info. For the
last year Clang has been emitting complex DIExpressions to describe
block captures instead, which makes all the code supporting this flag
redundant.
This patch removes the flag and all supporting "dead" code, so we can
reuse the bit for something else in the future.
Since this only affects debug info generated by Clang with the block
extension this mostly affects Apple platforms and I don't have any
bitcode compatibility concerns for removing this. The Verifier will
reject debug info that uses the bit and thus degrade gracefully when
LTO'ing older bitcode with a newer compiler.
rdar://problem/
44304813
Differential Revision: https://reviews.llvm.org/D67453
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372272
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 18 Sep 2019 22:38:05 +0000 (22:38 +0000)]
llvm-reduce: Remove inaccurate doxy comment about a return that isn't returned
Addressing post-commit code review feedback from Dávid Bolvanský -
thanks!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372271
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 18 Sep 2019 22:30:25 +0000 (22:30 +0000)]
llvm-reduce: Fix inconsistencies between int/unsigned usage (standardize on int)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372270
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Wed, 18 Sep 2019 22:21:52 +0000 (22:21 +0000)]
gn build: Merge r372267
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372268
91177308-0d34-0410-b5e6-
96231b3b80d8
Amy Huang [Wed, 18 Sep 2019 22:15:58 +0000 (22:15 +0000)]
Add AutoUpgrade function to add new address space datalayout string to existing datalayouts.
Summary:
Add function to AutoUpgrade to change the datalayout of old X86 datalayout strings.
This adds "-p270:32:32-p271:32:32-p272:64:64" to X86 datalayouts that are otherwise valid
and don't already contain it.
This also removes the compatibility changes in https://reviews.llvm.org/D66843.
Datalayout change in https://reviews.llvm.org/D64931.
Reviewers: rnk, echristo
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67631
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372267
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Wed, 18 Sep 2019 21:49:36 +0000 (21:49 +0000)]
gn build: Merge r372264
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372265
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 18 Sep 2019 21:45:05 +0000 (21:45 +0000)]
llvm-reduce: Add pass to reduce basic blocks
Patch by Diego Treviño!
Differential Revision: https://reviews.llvm.org/D66320
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372264
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 21:04:39 +0000 (21:04 +0000)]
[SimplifyCFG] mergeConditionalStoreToAddress(): try to pacify MSAN
MSAN bot complains that there is use-of-uninitialized-value
of this FreeStores later in IsWorthwhile().
Perhaps FreeStores needs to be stored in a vector?
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372262
91177308-0d34-0410-b5e6-
96231b3b80d8
Dimitry Andric [Wed, 18 Sep 2019 20:57:45 +0000 (20:57 +0000)]
On PowerPC, Secure-PLT by default for FreeBSD 13 and higher
Summary:
In https://svnweb.freebsd.org/changeset/base/349351, FreeBSD 13 and
higher transitioned to Secure-PLT for PowerPC. This part contains the
changes in llvm's PPC subtarget.
Reviewers: emaste, jhibbits, hfinkel
Reviewed By: jhibbits
Subscribers: wuzish, nemanjai, krytarowski, kbarton, MaskRay, jsji, shchenz, steven.zhang, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67118
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372260
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 20:48:27 +0000 (20:48 +0000)]
[DAGCombine][ARM][X86] (sub Carry, X) -> (addcarry (sub 0, X), 0, Carry) fold
Summary:
`DAGCombiner::visitADDLikeCommutative()` already has a sibling fold:
`(add X, Carry) -> (addcarry X, 0, Carry)`
This fold, as suggested by @efriedma, helps recover from //some//
of the regressions of D62266
Reviewers: efriedma, deadalnix
Subscribers: javed.absar, kristof.beyls, llvm-commits, efriedma
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D62392
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372259
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 20:48:05 +0000 (20:48 +0000)]
[CodeGen][X86][NFC] Tests for (sub Carry, X) -> (addcarry (sub 0, X), 0, Carry) fold (D62392)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372258
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 20:10:07 +0000 (20:10 +0000)]
[InstCombine] foldUnsignedUnderflowCheck(): handle last few cases (PR43251)
Summary:
I don't have a direct motivational case for this,
but it would be good to have this for completeness/symmetry.
This pattern is basically the motivational pattern from
https://bugs.llvm.org/show_bug.cgi?id=43251
but with different predicate that requires that the offset is non-zero.
The completeness bit comes from the fact that a similar pattern (offset != zero)
will be needed for https://bugs.llvm.org/show_bug.cgi?id=43259,
so it'd seem to be good to not overlook very similar patterns..
Proofs: https://rise4fun.com/Alive/21b
Also, there is something odd with `isKnownNonZero()`, if the non-zero
knowledge was specified as an assumption, it didn't pick it up (PR43267)
With this, i see no other missing folds for
https://bugs.llvm.org/show_bug.cgi?id=43251
Reviewers: spatel, nikic, xbolva00
Reviewed By: spatel
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67412
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372257
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Wed, 18 Sep 2019 19:56:55 +0000 (19:56 +0000)]
[AArch64] Don't implicitly enable global isel on Darwin if code-model==large.
Summary:
AArch64 GlobalISel doesn't support MachO's large code model, so this patch
adds a check for that combination before implicitly enabling it.
Reviewers: paquette
Subscribers: kristof.beyls, ributzka, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67724
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372256
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 19:46:57 +0000 (19:46 +0000)]
[SimplifyCFG] mergeConditionalStoreToAddress(): consider cost, not instruction count
Summary:
As it can be see in the changed test, while `div` is really costly,
we were speculating it. This does not seem correct.
Also, the old code would run for every single insturuction in BB,
instead of eagerly bailing out as soon as there are too many instructions.
This function still has a problem that `PHINodeFoldingThreshold` is
per-basic-block, while it should be for all the basic blocks.
Reviewers: efriedma, craig.topper, dmgreen, jmolloy
Reviewed By: jmolloy
Subscribers: xbolva00, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67315
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372255
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 19:34:41 +0000 (19:34 +0000)]
[MIPS] For vectors, select `add %x, C` as `sub %x, -C` if it results in inline immediate
Summary:
As discussed in https://reviews.llvm.org/D62341#
1515637,
for MIPS `add %x, -1` isn't optimal. Unlike X86 there
are no fastpaths to matearialize such `-1`/`1` vector constants,
and `sub %x, 1` results in better codegen,
so undo canonicalization
Reviewers: atanasyan, Petar.Avramovic, RKSimon
Reviewed By: atanasyan
Subscribers: sdardis, arichardson, hiraditya, jrtc27, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D66805
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372254
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 19:34:24 +0000 (19:34 +0000)]
[CodeGen][MIPS][NFC] Some standalone tests for D66805 "or vectors, select `add %x, C` as `sub %x, -C` if it results in inline immediate"
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372253
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Wed, 18 Sep 2019 19:19:47 +0000 (19:19 +0000)]
[mips] Expand 'lw/sw' instructions for 32-bit GOT
In case of using 32-bit GOT access to the table requires two instructions
with attached %got_hi and %got_lo relocations. This patch implements
correct expansion of 'lw/sw' instructions in that case.
Differential Revision: https://reviews.llvm.org/D67705
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372251
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 18:38:40 +0000 (18:38 +0000)]
[InstCombine] dropRedundantMaskingOfLeftShiftInput(): some cleanup before upcoming patch
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372245
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Wed, 18 Sep 2019 18:38:32 +0000 (18:38 +0000)]
[NFC][InstCombine] More tests for PR42563 "Dropping pointless masking before left shift"
For patterns c/d/e we too can deal with the pattern even if we can't
just drop the mask, we can just apply it afterwars:
https://rise4fun.com/Alive/gslRa
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372244
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 18 Sep 2019 18:14:42 +0000 (18:14 +0000)]
Fix compile-time regression caused by rL371928
Summary:
Also fixup rL371928 for cases that occur on our out-of-tree backend
There were still quite a few intermediate APInts and this caused the
compile time of MCCodeEmitter for our target to jump from 16s up to
~5m40s. This patch, brings it back down to ~17s by eliminating pretty
much all of them using two new APInt functions (extractBitsAsZExtValue(),
insertBits() but with a uint64_t). The exact conditions for eliminating
them is that the field extracted/inserted must be <=64-bit which is
almost always true.
Note: The two new APInt API's assume that APInt::WordSize is at least
64-bit because that means they touch at most 2 APInt words. They
statically assert that's true. It seems very unlikely that someone
is patching it to be smaller so this should be fine.
Reviewers: jmolloy
Reviewed By: jmolloy
Subscribers: hiraditya, dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67686
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372243
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Wed, 18 Sep 2019 18:04:45 +0000 (18:04 +0000)]
[DDG] Break a cyclic dependency from Analysis to ScalarOpts
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372240
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Wed, 18 Sep 2019 17:48:49 +0000 (17:48 +0000)]
gn build: Merge r372238
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372239
91177308-0d34-0410-b5e6-
96231b3b80d8
Bardia Mahjour [Wed, 18 Sep 2019 17:43:45 +0000 (17:43 +0000)]
Data Dependence Graph Basics
Summary:
This is the first patch in a series of patches that will implement data dependence graph in LLVM. Many of the ideas used in this implementation are based on the following paper:
D. J. Kuck, R. H. Kuhn, D. A. Padua, B. Leasure, and M. Wolfe (1981). DEPENDENCE GRAPHS AND COMPILER OPTIMIZATIONS.
This patch contains support for a basic DDGs containing only atomic nodes (one node for each instruction). The edges are two fold: def-use edges and memory-dependence edges.
The implementation takes a list of basic-blocks and only considers dependencies among instructions in those basic blocks. Any dependencies coming into or going out of instructions that do not belong to those basic blocks are ignored.
The algorithm for building the graph involves the following steps in order:
1. For each instruction in the range of basic blocks to consider, create an atomic node in the resulting graph.
2. For each node in the graph establish def-use edges to/from other nodes in the graph.
3. For each pair of nodes containing memory instruction(s) create memory edges between them. This part of the algorithm goes through the instructions in lexicographical order and creates edges in reverse order if the sink of the dependence occurs before the source of it.
Authored By: bmahjour
Reviewer: Meinersbur, fhahn, myhsu, xtian, dmgreen, kbarton, jdoerfert
Reviewed By: Meinersbur, fhahn, myhsu
Subscribers: ychen, arphaman, simoll, a.elovikov, mgorny, hiraditya, jfb, wuzish, llvm-commits, jsji, Whitney, etiotto
Tag: #llvm
Differential Revision: https://reviews.llvm.org/D65350
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372238
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 18 Sep 2019 17:27:02 +0000 (17:27 +0000)]
[InstSimplify] add tests for fma/fmuladd; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372236
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Wed, 18 Sep 2019 16:19:40 +0000 (16:19 +0000)]
[Alignment][NFC] Align(1) to Align::None() conversions
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/D67715
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372234
91177308-0d34-0410-b5e6-
96231b3b80d8
Wei Mi [Wed, 18 Sep 2019 16:06:28 +0000 (16:06 +0000)]
[SampleFDO] Minimize performance impact when profile-sample-accurate
is enabled.
We can save memory and reduce binary size significantly by enabling
ProfileSampleAccurate. However when ProfileSampleAccurate is true,
function without sample will be regarded as cold and this could
potentially cause performance regression.
To minimize the potential negative performance impact, we want to be
a little conservative here saying if a function shows up in the profile,
no matter as outline instance, inline instance or call targets, treat
the function as not being cold. This will handle the cases such as most
callsites of a function are inlined in sampled binary (thus outline copy
don't get any sample) but not inlined in current build (because of source
code drift, imprecise debug information, or the callsites are all cold
individually but not cold accumulatively...), so that the outline function
showing up as cold in sampled binary will actually not be cold after current
build. After the change, such function will be treated as not cold even
profile-sample-accurate is enabled.
At the same time we lower the hot criteria of callsiteIsHot check when
profile-sample-accurate is enabled. callsiteIsHot is used to determined
whether a callsite is hot and qualified for early inlining. When
profile-sample-accurate is enabled, functions without profile will be
regarded as cold and much less inlining will happen in CGSCC inlining pass,
so we can worry less about size increase and be aggressive to allow more
early inlining to happen for warm callsites and it is helpful for performance
overall.
Differential Revision: https://reviews.llvm.org/D67561
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372232
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Wed, 18 Sep 2019 15:49:49 +0000 (15:49 +0000)]
[Alignment][NFC] Remove LogAlignment functions
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: arsenm, sdardis, nemanjai, jvesely, nhaehnle, hiraditya, kbarton, jrtc27, MaskRay, atanasyan, jsji, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67620
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372231
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Wed, 18 Sep 2019 15:40:20 +0000 (15:40 +0000)]
[Alignment][NFC] Use Align::None instead of 1
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: sdardis, nemanjai, hiraditya, kbarton, jrtc27, MaskRay, atanasyan, jsji, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67704
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372230
91177308-0d34-0410-b5e6-
96231b3b80d8
Krasimir Georgiev [Wed, 18 Sep 2019 14:42:09 +0000 (14:42 +0000)]
Revert "[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize"
Summary:
This reverts commit r372204.
This change causes build bot failures under msan:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/35236/steps/check-llvm%20msan/logs/stdio:
```
FAIL: LLVM :: DebugInfo/AArch64/asan-stack-vars.mir (19531 of 33579)
******************** TEST 'LLVM :: DebugInfo/AArch64/asan-stack-vars.mir' FAILED ********************
Script:
--
: 'RUN: at line 1'; /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llc -O0 -start-before=livedebugvalues -filetype=obj -o - /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llvm-dwarfdump -v - | /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir
--
Exit Code: 2
Command Output (stderr):
--
==62894==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0xdfcafb in llvm::AArch64FrameLowering::resolveFrameOffsetReference(llvm::MachineFunction const&, int, bool, unsigned int&, bool, bool) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1658:3
#1 0xdfae8a in resolveFrameIndexReference /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1580:10
#2 0xdfae8a in llvm::AArch64FrameLowering::getFrameIndexReference(llvm::MachineFunction const&, int, unsigned int&) const /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1536
#3 0x46642c1 in (anonymous namespace)::LiveDebugValues::extractSpillBaseRegAndOffset(llvm::MachineInstr const&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:582:21
#4 0x4647cb3 in transferSpillOrRestoreInst /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:883:11
#5 0x4647cb3 in process /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1079
#6 0x4647cb3 in (anonymous namespace)::LiveDebugValues::ExtendRanges(llvm::MachineFunction&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1361
#7 0x463ac0e in (anonymous namespace)::LiveDebugValues::runOnMachineFunction(llvm::MachineFunction&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/LiveDebugValues.cpp:1415:18
#8 0x4854ef0 in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:73:13
#9 0x53b0b01 in llvm::FPPassManager::runOnFunction(llvm::Function&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1648:27
#10 0x53b15f6 in llvm::FPPassManager::runOnModule(llvm::Module&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1685:16
#11 0x53b298d in runOnModule /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1750:27
#12 0x53b298d in llvm::legacy::PassManagerImpl::run(llvm::Module&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1863
#13 0x905f21 in compileModule(char**, llvm::LLVMContext&) /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/tools/llc/llc.cpp:601:8
#14 0x8fdc4e in main /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/tools/llc/llc.cpp:355:22
#15 0x7f67673632e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
#16 0x882369 in _start (/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/llc+0x882369)
MemorySanitizer: use-of-uninitialized-value /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp:1658:3 in llvm::AArch64FrameLowering::resolveFrameOffsetReference(llvm::MachineFunction const&, int, bool, unsigned int&, bool, bool) const
Exiting
error: -: The file was not recognized as a valid object file
FileCheck error: '-' is empty.
FileCheck command line: /b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/FileCheck /b/sanitizer-x86_64-linux-fast/build/llvm-project/llvm/test/DebugInfo/AArch64/asan-stack-vars.mir
```
Reviewers: bkramer
Reviewed By: bkramer
Subscribers: sdardis, aprantl, kristof.beyls, jrtc27, atanasyan, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67710
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372228
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 18 Sep 2019 14:33:40 +0000 (14:33 +0000)]
[SimplifyLibCalls] fix crash with empty function name (PR43347)
...and improve some variable names while here.
https://bugs.llvm.org/show_bug.cgi?id=43347
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372227
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Wed, 18 Sep 2019 14:12:59 +0000 (14:12 +0000)]
Follow-up to r372209: Use single quotes for host_ldflags in the lit config
HOST_LDFLAGS is now using double quotes, and that would break the lit
config file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372226
91177308-0d34-0410-b5e6-
96231b3b80d8
Jay Foad [Wed, 18 Sep 2019 13:40:22 +0000 (13:40 +0000)]
[SDA] Don't stop divergence propagation at the IPD.
Summary:
This fixes B42473 and B42706.
This patch makes the SDA propagate branch divergence until the end of the RPO traversal. Before, the SyncDependenceAnalysis propagated divergence only until the IPD in rpo order. RPO is incompatible with post dominance in the presence of loops. This made the SDA crash because blocks were missed in the propagation.
Reviewers: foad, nhaehnle
Reviewed By: foad
Subscribers: jvesely, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D65274
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372223
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Wed, 18 Sep 2019 12:24:57 +0000 (12:24 +0000)]
[mips] Pass "xgot" flag as a subtarget feature
We need "xgot" flag in the MipsAsmParser to implement correct expansion
of some pseudo instructions in case of using 32-bit GOT (XGOT).
MipsAsmParser does not have reference to MipsSubtarget but has a
reference to "feature bit set".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372220
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Wed, 18 Sep 2019 12:24:30 +0000 (12:24 +0000)]
[mips] Mark tests for lw/sw expansion in PIC by a separate "check prefix". NFC
That simplify adding XGOT tests later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372219
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Wed, 18 Sep 2019 12:24:23 +0000 (12:24 +0000)]
[mips] Reduce code duplication in the `loadAndAddSymbolAddress`. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372218
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 18 Sep 2019 11:22:22 +0000 (11:22 +0000)]
Fix -Wdocumentation warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372215
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 18 Sep 2019 10:41:20 +0000 (10:41 +0000)]
Fix -Wdocumentation "empty paragraph passed to '\brief'" warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372214
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 18 Sep 2019 10:39:16 +0000 (10:39 +0000)]
Fix -Wdocumentation "@returns in a void function" warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372212
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 18 Sep 2019 10:37:53 +0000 (10:37 +0000)]
Fix -Wdocumentation "Unknown param" warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372211
91177308-0d34-0410-b5e6-
96231b3b80d8
Russell Gallop [Wed, 18 Sep 2019 09:43:13 +0000 (09:43 +0000)]
[cmake] Changes to get Windows self-host working with PGO
Fixes quoting of profile arguments to work on Windows
Suppresses adding profile arguments to linker flags when using lld-link
Avoids -fprofile-instr-use being added to rc.exe flags
Removes duplicated adding of -fprofile-instr-use to linker flags (since
r355541)
Move handling LLVM_PROFDATA_FILE to HandleLLVMOptions.cmake
Differential Revision: https://reviews.llvm.org/D62063
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372209
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Renouf [Wed, 18 Sep 2019 09:32:06 +0000 (09:32 +0000)]
[AMDGPU] Allow FP inline constant in v_madak_f16 and v_fmaak_f16
Differential Revision: https://reviews.llvm.org/D67680
Change-Id: Ic38f47cb2079c2c1070a441b5943854844d80a7c
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372208
91177308-0d34-0410-b5e6-
96231b3b80d8
Guillaume Chatelet [Wed, 18 Sep 2019 09:24:40 +0000 (09:24 +0000)]
[Alignment] Add a None() member function
Summary:
This will allow writing `if(A != llvm::Align::None())` which is clearer than `if(A > llvm::Align(1))`
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: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67697
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372207
91177308-0d34-0410-b5e6-
96231b3b80d8
Sander de Smalen [Wed, 18 Sep 2019 09:02:44 +0000 (09:02 +0000)]
[AArch64][DebugInfo] Do not recompute CalleeSavedStackSize
This patch fixes a bug exposed by D65653 where a subsequent invocation
of `determineCalleeSaves` ends up with a different size for the callee
save area, leading to different frame-offsets in debug information.
In the invocation by PEI, `determineCalleeSaves` tries to determine
whether it needs to spill an extra callee-saved register to get an
emergency spill slot. To do this, it calls 'estimateStackSize' and
manually adds the size of the callee-saves to this. PEI then allocates
the spill objects for the callee saves and the remaining frame layout
is calculated accordingly.
A second invocation in LiveDebugValues causes estimateStackSize to return
the size of the stack frame including the callee-saves. Given that the
size of the callee-saves is added to this, these callee-saves are counted
twice, which leads `determineCalleeSaves` to believe the stack has
become big enough to require spilling an extra callee-save as emergency
spillslot. It then updates CalleeSavedStackSize with a larger value.
Since CalleeSavedStackSize is used in the calculation of the frame
offset in getFrameIndexReference, this leads to incorrect offsets for
variables/locals when this information is recalculated after PEI.
Reviewers: omjavaid, eli.friedman, thegameg, efriedma
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D66935
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372204
91177308-0d34-0410-b5e6-
96231b3b80d8
Ilya Biryukov [Wed, 18 Sep 2019 08:47:09 +0000 (08:47 +0000)]
Revert "r372201: [Support] Replace function with function_ref in writeFileAtomically. NFC"
function_ref causes calls to the function to be ambiguous, breaking
compilation.
Reverting for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372202
91177308-0d34-0410-b5e6-
96231b3b80d8
Ilya Biryukov [Wed, 18 Sep 2019 08:31:28 +0000 (08:31 +0000)]
[Support] Replace function with function_ref in writeFileAtomically. NFC
Summary:
The latter is slightly more efficient and communicates the intent of the
API: writeFileAtomically does not own or copy the callback, it merely
calls it at some point.
Reviewers: jkorous
Reviewed By: jkorous
Subscribers: hiraditya, dexonsmith, jfb, llvm-commits, cfe-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67584
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372201
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 18 Sep 2019 06:06:11 +0000 (06:06 +0000)]
[X86] Break non-power of 2 vXi1 vectors into scalars for argument passing with avx512.
This generates worse code, but matches what is done for avx2 and
prevents crashes when more arguments are passed than we have
registers for.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372200
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 18 Sep 2019 06:06:07 +0000 (06:06 +0000)]
[X86] Add test case for passing a v17i1 vector with avx512
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372199
91177308-0d34-0410-b5e6-
96231b3b80d8
Yonghong Song [Wed, 18 Sep 2019 03:49:07 +0000 (03:49 +0000)]
[BPF] Permit all user instructed offset relocatiions
Currently, not all user specified relocations
(with clang intrinsic __builtin_preserve_access_index())
will turn into relocations.
In the current implementation, a __builtin_preserve_access_index()
chain is turned into relocation only if the result of the clang
intrinsic is used in a function call or a nonzero offset computation
of getelementptr. For all other cases, the relocatiion request
is ignored and the __builtin_preserve_access_index() is turned
into regular getelementptr instructions.
The main reason is to mimic bpf_probe_read() requirement.
But there are other use cases where relocatable offset is
generated but not used for bpf_probe_read(). This patch
relaxed previous constraints when to generate relocations.
Now, all user __builtin_preserve_access_index() will have
relocations generated.
Differential Revision: https://reviews.llvm.org/D67688
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372198
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 18 Sep 2019 01:57:46 +0000 (01:57 +0000)]
[X86] Prevent assertion when calling a function that returns double with -mno-sse2 on x86-64.
As seen in the most recent updates to PR10498
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372197
91177308-0d34-0410-b5e6-
96231b3b80d8
Francis Visoiu Mistrih [Wed, 18 Sep 2019 01:04:45 +0000 (01:04 +0000)]
[Remarks] Allow the RemarkStreamer to be used directly with a stream
The filename in the RemarkStreamer should be optional to allow clients
to stream remarks to memory or to existing streams.
This introduces a new overload of `setupOptimizationRemarks`, and avoids
enforcing the presence of a filename at different places.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372195
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Tue, 17 Sep 2019 23:12:13 +0000 (23:12 +0000)]
[PGO] Change hardcoded thresholds for cold/inlinehint to use summary
Summary:
The PGO counter reading will add cold and inlinehint (hot) attributes
to functions that are very cold or hot. This was using hardcoded
thresholds, instead of the profile summary cutoffs which are used in
other hot/cold detection and are more dynamic and adaptable. Switch
to using the summary-based cold/hot detection.
The hardcoded limits were causing some code that had a medium level of
hotness (per the summary) to be incorrectly marked with a cold
attribute, blocking inlining.
Reviewers: davidxl
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67673
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372189
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Tue, 17 Sep 2019 21:42:38 +0000 (21:42 +0000)]
[ARM] VFPv2 only supports 16 D registers.
r361845 changed the way we handle "D16" vs. "D32" targets; there used to
be a negative "d16" which removed instructions from the instruction set,
and now there's a "d32" feature which adds instructions to the
instruction set. This is good, but there was an oversight in the
implementation: the behavior of VFPv2 was changed. In particular, the
"vfp2" feature was changed to imply "d32". This is wrong: VFPv2 only
supports 16 D registers.
In practice, this means if you specify -mfpu=vfpv2, the compiler will
generate illegal instructions.
This patch gets rid of "vfp2d16" and "vfp2d16sp", and fixes "vfp2" and
"vfp2sp" so they don't imply "d32".
Differential Revision: https://reviews.llvm.org/D67375
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372186
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Tue, 17 Sep 2019 21:10:49 +0000 (21:10 +0000)]
[PGO] Don't use comdat groups for counters & data on COFF
For COFF, a comdat group is really a symbol marked
IMAGE_COMDAT_SELECT_ANY and zero or more other symbols marked
IMAGE_COMDAT_SELECT_ASSOCIATIVE. Typically the associative symbols in
the group are not external and are not referenced by other TUs, they are
things like debug info, C++ dynamic initializers, or other section
registration schemes. The Visual C++ linker reports a duplicate symbol
error for symbols marked IMAGE_COMDAT_SELECT_ASSOCIATIVE even if they
would be discarded after handling the leader symbol.
Fixes coverage-inline.cpp in check-profile after r372020.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372182
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Tue, 17 Sep 2019 21:09:41 +0000 (21:09 +0000)]
Reland "[docs][Bugpoint]Add notes about multiple crashes"
Fix the warning.
Bugpoint.rst:124:Mismatch: both interpreted text role prefix and
reference suffix.
Note that the line no here is wrong and misleading,
the problem is in line 128, not 124.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372181
91177308-0d34-0410-b5e6-
96231b3b80d8
Greg Clayton [Tue, 17 Sep 2019 20:31:01 +0000 (20:31 +0000)]
Fix buildbots.
MSVC doesn't correctly capture constexpr in lambdas, and other builds warn if you do, others will error out if you do. Avoid lambdas.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372179
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Tue, 17 Sep 2019 20:24:23 +0000 (20:24 +0000)]
[AArch64][GlobalISel] Support -tailcallopt
This adds support for `-tailcallopt` tail calls to CallLowering. This
piggy-backs off the changes from D67577, since doing it without a bit of
refactoring gets extremely ugly.
Support is basically ported from AArch64ISelLowering. The main difference here
is that tail calls in `-tailcallopt` change the ABI, so there's some extra
bookkeeping for the stack.
Show that we are correctly lowering these by updating tail-call.ll.
Also show that we don't do anything strange in general by updating
fastcc-reserved.ll, which passes `-tailcallopt`, but doesn't emit any tail
calls.
Differential Revision: https://reviews.llvm.org/D67580
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372177
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Tue, 17 Sep 2019 19:41:36 +0000 (19:41 +0000)]
gn build: Merge r372168
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372173
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Tue, 17 Sep 2019 19:37:07 +0000 (19:37 +0000)]
AArch64CallLowering::lowerCall(): fix build by not passing InArgs into lowerTailCall()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372172
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Tue, 17 Sep 2019 19:32:26 +0000 (19:32 +0000)]
[NFC][InstCombine] dropRedundantMaskingOfLeftShiftInput(): some NFC diff shaving
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372171
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Lebedev [Tue, 17 Sep 2019 19:32:11 +0000 (19:32 +0000)]
[NFC][InstCombine] More tests for "Dropping pointless masking before left shift" (PR42563)
While we already fold that pattern if the sum of shift amounts is not
smaller than bitwidth, there's painfully obvious generalization:
https://rise4fun.com/Alive/F5R
I.e. the "sub of shift amounts" tells us how many bits will be left
in the output. If it's less than bitwidth, we simply need to
apply a mask, which is constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372170
91177308-0d34-0410-b5e6-
96231b3b80d8
Bardia Mahjour [Tue, 17 Sep 2019 19:22:01 +0000 (19:22 +0000)]
Revert "Data Dependence Graph Basics"
This reverts commit
c98ec60993a7aa65073692b62f6d728b36e68ccd, which broke the sphinx-docs build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372168
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 17 Sep 2019 19:16:00 +0000 (19:16 +0000)]
NVPTXAsmPrinter - Don't dereference a dyn_cast result. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372166
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 17 Sep 2019 19:14:11 +0000 (19:14 +0000)]
WasmEmitter - Don't dereference a dyn_cast result. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372165
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Tue, 17 Sep 2019 19:08:44 +0000 (19:08 +0000)]
[AArch64][GlobalISel][NFC] Refactor tail call lowering code
When you begin implementing -tailcallopt, this gets somewhat hairy. Refactor
the call lowering code so that the tail call lowering stuff gets its own
function.
Differential Revision: https://reviews.llvm.org/D67577
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372164
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Tue, 17 Sep 2019 19:00:41 +0000 (19:00 +0000)]
gn build: Merge r372162
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372163
91177308-0d34-0410-b5e6-
96231b3b80d8
Bardia Mahjour [Tue, 17 Sep 2019 18:55:44 +0000 (18:55 +0000)]
Data Dependence Graph Basics
Summary:
This is the first patch in a series of patches that will implement data dependence graph in LLVM. Many of the ideas used in this implementation are based on the following paper:
D. J. Kuck, R. H. Kuhn, D. A. Padua, B. Leasure, and M. Wolfe (1981). DEPENDENCE GRAPHS AND COMPILER OPTIMIZATIONS.
This patch contains support for a basic DDGs containing only atomic nodes (one node for each instruction). The edges are two fold: def-use edges and memory-dependence edges.
The implementation takes a list of basic-blocks and only considers dependencies among instructions in those basic blocks. Any dependencies coming into or going out of instructions that do not belong to those basic blocks are ignored.
The algorithm for building the graph involves the following steps in order:
1. For each instruction in the range of basic blocks to consider, create an atomic node in the resulting graph.
2. For each node in the graph establish def-use edges to/from other nodes in the graph.
3. For each pair of nodes containing memory instruction(s) create memory edges between them. This part of the algorithm goes through the instructions in lexicographical order and creates edges in reverse order if the sink of the dependence occurs before the source of it.
Authored By: bmahjour
Reviewer: Meinersbur, fhahn, myhsu, xtian, dmgreen, kbarton, jdoerfert
Reviewed By: Meinersbur, fhahn, myhsu
Subscribers: ychen, arphaman, simoll, a.elovikov, mgorny, hiraditya, jfb, wuzish, llvm-commits, jsji, Whitney, etiotto
Tag: #llvm
Differential Revision: https://reviews.llvm.org/D65350
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372162
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Tue, 17 Sep 2019 18:39:04 +0000 (18:39 +0000)]
[docs][Bugpoint] Revert
5584ead50 a5aa3353
No sure why there are still warnings, revert while I investigate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372161
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Tue, 17 Sep 2019 18:23:06 +0000 (18:23 +0000)]
[docs][Bugpoint] Fix build break.
Bugpoint.rst:124: WARNING: Mismatch: both interpreted text role prefix
and reference suffix.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372160
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 17 Sep 2019 18:19:06 +0000 (18:19 +0000)]
[X86] Use APInt::operator<<= and APInt::lshrInPlace. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372159
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 17 Sep 2019 18:19:02 +0000 (18:19 +0000)]
[SimplifyDemandedBits] Use APInt::intersects to instead of ANDing and comparing to 0 separately. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372158
91177308-0d34-0410-b5e6-
96231b3b80d8
Jinsong Ji [Tue, 17 Sep 2019 18:10:09 +0000 (18:10 +0000)]
[docs][Bugpoint]Add notes about multiple crashes
Summary:
When reducing case for a CodeGenCrash, bugpoint may generate a new
reduced
testcase that exposes/causes another crash or break something due to
limitation.
Bugpoint does not distiguish different crashes currently,
so when this happens, bugpoint will go on reducing for the new crash,
or just abort, we can't get the case reduced for the origial crash.
An advice is added into usage doc to connect to recommend checking error
message with scripts and `-compile-command`.
Reviewers: modocache, bogner, sebpop, reames, vsk, MatzeB
Reviewed By: vsk
Subscribers: mehdi_amini, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D66832
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372157
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 17 Sep 2019 18:02:56 +0000 (18:02 +0000)]
[X86] Simplify b2b KSHIFTL+KSHIFTR using demanded elts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372155
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 17 Sep 2019 18:02:52 +0000 (18:02 +0000)]
[X86] Call SimplifyDemandedVectorElts on KSHIFTL/KSHIFTR nodes during DAG combine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372154
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 17 Sep 2019 18:02:46 +0000 (18:02 +0000)]
[X86] Simplify some code in LowerBUILD_VECTORvXi1. NFCI
The case were Immediate is 0 and HasConstElts is true should never
happen since that would mean the constant elts were all zero. But
we check for all zero build vector earlier. So just use HasConstElts
and blindly take Immediate without checking if its 0.
Move the code that bitcasts and extract the immediate into the
the HasConstElts case since the other code just creates an undef
with the right type. No casting needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372153
91177308-0d34-0410-b5e6-
96231b3b80d8
Stanislav Mekhanoshin [Tue, 17 Sep 2019 17:56:13 +0000 (17:56 +0000)]
[AMDGPU] Added MI bit IsDOT
NFC, needed for future commit.
Differential Revision: https://reviews.llvm.org/D67669
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372151
91177308-0d34-0410-b5e6-
96231b3b80d8
GN Sync Bot [Tue, 17 Sep 2019 17:51:27 +0000 (17:51 +0000)]
gn build: Merge r372149
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372150
91177308-0d34-0410-b5e6-
96231b3b80d8
Greg Clayton [Tue, 17 Sep 2019 17:46:13 +0000 (17:46 +0000)]
GSYM: Add the llvm::gsym::Header header class with tests
This patch adds the llvm::gsym::Header class which appears at the start of a stand alone GSYM file, or in the first bytes of the GSYM data in a GSYM section within a file. Added encode and decode methods with full error handling and full tests.
Differential Revision: https://reviews.llvm.org/D67666
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372149
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 17 Sep 2019 17:32:15 +0000 (17:32 +0000)]
[TableGen] CodeGenMapTable - Don't dereference a dyn_cast result. NFCI.
The static analyzer is warning about potential null dereferences of dyn_cast<> results - in these cases we can safely use cast<> directly as we know that these cases should all be the correct type, which is why its working atm and anyway cast<> will assert if they aren't.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372146
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 17 Sep 2019 17:26:14 +0000 (17:26 +0000)]
[ARM][AsmParser] Don't dereference a dyn_cast result. NFCI.
The static analyzer is warning about potential null dereferences of dyn_cast<> results - in these cases we can safely use cast<> directly as we know that these cases should all be the correct type, which is why its working atm and anyway cast<> will assert if they aren't.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372145
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Tue, 17 Sep 2019 17:24:55 +0000 (17:24 +0000)]
Fix MSVC lambda capture warnings. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372144
91177308-0d34-0410-b5e6-
96231b3b80d8
David Bolvansky [Tue, 17 Sep 2019 17:12:24 +0000 (17:12 +0000)]
Reland "[SLC] Preserve attrs for strncpy(x, "", y) -> memset(align 1 x, '\0', y)"
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372142
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Tue, 17 Sep 2019 16:45:20 +0000 (16:45 +0000)]
[PowerPC] Exploit single instruction load-and-splat for word and doubleword
We currently produce a load, followed by (possibly a move for integers and) a
splat as separate instructions. VSX has always had a splatting load for
doublewords, but as of Power9, we have it for words as well. This patch just
exploits these instructions.
Differential revision: https://reviews.llvm.org/D63624
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372139
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Tue, 17 Sep 2019 16:33:35 +0000 (16:33 +0000)]
[MemorySSA] Fix phi insertion when inserting a def.
Summary:
When inserting a Def, the current algorithm is walking edges backward
and inserting new Phis where needed. There may be additional Phis needed
in the IDF of the newly inserted Def and Phis.
Adding Phis in the IDF of the Def was added ina previous patch, but we
may also need other Phis in the IDF of the newly added Phis.
Reviewers: george.burgess.iv
Subscribers: Prazek, sanjoy.google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67637
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372138
91177308-0d34-0410-b5e6-
96231b3b80d8
Alina Sbirlea [Tue, 17 Sep 2019 16:31:37 +0000 (16:31 +0000)]
[MemorySSA] Update MSSA for non-conventional AA.
Summary:
Regularly when moving an instruction that may not read or write memory,
the instruction is not modelled in MSSA, so not action is necessary.
For a non-conventional AA pipeline, MSSA needs to explicitly check when
creating accesses, so as to not model instructions that may not read and
write memory.
Reviewers: george.burgess.iv
Subscribers: Prazek, sanjoy.google, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67562
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372137
91177308-0d34-0410-b5e6-
96231b3b80d8
Petr Hosek [Tue, 17 Sep 2019 16:27:36 +0000 (16:27 +0000)]
Move DK_Misexpect for compatability with getNextAvailablePluginDiagnosticKind
First identified after D66324 landed.
Patch By: paulkirth
Differential Revision: https://reviews.llvm.org/D67648
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372136
91177308-0d34-0410-b5e6-
96231b3b80d8
Greg Clayton [Tue, 17 Sep 2019 16:15:49 +0000 (16:15 +0000)]
GSYM: add encoding and decoding to FunctionInfo
This patch adds encoding and decoding of the FunctionInfo objects along with full error handling and tests. Full details of the FunctionInfo encoding format appear in the FunctionInfo.h header file.
Differential Revision: https://reviews.llvm.org/D67506
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372135
91177308-0d34-0410-b5e6-
96231b3b80d8
David Green [Tue, 17 Sep 2019 15:32:28 +0000 (15:32 +0000)]
[ARM] Add a SelectTAddrModeImm7 for MVE narrow loads and stores
We were previously using the SelectT2AddrModeImm7 for both normal and narrowing
MVE loads/stores. As the narrowing instructions do not accept sp as a register,
it makes little sense to optimise a FrameIndex into the load, only to have to
recover that later on. This adds a SelectTAddrModeImm7 which does not do that
folding, and uses it for narrowing load/store patterns.
Differential Revision: https://reviews.llvm.org/D67489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372134
91177308-0d34-0410-b5e6-
96231b3b80d8
David Green [Tue, 17 Sep 2019 15:25:24 +0000 (15:25 +0000)]
[ARM] Fixup pipeline test. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372133
91177308-0d34-0410-b5e6-
96231b3b80d8
David Green [Tue, 17 Sep 2019 15:23:09 +0000 (15:23 +0000)]
[ARM] Reserve an emergency spill slot for fp16 addressing modes that need it
Similar to D67327, but this time for the FP16 VLDR and VSTR instructions that
use the AddrMode5FP16 addressing mode. We need to reserve an emergency spill
slot for instructions that will be out of range to use sp directly.
AddrMode5FP16 is 8 bits with a scale of 2.
Differential Revision: https://reviews.llvm.org/D67483
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372132
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Tue, 17 Sep 2019 14:27:31 +0000 (14:27 +0000)]
[RISCV] Unbreak the build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372127
91177308-0d34-0410-b5e6-
96231b3b80d8