OSDN Git Service
Craig Topper [Sun, 30 Apr 2017 07:44:55 +0000 (07:44 +0000)]
[X86] Clear KnownBits instead of reconstructing it. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301767
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Sun, 30 Apr 2017 06:25:04 +0000 (06:25 +0000)]
InstructionSimplify: Canonicalize shuffle operands. NFC-ish.
Summary:
Apply canonicalization rules:
1. Input vectors with no elements selected from can be replaced with undef.
2. If only one input vector is constant it shall be the second one.
This allows constant-folding to cover more ad-hoc simplifications that
were in place and avoid duplication for RHS and LHS checks.
There are more rules we may want to add in the future when we see a
justification. e.g. mask elements that select undef elements can be
replaced with undef.
Reviewers: spatel, RKSimon, andreadb, davide
Reviewed By: spatel, RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32338
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301766
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Sun, 30 Apr 2017 06:10:54 +0000 (06:10 +0000)]
InstructionSimplify: One getShuffleMask() replacing multiple getMaskValue(). NFC.
Summary: This is a preparatory step for D32338.
Reviewers: RKSimon, spatel
Reviewed By: RKSimon, spatel
Subscribers: spatel, llvm-commits
Differential Revision: https://reviews.llvm.org/D32388
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301765
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Sun, 30 Apr 2017 06:06:26 +0000 (06:06 +0000)]
InstructionSimplify: Simplify a shuffle with a undef mask to undef
Summary:
Following the discussion in pr32486, adding the simplification:
shuffle %x, %y, undef -> undef
Reviewers: spatel, RKSimon, andreadb, davide
Reviewed By: spatel
Subscribers: jroelofs, davide, llvm-commits
Differential Revision: https://reviews.llvm.org/D32293
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301764
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Atanasyan [Sun, 30 Apr 2017 04:27:23 +0000 (04:27 +0000)]
[mips] Emit R_MICROMIPS_TLS_GOTTPREL relocation for %gottprel in case of microMIPS
In case of microMIPS mode %gottprel operator should emit microMIPS
relocation R_MICROMIPS_TLS_GOTTPREL, not R_MIPS_TLS_GOTTPREL.
Differential Revision: http://reviews.llvm.org/D32617
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301763
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 30 Apr 2017 00:44:05 +0000 (00:44 +0000)]
[ConstantRange] Fix a couple cases where we were possibly throwing away an APInt allocation we could reuse. NFC
This uses setAllBits to replace getMaxValue and operator=(uint64_t) instead of constructing an APInt from uint64_t.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301761
91177308-0d34-0410-b5e6-
96231b3b80d8
Dimitry Andric [Sat, 29 Apr 2017 23:45:30 +0000 (23:45 +0000)]
Include <cstdio> in PrettyStackTrace.cpp, since it uses vsnprintf(3).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301760
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Sat, 29 Apr 2017 19:46:27 +0000 (19:46 +0000)]
[globalisel][tablegen] Fix the test after silencing the unused variable warning in r301755.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301756
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Sat, 29 Apr 2017 19:10:19 +0000 (19:10 +0000)]
[globalisel][tablegen] Silence unused variable warning.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301755
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 17:59:41 +0000 (17:59 +0000)]
[ConstantRange] Use APInt::getOneBitSet to shorten some code. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301753
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 17:46:13 +0000 (17:46 +0000)]
[ConstantRange] Replace getMaxValue+zext with getLowBitsSet. Replace zero-init+setBit with getOneBitSet. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301752
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 17:46:11 +0000 (17:46 +0000)]
[ConstantRange] Use APInt::operator-= to remove temporary APInts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301751
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Sat, 29 Apr 2017 17:30:09 +0000 (17:30 +0000)]
[globalisel][tablegen] Compute available feature bits correctly.
Summary:
Predicate<> now has a field to indicate how often it must be recomputed.
Currently, there are two frequencies, per-module (RecomputePerFunction==0)
and per-function (RecomputePerFunction==1). Per-function predicates are
currently recomputed more frequently than necessary since the only predicate
in this category is cheap to test. Per-module predicates are now computed in
getSubtargetImpl() while per-function predicates are computed in selectImpl().
Tablegen now manages the PredicateBitset internally. It should only be
necessary to add the required includes.
Also fixed a problem revealed by the test case where
constrainSelectedInstRegOperands() would attempt to tie operands that
BuildMI had already tied.
Reviewers: ab, qcolombet, t.p.northover, rovka, aditya_nandakumar
Reviewed By: rovka
Subscribers: kristof.beyls, igorb, llvm-commits
Differential Revision: https://reviews.llvm.org/D32491
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301750
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 29 Apr 2017 17:15:12 +0000 (17:15 +0000)]
[X86][AVX] Added codegen tests for _mm256_zext* helper intrinsics (PR32839)
Not great codegen, especially as VEX moves support implicit zeroing of upper bits....
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301748
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 16:43:11 +0000 (16:43 +0000)]
[KnownBits] Add methods for determining if the known bits represent a negative/nonnegative number and add methods for changing the negative/nonnegative state
Summary: This patch adds isNegative, isNonNegative for querying whether the sign bit is known. It also adds makeNegative and makeNonNegative for controlling the sign bit.
Reviewers: RKSimon, spatel, davide
Reviewed By: RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32651
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301747
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Dardis [Sat, 29 Apr 2017 16:31:40 +0000 (16:31 +0000)]
[mips][FastISel] Fix a nullptr deference.
r301392 introduced a potential nullptr deference causing compilation
failures.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301746
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sat, 29 Apr 2017 14:29:06 +0000 (14:29 +0000)]
[X86][SSE] Add initial <2 x half> tests for PR31088
As discussed on D32391, test X86/X64 SSE2 and X64 F16C.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301744
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 07:24:13 +0000 (07:24 +0000)]
[ConstantRange] Use ternary operator instead of 'if' to avoid copying an APInt and then possibly copying over it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301741
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 06:40:47 +0000 (06:40 +0000)]
[ConstantRange] Add std::move to a bunch of places that pass local APInts to ConstantRange constructor.
The ConstantRange constructor takes APInt by value so without these moves we are making copies.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301740
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Sat, 29 Apr 2017 05:30:19 +0000 (05:30 +0000)]
Remove unused private field.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301738
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 05:24:34 +0000 (05:24 +0000)]
[ConstantRange] Remove a temporary APInt I meant to delete in r300621. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301737
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 29 Apr 2017 05:08:52 +0000 (05:08 +0000)]
[ConstantRange] Improve the efficiency of one of the ConstantRange constructors.
We were default constructing the Lower/Upper APInts. Then creating min or max value, then doing a move assignment to Lower and copy assignment to upper. The copy assignment operator in particular has an out of line function call that has to examine whether or not a previous allocation exists that can be reused which of course it can't in this case.
The new code creates the min/max value first, move constructs Lower from it then copy constructs Upper from Lower.
This also seems to have convinced a self host build that this constructor can be inlined more readily into other methods in ConstantRange.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301736
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sat, 29 Apr 2017 01:26:34 +0000 (01:26 +0000)]
AMDGPU: Fix copies from physical registers in SIFixSGPRCopies
This would assert when there were multiple defs of
a physical register.
We just need to move all of the users of it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301730
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Sat, 29 Apr 2017 01:13:21 +0000 (01:13 +0000)]
[llvm-pdbdump] Abstract some of the YAML/Raw printing code.
There is a lot of duplicate code for printing line info between
YAML and the raw output printer. This introduces a base class
that can be shared between the two, and makes some minor
cleanups in the process.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301728
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Sat, 29 Apr 2017 00:23:11 +0000 (00:23 +0000)]
[ObjCARC] Do not move a release between a call and a
retainAutoreleasedReturnValue that retains the returned value.
This commit fixes a bug in ARC optimizer where it moves a release
between a call and a retainAutoreleasedReturnValue, causing the returned
object to be released before the retainAutoreleasedReturnValue can
retain it.
This commit accomplishes that by doing a lookahead and checking whether
the call prevents the release from moving upwards. In the long term, we
should treat the region between the retainAutoreleasedReturnValue and
the call as a critical section and disallow moving anything there
(possibly using operand bundles).
rdar://problem/
20449878
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301724
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sat, 29 Apr 2017 00:18:26 +0000 (00:18 +0000)]
[LoopUnswitch] Make DEBUG output more readable (part 2).
I fixed my miscompile in r301722 and I hope I don't have to take
a look at this code again now that Chandler has a new LoopUnswitch
pass, but maybe this could be of use for somebody else in the
meanwhile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301723
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Sat, 29 Apr 2017 00:12:18 +0000 (00:12 +0000)]
[LoopUnswitch] Don't remove instructions with side effects.
This fixes PR32818.
Differential Revision: https://reviews.llvm.org/D32664
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301722
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Sat, 29 Apr 2017 00:03:32 +0000 (00:03 +0000)]
[llvm-readobj] Fix incorrect printing of CV column info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301720
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Fri, 28 Apr 2017 23:59:53 +0000 (23:59 +0000)]
Fuzzer: Mark test/cxxstring.test UNSUPPORTED: windows
This has been mysteriously failing since r301593, which cleaned up the
types of things like size_t and SIZE_MAX for freestanding targets. Reid
and Kostya suggested marking it as UNSUPPORTED on windows, given that no
one has been able to reproduce locally.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301719
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 28 Apr 2017 23:41:36 +0000 (23:41 +0000)]
[llvm-readobj] Use LLVMDebugInfoCodeView to parse line tables.
The llvm-readobj parsing code currently exists in our CodeView
library, so we use that to parse instead of re-writing the logic
in the tool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301718
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 28 Apr 2017 23:29:33 +0000 (23:29 +0000)]
[Support] Provide unsafe random access for VarStreamArray.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301716
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 28 Apr 2017 23:14:33 +0000 (23:14 +0000)]
[InstCombine] add tests to show potentially bogus application of DeMorgan (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301714
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Fri, 28 Apr 2017 23:11:16 +0000 (23:11 +0000)]
Remove set but unused variable in BitcodeReader.cpp. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301713
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Fri, 28 Apr 2017 23:01:32 +0000 (23:01 +0000)]
Revert r301697 "[IR] Make add/remove Attributes use AttrBuilder instead of AttributeList"
This broke the Clang build. (Clang-side patch missing?)
Original commit message:
> [IR] Make add/remove Attributes use AttrBuilder instead of
> AttributeList
>
> This change cleans up call sites and avoids creating temporary
> AttributeList objects.
>
> NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301712
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 22:52:41 +0000 (22:52 +0000)]
InferAddressSpaces: Search constant expressions for addrspacecasts
These are pretty common when using local memory, and the 64-bit generic
addressing is much more expensive to compute.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301711
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Apr 2017 22:25:46 +0000 (22:25 +0000)]
Remove line and file from DINamespace.
Fixes the issue highlighted in
http://lists.llvm.org/pipermail/cfe-dev/2014-June/037500.html.
The DW_AT_decl_file and DW_AT_decl_line attributes on namespaces can
prevent LLVM from uniquing types that are in the same namespace. They
also don't carry any meaningful information.
rdar://problem/
17484998
Differential Revision: https://reviews.llvm.org/D32648
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301706
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 22:18:19 +0000 (22:18 +0000)]
InferAddressSpaces: Avoid looking up deleted values
While looking at pure addressing expressions, it's possible
for the value to appear later in Postorder.
I haven't been able to come up with a testcase where this
exhibits an actual issue, but if you insert a dump before
the value map lookup, a few testcases crash.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301705
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 22:18:08 +0000 (22:18 +0000)]
InferAddressSpaces: Infer from just addrspacecasts
Eliminates some more cases where some subset of the addressing
computation remains flat. Some cases with addrspacecasts
in nested constant expressions are still left behind however.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301704
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Zolotukhin [Fri, 28 Apr 2017 22:14:27 +0000 (22:14 +0000)]
[SCEV] Use early exit in createAddRecFromPHI. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301703
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Fri, 28 Apr 2017 22:05:55 +0000 (22:05 +0000)]
LoopRotate: Fix use after scope bug
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301702
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 28 Apr 2017 21:57:53 +0000 (21:57 +0000)]
[RDF] Correctly calculate lane masks for defs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301700
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 28 Apr 2017 21:56:33 +0000 (21:56 +0000)]
Properly handle PHIs with subregisters in UnreachableBlockElim
When a PHI operand has a subregister, create a COPY instead of simply
replacing the PHI output with the input it.
Differential Revision: https://reviews.llvm.org/D32650
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301699
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 28 Apr 2017 21:54:11 +0000 (21:54 +0000)]
[Hexagon] Do not move a block if it is on a fall-through path
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301698
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Apr 2017 21:48:28 +0000 (21:48 +0000)]
[IR] Make add/remove Attributes use AttrBuilder instead of AttributeList
This change cleans up call sites and avoids creating temporary
AttributeList objects.
NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301697
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 21:48:09 +0000 (21:48 +0000)]
[ConstantRange] Use APInt::isNullValue rather than APInt::isMinValue where it would make more sense to thing of 0 as 0 rather than the minimum unsigned value. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301696
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 21:48:06 +0000 (21:48 +0000)]
[APInt] Add an isNullValue method to check for all bits being zero. Use it in a couple internal methods where it makes more sense than isMinValue or !getBoolValue. NFC
I used Null rather than Zero to match the getNullValue method name.
There are some other places outside APInt where isNullValue would be more readable than isMinValue even though they do the same thing. I'll update those in future patches.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301695
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 21:48:03 +0000 (21:48 +0000)]
[ConstantRange] Use const references to prevent a couple APInt copies. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301694
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Fri, 28 Apr 2017 21:30:50 +0000 (21:30 +0000)]
[LoopUnswitch] Make DEBUG output more readable.
While debugging a miscompile I realized loopunswitch doesn't
put newlines when printing the instruction being replacement.
Ending up with a single line with many instruction replaced isn't
the best for readability and/or mental sanity.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301692
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Clegg [Fri, 28 Apr 2017 21:22:38 +0000 (21:22 +0000)]
[WebAssembly] Add size of section header to data relocation offsets.
Also, add test for data relocations and fix addend to
be signed.
Subscribers: jfb, dschuff
Differential Revision: https://reviews.llvm.org/D32513
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301690
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 21:13:09 +0000 (21:13 +0000)]
[ValueTracking] Teach isSafeToSpeculativelyExecute() about the speculatable attribute
Patch by Tom Stellard
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301688
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Clegg [Fri, 28 Apr 2017 21:12:09 +0000 (21:12 +0000)]
[WebAssembly] Write initial memory in pages not bytes
Subscribers: jfb, dschuff
Differential Revision: https://reviews.llvm.org/D32660
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301687
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 21:01:46 +0000 (21:01 +0000)]
TableGen: Add IntrHasSideEffects property for intrinsics
The IntrNoMem, IntrReadMem, IntrWriteMem, and IntrArgMemOnly intrinsic
properties differ from their corresponding LLVM IR attributes by specifying
that the intrinsic, in addition to its memory properties, has no other side
effects.
The IntrHasSideEffects flag used in combination with one of the memory flags
listed above, makes it possible to define an intrinsic such that its
properties at the CodeGen layer match its properties at the IR layer.
Patch by Tom Stellard
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301685
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Apr 2017 20:34:27 +0000 (20:34 +0000)]
Make getParamAlignment use argument numbers
The method is called "get *Param* Alignment", and is only used for
return values exactly once, so it should take argument indices, not
attribute indices.
Avoids confusing code like:
IsSwiftError = CS->paramHasAttr(ArgIdx, Attribute::SwiftError);
Alignment = CS->getParamAlignment(ArgIdx + 1);
Add getRetAlignment to handle the one case in Value.cpp that wants the
return value alignment.
This is a potentially breaking change for out-of-tree backends that do
their own call lowering.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301682
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 28 Apr 2017 20:31:49 +0000 (20:31 +0000)]
GlobalISel: Followup for r301679
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301681
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 28 Apr 2017 20:25:27 +0000 (20:25 +0000)]
Add speculatable function attribute
This attribute tells the optimizer that the function may be speculated.
Patch by Tom Stellard
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301680
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 28 Apr 2017 20:25:05 +0000 (20:25 +0000)]
TargetLowering: Add finalizeLowering() function; NFC
Adds a new method finalizeLowering to TargetLoweringBase. This is in
preparation for an upcoming commit.
This function is meant for target specific adjustments to
MachineFrameInfo or register reservations.
Move the freezeRegisters() and the hasCopyImplyingStackAdjustment()
handling into the new function to prove the concept. As an added bonus
GlobalISel no longer missed the hasCopyImplyingStackAdjustment()
handling with this.
Differential Revision: https://reviews.llvm.org/D32621
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301679
91177308-0d34-0410-b5e6-
96231b3b80d8
Marek Olsak [Fri, 28 Apr 2017 20:21:58 +0000 (20:21 +0000)]
AMDGPU: Add new amdgcn.init.exec intrinsics
v2: More tests, bug fixes, cosmetic changes.
Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, dstuttard, tpr, llvm-commits, t-tye
Differential Revision: https://reviews.llvm.org/D31762
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301677
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Haarman [Fri, 28 Apr 2017 20:17:15 +0000 (20:17 +0000)]
limit to 2 parallel links when using thinlto
Summary:
When using ThinLTO, the linker performs its own parallelism. This
change limits the number of parallel link jobs that Ninja will issue
to keep the total number of threads reasonable when linking with
ThinLTO.
Reviewers: hans, ruiu
Subscribers: mgorny, mehdi_amini, Prazek
Differential Revision: https://reviews.llvm.org/D31990
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301676
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Fri, 28 Apr 2017 19:55:38 +0000 (19:55 +0000)]
Kill off the old SimplifyInstruction API by converting remaining users.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301673
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Fri, 28 Apr 2017 19:39:45 +0000 (19:39 +0000)]
[IPO/MergeFunctions] This function is used only under DEBUG().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301672
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Apr 2017 19:22:40 +0000 (19:22 +0000)]
[RS4GC] Simplify attribute handling code NFC
Avoids use of AttributeList::getNumSlots, making it easier to change the
underlying implementation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301671
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Apr 2017 18:37:16 +0000 (18:37 +0000)]
Use Argument::hasAttribute and AttributeList::ReturnIndex more
This eliminates many extra 'Idx' induction variables in loops over
arguments in CodeGen/ and Target/. It also reduces the number of places
where we assume that ReturnIndex is 0 and that we should add one to
argument numbers to get the corresponding attribute list index.
NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301666
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Apr 2017 18:30:36 +0000 (18:30 +0000)]
Cleanup: Use DIExpression::prepend in buildDbgValueForSpill(). (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301665
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 28 Apr 2017 17:58:18 +0000 (17:58 +0000)]
[IR] Delete unused Argument::removeAttr overload
It doesn't make sense to remove an AttributeList from an argument.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301663
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Fri, 28 Apr 2017 17:51:05 +0000 (17:51 +0000)]
Clean up DIExpression::prependDIExpr a little. (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301662
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Fri, 28 Apr 2017 17:41:43 +0000 (17:41 +0000)]
Bitcode: Do not remove empty summary entries when reading a per-module summary.
This became no longer necessary after D19462 landed, and will be incompatible
with an upcoming change to the summary data structures that changes how we
represent references.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301660
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 28 Apr 2017 17:18:28 +0000 (17:18 +0000)]
IR: fix some doxygen grammar (NFC)
Fix a bit of the doxygen grammar that was off that I noticed while
looking at this file for another issue.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301658
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 16:58:05 +0000 (16:58 +0000)]
[APInt] Add clearSignBit method. Use it and setSignBit in a few places. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301656
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 16:57:59 +0000 (16:57 +0000)]
[LazyValueInfo] Fix typo in comment. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301655
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 16:57:55 +0000 (16:57 +0000)]
[ValueTracking] Use APInt::isSubsetOf and APInt::intersects. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301654
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexei Starovoitov [Fri, 28 Apr 2017 16:51:01 +0000 (16:51 +0000)]
[bpf] add bigendian support to disassembler
. swap 4-bit register encoding, 16-bit offset and 32-bit imm to support big endian archs
. add a test
Reported-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301653
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 28 Apr 2017 16:06:00 +0000 (16:06 +0000)]
CMake: ignore git stderr when trying to sort out revision. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301650
91177308-0d34-0410-b5e6-
96231b3b80d8
Jun Bum Lim [Fri, 28 Apr 2017 16:04:03 +0000 (16:04 +0000)]
[InlineCost] Improve the cost heuristic for Switch
Summary:
The motivation example is like below which has 13 cases but only 2 distinct targets
```
lor.lhs.false2: ; preds = %if.then
switch i32 %Status, label %if.then27 [
i32 -7012, label %if.end35
i32 -10008, label %if.end35
i32 -10016, label %if.end35
i32 15000, label %if.end35
i32 14013, label %if.end35
i32 10114, label %if.end35
i32 10107, label %if.end35
i32 10105, label %if.end35
i32 10013, label %if.end35
i32 10011, label %if.end35
i32 7008, label %if.end35
i32 7007, label %if.end35
i32 5002, label %if.end35
]
```
which is compiled into a balanced binary tree like this on AArch64 (similar on X86)
```
.LBB853_9: // %lor.lhs.false2
mov w8, #10012
cmp w19, w8
b.gt .LBB853_14
// BB#10: // %lor.lhs.false2
mov w8, #5001
cmp w19, w8
b.gt .LBB853_18
// BB#11: // %lor.lhs.false2
mov w8, #-10016
cmp w19, w8
b.eq .LBB853_23
// BB#12: // %lor.lhs.false2
mov w8, #-10008
cmp w19, w8
b.eq .LBB853_23
// BB#13: // %lor.lhs.false2
mov w8, #-7012
cmp w19, w8
b.eq .LBB853_23
b .LBB853_3
.LBB853_14: // %lor.lhs.false2
mov w8, #14012
cmp w19, w8
b.gt .LBB853_21
// BB#15: // %lor.lhs.false2
mov w8, #-10105
add w8, w19, w8
cmp w8, #9 // =9
b.hi .LBB853_17
// BB#16: // %lor.lhs.false2
orr w9, wzr, #0x1
lsl w8, w9, w8
mov w9, #517
and w8, w8, w9
cbnz w8, .LBB853_23
.LBB853_17: // %lor.lhs.false2
mov w8, #10013
cmp w19, w8
b.eq .LBB853_23
b .LBB853_3
.LBB853_18: // %lor.lhs.false2
mov w8, #-7007
add w8, w19, w8
cmp w8, #2 // =2
b.lo .LBB853_23
// BB#19: // %lor.lhs.false2
mov w8, #5002
cmp w19, w8
b.eq .LBB853_23
// BB#20: // %lor.lhs.false2
mov w8, #10011
cmp w19, w8
b.eq .LBB853_23
b .LBB853_3
.LBB853_21: // %lor.lhs.false2
mov w8, #14013
cmp w19, w8
b.eq .LBB853_23
// BB#22: // %lor.lhs.false2
mov w8, #15000
cmp w19, w8
b.ne .LBB853_3
```
However, the inline cost model estimates the cost to be linear with the number
of distinct targets and the cost of the above switch is just 2 InstrCosts.
The function containing this switch is then inlined about 900 times.
This change use the general way of switch lowering for the inline heuristic. It
etimate the number of case clusters with the suitability check for a jump table
or bit test. Considering the binary search tree built for the clusters, this
change modifies the model to be linear with the size of the balanced binary
tree. The model is off by default for now :
-inline-generic-switch-cost=false
This change was originally proposed by Haicheng in D29870.
Reviewers: hans, bmakam, chandlerc, eraman, haicheng, mcrosier
Reviewed By: hans
Subscribers: joerg, aemerson, llvm-commits, rengolin
Differential Revision: https://reviews.llvm.org/D31085
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301649
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 28 Apr 2017 14:42:15 +0000 (14:42 +0000)]
Move variable local to where ita used. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301646
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Fri, 28 Apr 2017 14:30:54 +0000 (14:30 +0000)]
Memory intrinsic value profile optimization: Avoid divide by 0
Summary:
Skip memops if the total value profiled count is 0, we can't correctly
scale up the counts and there is no point anyway.
Reviewers: davidxl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32624
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301645
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 28 Apr 2017 13:21:18 +0000 (13:21 +0000)]
[DAGCombiner] Add ComputeNumSignBits vector demanded elements support to ASHR and INSERT_VECTOR_ELT (reapplied)
Reapplied r299221 after fix for nondeterminism in ThinLTO builder (rL301599), with extra check for implicit truncation of inserted element.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301644
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 28 Apr 2017 11:53:08 +0000 (11:53 +0000)]
[X86][SSE] Added new tests from D32416 to show codegen delta
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301641
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 28 Apr 2017 11:12:30 +0000 (11:12 +0000)]
[X86][SSE] Renames all ones test to better match type.
Added 8f32/4f64 optsize tests discussed on D32416
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301639
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 28 Apr 2017 10:31:42 +0000 (10:31 +0000)]
[X86][SSE] Add codegen test for _mm_set_pd1 (PR32827)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301638
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Fri, 28 Apr 2017 09:20:31 +0000 (09:20 +0000)]
[ARM] GlobalISel: fixup r301632
Actually remove ARMInstructionSelector.h... Forgot to stage the removal
in the previous commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301633
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Fri, 28 Apr 2017 09:10:38 +0000 (09:10 +0000)]
[ARM] GlobalISel: Get rid of ARMInstructionSelector.h. NFC.
Declare the ARMInstructionSelector in an anonymous namespace, to make it
more in line with the other targets which were migrated to this in
r299637 in order to avoid TableGen'erated headers being included in
non-GlobalISel builds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301632
91177308-0d34-0410-b5e6-
96231b3b80d8
George Rimar [Fri, 28 Apr 2017 08:54:10 +0000 (08:54 +0000)]
[DWARF] - Fix mistype in dump output of pub* tables. NFC.
There was a garbage character in output introduced by myself in
r290040 "[DWARF] - Introduce DWARFDebugPubTable class for dumping pub* sections."
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301631
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Ng [Fri, 28 Apr 2017 08:44:30 +0000 (08:44 +0000)]
[DebugInfo][X86] Improve X86 Optimize LEAs handling of debug values.
This is a follow up to the fix in r298360 to improve the handling of debug
values when redundant LEAs are removed. The fix in r298360 effectively
discarded the debug values. This patch now attempts to preserve the debug
values by using the DWARF DW_OP_stack_value operation via prependDIExpr.
Moved functions appendOffset and prependDIExpr from Local.cpp to
DebugInfoMetadata.cpp and made them available as static member functions of
DIExpression.
Differential Revision: https://reviews.llvm.org/D31604
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301630
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 08:15:33 +0000 (08:15 +0000)]
[WebAssembly] Update calls to computeKnownBits after the changes from r301620.
I didn't realize WebAssembly wasn't a default build target so I missed that changes were needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301629
91177308-0d34-0410-b5e6-
96231b3b80d8
Clement Courbet [Fri, 28 Apr 2017 07:56:31 +0000 (07:56 +0000)]
[X86][NFC] Refactor RepMovsRepeats in preparation for D32481.
Differential Revision: https://reviews.llvm.org/D32583
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301628
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Fri, 28 Apr 2017 07:50:47 +0000 (07:50 +0000)]
[ARM] GlobalISel: Tighten test. NFC
Explicitly check types and load sizes in the IRTranslator test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301627
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 06:28:56 +0000 (06:28 +0000)]
[ValueTracking] Convert computeKnownBitsFromRangeMetadata to use KnownBits struct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301626
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Fri, 28 Apr 2017 06:25:39 +0000 (06:25 +0000)]
[EarlyCSE] Mark the condition of assume intrinsic as true
EarlyCSE should not just ignore assumes. It should use the fact that its condition is true for all dominated instructions.
Reviewers: sanjoy, reames, apilipenko, anna, skatkov
Reviewed By: reames, sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32482
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301625
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Fri, 28 Apr 2017 06:05:48 +0000 (06:05 +0000)]
[EarlyCSE] Remove guards with conditions known to be true
If a condition is calculated only once, and there are multiple guards on this condition, we should be able
to remove all guards dominated by the first of them. This patch allows EarlyCSE to try to find the condition
of a guard among the known values, and if it is true, remove the guard. Otherwise we keep the guard and
mark its condition as 'true' for future consideration.
Reviewers: sanjoy, reames, apilipenko, skatkov, anna, dberlin
Reviewed By: reames, sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32476
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301623
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 05:31:46 +0000 (05:31 +0000)]
[SelectionDAG] Use KnownBits struct in DAG's computeKnownBits and simplifyDemandedBits
This patch replaces the separate APInts for KnownZero/KnownOne with a single KnownBits struct. This is similar to what was done to ValueTracking's version recently.
This is largely a mechanical transformation from KnownZero to Known.Zero.
Differential Revision: https://reviews.llvm.org/D32569
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301620
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 04:57:59 +0000 (04:57 +0000)]
[SelectionDAG] Use various APInt methods to reduce temporary APInt creation
This patch uses various APInt methods to reduce the number of temporary APInts. These were all found while working through converting SelectionDAG's computeKnownBits to also use the KnownBits struct recently added to the ValueTracking version.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301618
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Fri, 28 Apr 2017 04:49:32 +0000 (04:49 +0000)]
Remove unnecessary semicolon
This shows up as a -Wpendatic error on GCC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301616
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Fri, 28 Apr 2017 04:48:42 +0000 (04:48 +0000)]
[StackMaps] Increase the size of the "location size" field
Summary:
In some cases LLVM (especially the SLP vectorizer) will create vectors
that are 256 bytes (or larger). Given that this is intentional[0] is
likely to get more common, this patch updates the StackMap binary
format to deal with the spill locations for said vectors.
This change also bumps the stack map version from 2 to 3.
[0]: https://reviews.llvm.org/D32533#738350
Reviewers: reames, kavon, skatkov, javed.absar
Subscribers: mcrosier, nemanjai, llvm-commits
Differential Revision: https://reviews.llvm.org/D32629
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301615
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Fri, 28 Apr 2017 04:29:43 +0000 (04:29 +0000)]
COFF Import: expose both symbols
COFF Import libraries which use the obsolete CONSTANT export are
supposed to get two symbols, one with the `_imp_` prefix and one
without. Ensure that we expose both for iteration. This is necessary
to fix the librarian with COFF CONSTANT exports.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301614
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 28 Apr 2017 03:36:24 +0000 (03:36 +0000)]
[APInt] Use inplace shift methods where possible. NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301612
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 28 Apr 2017 00:43:38 +0000 (00:43 +0000)]
[llvm-pdbdump] Allow printing only a portion of a stream.
When dumping raw data from a stream, you might know the offset
of a certain record you're interested in, as well as how long
that record is. Previously, you had to dump the entire stream
and wade through the bytes to find the interesting record.
This patch allows you to specify an offset and length on the
command line, and it will only dump the requested range.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301607
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Clegg [Fri, 28 Apr 2017 00:36:36 +0000 (00:36 +0000)]
[WebAssembly] Add some tests for wasm MC layer
Subscribers: jfb, dschuff
Differential Revision: https://reviews.llvm.org/D32558
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301606
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Thu, 27 Apr 2017 23:09:01 +0000 (23:09 +0000)]
[SROA] Fix nondeterminism exposed by Simon's r299221.
Use a SmallSetSetVector instead of a SmallPtrSet as iterating
over the latter is not stable ('<' relies on addresses).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301599
91177308-0d34-0410-b5e6-
96231b3b80d8
Frederich Munch [Thu, 27 Apr 2017 22:10:57 +0000 (22:10 +0000)]
Fix a few pedantic warnings.
Reviewers: zturner, hansw, hans
Reviewed By: hans
Subscribers: hans, llvm-commits
Differential Revision: https://reviews.llvm.org/D32611
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301595
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 27 Apr 2017 21:55:03 +0000 (21:55 +0000)]
[InstCombine] fix matcher to bind to specific operand (PR32830)
Matching any random value would be very wrong:
https://bugs.llvm.org/show_bug.cgi?id=32830
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301594
91177308-0d34-0410-b5e6-
96231b3b80d8