Commit Graph

163408 Commits

Author SHA1 Message Date
Xin Tong
7f02d6427a [CallSiteSplit] Make sure we remove nonnull if the parameter turns out to be a constant.
Summary: We do not need nonull attribute if we know an argument is going to be constant.

Reviewers: junbuml, davide, fhahn

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45608

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330641 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 20:09:08 +00:00
Gabor Buella
4dd24c474b [X86] Revert r330638 - accidental commit
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330640 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 20:05:51 +00:00
George Burgess IV
17e9db0c42 Fix a broken typedef; NFCI
Richard Smith noted that `typedef typename iplist::iplist_impl_type
iplist_impl_type` is incorrect, per
http://eel.is/c++draft/basic.scope#class-2

It seems that neither clang nor gcc get too angry about this, but a
newer version of msvc does.

Thanks to jcmac on IRC for pointing this out!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330639 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 20:03:00 +00:00
Gabor Buella
abc9d03bfc [X86] movdiri and movdir64b instructions
Reviewers: craig.topper


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330638 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 20:00:59 +00:00
Bjorn Pettersson
dee6650968 [MemCpyOpt] Skip optimizing basic blocks not reachable from entry
Summary:
Skip basic blocks not reachable from the entry node
in MemCpyOptPass::iterateOnFunction.

Code that is unreachable may have properties that do not exist
for reachable code (an instruction in a basic block can for
example be dominated by a later instruction in the same basic
block, for example if there is a single block loop).
MemCpyOptPass::processStore is only safe to use for reachable
basic blocks, since it may iterate past the basic block
beginning when used for unreachable blocks. By simply skipping
to optimize unreachable basic blocks we can avoid asserts such
as "Assertion `!NodePtr->isKnownSentinel()' failed."
in MemCpyOptPass::processStore.

The problem was detected by fuzz tests.

Reviewers: eli.friedman, dneilson, efriedma

Reviewed By: efriedma

Subscribers: efriedma, llvm-commits

Differential Revision: https://reviews.llvm.org/D45889

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330635 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 19:55:04 +00:00
Sam Clegg
3f46946fed [WebAssembly] MC: Refactor section creation code
Remove the use of default argument in favor of a separate
startCustomSection method.

Differential Revision: https://reviews.llvm.org/D45794

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330632 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 19:16:19 +00:00
Quentin Colombet
f48113f0d5 [CODE_OWNERS] Update my email address.
NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330631 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 19:09:49 +00:00
Peter Collingbourne
cebbb7c075 Reland r329956, "AArch64: Introduce a DAG combine for folding offsets into addresses.", with a fix for the bot failure.
This reland includes a check to prevent the DAG combiner from folding an
offset that is smaller than the existing one. This can cause oscillations
between two possible DAGs, which was the cause of the hang and later assertion
failure observed on the lnt-ctmark-aarch64-O3-flto bot.
http://green.lab.llvm.org/green/job/lnt-ctmark-aarch64-O3-flto/2024/

Original commit message:
> This is a code size win in code that takes offseted addresses
> frequently, such as C++ constructors that typically need to compute
> an offseted address of a vtable. This reduces the size of Chromium
> for Android's .text section by 108KB.

Differential Revision: https://reviews.llvm.org/D45199

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330630 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 19:09:34 +00:00
Daniel Neilson
6c92ba3e0b [DSE] Teach the pass that atomic memory intrinsics are stores.
Summary:
This change teaches DSE that the atomic memory intrinsics are stores
that can be eliminated, and can allow other stores to be eliminated.
This change specifically does not teach DSE that these intrinsics
can be partially eliminated (i.e. length reduced, and dest/src changed);
that will be handled in another change.

Reviewers: mkazantsev, skatkov, apilipenko, efriedma, rsmith

Reviewed By: efriedma

Subscribers: dmgreen, llvm-commits

Differential Revision: https://reviews.llvm.org/D45535

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330629 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 19:06:49 +00:00
Matthew Simpson
871b8fe06d [AArch64] Add cost model test case for transpose
This patch adds a cost model test case for vector shuffles having transpose
masks. The given costs are inaccurate and will be updated in a follow-on patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330625 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 18:21:29 +00:00
Alex Shlyapnikov
b6ec859b6c [HWASan] Switch back to fixed shadow mapping for x86-64
For now switch back to fixed shadow mapping for x86-64 due to the issues
with IFUNC linking on older binutils. More details will be added to
https://bugs.chromium.org/p/chromium/issues/detail?id=835864

Differential Revision: https://reviews.llvm.org/D45840

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330623 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 18:14:39 +00:00
Craig Topper
14d8c6dfc0 [X86] Add disassembler test cases for bswap.
This demonstrates a bug where the encoding for a 16-bit bswap prints a 16-bit register and a 32-bit mnemonic. Intel docs say 16-bit bswap is undefined. We should either claim it as an invalid encoding or we should print a 16-bit mnemonic.

objdump does print the encoding as bswap with a 16-bit register. But it doesn't seem to ever print a suffix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330621 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 17:47:33 +00:00
Vedant Kumar
aeb3e4fcbb [SelectionDAG] Dump debug locs in SDNodes
This helps debug issues where selection-dag assigns the wrong location
to an instruction.

Differential Revision: https://reviews.llvm.org/D45913

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330618 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 17:18:24 +00:00
Simon Pilgrim
c994340063 [MC] Remove MachineInstr reference in MC layer (PR37160)
Only add support for getSchedInfoStr(const MachineInstr &MI) at the TargetSubtargetInfo level.

Really, the getSchedInfoStr calls need to be removed entirely, we should just return a latency/rthroughput through the subtarget and keep a string creation helper function somewhere else.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330615 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 16:59:06 +00:00
Reid Kleckner
72775a354c Fix -Wtautological-compare warning with npos on Windows
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330614 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 16:47:27 +00:00
Matt Arsenault
8c0fb2c473 AMDGPU: Move a flawed assert when spilling SGPRs
It's possible to validly spill the frame offset register
in a call sequence to a VGPR. There are definitely issues
with SGPR spilling to memory, so move the assert later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330612 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 16:13:30 +00:00
Simon Pilgrim
c07c4e0298 [X86] Replace x87 instregex with instrs if they only match one instruction
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330611 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 16:10:50 +00:00
Adrian Prantl
48c9175fe5 Fix computeSymbolSizes SEGFAULT on invalid file
We use llvm-symbolizer in some production systems, and we run it
against all possibly related files, including some that are not
ELF. We noticed that for some of those invalid files, llvm-symbolizer
would crash with SEGFAULT. Here is an example of such a file.

It is due to that in computeSymbolSizes, a loop uses condition

  for (unsigned I = 0, N = Addresses.size() - 1; I < N; ++I) {

where if Addresses.size() is 0, N would overflow and causing the loop
to access invalid memory.

Instead of patching the loop conditions, the commit makes so that the
function returns early if Addresses is empty.

Validated by checking that llvm-symbolizer no longer crashes.

Patch by Teng Qin!

Differential Revision: https://reviews.llvm.org/D44285

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330610 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 16:08:01 +00:00
Matt Arsenault
7c20cc0669 AMDGPU: Assign enum name to stack ID
Also assert that it is correct for SGPRs. There is currently a bug
where stack slot coloring replaces SGPR spill FIs with one with
the default ID, which results in a more confusing assert later
about a dead object.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330607 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 15:51:26 +00:00
Matt Arsenault
9269b2bccb StackSlotColoring: Fix missing skipFunction check
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330606 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 15:51:21 +00:00
Daniel Neilson
91f2b63a06 [SelectionDAG] Refactor lowering of atomic memory intrinsics.
Summary:
This just refactors the lowering of the atomic memory intrinsics to more
closely match the code patterns used in the lowering of the non-atomic
memory intrinsics. Specifically, we encapsulate the lowering in
SelectionDAG::getAtomicMem*() functions rather than embedding
the code directly in the SelectionDAGBuilder code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330603 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 15:40:37 +00:00
Robert Widmann
cd997a7a91 [LLVM-C] DIBuilderBindings for Subrange and Arrays
Summary: Move Go bindings for subranges and DINode arrays.

Reviewers: harlanhaskins, whitequark, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45933

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330594 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 14:29:33 +00:00
Nico Weber
5a0bf254ce Sort a target list a bit better.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330593 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 14:28:49 +00:00
Alexey Bataev
ec94ea919c [DEBUGINFO, NVPTX] Add the test for the debug info of the local
variables, NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330592 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 14:00:53 +00:00
Robert Widmann
2fbfc40760 [LLVM-C] Finish Up Scope Bindings
Summary: Adds bindings for Module and NameSpace scopes and LLVMDIBuilderCreateForwardDecl, a counterpart to LLVMDIBuilderCreateReplaceableCompositeType.

Reviewers: harlanhaskins, whitequark, deadalnix

Reviewed By: whitequark

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45934

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330591 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:51:43 +00:00
Marianne Mailhot-Sarrasin
75dd90ec3a [doc] Removed obsolete -count-aa from AliasAnalysis documentation
Summary:
This patch removes references to AliasAnalysisCounter pass from the AliasAnalysis documentation. That pass have been eliminated in 2015, at revision trunk@247167.

Reviewed By: hfinkel

Differential Revision: https://reviews.llvm.org/D45876

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330590 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:45:28 +00:00
Simon Pilgrim
a5418594dc [X86] Remove instregex matching from CLAC/STAC.
Note - noticed this as the STAC case as it was unintentionally matching against *STACK* pseudo instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330588 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:24:17 +00:00
Nico Weber
99e23bd0c8 List cpp file only once (was added in 147117 and 147117 as build fix each).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330587 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:11:51 +00:00
Nicolai Haehnle
3db53ca654 AMDGPU: Fix SDWA peephole for V_AND_B32
Summary:
Found by inspection. We care about the operand that *doesn't*
contain the immediate.

I believe this is currently not hit because we fold 0xff / 0xffff
immediates only later.

Change-Id: Ic3cf8538bc7da5eff3200d96eccf9d339e6345a7

Reviewers: arsenm, rampitec

Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D45886

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330586 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:06:03 +00:00
Nicolai Haehnle
ae99d3d94c AMDGPU: Fix a corner case crash in SIOptimizeExecMasking
Summary:
See the new test case; this is really unlikely to happen with real code,
but I ran into this while attempting to bugpoint-reduce a different issue.

Change-Id: I9ade1dc1aa8fd9c4d9fc83661d7b80e310b5c4a6

Reviewers: arsenm, rampitec

Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D45885

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330585 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 13:05:50 +00:00
Nico Weber
49621ae232 Consistently sort add_subdirectory calls in lib/Target/*/CMakeLists.txt
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330584 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 12:49:34 +00:00
Sander de Smalen
5f9640830b [AArch64][SVE] Asm: Support for contiguous, non-faulting LDNF1 (scalar+imm) load instructions
Reviewers: fhahn, rengolin, javed.absar, huntergr, SjoerdMeijer, t.p.northover, echristo, evandro

Reviewed By: rengolin

Subscribers: tschuett, kristof.beyls, llvm-commits

Differential Revision: https://reviews.llvm.org/D45684

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330583 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 12:43:19 +00:00
Max Kazantsev
7321142107 [LoopRotate] Fix incorrect SCEV invalidation in loop rotation
LoopRotate only invalidates innermost loops while the changes that it makes may
also affert any of this parents. With patch rL329047, SCEV becomes much smarter
about calculation of exit counts for outer loops, so we cannot assume that they are
not affected.

Differential Revision: https://reviews.llvm.org/D45945


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330582 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 12:33:31 +00:00
Simon Pilgrim
8922c10918 [X86] Remove unnecessary MMX reg-mem InstRW scheduler overrides.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330581 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 11:57:15 +00:00
Max Kazantsev
b66694ab52 [LoopUnroll] Fix potentially incorrect SCEV invalidation in UnrollRuntime
Current runtime unrolling invalidates parent loop saying that it might have changed
after the inner loop has changed, but it doesn't bother to do the same to its parents.
With patch rL329047, SCEV becomes much smarter about calculation of exit counts for
outer loops. We might need to invalidate not only the immediate parent, but also
any of its parents as well.

There is no clear evidence that there is some miscompile happening because of this
(at least I don't have such test), but the common sense says that the current code
is wrong.

Differential Revision: https://reviews.llvm.org/D45940
Reviewed By: chandlerc


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330577 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 10:39:38 +00:00
Max Kazantsev
d356fd6732 [LoopSimplify] Fix incorrect SCEV invalidation
In the function `simplifyOneLoop` we optimistically assume that changes in the
inner loop only affect this very loop and have no impact on its parents. In fact,
after rL329047 has been merged, we can now calculate exit counts for outer
loops which may depend on inner loops. Thus, we need to invalidate all parents
when we do something to a loop.

There is an evidence of incorrect behavior of `simplifyOneLoop`: when we insert
`SE->verify()` check in the end of this funciton, it fails on a bunch of existing
test, in particular:

    LLVM :: Transforms/LoopUnroll/peel-loop-not-forced.ll
    LLVM :: Transforms/LoopUnroll/peel-loop-pgo.ll
    LLVM :: Transforms/LoopUnroll/peel-loop.ll
    LLVM :: Transforms/LoopUnroll/peel-loop2.ll

Note that previously we have fixed issues of this variety, see rL328483.
This patch makes this function invalidate the outermost loop properly.

Differential Revision: https://reviews.llvm.org/D45937
Reviewed By: chandlerc


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330576 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 10:32:37 +00:00
Simon Tatham
0a556c8c15 Fix BNF nits in TableGen language reference.
Summary:
In the course of writing an experimental ANTLR grammar based on this
document, I found three errors in the documented BNF:

SimpleValues of dag type are allowed to have no operands at all after
the initial DagArg specifying the operator. For example, the value
(outs) is extremely common in backends; an example in the test suite
is test/TableGen/AsmVariant.td line 30. But the BNF doesn't allow
DagArgList to expand to the empty string (it must contain at least one
DagArg), and therefore the DagArgList specifying the operands in the
dag-shaped production for SimpleValue should be optional.

In the production for BodyItem with a 'let' and an optional RangeList,
the RangeList should have braces around it if it's present, matching
code such as "let E{7-0} = ..." on test/TableGen/BitsInit.td line 42.
Those braces aren't included in the RangeList nonterminal itself, so
instead they need to be part of the optional segment of the BodyItem
production.

Finally, the identifier after 'defm' should be optional. Again, this
is very common in the real back end .td files; an example in the test
suite is in test/TableGen/defmclass.td line 49.

Reviewers: rengolin, nhaehnle, stoklund

Reviewed By: nhaehnle

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45818

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330570 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 09:15:47 +00:00
Simon Tatham
1b68b2eca5 Test commit access.
Should be a harmless trimming of trailing whitespace from a
documentation file.

(There are other instances of trailing whitespace in this file alone.
I've only fixed one of them, on the basis that that way the rest are
still available for other people's commit-access tests :-)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330567 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 08:41:53 +00:00
Sander de Smalen
83cd5098e0 [AArch64][SVE] Asm: Support for structured ST2, ST3 and ST4 (scalar+imm) store instructions.
Reviewers: fhahn, rengolin, javed.absar, SjoerdMeijer, t.p.northover, echristo, evandro, huntergr

Reviewed By: rengolin

Subscribers: tschuett, kristof.beyls, llvm-commits

Differential Revision: https://reviews.llvm.org/D45681

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330565 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 07:50:35 +00:00
Chandler Carruth
a9104c62a0 [PM/LoopUnswitch] Remove a buggy assert in the new loop unswitch.
The condition this was asserting doesn't actually hold. I've added
comments to explain why, removed the assert, and added a fun test case
reduced out of 403.gcc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330564 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 06:58:36 +00:00
Craig Topper
eeb236b7dc [X86] Add VEX_WIG to VEX encoded version of VCMPPSY/VCMPPDY.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330563 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 04:50:01 +00:00
Chandler Carruth
57b516a175 [PM/LoopUnswitch] Fix comment typo. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330560 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 00:48:42 +00:00
Simon Pilgrim
7b19e4fd54 [X86][Znver1] Remove unnecessary BMI1 ANDN InstRW overrides.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330558 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 21:37:08 +00:00
Simon Pilgrim
97d0c20807 [llvm-mca][X86] Add BMI/LZCNT/POPCNT resource tests to all relevant models
The SandyBridge BMI tests are actually run on IvyBridge as that's the first lowest CPU that actually support the ISAs (but still use the SandyBridge model).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330556 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 20:42:24 +00:00
Robert Widmann
aec06286e3 [LLVM-C] Add DIBuilder Bindings For Variable Creation
Summary: Wrap LLVMDIBuilderCreateAutoVariable, LLVMDIBuilderCreateParameterVariable, LLVMDIBuilderCreateExpression, and move and correct LLVMDIBuilderInsertDeclareBefore and LLVMDIBuilderInsertDeclareAtEnd from the Go bindings to the C bindings.

Reviewers: harlanhaskins, whitequark, deadalnix

Reviewed By: harlanhaskins, whitequark

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45928

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330555 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 19:24:44 +00:00
Simon Pilgrim
3070e9a666 [X86] Remove unnecessary WriteFBlend/WriteBlend InstRW overrides.
Fixed a lot of the default classes which were being completely overridden.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330554 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 18:35:53 +00:00
Simon Pilgrim
fe589a2b49 [X86] Remove unnecessary WriteFMul/WriteFRcp/WriteFRsqrt InstRW overrides.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330553 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 18:09:50 +00:00
Simon Pilgrim
ebe1329c9c [X86] Remove unnecessary CVT instrw overrides.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330552 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 17:54:58 +00:00
Andres Freund
a3df84bd43 Test commit access.
Remove trailing whitespace.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330551 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 17:53:34 +00:00
Sanjay Patel
e1bbe84207 [PatternMatch] allow undef elements when matching a vector zero
This is the last step in getting constant pattern matchers to allow
undef elements in constant vectors.

I'm adding a dedicated m_ZeroInt() function and building m_Zero() from
that. In most cases, calling code can be updated to use m_ZeroInt()
directly when there's no need to match pointers, but I'm leaving that
efficiency optimization as a follow-up step because it's not always
clear when that's ok.

There are just enough icmp folds in InstSimplify that can be used for 
integer or pointer types, that we probably still want a generic m_Zero()
for those cases. Otherwise, we could eliminate it (and possibly add a
m_NullPtr() as an alias for isa<ConstantPointerNull>()).

We're conservatively returning a full zero vector (zeroinitializer) in
InstSimplify/InstCombine on some of these folds (see diffs in InstSimplify),
but I'm not sure if that's actually necessary in all cases. We may be 
able to propagate an undef lane instead. One test where this happens is 
marked with 'TODO'.
 


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330550 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-22 17:07:44 +00:00