OSDN Git Service
Hans Wennborg [Mon, 11 Dec 2017 21:15:27 +0000 (21:15 +0000)]
Revert r320407 "[InstCombine] Fix PR35618: Instcombine hangs on single minmax load bitcast."
The tests fail (opt asserts) on Windows.
> Summary:
> If we have pattern `store (load(bitcast(select (cmp(V1, V2), &V1,
> &V2)))), bitcast)`, but the load is used in other instructions, it leads
> to looping in InstCombiner. Patch adds additional check that all users
> of the load instructions are stores and then replaces all uses of load
> instruction by the new one with new type.
>
> Reviewers: RKSimon, spatel, majnemer
>
> Subscribers: llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D41072
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320421
91177308-0d34-0410-b5e6-
96231b3b80d8
Evandro Menezes [Mon, 11 Dec 2017 21:09:27 +0000 (21:09 +0000)]
[CodeGen] Improve the consistency of instruction fusion*
When either instruction in a fused pair has no other dependency, besides on
the other instruction, make sure that other instructions do not get
scheduled between them. Additionally, avoid fusing an instruction more than
once along the same dependency chain.
Differential revision: https://reviews.llvm.org/D36704
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320420
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Dec 2017 20:43:21 +0000 (20:43 +0000)]
ASAN: Provide reliable debug info for local variables at -O0.
The function stack poisioner conditionally stores local variables
either in an alloca or in malloc'ated memory, which has the
unfortunate side-effect, that the actual address of the variable is
only materialized when the variable is accessed, which means that
those variables are mostly invisible to the debugger even when
compiling without optimizations.
This patch stores the address of the local stack base into an alloca,
which can be referred to by the debug info and is available throughout
the function. This adds one extra pointer-sized alloca to each stack
frame (but mem2reg can optimize it away again when optimizations are
enabled, yielding roughly the same debug info quality as before in
optimized code).
rdar://problem/
30433661
Differential Revision: https://reviews.llvm.org/D41034
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320415
91177308-0d34-0410-b5e6-
96231b3b80d8
Tony Jiang [Mon, 11 Dec 2017 20:42:37 +0000 (20:42 +0000)]
[PowerPC] Partially enable the ISEL expansion pass.
The pass to expand ISEL instructions into if-then-else sequences in patch D23630
is currently disabled. This patch partially enable it by always removing the
unnecessary ISELs (all registers used by the ISELs are the same one) and folding
the ISELs which have the same input registers into unconditional copies.
Differential Revision: https://reviews.llvm.org/D40497
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320414
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Bogner [Mon, 11 Dec 2017 19:53:23 +0000 (19:53 +0000)]
[cmake] Pass TARGETS_TO_BUILD through to host tools build
In r319620, the host build was changed to use Native for
TARGETS_TO_BUILD because passing semicolons through add_custom_command
is surprisingly difficult. However, Native really doesn't make any
sense here, and it only works because we don't technically do any
codegen in the host tools so pretty well anything will "work".
The problem here is that passing something other than the correct
value is very fragile - as evidence note how the llvm-config in the
host tools acts differently than the target one now, and misreports
the targets to build. Similarly, if there is any logic conditional on
the targets in tablegen (now or in the future), it will do the wrong
thing.
To fix this, we need to escape the semicolons in the targets string
and pass it through to the child cmake invocation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320413
91177308-0d34-0410-b5e6-
96231b3b80d8
George Burgess IV [Mon, 11 Dec 2017 19:22:59 +0000 (19:22 +0000)]
Ensure moved-from container is cleared on move
In all cases except for this optimistic attempt to reuse memory, the
moved-from TinyPtrVector was left `empty()` at the end of this
assignment. Though using a container after it's been moved from can be a
bit sketchy, it's probably best to just be consistent here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320408
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Mon, 11 Dec 2017 19:11:16 +0000 (19:11 +0000)]
[InstCombine] Fix PR35618: Instcombine hangs on single minmax load bitcast.
Summary:
If we have pattern `store (load(bitcast(select (cmp(V1, V2), &V1,
&V2)))), bitcast)`, but the load is used in other instructions, it leads
to looping in InstCombiner. Patch adds additional check that all users
of the load instructions are stores and then replaces all uses of load
instruction by the new one with new type.
Reviewers: RKSimon, spatel, majnemer
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D41072
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320407
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 11 Dec 2017 18:57:54 +0000 (18:57 +0000)]
[Hexagon] Add support for Hexagon V65
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320404
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 18:39:42 +0000 (18:39 +0000)]
[X86] Add LODS schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320403
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 18:32:59 +0000 (18:32 +0000)]
[X86] Add CMP/TEST schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320402
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 18:23:24 +0000 (18:23 +0000)]
[X86] Add AND/OR/XOR schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320400
91177308-0d34-0410-b5e6-
96231b3b80d8
Jonas Devlieghere [Mon, 11 Dec 2017 18:22:47 +0000 (18:22 +0000)]
[dwarfdump] Fix off-by-one bug in accelerator table extractor.
This fixes a bug where the verifier was complaining about empty
accelerator tables. When the table is empty, its size is not a valid
offset as it points after the end of the section.
This patch also makes the extractor return llvm:Error instead of bool
for better error reporting in the verifier.
Differential revision: https://reviews.llvm.org/D41063
rdar://
35932007
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320399
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 18:13:40 +0000 (18:13 +0000)]
[X86] Add ADD/SUB schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320397
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 17:59:05 +0000 (17:59 +0000)]
[X86] Add ADC/SBB schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320395
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 17:37:08 +0000 (17:37 +0000)]
[X86] Add MOVSLQ schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320392
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 17:01:21 +0000 (17:01 +0000)]
Normalize line endings. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320389
91177308-0d34-0410-b5e6-
96231b3b80d8
Amara Emerson [Mon, 11 Dec 2017 16:58:29 +0000 (16:58 +0000)]
[GlobalISel] Disable GISel for big endian.
This is due to PR26161 needing to be resolved before we can fix
big endian bugs like PR35359. The work to split aggregates into smaller LLTs
instead of using one large scalar will take some time, so in the mean time
we'll fall back to SDAG.
Some ARM BE tests xfailed for now as a result.
Differential Revision: https://reviews.llvm.org/D40789
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320388
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 16:47:21 +0000 (16:47 +0000)]
[X86] Add LWP schedule tests
Tag LWP instructions as WriteSystem
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320387
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 16:32:58 +0000 (16:32 +0000)]
[X86] Add INT/INTO schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320386
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 16:16:40 +0000 (16:16 +0000)]
[X86] Add IN/OUT schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320385
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 16:08:21 +0000 (16:08 +0000)]
[X86] Add IDIV schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320384
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 16:04:08 +0000 (16:04 +0000)]
[X86] Add CMPXCHG schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320383
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 15:53:12 +0000 (15:53 +0000)]
[X86] Add CLZERO schedule test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320382
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Potapenko [Mon, 11 Dec 2017 15:48:56 +0000 (15:48 +0000)]
[MSan] Hotfix compilation
For some reason the override directives got removed in r320373.
I suspect this to be an unwanted effect of clang-format.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320381
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 15:41:52 +0000 (15:41 +0000)]
[X86] Add ADCX/ADOX/XADD/XLAT schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320380
91177308-0d34-0410-b5e6-
96231b3b80d8
Nirav Dave [Mon, 11 Dec 2017 15:35:40 +0000 (15:35 +0000)]
[X86] Modify Nontemporal tests to avoid deadstore optimization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320379
91177308-0d34-0410-b5e6-
96231b3b80d8
Tony Tye [Mon, 11 Dec 2017 15:35:27 +0000 (15:35 +0000)]
[AMDGPU] Rename Bonaire target to be gfx704; update target feature handling
- Rename Bonaire target to be gfx704.
- Eliminate gfx800 and make Iceland and Tonga both use gfx802 as they use the same code.
- List target features supported by each processor in the processor table together with the default value.
- Add xnack flag to e_flags.
- Remove xnack from kernel metadata and kernel descriptor since it is now a whole code object property.
Differential Revision: https://reviews.llvm.org/D40051
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320378
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 15:25:31 +0000 (15:25 +0000)]
[X86] Add SETCC/STC/STD/UD2 schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320376
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitry Preobrazhensky [Mon, 11 Dec 2017 15:23:20 +0000 (15:23 +0000)]
[AMDGPU][MC][GFX9] Corrected encoding of ttmp registers, disabled tba/tma
See bugs 35494 and 35559:
https://bugs.llvm.org/show_bug.cgi?id=35494
https://bugs.llvm.org/show_bug.cgi?id=35559
Reviewers: vpykhtin, artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D41007
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320375
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 11 Dec 2017 15:19:31 +0000 (15:19 +0000)]
[DAGCombiner] protect against an infinite loop between shl <--> mul (PR35579)
At first, I tried to thread the x86 needle and use a target hook (isVectorShiftByScalarCheap())
to disable the transform only for non-splat pow-of-2 constants, but not AVX2, but only some
element types, but...it's difficult.
Here we just avoid the loop with the x86 vector transform that conflicts with the general DAG
combine and preserve all of the existing behavior AFAICT otherwise.
Some tests that will probably fail if someone does try to restrict this in a more targeted way
for x86-only may be found in:
test/CodeGen/X86/combine-mul.ll
test/CodeGen/X86/vector-mul.ll
test/CodeGen/X86/widen_arith-5.ll
This should prevent the infinite looping seen with:
https://bugs.llvm.org/show_bug.cgi?id=35579
Differential Revision: https://reviews.llvm.org/D41040
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320374
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Potapenko [Mon, 11 Dec 2017 15:05:22 +0000 (15:05 +0000)]
[MSan] introduce getShadowOriginPtr(). NFC.
This patch introduces getShadowOriginPtr(), a method that obtains both the shadow and origin pointers for an address as a Value pair.
The existing callers of getShadowPtr() and getOriginPtr() are updated to use getShadowOriginPtr().
The rationale for this change is to simplify KMSAN instrumentation implementation.
In KMSAN origins tracking is always enabled, and there's no direct mapping between the app memory and the shadow/origin pages.
Both the shadow and the origin pointer for a given address are obtained by calling a single runtime hook from the instrumentation,
therefore it's easier to work with those pointers together.
Reviewed at https://reviews.llvm.org/D40835.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320373
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 14:56:44 +0000 (14:56 +0000)]
[X86] Add SAR/SHL/SHR schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320371
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 14:46:42 +0000 (14:46 +0000)]
[X86] Add RCL/RCR schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320370
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Mon, 11 Dec 2017 14:46:06 +0000 (14:46 +0000)]
[Hexagon] Crash in instruction selection for insert_vector_elt for HVX
A wrong type was passed to insertVector, causing an out-of-bounds value
to be added an an operand to HexagonISD::INSERT. This later failed in
instruction selection.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320369
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Mon, 11 Dec 2017 14:35:48 +0000 (14:35 +0000)]
[PowerPC] Sign-extend negative constant stores
Second part of https://reviews.llvm.org/D40348.
Revision r318436 has extended all constants feeding a store to 64 bits
to allow for CSE on the SDAG. However, negative constants were zero extended
which made the constant being loaded appear to be a positive value larger than
16 bits. This resulted in long sequences to materialize such constants
rather than simply a "load immediate". This patch just sign-extends those
updated constants so that they remain 16-bit signed immediates if they started
out that way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320368
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Mon, 11 Dec 2017 14:16:02 +0000 (14:16 +0000)]
[DAGCombiner] Add combined indexed load to the work list
This commit is the first part of https://reviews.llvm.org/D40348.
In order to allow target combines to be performed on newly combined
indexed loads, add them back to the worklist. The remainder of the
above patch will be committed in subsequent revisions and will use
this. Test cases will be included with those follow-up commits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320365
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Mon, 11 Dec 2017 13:28:45 +0000 (13:28 +0000)]
[ARM GlobalISel] Add test for a MOVTi16 pattern. NFC
Add test for matching an OR with 0xFFFF0000 to a MOVTi16.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320362
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 13:25:02 +0000 (13:25 +0000)]
[X86] Add fsgsbase schedule tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320361
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Mon, 11 Dec 2017 12:49:02 +0000 (12:49 +0000)]
[RISCV] Add custom CC_RISCV calling convention and improved call support
The TableGen-based calling convention definitions are inflexible, while
writing a function to implement the calling convention is very
straight-forward, and allows difficult cases to be handled more easily. With
this patch adds support for:
* Passing large scalars according to the RV32I calling convention
* Byval arguments
* Passing values on the stack when the argument registers are exhausted
The custom CC_RISCV calling convention is also used for returns.
This patch also documents the ABI lowering that a language frontend is
expected to perform. I would like to work to simplify these requirements over
time, but this will require further discussion within the LLVM community.
We add PendingArgFlags CCState, as a companion to PendingLocs.
The PendingLocs vector is used by a number of backends to handle arguments
that are split during legalisation. However CCValAssign doesn't keep track of
the original argument alignment. Therefore, add a PendingArgFlags vector which
can be used to keep track of the ISD::ArgFlagsTy for every value added to
PendingLocs.
Differential Revision: https://reviews.llvm.org/D39898
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320359
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Mon, 11 Dec 2017 12:38:17 +0000 (12:38 +0000)]
[RISCV] Allow lowering of dynamic_stackalloc, stacksave, stackrestore
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320358
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Mon, 11 Dec 2017 12:34:11 +0000 (12:34 +0000)]
[RISCV] Implement prolog and epilog insertion
As frame pointer elimination isn't implemented until a later patch and we make
extensive use of update_llc_test_checks.py, this changes touches a lot of the
RISC-V tests.
Differential Revision: https://reviews.llvm.org/D39849
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320357
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 11 Dec 2017 12:22:15 +0000 (12:22 +0000)]
[X86] Regenerate fsgsbase intrinsic tests. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320356
91177308-0d34-0410-b5e6-
96231b3b80d8
Roger Ferrer Ibanez [Mon, 11 Dec 2017 12:13:45 +0000 (12:13 +0000)]
[ARM] Use ADDCARRY / SUBCARRY
This is a preparatory step for D34515.
This change:
- makes nodes ISD::ADDCARRY and ISD::SUBCARRY legal for i32
- lowering is done by first converting the boolean value into the carry flag
using (_, C) ← (ARMISD::ADDC R, -1) and converted back to an integer value
using (R, _) ← (ARMISD::ADDE 0, 0, C). An ARMISD::ADDE between the two
operations does the actual addition.
- for subtraction, given that ISD::SUBCARRY second result is actually a
borrow, we need to invert the value of the second operand and result before
and after using ARMISD::SUBE. We need to invert the carry result of
ARMISD::SUBE to preserve the semantics.
- given that the generic combiner may lower ISD::ADDCARRY and
ISD::SUBCARRYinto ISD::UADDO and ISD::USUBO we need to update their lowering
as well otherwise i64 operations now would require branches. This implies
updating the corresponding test for unsigned.
- add new combiner to remove the redundant conversions from/to carry flags
to/from boolean values (ARMISD::ADDC (ARMISD::ADDE 0, 0, C), -1) → C
- fixes PR34045
- fixes PR34564
- fixes PR35103
Differential Revision: https://reviews.llvm.org/D35192
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320355
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Mon, 11 Dec 2017 11:53:54 +0000 (11:53 +0000)]
[RISCV] Support lowering FrameIndex
Introduces the AddrFI "addressing mode", which is necessary simply because
it's not possible to write a pattern that directly matches a frameindex.
Ensure callee-saved registers are accessed relative to the stackpointer. This
is necessary as callee-saved register spills are performed before the frame
pointer is set.
Move HexagonDAGToDAGISel::isOrEquivalentToAdd to SelectionDAGISel, so we can
make use of it in the RISC-V backend.
Differential Revision: https://reviews.llvm.org/D39848
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320353
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Mon, 11 Dec 2017 11:44:23 +0000 (11:44 +0000)]
[ARM GlobalISel] Add tests for PKHBT and PKHTB
Test (some of) the patterns for selecting PKHBT and PKHTB. The others
are just very similar to the ones we're testing and there would be
little value in covering them as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320352
91177308-0d34-0410-b5e6-
96231b3b80d8
Aleksandar Beserminji [Mon, 11 Dec 2017 11:21:40 +0000 (11:21 +0000)]
[mips] Removal of microMIPS64R6
All files and parts of files related to microMIPS4R6 are removed.
When target is microMIPS4R6, errors are printed.
This is LLVM part of patch.
Differential Revision: https://reviews.llvm.org/D35625
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320350
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 11 Dec 2017 11:01:27 +0000 (11:01 +0000)]
[AVR] Implement some missing code paths
This has been broken since r320009.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320348
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 11 Dec 2017 11:01:19 +0000 (11:01 +0000)]
[AVR] Fix incorrectly-calculated AVRMCExpr evaluations
This has been broken since r320009.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320347
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 11 Dec 2017 08:33:20 +0000 (08:33 +0000)]
[DAGCombiner] Support folding (mulhs/u X, 0)->0 for vectors.
We should probably also fold (mulhs/u X, 1) for vectors, but that's harder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320344
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 11 Dec 2017 08:33:19 +0000 (08:33 +0000)]
[DAGCombiner] Reuse existing SDLoc variable instead of creating a new one. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320343
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 11 Dec 2017 06:16:26 +0000 (06:16 +0000)]
[X86] Regenerate test with update_llc_test_checks.py
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320342
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 11 Dec 2017 01:48:10 +0000 (01:48 +0000)]
[X86] Add a test case for masked scatter where the index needs to be legalized from v2i32 while other types are legal.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320340
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 22:11:56 +0000 (22:11 +0000)]
[X86] Add ROL/ROR schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320334
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 21:56:24 +0000 (21:56 +0000)]
[X86] Add DIV/MUL/NEG/NOP/NOT/PAUSE schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320333
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 21:28:00 +0000 (21:28 +0000)]
[X86] Add DEC/INC schedule tests
Include i686 (non-REX) variant tests as well
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320332
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 21:10:28 +0000 (21:10 +0000)]
[X86] Add INS/OUTS schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320331
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 20:58:22 +0000 (20:58 +0000)]
[X86] Add CMPS/MOVS/SCAS/STOS schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320330
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 20:46:57 +0000 (20:46 +0000)]
[X86] Add CMOV schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320329
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 20:22:47 +0000 (20:22 +0000)]
[X86] Add BT/BTC/BTR/BTS schedule tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320328
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 19:47:57 +0000 (19:47 +0000)]
[X86] Add VCOMISDZrr, VCOMISSZrr, VUCOMISDZrr, and VUCOMISSZrr to the skylake server sheduler model
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320326
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 19:47:56 +0000 (19:47 +0000)]
[X86] Rename some instructions that start with Int_ to have the _Int at the end.
This matches AVX512 version and is more consistent overall. And improves our scheduler models.
In some cases this adds _Int to instructions that didn't have any Int_ before. It's a side effect of the adjustments made to some of the multiclasses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320325
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 19:19:22 +0000 (19:19 +0000)]
[X86][X87] Fix typo in znver1 FIST/FISTT schedule patterns
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320322
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 18:53:15 +0000 (18:53 +0000)]
[X86][X87] Add missing x87 scheduler tests
Split off some 'n' instruction versions to make it clearer when WAIT is being inserted
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320321
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:44 +0000 (17:42 +0000)]
[X86] Rename some instructions from 'rb' to 'rrb' to make 'b' a proper suffix. Fix the scheduling information for some of them.
Some of the scheduling information was only present for the 'rb' version' and not the 'rr' version. Now we match 'rr(b?)'
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320320
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:43 +0000 (17:42 +0000)]
[X86] Add VCVTQQ2PS to the skylake server scheduler models.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320319
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:42 +0000 (17:42 +0000)]
[X86] Add VPMULLWZ256 to the skylake server scheduler model
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320318
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:41 +0000 (17:42 +0000)]
[X86] Add 256/512-bit EVEX VPSADBW instructions to skylake server scheduler model.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320317
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:39 +0000 (17:42 +0000)]
[X86] Fix a few instructions that were named Z512 instead of just Z.
This makes things consistent with our normal instruction naming.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320316
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:38 +0000 (17:42 +0000)]
[X86] Add VPSRLWZrr to skylake server scheduler model.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320315
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:37 +0000 (17:42 +0000)]
[X86] Add VPUNPCKLWDZrr to skylake server scheduler model.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320314
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 17:42:36 +0000 (17:42 +0000)]
[X86] Adjust tablegen includes so we can use Instructions in scheduler models instead of just instregexs.
This separates the CPU specific scheduler model includes to occur after the instructions. Moves the instruction includes between the basic scheduler information and the CPU specific scheduler models.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320313
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 10 Dec 2017 17:25:54 +0000 (17:25 +0000)]
[SimplifyLibCalls] propagate FMF when folding pow(x, -1.0) call
Follow-up for a bug that's similar to:
https://bugs.llvm.org/show_bug.cgi?id=35601
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320312
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 10 Dec 2017 17:21:51 +0000 (17:21 +0000)]
[InstCombine] add test for pow(x, -1.0) with FMF; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320311
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 10 Dec 2017 16:52:26 +0000 (16:52 +0000)]
[SimplifyLibCalls] propagate FMF when folding pow(x, 2.0) call (PR35601)
This should fix the larger problem with sqrt shown in:
https://bugs.llvm.org/show_bug.cgi?id=35601
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320310
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sun, 10 Dec 2017 16:43:34 +0000 (16:43 +0000)]
[InstCombine] add test for pow(x, 2.0) with FMF; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320309
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 13:49:51 +0000 (13:49 +0000)]
[X86] Flag BroadWell scheduler model as complete
Locally tag COPY as WriteMove, which has caused some reg-reg + reg-mem instruction tests to reorder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320308
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 13:41:29 +0000 (13:41 +0000)]
Regenerate some AVX2+ scheduling tests that got missed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320307
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 13:00:37 +0000 (13:00 +0000)]
Strip trailing whitespace. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320306
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 12:59:55 +0000 (12:59 +0000)]
Regenerate some scheduling tests that got missed
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320305
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 12:43:53 +0000 (12:43 +0000)]
[X86] Flag ZNVER1 scheduler model as complete
We just have to locally tag COPY as WriteMove
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320304
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 12:36:29 +0000 (12:36 +0000)]
[X86] Flag SLM scheduler model as complete
We just have to locally tag COPY as WriteMove
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320303
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 12:26:35 +0000 (12:26 +0000)]
[X86][AVX[ Tag VZEROALL/VZEROUPPER instructions scheduler classes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320302
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 12:08:04 +0000 (12:08 +0000)]
[X86] Tag SSE4A instructions as SSE INTALU scheduler classes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320301
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 11:51:29 +0000 (11:51 +0000)]
[X86] Flag BTVER2 scheduler model as complete
We just have to locally tag COPY as WriteMove
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320300
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 11:34:08 +0000 (11:34 +0000)]
[X86] Tag ADJSTACK instructions as INTALU scheduler class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320299
91177308-0d34-0410-b5e6-
96231b3b80d8
Dorit Nuzman [Sun, 10 Dec 2017 11:13:35 +0000 (11:13 +0000)]
[SCEV] Fix wrong Equal predicate created in getAddRecForPhiWithCasts
CreateAddRecFromPHIWithCastsImpl() adds an IncrementNUSW overflow predicate
which allows the PSCEV rewriter to rewrite this scev expression:
(zext i8 {0, + , (trunc i32 step to i8)} to i32)
into
{0, +, (sext i8 (trunc i32 step to i8) to i32)}
But then it adds the wrong Equal predicate:
%step == (zext i8 (trunc i32 %step to i8) to i32).
instead of:
%step == (sext i8 (trunc i32 %step to i8) to i32)
This is fixed here.
Differential Revision: https://reviews.llvm.org/D40641
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320298
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 10 Dec 2017 10:08:21 +0000 (10:08 +0000)]
[X86] Tag MORESTACK instructions as ret scheduler class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320296
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:45 +0000 (09:14 +0000)]
[X86] Fix duplicate entries in skylake server scheduler model by changing Z128 to Z256
Based on the fact that the 'Y' version of the instruction is next to this, I assume Z256 is the intended value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320295
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:44 +0000 (09:14 +0000)]
[X86] Add MOVQI2PQIrm, MOVSDmr, and MOVSDrm to scheduler information
The VEX versions were present but not the legacy SSE versions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320294
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:42 +0000 (09:14 +0000)]
[X86] Add LEA64_32r to scheduler models for Sandybridge,Haswell,Broadwell,Skylake
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320293
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:41 +0000 (09:14 +0000)]
[X86] Add IN16/OUT16 to scheduling information for Haswell,Broadwell,Skylake
Sandy Bridge is also missing it, but it has other issues. See PR35590.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320292
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:39 +0000 (09:14 +0000)]
[X86] Fix scheduler models to support ADD32ri in addition to ADD32ri8. Similar for all sizes of AND/OR/XOR/SUB/ADC/SBB/CMP.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320291
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:38 +0000 (09:14 +0000)]
[X86] Rename some instructions so that 'b' is added as a suffix instead of replacing an 'r'
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320290
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:37 +0000 (09:14 +0000)]
[X86] Add CMPSDrr/rm to the scheduler models.
Somehow CMPSSrr/rm was there and the VEX version was there, but this was consistently missing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320289
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 09:14:35 +0000 (09:14 +0000)]
[Docs] Fix typo in scheduler model documentation. enumemation->enumeration
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320288
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Sun, 10 Dec 2017 08:43:19 +0000 (08:43 +0000)]
PowerPC: support external pid instructions in MC layer.
This adds assembly & disassembly support for the e500mc "external pid"
instructions.
See https://reviews.llvm.org/D39249.
Patch by vit9696 <vit9696@avp.su>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320287
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Sun, 10 Dec 2017 07:39:53 +0000 (07:39 +0000)]
[PGO] change arg type to uint64_t to match member field type
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320285
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 04:07:28 +0000 (04:07 +0000)]
[X86] Rename the rb form of scalar ADD/SUB/MUL/DIV to include _Int since they can only be selected by intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320283
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 03:16:38 +0000 (03:16 +0000)]
[X86] Correct the _Int part of more scheduler model instrexes. Put _b in the correct order relative to _Int
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320282
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 10 Dec 2017 03:16:36 +0000 (03:16 +0000)]
[X86] Remove ReadAfterLd from several several rb instructions
This affects CVTSD2SS, FMA, RCP28, RSQRT28, and SQRT scalar instructions
'b' here refers to 'sae' not broadcast. These aren't memory instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320281
91177308-0d34-0410-b5e6-
96231b3b80d8