OSDN Git Service
Xin Tong [Tue, 7 Mar 2017 18:59:09 +0000 (18:59 +0000)]
[JumpThread] Simplify CmpInst-as-Condition branch-folding a bit.
Summary: Simplify CmpInst-as-Condition branch-folding a bit.
Reviewers: sanjoy, efriedma
Reviewed By: efriedma
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30429
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297186
91177308-0d34-0410-b5e6-
96231b3b80d8
Pirama Arumuga Nainar [Tue, 7 Mar 2017 18:54:17 +0000 (18:54 +0000)]
[cmake] Include openmp with add_llvm_external_project
Summary:
Include projects/openmp into the build using add_llvm_external_project
instead of add_subdirectory. This creates an option
LLVM_TOOL_OPENMP_BUILD that selects whether this project gets included
in an in-tree build.
Reviewers: beanz, AndreyChurbanov, jlpeyton
Subscribers: srhines, openmp-commits, llvm-commits, mgorny
Differential Revision: https://reviews.llvm.org/D30470
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297185
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Tue, 7 Mar 2017 18:50:58 +0000 (18:50 +0000)]
[ObjectYAML] Add support for DWARF5 Unit header
In DWARF5 the Unit header added a new field, UnitType, and swapped the order of the address size and abbreviation offset fields.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297183
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Tue, 7 Mar 2017 18:47:52 +0000 (18:47 +0000)]
Add unit tests for changes to SmallPtrSet and PointerLikeTypeTraits
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297182
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Tue, 7 Mar 2017 18:47:50 +0000 (18:47 +0000)]
Add PointerLikeTypeTraits for const things, as long as there is one for the non-const version. Clang and other users have a number of types they use as pointers, and this avoids having to define both const and non-const versions of PointerLikeTraits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297181
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Tue, 7 Mar 2017 18:47:48 +0000 (18:47 +0000)]
Make SmallPtrSet count and find able to take const PtrType's
Summary:
For our set/map types, count/find normally take const references.
This works well for non-pointer types, but can suck for pointer
types.
DenseSet<int *> foo;
const int *b = nullptr;
foo.count(b) does not work
but the equivalent reference version does work
(patch to fix DenseSet/DenseMap coming up)
For SmallPtrSet, you have no such option.
The following will not work right now:
SmallPtrSet<int *> foo;
const int *b = nullptr;
foo.count(b);
This makes const correctness hard in some cases.
Example:
SmallPtrSet<Instruction *> InstructionsToErase;
You can't make this SmallPtrSet<const Instruction *> because then you
can't erase the instruction. If I want to see if something is in the
set, I may only have a const Instruction *. Given that count and find
are non-mutating, this should just work.
The places in our code base that do this resort to const_cast :(.
This patch makes count and find able to be used with const Instruction
* in the above SmallPtrSet examples.
This is a bit annoying because of where C++ applies the const, so we
have to remove the pointer type from the passed-in-type and rebuild it
with const.
Reviewers: dblaikie
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30608
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297180
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthew Simpson [Tue, 7 Mar 2017 18:47:30 +0000 (18:47 +0000)]
[LV] Consider users that are memory accesses in uniforms expansion step
When expanding the set of uniform instructions beyond the seed instructions
(e.g., consecutive pointers), we mark a new instruction uniform if all its
loop-varying users are uniform. We should also allow users that are consecutive
or interleaved memory accesses. This fixes cases where we have an instruction
that is used as the pointer operand of a consecutive access but also used by a
non-memory instruction that later becomes uniform as part of the expansion.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297179
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Tue, 7 Mar 2017 18:47:22 +0000 (18:47 +0000)]
[X86] Add option to specify preferable loop alignment
Summary:
Loop alignment can cause a significant change of
the perfromance for short loops.
To be able to evaluate the impact of loop alignment this change
introduces the new option x86-experimental-pref-loop-alignment.
The alignment will be 2^Value bytes, the default value is 4.
Patch by Serguei Katkov!
Reviewers: craig.topper
Reviewed By: craig.topper
Subscribers: sanjoy, llvm-commits
Differential Revision: https://reviews.llvm.org/D30391
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297178
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 7 Mar 2017 18:32:25 +0000 (18:32 +0000)]
[globalisel] Change LLT constructor string into an LLT-based object that knows how to generate it.
Summary:
This will allow future patches to inspect the details of the LLT. The implementation is now split between
the Support and CodeGen libraries to allow TableGen to use this class without introducing layering concerns.
Thanks to Ahmed Bougacha for finding a reasonable way to avoid the layering issue and providing the version of this patch without that problem.
Reviewers: t.p.northover, qcolombet, rovka, aditya_nandakumar, ab, javed.absar
Subscribers: arsenm, nhaehnle, mgorny, dberris, llvm-commits, kristof.beyls
Differential Revision: https://reviews.llvm.org/D30046
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297177
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 18:26:36 +0000 (18:26 +0000)]
Further reduce testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297176
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Tue, 7 Mar 2017 18:15:13 +0000 (18:15 +0000)]
Fix test and add missing return for llvm-lto2 error case
Summary:
This test was missing the target triple.
Once I fixed that, the case with the invalid character error stopped
returning 1 from llvm-lto2 and the test reported a failure. Fixed by
adding the missing return from llvm-lto2. Apparently we were failing
when we eventually tried to get the target.
Reviewers: pcc
Subscribers: mehdi_amini, llvm-commits
Differential Revision: https://reviews.llvm.org/D30585
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297173
91177308-0d34-0410-b5e6-
96231b3b80d8
Volkan Keles [Tue, 7 Mar 2017 18:03:28 +0000 (18:03 +0000)]
[GlobalISel] Translate floating-point negation
Reviewers: qcolombet, javed.absar, aditya_nandakumar, dsanders, t.p.northover, ab
Reviewed By: qcolombet
Subscribers: dberris, rovka, llvm-commits, kristof.beyls
Differential Revision: https://reviews.llvm.org/D30671
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297171
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 17:55:36 +0000 (17:55 +0000)]
Update comment in testcase
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297170
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 17:50:51 +0000 (17:50 +0000)]
Rephrase condition for better readability. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297168
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Tue, 7 Mar 2017 17:48:47 +0000 (17:48 +0000)]
[fs] Make sure to check S_ISLNK() in fillStatus.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297167
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 7 Mar 2017 17:41:45 +0000 (17:41 +0000)]
revert r297155 because there's a clang test that depends on InstCombine:
tools/clang/test/CodeGen/zvector.c
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297166
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 17:28:57 +0000 (17:28 +0000)]
Revert "Strip debug info when inlining into a nodebug function."
This reverts commit r296488.
As noted by David Blaikie on llvm-commits, I overlooked the case of a
debug function being inlined into a nodebug function being inlined
into a debug function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297163
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 17:28:54 +0000 (17:28 +0000)]
Relax the conflicting function arg verifier to allow for inlined debug
info in nodebug functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297161
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 17:28:49 +0000 (17:28 +0000)]
Verfier: Move the reset of DebugFnArgs closer to other similar operations.
NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297160
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Tue, 7 Mar 2017 17:23:52 +0000 (17:23 +0000)]
Revert r297132, it caused PR32171
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297159
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 7 Mar 2017 16:10:36 +0000 (16:10 +0000)]
[InstCombine] shrink truncated splat shuffle
This is one part of solving a recent bug report:
http://lists.llvm.org/pipermail/llvm-dev/2017-February/110293.html
This keeps with our general approach: changing arbitrary shuffles is off-limts,
but changing splat is ok. The transform is very similar to the existing
shrinkBitwiseLogic() canonicalization.
Differential Revision: https://reviews.llvm.org/D30123
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297155
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Tue, 7 Mar 2017 16:10:10 +0000 (16:10 +0000)]
[Support] Add the option to not follow symlinks on stat.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297154
91177308-0d34-0410-b5e6-
96231b3b80d8
John Brawn [Tue, 7 Mar 2017 14:42:03 +0000 (14:42 +0000)]
[ARM] Correct handling of LSL #0 in an IT block
The check for LSL #0 in an IT block was checking if operand 4 was zero, but
operand 4 is the condition code operand so it was actually checking for LSLEQ.
Fix this by checking operand 3, which really is the immediate operand, and add
some tests.
Differential Revision: https://reviews.llvm.org/D30692
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297142
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Tue, 7 Mar 2017 14:20:19 +0000 (14:20 +0000)]
[Hexagon] Do not insert instructions before PHI nodes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297141
91177308-0d34-0410-b5e6-
96231b3b80d8
Ranjeet Singh [Tue, 7 Mar 2017 11:17:53 +0000 (11:17 +0000)]
[ARM] Reapply r296865 "[ARM] fpscr read/write intrinsics not aware of each other""
The original patch r296865 was reverted as it broke the chromium builds for
Android https://bugs.llvm.org/show_bug.cgi?id=32134, this patch reapplies
r296865 with a fix to make sure it doesn't cause the build regression.
The problem was that intrinsic selection on int_arm_get_fpscr was failing in
ISel this was because the code to manually select this intrinsic still thought
it was the version with no side-effects (INTRINSIC_WO_CHAIN) which is wrong as
it doesn't semantically match the definition in the tablegen code which says it
does have side-effects, I've fixed this by updating the intrinsic type to
INTRINSIC_W_CHAIN (has side-effects). I've also added a test for this based on
Hans original reproducer.
Differential Revision: https://reviews.llvm.org/D30645
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297137
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Paulsson [Tue, 7 Mar 2017 09:49:31 +0000 (09:49 +0000)]
[SystemZ] Add check VT.isSimple() in canTreateAsByteVector()
Since BB-vectorizer can produce vectors of for example 3 elements,
this check is needed.
Review: Ulrich Weigand
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297136
91177308-0d34-0410-b5e6-
96231b3b80d8
Artyom Skrobov [Tue, 7 Mar 2017 09:38:16 +0000 (09:38 +0000)]
In Thumb1, materialize a move between low registers as a `movs`, if CPSR isn't live.
Summary: Previously, it had always been materialized as a push/pop sequence.
Reviewers: labrinea, jroelofs
Reviewed By: jroelofs
Subscribers: llvm-commits, rengolin
Differential Revision: https://reviews.llvm.org/D30648
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297134
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Parker [Tue, 7 Mar 2017 09:34:25 +0000 (09:34 +0000)]
[LoopRotate] Update dbg.value intrinsics
Propagate debug info through the newly inserted PHI nodes.
Differential Revision: https://reviews.llvm.org/D30190
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297132
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Tue, 7 Mar 2017 08:56:27 +0000 (08:56 +0000)]
[X86] Quick fix for build bot failure (r297127) due to unused variable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297130
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Tue, 7 Mar 2017 08:11:19 +0000 (08:11 +0000)]
[X86][AVX512] Adding new LLVM TableGen backend which generates the EVEX2VEX compressing tables.
X86EvexToVex machine instruction pass compresses EVEX encoded instructions by replacing them with their identical VEX encoded instructions when possible.
It uses manually supported 2 large tables that map the EVEX instructions to their VEX ideticals.
This TableGen backend replaces the tables by automatically generating them.
Differential Revision: https://reviews.llvm.org/D30451
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297127
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Tue, 7 Mar 2017 08:05:53 +0000 (08:05 +0000)]
[X86][AVX512] Add missing entries to EVEX2VEX tables
evex2vex pass defines 2 tables which maps EVEX instructions to their VEX identical when possible. Adding all missing entries.
Differential Revision: https://reviews.llvm.org/D30501
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297126
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Tue, 7 Mar 2017 07:40:10 +0000 (07:40 +0000)]
Revert "[PowerPC][ELFv2ABI] Allocate parameter area on-demand to reduce stack frame size"
This reverts commit r296771.
We found some wide spread test failures internally. I'm working on a
testcase. Politely revert the patch in the mean time. :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297124
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Tue, 7 Mar 2017 06:03:15 +0000 (06:03 +0000)]
[LoopUnrolling] Fix loop size check for peeling
Summary:
We should check if loop size allows us to peel at least one iteration
before we do so.
Patch by Max Kazantsev!
Reviewers: sanjoy, mkuper, efriedma
Reviewed By: mkuper
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30632
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297122
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 7 Mar 2017 05:36:19 +0000 (05:36 +0000)]
[APInt] Add rvalue reference support to and, or, xor operations to allow their memory allocation to be reused when possible
This extends an earlier change that did similar for add and sub operations.
With this first patch we lose the fastpath for the single word case as operator&= and friends don't support it. This can be added there if we think that's important.
I had to change some functions in the APInt class since the operator overloads were moved out of the class and can't be used inside the class now. The getBitsSet change collides with another outstanding patch to implement it with setBits. But I didn't want to make this patch dependent on that series.
I've also removed the Or, And, Xor functions which were rarely or never used. I already commited two changes to remove the only uses of Or that existed.
Differential Revision: https://reviews.llvm.org/D30612
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297121
91177308-0d34-0410-b5e6-
96231b3b80d8
Konstantin Zhuravlyov [Tue, 7 Mar 2017 04:44:33 +0000 (04:44 +0000)]
Revert "AMDGPU: Set MCAsmInfo::PointerSize"
It breaks line tables because the patch is not complete, working on a complete one at the moment
This reverts commit r294031.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297118
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Tue, 7 Mar 2017 03:43:17 +0000 (03:43 +0000)]
Use LLVM for all stat-related functionality.
This deletes LLDB's FileType enumeration and replaces all
users, and all calls to functions that check whether a file
exists etc with corresponding calls to LLVM.
Differential Revision: https://reviews.llvm.org/D30624
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297116
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 7 Mar 2017 03:16:37 +0000 (03:16 +0000)]
[APInt] Fix test names in unittest to match functions being tested. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297115
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 7 Mar 2017 02:58:36 +0000 (02:58 +0000)]
[APInt] Add getBitsSetFrom and setBitsFrom to set upper bits starting at a bit
We currently have methods to set a specified number of low bits, a specified number of high bits, or a range of bits. But looking at some existing code it seems sometimes we want to set the high bits starting from a certain bit. Currently we do this with something like getHighBits(BitWidth, BitWidth - StartBit). Or once we start switching to setHighBits, setHighBits(BitWidth - StartBit) or setHighBits(getBitWidth() - StartBit).
Particularly for the latter case it would be better to have a convenience method like setBitsFrom(StartBit) so we don't need to mention the bit width that's already known to the APInt object.
I considered just making setBits have a default value of UINT_MAX for the hiBit argument and we would internally MIN it with the bit width. So if it wasn't specified it would be treated as bit width. This would require removing the assertion we currently have on the value of hiBit and may not be as readable.
Differential Revision: https://reviews.llvm.org/D30602
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297114
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 7 Mar 2017 02:49:57 +0000 (02:49 +0000)]
Add a testcase for r297072.
Check that missing debug locations on inlinable calls are a
recoverable error.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297113
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 7 Mar 2017 02:19:45 +0000 (02:19 +0000)]
[APInt] Implement getLowBitsSet/getHighBitsSet/getBitsSet using setLowBits/setHighBits/setBits
This patch implements getLowBitsSet/getHighBitsSet/getBitsSet in terms of the new setLowBits/setHighBits/setBits methods by making an all 0s APInt and then calling the appropriate set method.
This also adds support to setBits to allow loBits/hiBits to be in the other order to match with getBitsSet behavior.
Differential Revision: https://reviews.llvm.org/D30563
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297112
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 7 Mar 2017 01:56:01 +0000 (01:56 +0000)]
[APInt] Add setLowBits/setHighBits methods to APInt.
Summary:
There are quite a few places in the code base that do something like the following to set the high or low bits in an APInt.
KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1);
For BitWidths larger than 64 this creates a short lived APInt with malloced storage. I think it might even call malloc twice. Its better to just provide methods that can set the necessary bits without the temporary APInt.
I'll update usages that benefit in a separate patch.
Reviewers: majnemer, MatzeB, davide, RKSimon, hans
Reviewed By: hans
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30525
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297111
91177308-0d34-0410-b5e6-
96231b3b80d8
Kuba Mracek [Tue, 7 Mar 2017 01:01:38 +0000 (01:01 +0000)]
Un-XFAIL Fuzzer/test/dump_coverage.test. This now passes on Darwin (after r297094).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297110
91177308-0d34-0410-b5e6-
96231b3b80d8
Bob Wilson [Tue, 7 Mar 2017 00:51:07 +0000 (00:51 +0000)]
remove Cmake option for LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING
This is a follow-up to my change in r295090, which added support for
disabling these checks selectively based on setting the preprocessor
macro without relying on the Cmake setting. Swift has moved over to use
that approach, so we can clean up here and remove the Cmake setting.
https://reviews.llvm.org/D30578
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297109
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Mon, 6 Mar 2017 23:54:51 +0000 (23:54 +0000)]
[SLP] Revert r296863 due to miscompiles.
Details and reproducer are on the email thread for r296863.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297103
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 6 Mar 2017 23:50:28 +0000 (23:50 +0000)]
GlobalISel: restrict G_EXTRACT instruction to just one operand.
A bit more painful than G_INSERT because it was more widely used, but this
should simplify the handling of extract operations in most locations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297100
91177308-0d34-0410-b5e6-
96231b3b80d8
Mike Aizatsky [Mon, 6 Mar 2017 23:42:14 +0000 (23:42 +0000)]
[libfuzzer] do not use xargs for shell expansion
Summary:
After https://reviews.llvm.org/rL296904 xargs shouldn't be necesssary.
Differential Revision: https://reviews.llvm.org/D30371
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297094
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 23:25:28 +0000 (23:25 +0000)]
[InstCombine] use dyn_cast instead of isa+cast; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297092
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Mon, 6 Mar 2017 23:22:49 +0000 (23:22 +0000)]
[ObjectYAML] Support for DW_FORM_implicit_const DWARF5 form
This patch adds support to the DWARF YAML reader and writer for the new DWARF5 abbreviation form, DW_FORM_implicit_const.
The attribute was added in r291599.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297091
91177308-0d34-0410-b5e6-
96231b3b80d8
Volkan Keles [Mon, 6 Mar 2017 22:47:19 +0000 (22:47 +0000)]
[GlobalISel] Fix G_FPEXT’s description. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297088
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 22:32:40 +0000 (22:32 +0000)]
[DAG] refactor related div/rem folds; NFCI
This is known incomplete and not called in the right order relative to
other folds, but that's the current behavior. I'm just trying to clean
this up before making actual functional changes to make the patch smaller.
The logic here should mimic the IR equivalents that are in InstSimplify's
simplifyDivRem().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297086
91177308-0d34-0410-b5e6-
96231b3b80d8
Paul Robinson [Mon, 6 Mar 2017 22:20:03 +0000 (22:20 +0000)]
[DWARFv5] Update definitions to match published spec.
Some late additions to DWARF v5 were not in Dwarf.def; also one form
was redefined. Add the new cases to relevant switches in different
parts of LLVM. Replace DW_FORM_ref_sup with DW_FORM_ref_sup[4,8].
I did not add support for DW_FORM_strx3/addrx3 other that defining the
constants. We don't have any infrastructure to support these.
Differential Revision: http://reviews.llvm.org/D30664
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297085
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Mon, 6 Mar 2017 21:31:18 +0000 (21:31 +0000)]
[Outliner] Fixed Asan bot failure in r296418
Fixed the asan bot failure which led to the last commit of the outliner being reverted.
The change is in lib/CodeGen/MachineOutliner.cpp in the SuffixTree's constructor. LeafVector
is no longer initialized using reserve but just a standard constructor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297081
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 21:26:49 +0000 (21:26 +0000)]
[TableGen] Ensure proper ordering of subtarget feature names
Recommit r297039 without the testcase. The MIR testcase did not work
well with MC code emitter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297080
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Mon, 6 Mar 2017 21:20:00 +0000 (21:20 +0000)]
[AArch64][Redundant Copy Elim] Add support for CMN and shifted imm.
This patch extends the current functionality of the AArch64 redundant copy
elimination pass to handle CMN instructions as well as a shifted
immediates.
Differential Revision: https://reviews.llvm.org/D30576.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297078
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 6 Mar 2017 21:10:40 +0000 (21:10 +0000)]
Disable gvn-hoist (PR32153)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297075
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 6 Mar 2017 21:05:14 +0000 (21:05 +0000)]
Verifier: Change Assert to AssertDI.
This error can be recovered from by stripping debug info.
This is NFC for +asserts builds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297072
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Mon, 6 Mar 2017 20:52:12 +0000 (20:52 +0000)]
[ObjectYAML] NFC. Refactor DWARFYAML CompileUnit dump code
Summary: This patch refactors the DWARFYAML code for dumping compile units to use a visitor pattern. Using this design will, in the future, enable the DWARF YAML code to perform analysis and mutations of the DWARF DIEs. An example of such mutations would be calculating the length of a compile unit and updating the CU's Length field before writing the DIE. This support will make it easier to craft or modify DWARF tests by hand.
Reviewers: lhames
Subscribers: mgorny, fhahn, jgosnell, aprantl, llvm-commits
Differential Revision: https://reviews.llvm.org/D30357
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297067
91177308-0d34-0410-b5e6-
96231b3b80d8
Jessica Paquette [Mon, 6 Mar 2017 20:45:33 +0000 (20:45 +0000)]
Test commit. Added a blank line.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297064
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 20:24:21 +0000 (20:24 +0000)]
Revert r297039, it's causing some mysterious buildbot failures
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297062
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Mon, 6 Mar 2017 20:10:05 +0000 (20:10 +0000)]
AMDGPU/R600: Fix ALU clause markers use detection
also exit early on kill instead of redefinition.
Differential Revision: https://reviews.llvm.org/D30230
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297060
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Mon, 6 Mar 2017 20:01:31 +0000 (20:01 +0000)]
NewGVN: We were not really failing this testcase, because the instructions it was looking for are unused. GVN value numbers unused instructions, NewGVN does not. Fix the instructions to be used, so we eliminate the redundancies it's checking for, and un-XFAIL it
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297058
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Mon, 6 Mar 2017 19:25:07 +0000 (19:25 +0000)]
[DWARF] NFC. A few bits of minor code cleanup.
David Blaikie pointed out that the `setForceChildren` API is no longer needed and should be removed from the DWARF Generator APIs.
Also the DWARFDebugInfoTest file had some copy pasted comments that are not relevant. I've removed them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297056
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Mon, 6 Mar 2017 19:15:22 +0000 (19:15 +0000)]
[opt-diff] Fix the case when the script is invoked with directories
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297055
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 19:12:42 +0000 (19:12 +0000)]
[IfConversion] Only renormalize probabilities if branches are analyzable
If a block has non-analyzable branches, the listed successors don't need
to add up to one. For example, if a block has a conditional tail call,
that tail call will not have a corresponding successor in the successor
list, but will still be a possible branch.
Differential Revision: https://reviews.llvm.org/D30556
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297054
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 19:08:35 +0000 (19:08 +0000)]
[InstSimplify] refactor related div/rem folds; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297052
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 6 Mar 2017 19:04:17 +0000 (19:04 +0000)]
GlobalISel: don't emit degenerate G_INSERT instructions.
Before, we were producing G_INSERT instructions that were actually closer to a
cast or even a COPY when both input and output sizes are the same. This doesn't
really make sense and means that everything interpreting a G_INSERT also has to
handle all these kinds of casts.
So now we detect these degenerate cases and emit real casts instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297051
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 18:45:39 +0000 (18:45 +0000)]
[InstSimplify] add tests for vector div/rem with UB potential; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297048
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Mon, 6 Mar 2017 18:42:39 +0000 (18:42 +0000)]
NewGVN: Remove DebugUnknownExprs, just mark the instructions as unused
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297047
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Mon, 6 Mar 2017 18:42:27 +0000 (18:42 +0000)]
NewGVN: Only call isInstructionTrivially dead once per instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297046
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 6 Mar 2017 18:39:39 +0000 (18:39 +0000)]
[X86] Fix arg copy elision for illegal types
Use the store size of the argument type, which will be a byte-sized
quantity, rather than dividing the size in bits by 8.
Fixes PR32136 and re-enables copy elision from i64 arguments.
Reverts the workaround in from r296950.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297045
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 6 Mar 2017 18:36:40 +0000 (18:36 +0000)]
GlobalISel: add buildUndef method to MachineIRBuilder. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297044
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 6 Mar 2017 18:23:04 +0000 (18:23 +0000)]
GlobalISel: refactor legalization of G_INSERT.
Now that G_INSERT instructions can only insert one register, this code was
overly general. In another direction it didn't handle registers that crossed
split boundaries properly, which needed to be fixed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297042
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 18:13:01 +0000 (18:13 +0000)]
[InstSimplify] regenerate checks; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297040
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 18:08:37 +0000 (18:08 +0000)]
[TableGen] Ensure proper ordering of subtarget feature names
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297039
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Mon, 6 Mar 2017 17:49:59 +0000 (17:49 +0000)]
Remove the sample pgo annotation heuristic that uses call count to annotate basic block count.
Summary: We do not need that special handling because the debug info is more accurate now. Performance testing shows no regression on google internal benchmarks.
Reviewers: davidxl, aprantl
Reviewed By: aprantl
Subscribers: llvm-commits, aprantl
Differential Revision: https://reviews.llvm.org/D30658
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297038
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 17:24:04 +0000 (17:24 +0000)]
[Hexagon] Early-if-convert branches that may exit the loop
Merge the tail block into the loop in cases where the main loop body
exits early, subject to profitability constraints. This will coalesce
the loop body into fewer blocks.
For example:
loop: loop:
// loop body // loop body
if (...) jump exit --> // more body
more: if (...) jump exit
// more body jump loop
jump loop
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297033
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 17:09:06 +0000 (17:09 +0000)]
[Hexagon] Mark dead defs as <dead> in expand-condsets
The code in updateDeadFlags removed unnecessary <dead> flags, but there
can be cases where such a flag is not set, and yet a register has become
dead. For example, if a mux with identical inputs is replaced with a COPY,
the predicate register may no longer be used after that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297032
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 6 Mar 2017 17:03:16 +0000 (17:03 +0000)]
[Hexagon] Pick a dot-old instruction that matches the architecture
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297031
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 16:49:35 +0000 (16:49 +0000)]
[InstSimplify] remove misleading comments; NFC
Div/rem-of-0 does not cause faults/undef (not the same as div/rem-by-0).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297029
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 16:36:42 +0000 (16:36 +0000)]
[DAGCombiner] simplify div/rem-by-0
Refactoring of duplicated code and more fixes to follow.
This is motivated by the post-commit comments for r296699:
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-
20170306/435182.html
Ie, we can crash if we're missing obvious simplifications like this that
exist in the IR simplifier or if these occur later than expected.
The x86 change for non-splat division shows a potential opportunity to improve
vector codegen: we assumed that since only one lane had meaningful results, we
should do the math in scalar. But that means moving back and forth from vector
registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297026
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Mon, 6 Mar 2017 16:26:00 +0000 (16:26 +0000)]
[SLP] A test for vectorization of users of extractelement instructions,
NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297024
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Mon, 6 Mar 2017 16:03:26 +0000 (16:03 +0000)]
Fix minor typo introduce in r297014
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297020
91177308-0d34-0410-b5e6-
96231b3b80d8
Vassil Vassilev [Mon, 6 Mar 2017 15:50:59 +0000 (15:50 +0000)]
Silence a warning "hiding virtual function".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297018
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 15:50:07 +0000 (15:50 +0000)]
[x86] add tests to show missing div/rem simplifications; NFC
These are not x86-specific, but the problem is not visible for all targets
because it is masked by other transforms. These can lead to compiler crashes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297017
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kruse [Mon, 6 Mar 2017 15:33:05 +0000 (15:33 +0000)]
[BasicBlockUtils] Check for nullptr before updating LoopInfo.
LoopInfo::getLoopFor returns nullptr if a BB is not in a loop and only
then can the loop be updated to contain the newly created BBs. Add the
missing nullptr check to SplitBlockAndInsertIfThen.
Within LLVM, the only user of this function that also passes a LoopInfo
to be updated is InnerLoopVectorizer::predicateInstructions().
As the method's name implies, the BB operataten on will always be within
a loop, but out-of-tree users may also use it differently (here: Polly).
All other uses of LoopInfo::getLoopFor in the file properly check its
return value for nullptr.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297016
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 15:27:57 +0000 (15:27 +0000)]
[DAG] fix formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297015
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Mon, 6 Mar 2017 15:20:38 +0000 (15:20 +0000)]
New Test-Case for Region Analysis
While working on improvements to region info analysis, this test case caused an
incorrect region bb2 => bb3 to be detected.
Reviewers: grosser
Contributed-by: Nandini Singhal <cs15mtech01004@iith.ac.in>
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30652
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297014
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 6 Mar 2017 15:07:43 +0000 (15:07 +0000)]
[DAG] fix typo in comment; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297011
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 6 Mar 2017 14:26:50 +0000 (14:26 +0000)]
CMake: Add a build target for generating a source RPM
Summary:
'make srpm' or 'ninja srpm' will tar up the current source code and then
build a source RPM package.
By default it will use the llvm.spec file to generate the source RPM,
but you can specify your own custom spec file with the
LLVM_SRPM_USER_BINARY_SPECFILE option. CMake will perform variable
substitution on your custom specfile, so you can reference CMake
variables in it. For example:
Version: @LLVM_RPM_SPEC_VERSION@
Note that everything in the source directory will be included in the
tarball so if you have a clang check out in tools/clang, then all
the clang source will end up in the tarball to. It is recommended
to only use this build target with a clean source tree.
Reviewers: beanz
Reviewed By: beanz
Subscribers: mgorny, llvm-commits
Differential Revision: https://reviews.llvm.org/D30093
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297007
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Mon, 6 Mar 2017 07:32:13 +0000 (07:32 +0000)]
[PowerPC] Fix failure with STBRX when store is narrower than the bswap
Fixes a crash caused by r296811 by truncating the input of the STBRX node
when the bswap is wider than i32.
Fixes https://bugs.llvm.org/show_bug.cgi?id=32140
Differential Revision: https://reviews.llvm.org/D30615
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297001
91177308-0d34-0410-b5e6-
96231b3b80d8
Dean Michael Berris [Mon, 6 Mar 2017 06:48:56 +0000 (06:48 +0000)]
[XRay] Allow logging the first argument of a function call.
Summary:
Functions with the "xray-log-args" attribute will have a special XRay sled kind
emitted, for compiler-rt to copy any call arguments to your logging handler.
For practical and performance reasons, only the first argument is supported, and
only up to 64 bits.
Reviewers: dberris
Reviewed By: dberris
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D29702
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296998
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 6 Mar 2017 06:30:47 +0000 (06:30 +0000)]
[APInt] Move operator~ out of line to make it better able to reused memory allocation from temporary objects
Summary:
This makes operator~ take the APInt by value so if it came from a temporary APInt the move constructor will get invoked and it will be able to reuse the memory allocation from the temporary.
This is similar to what was already done for 2s complement negation.
Reviewers: hans, davide, RKSimon
Reviewed By: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30614
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296997
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 6 Mar 2017 04:35:01 +0000 (04:35 +0000)]
[APInt] Remove add and sub functions from APIntOps namespace.
They aren't used in tree and using the overloaded operators has more optimization opportunities.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296995
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 6 Mar 2017 00:24:53 +0000 (00:24 +0000)]
[APInt] Remove unused And/Or/Xor methods. They just forward to the corresponding operator overload.
I plan to enhance the operator overloads to handle rvalues and these methods would not longer be optimal to use.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296993
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjoy Das [Sun, 5 Mar 2017 23:49:17 +0000 (23:49 +0000)]
[SCEV] Decrease the recursion threshold for CompareValueComplexity
Fixes PR32142.
r287232 accidentally increased the recursion threshold for
CompareValueComplexity from 2 to 32. This change reverses that change
by introducing a separate flag for CompareValueComplexity's threshold.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296992
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 5 Mar 2017 16:41:11 +0000 (16:41 +0000)]
[APInt] Remove the And/Or/Xor/Not functions from the APIntOps namespace.
Summary:
They aren't used anywhere in tree and its preferable to use the &, |, ^, or ~ operators.
With my patch to add rvalue reference support to &, |, ^ operators it also becomes less performant to use these functions.
Reviewers: RKSimon, davide, hans
Reviewed By: RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30613
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296990
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 5 Mar 2017 15:52:18 +0000 (15:52 +0000)]
[SelectionDAG] Fix vector splitting for *_EXTEND_VECTOR_INREG instructions
Found by fuzz testing after rL296985 landed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296989
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Sun, 5 Mar 2017 14:08:28 +0000 (14:08 +0000)]
New Test-Case for Region Analysis
While working on improvements to the region info analysis, this test case caused
an incorrect region 1 => 2 to be detected. It is incorrect because entry has an
outgoing edge to 3. This is interesting because 1 dom 2 and 2 pdom 1, which
should have been enough to prevent incoming forward edges into the region and
outgoing forward edges from the region.
Reviewers: grosser
Subscribers: llvm-commits
Contributed-by: Nandini Singhal <cs15mtech01004@iith.ac.in>
Differential Revision: https://reviews.llvm.org/D30603
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296988
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Sun, 5 Mar 2017 12:53:20 +0000 (12:53 +0000)]
[X86] Silence GCC enum compare warning.
X86ISelLowering.cpp:26506:36: error: enumeral mismatch in conditional
expression: 'llvm::X86ISD::NodeType' vs 'llvm::ISD::NodeType'
[-Werror=enum-compare]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296986
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 5 Mar 2017 09:57:20 +0000 (09:57 +0000)]
[X86][SSE] Lower 128-bit vectors to SIGN/ZERO_EXTEND_VECTOR_IN_REG ops
As described on PR31712, we miss a variety of legalization combines because we lower these to X86ISD::VSEXT/VZEXT despite them having the same functionality. This patch makes 128-bit (SSE41) SIGN/ZERO_EXTEND_VECTOR_IN_REG ops legal, adds the necessary tablegen plumbing and uses a helper 'getExtendInVec' to decide when to use SIGN/ZERO_EXTEND_VECTOR_IN_REG or VSEXT/VZEXT.
We're missing a couple of shuffle combines that will be added in a future patch for review.
Later patches can then support the AVX2 cases as a mixture of SIGN/ZERO_EXTEND and SIGN/ZERO_EXTEND_VECTOR_IN_REG, and then finally deal with the AVX512 cases.
Differential Revision: https://reviews.llvm.org/D30549
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296985
91177308-0d34-0410-b5e6-
96231b3b80d8