OSDN Git Service

android-x86/external-llvm.git
6 years agoMove tests associated with transforms moved in r321467
Philip Reames [Sat, 30 Dec 2017 03:13:00 +0000 (03:13 +0000)]
Move tests associated with transforms moved in r321467

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321572 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MachineOperand] Fix LiveDebugVariables code after isRenamable change.
Geoff Berry [Fri, 29 Dec 2017 21:01:09 +0000 (21:01 +0000)]
[MachineOperand] Fix LiveDebugVariables code after isRenamable change.

Fix code in LiveDebugVariables that was changing def MachineOperands to
uses, which will hit an assert for dead operands after the change to add
the renamable bit to MachineOperands.  Avoid the assert by clearing the
dead bit before changing the operand to a use.

Fixes issue reported in out of tree target by Jesper Antonsson at Ericsson.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321571 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoStructurizeCFG: Use phi iterator range
Matt Arsenault [Fri, 29 Dec 2017 19:25:57 +0000 (19:25 +0000)]
StructurizeCFG: Use phi iterator range

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321568 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoIR: Fix BasicBlock::phis for empty blocks
Matt Arsenault [Fri, 29 Dec 2017 19:25:53 +0000 (19:25 +0000)]
IR: Fix BasicBlock::phis for empty blocks

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321567 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[mips] Provide correct descriptions of asm constraints in the comments. NFC
Simon Atanasyan [Fri, 29 Dec 2017 19:18:30 +0000 (19:18 +0000)]
[mips] Provide correct descriptions of asm constraints in the comments. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321566 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[mips] Replace assert by an error message
Simon Atanasyan [Fri, 29 Dec 2017 19:18:24 +0000 (19:18 +0000)]
[mips] Replace assert by an error message

Initially, if the `c` constraint applied to the wrong data type that
causes LLVM to assert. This commit replaces the assert by an error
message.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321565 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAMDGPU: Use unique PSVs for buffer resources
Matt Arsenault [Fri, 29 Dec 2017 17:18:21 +0000 (17:18 +0000)]
AMDGPU: Use unique PSVs for buffer resources

Also fixes using the wrong memory type for some
intrinsics when custom lowering them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321557 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAMDGPU: Remove mayLoad/hasSideEffects from MIMG stores
Matt Arsenault [Fri, 29 Dec 2017 17:18:18 +0000 (17:18 +0000)]
AMDGPU: Remove mayLoad/hasSideEffects from MIMG stores

Atomics still have hasSideEffects set on them because
of the mess that is the memory properties.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321556 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAMDGPU: Implement getTgtMemIntrinsic for images
Matt Arsenault [Fri, 29 Dec 2017 17:18:14 +0000 (17:18 +0000)]
AMDGPU: Implement getTgtMemIntrinsic for images

Currently all images are lowered to have a single
image PseudoSourceValue. Image stores happen to have
overly strict mayLoad/mayStore/hasSideEffects flags
set on them, so this happens to work. When these
are fixed to be correct, the scheduler breaks
this because the identical PSVs are assumed to
be the same address. These need to be unique
to the image resource value.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321555 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][SSE] Match PSHUFLW/PSHUFHW + PSHUFD vXi16 shuffle patterns (PR34686)
Simon Pilgrim [Fri, 29 Dec 2017 14:41:50 +0000 (14:41 +0000)]
[X86][SSE] Match PSHUFLW/PSHUFHW + PSHUFD vXi16 shuffle patterns (PR34686)

As noted in PR34686, we are relying on a PSHUFD+PSHUFLW+PSHUFHW shuffle chain for most general vXi16 unary shuffles.

This patch checks for simpler PSHUFLW+PSHUFD and PSHUFHW+PSHUFD cases beforehand, building on some existing code that just handled splat shuffles.

By doing so we also prevent premature use of PSHUFB shuffles which can be slower and require the creation/loading of constant shuffle masks.

We now have the 'fast-variable-shuffle' option for hardware that prefers combining 2 or more shuffles to VPSHUFB etc.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321553 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AMDGPU][MC] Incorrect parsing of flat/global atomic modifiers
Dmitry Preobrazhensky [Fri, 29 Dec 2017 13:55:11 +0000 (13:55 +0000)]
[AMDGPU][MC] Incorrect parsing of flat/global atomic modifiers

See bug 35730: https://bugs.llvm.org/show_bug.cgi?id=35730

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

Reviewers: vpykhtin, artem.tamazov, arsenm

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321552 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PowerPC] Fix for PR35688 - handle out-of-range values for r+r to r+i conversion
Nemanja Ivanovic [Fri, 29 Dec 2017 12:22:27 +0000 (12:22 +0000)]
[PowerPC] Fix for PR35688 - handle out-of-range values for r+r to r+i conversion

Revision 320791 introduced a pass that transforms reg+reg instructions to
reg+imm if they're fed by "load immediate". However, it didn't
handle out-of-range shifts correctly as reported in PR35688.
This patch fixes that and therefore the PR.

Furthermore, there was undefined behaviour in the patch where the RHS of an
initialization expression was 32 bits and constant `1` was shifted left 32
bits. This was fixed by ensuring the RHS is 64 bits just like the LHS.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321551 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SCEV] Missing depth propagation in recursive call
Max Kazantsev [Fri, 29 Dec 2017 08:44:32 +0000 (08:44 +0000)]
[SCEV] Missing depth propagation in recursive call

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321550 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix incorrect operand sizes for some MMX instructions: punpcklwd, punpcklbw and punpc...
Andrew V. Tischenko [Fri, 29 Dec 2017 08:31:01 +0000 (08:31 +0000)]
Fix incorrect operand sizes for some MMX instructions: punpcklwd, punpcklbw and punpckldq.
Differential Revision: https://reviews.llvm.org/D41595

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321549 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PM] pass -debug-pass-manager flag into FunctionToLoopPassAdaptor's canonicalization PM
Fedor Sergeev [Fri, 29 Dec 2017 08:16:06 +0000 (08:16 +0000)]
[PM] pass -debug-pass-manager flag into FunctionToLoopPassAdaptor's canonicalization PM

Summary:
New pass manager driver passes DebugPM (-debug-pass-manager) flag into
individual PassManager constructors in order to enable debug logging.
FunctionToLoopPassAdaptor has its own internal LoopCanonicalizationPM
which never gets its debug logging enabled and that means canonicalization
passes like LoopSimplify are never present in -debug-pass-manager output.

Extending FunctionToLoopPassAdaptor's constructor and
createFunctionToLoopPassAdaptor wrapper with an optional
boolean DebugLogging argument.

Passing debug-logging flags there as appropriate.

Reviewers: chandlerc, davide

Reviewed By: davide

Subscribers: mehdi_amini, eraman, llvm-commits, JDevlieghere

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321548 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAvoid modifying DbgInfo while looping in salvageDebuginfo
Dimitry Andric [Thu, 28 Dec 2017 23:42:44 +0000 (23:42 +0000)]
Avoid modifying DbgInfo while looping in salvageDebuginfo

Summary:
I have been getting rather difficult to reproduce SIGBUS crashes when
compiling certain FreeBSD sources, and their stack traces pointed
squarely at `SelectionDAG::salvageDebugInfo()`:

```
Core was generated by `/usr/obj/share/dim/src/freebsd/clang600-import/amd64.amd64/tmp/usr/bin/cc -cc1 -'.
Program terminated with signal SIGBUS, Bus error.
#0  isInvalidated () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h:115
115       bool isInvalidated() const { return Invalid; }
(gdb) bt
#0  isInvalidated () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h:115
#1  salvageDebugInfo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:7116
#2  0x00000000033b2516 in operator() () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3595
#3  __invoke<(lambda at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3593:59) &, llvm::SDNode *, llvm::SDNode *> () at /usr/include/c++/v1/type_traits:4323
#4  __call<(lambda at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3593:59) &, llvm::SDNode *, llvm::SDNode *> () at /usr/include/c++/v1/__functional_base:349
#5  operator() () at /usr/include/c++/v1/functional:1562
#6  0x00000000033b0817 in operator() () at /usr/include/c++/v1/functional:1916
#7  NodeDeleted () at /share/dim/src/freebsd/clang600-import/contrib/llvm/include/llvm/CodeGen/SelectionDAG.h:293
#8  0x0000000003529dde in RemoveDeadNodes () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:610
#9  0x00000000035556df in MorphNodeTo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:6794
#10 0x00000000033a9acc in MorphNode () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:2594
#11 0x00000000033ac80b in SelectCodeCommon () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3601
#12 0x00000000023d464b in SelectCode () at /usr/obj/share/dim/src/freebsd/clang600-import/amd64.amd64/tmp/obj-tools/lib/clang/libllvm/X86GenDAGISel.inc:282902
#13 Select () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:3072
#14 0x00000000033a5afa in DoInstructionSelection () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:988
#15 0x00000000033a4e1a in CodeGenAndEmitDAG () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:868
#16 0x00000000033a2643 in SelectAllBasicBlocks () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1624
#17 0x000000000339f158 in runOnMachineFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:466
#18 0x00000000023d03c4 in runOnMachineFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:175
#19 0x00000000035cc8c2 in runOnFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/MachineFunctionPass.cpp:62
#20 0x00000000030dca9a in runOnFunction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1520
#21 0x00000000030dccf3 in runOnModule () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1541
#22 0x00000000030dd228 in runOnModule () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1597
#23 run () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/IR/LegacyPassManager.cpp:1700
#24 0x00000000014db578 in EmitAssembly () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:815
#25 EmitBackendOutput () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/BackendUtil.cpp:1181
#26 0x00000000014d5b26 in HandleTranslationUnit () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp:292
#27 0x0000000001c4c332 in ParseAST () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Parse/ParseAST.cpp:159
#28 0x00000000015d546c in Execute () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:897
#29 0x0000000001cec311 in ExecuteAction () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:991
#30 0x00000000014b4f81 in ExecuteCompilerInvocation () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:252
#31 0x00000000014aa73f in cc1_main () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/cc1_main.cpp:221
#32 0x00000000014b2928 in ExecuteCC1Tool () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/driver.cpp:309
#33 main () at /share/dim/src/freebsd/clang600-import/contrib/llvm/tools/clang/tools/driver/driver.cpp:388
(gdb) frame 1
#1  salvageDebugInfo () at /share/dim/src/freebsd/clang600-import/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:7116
7116        if (DV->isInvalidated())
(gdb) disassemble
Dump of assembler code for function salvageDebugInfo():
[...]
   0x0000000003557348 <+744>:   nopl   0x0(%rax,%rax,1)
   0x0000000003557350 <+752>:   mov    (%r12),%r13
=> 0x0000000003557354 <+756>:   cmpb   $0x0,0x31(%r13)
   0x0000000003557359 <+761>:   jne    0x35573b0 <salvageDebugInfo()+848>
(gdb) info registers
[...]
r13            0x5a5a5a5a5a5a5a5a       6510615555426900570
```

The `0x5a5a5a5a5a5a5a5a` value in `r13` indicates the memory was either
uninitialized, or already freed.

Unfortunately I do not have a simple self-contained test case for this.
However, it seems pretty clear that the call to `AddDbgValue()` in
`salvageDebugInfo()` causes the problems, since it modifies
`SelectionDag::DbgInfo` while looping through one of its DenseMaps:

```
void SelectionDAG::salvageDebugInfo(SDNode &N) {
[...]
  for (auto DV : GetDbgValues(&N)) {
    if (DV->isInvalidated())
      continue;
[...]
        AddDbgValue(Clone, N0.getNode(), false);
[...]
  }
}
```

At least, if I comment out the `AddDbgValue()` call, the crashes go
away.  I propose to change this function slightly, similar to the
`SelectionDAG::transferDbgValues()` function just above it, to save the
cloned SDDbgValues in a separate SmallVector, and only call
AddDbgValue() on them after the for loop is done.

Reviewers: aprantl, bogner, bkramer, davide

Reviewed By: davide

Subscribers: davide, krytarowski, JDevlieghere, emaste, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321545 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[x86] add tests for potential memcmp expansion (PR33325); NFC
Sanjay Patel [Thu, 28 Dec 2017 22:07:47 +0000 (22:07 +0000)]
[x86] add tests for potential memcmp expansion (PR33325); NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321542 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoUnbreak test relying on debug output after r321540.
Benjamin Kramer [Thu, 28 Dec 2017 21:36:10 +0000 (21:36 +0000)]
Unbreak test relying on debug output after r321540.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321541 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SelectionDAG] Add creating new node debug messages for load, store, gather, and...
Craig Topper [Thu, 28 Dec 2017 19:46:16 +0000 (19:46 +0000)]
[SelectionDAG] Add creating new node debug messages for load, store, gather, and scatter.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321540 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[KnownBits] Remove asserts from KnownBits::makeNegative/makeNonNegative
Craig Topper [Thu, 28 Dec 2017 19:46:14 +0000 (19:46 +0000)]
[KnownBits] Remove asserts from KnownBits::makeNegative/makeNonNegative

Many of the callers don't guarantee there is no conflict before calling these and instead check for conflicts later.

The makeNegative/makeNonNegative methods replaced Known.One.setSignBit() and Known.Zero.setSignBit() calls that didn't have asserts originally. So removing the asserts is no worse than the original code.

Fixes PR35769

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321539 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] When lowering extending loads from v2i1/v4i1, if we have VLX, use a narrower...
Craig Topper [Thu, 28 Dec 2017 19:46:11 +0000 (19:46 +0000)]
[X86] When lowering extending loads from v2i1/v4i1, if we have VLX, use a narrower extend.

Previously we used an extend from v8i1 to v8i32/v8i64. Then extracted to the final width. But if we have VLX we should extract first. This way we don't end up with an overly large extend.

This allows us to use vcmpeq to make all ones for the sign extend when DQI isn't available. Otherwise we get a VPTERNLOG.

If we make v2i1/v4i1 legal like proposed in D41560, we could always do this and rely on the lowering of the extend to widen when necessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321538 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use ISD::CONCAT_VECTORS when splitting 256-bit loads in combineLoad.
Craig Topper [Thu, 28 Dec 2017 19:46:06 +0000 (19:46 +0000)]
[X86] Use ISD::CONCAT_VECTORS when splitting 256-bit loads in combineLoad.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321537 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix inconsistencies in different places where we split loads/stores.
Craig Topper [Thu, 28 Dec 2017 19:46:03 +0000 (19:46 +0000)]
[X86] Fix inconsistencies in different places where we split loads/stores.

-Use MinAlign instead of std::min.
-Use SelectionDAG::getMemBasePlusOffset.
-Apply offset to the pointer info for the second load/store created.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321536 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SelectionDAG] Add some debug print messages to LegalizeVectorOps.
Craig Topper [Thu, 28 Dec 2017 19:46:01 +0000 (19:46 +0000)]
[SelectionDAG] Add some debug print messages to LegalizeVectorOps.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321535 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Emit ISD::TRUNCATE instead of X86ISD::VTRUNC from LowerZERO_EXTEND_Mask/LowerSI...
Craig Topper [Thu, 28 Dec 2017 19:45:58 +0000 (19:45 +0000)]
[X86] Emit ISD::TRUNCATE instead of X86ISD::VTRUNC from LowerZERO_EXTEND_Mask/LowerSIGN_EXTEND_Mask.

The truncate will be lowered X86ISD::VTRUNC later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321534 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove unnecessary patterns for sign extending vXi1 without VLX.
Craig Topper [Thu, 28 Dec 2017 19:45:55 +0000 (19:45 +0000)]
[X86] Remove unnecessary patterns for sign extending vXi1 without VLX.

The custom lowering already widens the result type to 512-bits if VLX isn't supported.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321533 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[WinEH] Don't emit state stores or EH thunks for available_externally functions
Reid Kleckner [Thu, 28 Dec 2017 18:41:31 +0000 (18:41 +0000)]
[WinEH] Don't emit state stores or EH thunks for available_externally functions

The exception handler thunk needs to reference the LSDA of the parent
function, which won't be emitted if it's available_externally.

Fixes PR35736. ThinLTO ends up producing available_externally functions
that use _CxxFrameHandler3.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321532 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[LTO] Simplify code. No functionality change intended.
Benjamin Kramer [Thu, 28 Dec 2017 18:31:19 +0000 (18:31 +0000)]
[LTO] Simplify code. No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321531 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRemove superfluous copies in sample profiling.
Benjamin Kramer [Thu, 28 Dec 2017 18:10:41 +0000 (18:10 +0000)]
Remove superfluous copies in sample profiling.

No functionliaty change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321530 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert r321377, it causes regression to https://reviews.llvm.org/P8055.
Guozhi Wei [Thu, 28 Dec 2017 17:02:34 +0000 (17:02 +0000)]
Revert r321377, it causes regression to https://reviews.llvm.org/P8055.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321528 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix tests after move to utohexstr.
Benjamin Kramer [Thu, 28 Dec 2017 17:00:37 +0000 (17:00 +0000)]
Fix tests after move to utohexstr.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321527 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAvoid int to string conversion in Twine or raw_ostream contexts.
Benjamin Kramer [Thu, 28 Dec 2017 16:58:54 +0000 (16:58 +0000)]
Avoid int to string conversion in Twine or raw_ostream contexts.

Some output changes from uppercase hex to lowercase hex, no other functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321526 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][PREFETCH]: Adding full coverage of MC encoding for the PREFETCH isa sets.<NFC>
Gadi Haber [Thu, 28 Dec 2017 15:00:41 +0000 (15:00 +0000)]
[X86][PREFETCH]: Adding full coverage of MC encoding for the PREFETCH isa sets.<NFC>

NFC.
Adding MC regressions tests to cover the PREFETCH isa sets for both 32 and 64 bit.
This patch is part of a larger task to cover MC encoding of all X86 ISA Sets started in revision: https://reviews.llvm.org/D39952

Reviewers: zvi, craig.topper, RKSimon, AndreiGrischenko
Differential Revision: https://reviews.llvm.org/D41161

Change-Id: Icdc8c5fb68c414de7d2cfdb50da1cc6763d9932a

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321524 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[dsymutil][NFC] Replace calls to CoreFoundation with LLVM equivalent.
Jonas Devlieghere [Thu, 28 Dec 2017 14:05:49 +0000 (14:05 +0000)]
[dsymutil][NFC] Replace calls to CoreFoundation with LLVM equivalent.

This patch replaces a block of logic that was implemented using
CoreFoundations calls with functionally equivalent logic that makes use
of LLVM libraries.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321522 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[RewriteStatepoints] Fix incorrect assertion
Max Kazantsev [Thu, 28 Dec 2017 12:03:12 +0000 (12:03 +0000)]
[RewriteStatepoints] Fix incorrect assertion

`RewriteStatepointsForGC` iterates over function blocks and their predecessors
in order of declaration. One of outcomes of this is that callsites are placed in
arbitrary order which has nothing to do with travelsar order.

On the other hand, function `recomputeLiveInValues` asserts that bases are
added to `Info.PointerToBase` before their deried pointers are updated. But
if call sites are processed in order different from RPOT, this is not necessarily
true. We cannot guarantee that the base was placed there before every
pointer derived from it. All we can guarantee is that this base was marked as
known base by this point.

This patch replaces the fact that we assert from checking that the base was
added to the map with assert that the base was marked as known base.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321517 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][SSE] Use PMADDWD for v4i32 multiplies with 17 or more leading zeros
Simon Pilgrim [Thu, 28 Dec 2017 10:05:49 +0000 (10:05 +0000)]
[X86][SSE] Use PMADDWD for v4i32 multiplies with 17 or more leading zeros

If there are 17 or more leading zeros to the v4i32 elements, then we can use PMADD for the integer multiply when PMULLD is unavailable or slow.

The 17 bits need to be zero as the PMADDWD performs a v8i16 signed-mul-extend + pairwise-add - the upper 16 so we're adding a zero pair and the 17th bit so we don't incorrectly sign extend.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321516 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstCombine] Check for isa<Instruction> before using cast<>
Simon Pilgrim [Thu, 28 Dec 2017 09:35:35 +0000 (09:35 +0000)]
[InstCombine] Check for isa<Instruction> before using cast<>

Protects against casts from constexpr etc.

Reduced from oss-fuzz #4788 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321515 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "[memcpyopt] Teach memcpyopt to optimize across basic blocks"
Reid Kleckner [Thu, 28 Dec 2017 05:10:33 +0000 (05:10 +0000)]
Revert "[memcpyopt] Teach memcpyopt to optimize across basic blocks"

This reverts r321138. It seems there are still underlying issues with
memdep. PR35519 seems to still be present if debug info is enabled. We
end up losing a memcpy. Somehow during store to memset merging, we
insert the memset after the memcpy or fail to update the memdep analysis
to account for the newly inserted memset of a pair.

Reduced test case:

  #include <assert.h>
  #include <stdio.h>
  #include <string>
  #include <utility>
  #include <vector>

  void do_push_back(
      std::vector<std::pair<std::string, std::vector<std::string>>>* crls) {
    crls->push_back(std::make_pair(std::string(), std::vector<std::string>()));
  }

  int __attribute__((optnone)) main() {
    // Put some data in the vector and then remove it so we take the push_back
    // fast path.
    std::vector<std::pair<std::string, std::vector<std::string>>> crl_set;
    crl_set.push_back({"asdf", {}});
    crl_set.pop_back();
    printf("first word in vector storage: %p\n", *(void**)crl_set.data());

    // Do the push_back which may fail to initialize the data.
    do_push_back(&crl_set);
    auto* first = &crl_set.back().first;
    printf("first word in vector storage (should be zero): %p\n",
           *(void**)crl_set.data());
    assert(first->empty());
    puts("ok");
  }

Compile with libc++, enable optimizations, and enable debug info:
$ clang++ -stdlib=libc++ -g -O2 t.cpp -o t.exe -Wl,-rpath=llvm/build/lib

This program will assert with this change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321510 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[bindings/go] fix vet errors
Andrew Wilkins [Thu, 28 Dec 2017 04:10:09 +0000 (04:10 +0000)]
[bindings/go] fix vet errors

Fix "go vet" errors, which will be
run automatically with "go test" as
of Go 1.10.

Patch by Karsten Weiss!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321509 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAMDGPU: Add MMO to atomic_inc/dec
Matt Arsenault [Thu, 28 Dec 2017 00:26:14 +0000 (00:26 +0000)]
AMDGPU: Add MMO to atomic_inc/dec

This doesn't really change anything because these
already had custom node wrappers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321508 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add CLWB to icelake.
Craig Topper [Wed, 27 Dec 2017 22:04:04 +0000 (22:04 +0000)]
[X86] Add CLWB to icelake.

Per Table 1-1 in October 2017 edition of Intel® Architecture Instruction Set Extensions and Future Features

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321501 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstCombine] add tests for min/max folds (PR35717); NFC
Sanjay Patel [Wed, 27 Dec 2017 21:55:06 +0000 (21:55 +0000)]
[InstCombine] add tests for min/max folds (PR35717); NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321500 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[llvm-readobj] Support -needed-libs option for COFF files
Petr Hosek [Wed, 27 Dec 2017 19:59:56 +0000 (19:59 +0000)]
[llvm-readobj] Support -needed-libs option for COFF files

This implements the -needed-libs option in the COFF dumper.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321498 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoA special test to demonstrate debug logging for asm matcher.
Andrew V. Tischenko [Wed, 27 Dec 2017 19:25:21 +0000 (19:25 +0000)]
A special test to demonstrate debug logging for asm matcher.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321497 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Reimplement r321437 using custom lowering instead of as a DAG combine.
Craig Topper [Wed, 27 Dec 2017 19:09:40 +0000 (19:09 +0000)]
[X86] Reimplement r321437 using custom lowering instead of as a DAG combine.

My original implementation ran as a DAG combine post type legalization, but it turns out we don't run that DAG combine step if type legalization didn't change anything. Attempts to make the combine run before type legalization as well hit other issues.

So just do it in LowerMUL where we can catch more cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321496 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64] Change order of candidate FMLS patterns
Matthew Simpson [Wed, 27 Dec 2017 15:25:01 +0000 (15:25 +0000)]
[AArch64] Change order of candidate FMLS patterns

r319980 added new patterns to the machine combiner for transforming (fsub (fmul
x y) z) into (fmla (fneg z) x y). That is, fsub's where the first source
operand is an fmul are transformed. We previously only matched the case where
the second source operand of an fsub was an fmul, transforming (fsub z (fmul x
y)) into (fmls z x y). Now, if we have an fsub where both source operands are
fmuls, both of the above patterns are applicable.

However, the order in which we add the patterns to the list of candidates
determines the transformation that takes place, since only the first pattern
that matches will be used. This patch changes the order these two patterns are
added to the list of candidates such that we prefer the case where the second
source operand is an fmul (the fmls case), rather than the other one (the
fmla/fneg case). When both source operands are fmuls, this ordering results in
fewer instructions.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321491 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix vmul combine for AVX1 targets.
Benjamin Kramer [Wed, 27 Dec 2017 13:31:50 +0000 (13:31 +0000)]
[X86] Fix vmul combine for AVX1 targets.

v8i32 is legal von AVX1, but it doesn't have pmuludq for it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321490 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstCombine] Gracefully handle out of range extractelement indices
Simon Pilgrim [Wed, 27 Dec 2017 12:00:18 +0000 (12:00 +0000)]
[InstCombine] Gracefully handle out of range extractelement indices

InstSimplify is responsible for handling these, but we shouldn't just assert here.

Reduced from oss-fuzz #4808 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321489 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[DAGCombine] foldBinOpIntoSelect can fail to constant fold in some cases.
Simon Pilgrim [Wed, 27 Dec 2017 11:36:18 +0000 (11:36 +0000)]
[DAGCombine] foldBinOpIntoSelect can fail to constant fold in some cases.

For example, float operations may fail to constant fold under certain circumstances (inf/nan/denormal creation etc.)

Reduced from oss-fuzz #4802 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321488 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoImprove performance TokenizeWindowsCommandLine
Rui Ueyama [Wed, 27 Dec 2017 08:59:52 +0000 (08:59 +0000)]
Improve performance TokenizeWindowsCommandLine

Patcy by Takuto Ikuta.

This patch reduces lld link time of chromium's blink_core.dll in
component build.

Total size of input argument in .directives become nearly 300MB in the
build and calling many strchr and assert becomes bottleneck.

On my desktop machine, 4 times stats of the link time are like below.
Improved around 10%.

This patch
TotalSeconds : 13.4918885
TotalSeconds : 13.9474257
TotalSeconds : 13.4941082
TotalSeconds : 13.6077962
Avg : 13.63530465

master
TotalSeconds : 15.6938531
TotalSeconds : 15.7022508
TotalSeconds : 15.9567202
TotalSeconds : 14.5851505
Avg : 15.48449365

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321479 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Lint] Don't warn about noalias argument aliasing if other argument is byval
Mikael Holmen [Wed, 27 Dec 2017 08:48:33 +0000 (08:48 +0000)]
[Lint] Don't warn about noalias argument aliasing if other argument is byval

Summary:
When using byval, the data is effectively copied as part of the call
anyway, so we aren't actually passing the pointer and thus there is no
reason to issue a warning.

Reviewers: rnk

Reviewed By: rnk

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321478 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][RD]: Adding full coverage of MC encoding for RD isa sets.<NFC>
Gadi Haber [Wed, 27 Dec 2017 08:35:57 +0000 (08:35 +0000)]
[X86][RD]: Adding full coverage of MC encoding for RD isa sets.<NFC>

NFC.
Adding MC regressions tests to cover RDPMC, RDRAND, RDRAND, RDSEED, RDTSCP, DWRFSGS isa sets.
This patch is part of a larger task to cover MC encoding of all X86 isa sets started in revision: https://reviews.llvm.org/D39952

Reviewers: zvi, craig.topper, RKSimon, AndreiGrischenk
Differential Revision: https://reviews.llvm.org/D41328

Change-Id: Ie97b397546e6b1ed180c6abd7b41fccb136d2b82

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321476 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SCEV] Be careful with nuw/nsw/exact in InsertBinop
Serguei Katkov [Wed, 27 Dec 2017 08:26:22 +0000 (08:26 +0000)]
[SCEV] Be careful with nuw/nsw/exact in InsertBinop

InsertBinop tries to find an appropriate instruction instead of
creating a new instruction. When it checks whether instruction is
the same as we need to create it ignores nuw/nsw/exact flags.

It leads to invalid behavior when poison instruction can be used
when it was not expected. Specifically, for example Expander
expands the SCEV built for instruction
%a = add i32 %v, 1
It is possible that InsertBinop can find an instruction
% b = add nuw nsw i32 %v, 1
and will use it instead of version w/o nuw nsw.
It is incorrect.

The patch conservatively ignores all instructions with any of
poison flags installed.

Reviewers: sanjoy, mkazantsev, sebpop, jbhateja
Reviewed By: sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D41576

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321475 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SCEV] Do not insert if it is already in cache
Serguei Katkov [Wed, 27 Dec 2017 07:15:23 +0000 (07:15 +0000)]
[SCEV] Do not insert if it is already in cache

This is fix for the crash caused by ScalarEvolution::getTruncateExpr.

It expects that if it checked the condition that SCEV is not in UniqueSCEVs cache in
the beginning that it will not be there inside this method.

However during recursion and transformation/simplification for sub expression,
it is possible that these modifications will end up with the same SCEV as we started from.

So we must always check whether SCEV is in cache and do not insert item if it is already there.

Reviewers: sanjoy, mkazantsev, craig.topper
Reviewed By: sanjoy
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D41380

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321472 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[instcombine] add powi(x, 2) -> x * x
Philip Reames [Wed, 27 Dec 2017 01:30:12 +0000 (01:30 +0000)]
[instcombine] add powi(x, 2) -> x * x

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321468 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoSink a couple of transforms from instcombine into instsimplify.
Philip Reames [Wed, 27 Dec 2017 01:14:30 +0000 (01:14 +0000)]
Sink a couple of transforms from instcombine into instsimplify.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321467 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[NFC] Extract out a helper function for SimplifyCall(CS, Q)
Philip Reames [Wed, 27 Dec 2017 00:16:12 +0000 (00:16 +0000)]
[NFC] Extract out a helper function for SimplifyCall(CS, Q)

This simplifies code, but the real motivation is that it lets me clean up some downstream code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321466 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Unroll][DebugInfo] Propagate loop body's debug location to epilog preheader
Zhaoshi Zheng [Tue, 26 Dec 2017 23:31:21 +0000 (23:31 +0000)]
[Unroll][DebugInfo] Propagate loop body's debug location to epilog preheader

NewExit and epilog PreHeader should has the same debug loc as the original loop
body, instead of original loop exit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321465 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[DAGCombine] visitANDLike - ensure APInt is is in range for getSExtValue/getZExtValue
Simon Pilgrim [Tue, 26 Dec 2017 23:27:44 +0000 (23:27 +0000)]
[DAGCombine] visitANDLike - ensure APInt is is in range for getSExtValue/getZExtValue

Reduced from oss-fuzz #4782 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321464 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Return SDValue(N, 0) instead of an SDValue() after a successful combine.
Craig Topper [Tue, 26 Dec 2017 22:22:58 +0000 (22:22 +0000)]
[X86] Return SDValue(N, 0) instead of an SDValue() after a successful combine.

Returning SDValue() means nothing changed, SDValue(N,0) means there was a change but the worklist management was taken care of.

I don't know if this has a real effect other than making sure the combine counter in the DAG combiner gets updated, but it is the correct thing to do.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321463 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Regenerate test using update_llc_test_checks.py.
Craig Topper [Tue, 26 Dec 2017 22:22:57 +0000 (22:22 +0000)]
[X86] Regenerate test using update_llc_test_checks.py.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321462 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstCombine] fix miscompile of frem with 0.0 operand (PR34870)
Sanjay Patel [Tue, 26 Dec 2017 22:12:20 +0000 (22:12 +0000)]
[InstCombine] fix miscompile of frem with 0.0 operand (PR34870)

We might want to select NAN here or do this transform with fast-math,
but this should at least fix the miscompile.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321461 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstCombine] add test for frem with 0.0 (PR34870); NFC
Sanjay Patel [Tue, 26 Dec 2017 22:06:57 +0000 (22:06 +0000)]
[InstCombine] add test for frem with 0.0 (PR34870); NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321460 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoIt's a fix for Bug 35741 - can't use comments after x86 prefixes.
Andrew V. Tischenko [Tue, 26 Dec 2017 18:29:52 +0000 (18:29 +0000)]
It's a fix for Bug 35741 - can't use  comments after x86 prefixes.
Differential Revision: https://reviews.llvm.org/D41579

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321459 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ValueTracking] ignore FP signed-zero when detecting a casted-to-integer fmin/fmax...
Sanjay Patel [Tue, 26 Dec 2017 15:09:19 +0000 (15:09 +0000)]
[ValueTracking] ignore FP signed-zero when detecting a casted-to-integer fmin/fmax pattern

This is a preliminary step for the patch discussed in D41136 (and denoted here with the FIXME comment).

When we match an FP min/max that is cast to integer, any intermediate difference between +0.0 or -0.0
should be muted in the result by the conversion (either fptosi or fptoui) of the result. Thus, we can
enable 'nsz' for the purpose of matching fmin/fmax.

Note that there's probably room to generalize this more, possibly by fixing the current calls to the
weak version of isKnownNonZero() in matchSelectPattern() to the more powerful recursive version.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321456 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[DAGCombine] Don't combine (and (setne X, 0), (setne X, -1)) --> (setuge (add X,...
Simon Pilgrim [Tue, 26 Dec 2017 14:48:28 +0000 (14:48 +0000)]
[DAGCombine] Don't combine (and (setne X, 0), (setne X, -1)) --> (setuge (add X, 1), 2) for i1

Reduced from oss-fuzz #4773 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321455 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InstSimplify] Check for in range extraction index before calling APInt::getZExtValue()
Simon Pilgrim [Tue, 26 Dec 2017 11:42:39 +0000 (11:42 +0000)]
[InstSimplify] Check for in range extraction index before calling APInt::getZExtValue()

Reduced from oss-fuzz #4768 test case

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321454 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Pass itins.rr/itins.rm through properly for some instructions.
Craig Topper [Tue, 26 Dec 2017 05:43:05 +0000 (05:43 +0000)]
[X86] Pass itins.rr/itins.rm through properly for some instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321452 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use SSE_INTMUL_ITINS_P for the AVX-512 MUL instructions to match their SSE...
Craig Topper [Tue, 26 Dec 2017 05:43:04 +0000 (05:43 +0000)]
[X86] Use SSE_INTMUL_ITINS_P for the AVX-512 MUL instructions to match their SSE/AVX counterparts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321451 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix typo in assert message.
Craig Topper [Tue, 26 Dec 2017 05:43:02 +0000 (05:43 +0000)]
[X86] Fix typo in assert message.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321450 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoCOFF: fix IMAGE_FILE_MACHINE_AM33
Martell Malone [Mon, 25 Dec 2017 20:11:02 +0000 (20:11 +0000)]
COFF: fix IMAGE_FILE_MACHINE_AM33

PE COFF spec value is 0x1D3 not 0x13
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321447 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[docs] Use dbgs() instead of errs() for DEBUG()
Jonas Devlieghere [Mon, 25 Dec 2017 14:16:07 +0000 (14:16 +0000)]
[docs] Use dbgs() instead of errs() for DEBUG()

The examples in llvm/Support/Debug.h use `DEBUG(dbgs() << ...)` instead
of `errs()`, so the examples in the Programmer's Manual should match
that.

Patch by: Moritz Sichert <moritz.sichert@googlemail.com>

Differential revision: https://reviews.llvm.org/D41170

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321444 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ThinLTO] Don't import functions with noinline attribute
Eugene Leviant [Mon, 25 Dec 2017 13:57:24 +0000 (13:57 +0000)]
[ThinLTO] Don't import functions with noinline attribute

Differential revision: https://reviews.llvm.org/D41489

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321443 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MC] - Disallow invalid section groups declarations.
George Rimar [Mon, 25 Dec 2017 09:41:00 +0000 (09:41 +0000)]
[MC] - Disallow invalid section groups declarations.

This fixes parseGroup() so that it always sets error condition on error.
Previously it was not done, because parseIdentifier looks never do that,
assuming that caller should do it if he wants to.

So previously cases from test were silently accepted and produced broken output.

Differential revision: https://reviews.llvm.org/D41559

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321439 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SafepointIRVerifier] Allow non-dereferencing uses of unrelocated or poisoned PHI...
Max Kazantsev [Mon, 25 Dec 2017 09:35:10 +0000 (09:35 +0000)]
[SafepointIRVerifier] Allow non-dereferencing uses of unrelocated or poisoned PHI nodes

PHI that has at least one unrelocated input cannot cause any issues by itself,
though its uses should be carefully verified. With this patch PHIs are allowed
to have any inputs but when all inputs are unrelocated the PHI is marked as
unrelocated and if not all inputs are unrelocated then the PHI is marked as
poisoned. Poisoned pointers can be used only in three ways: to derive new
pointers, in PHIs or in comparisons against constants that are exclusively
derived from null.

Patch by Daniil Suchkov!

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321438 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add a DAG combines to turn vXi64 muls into VPMULDQ/VPMULUDQ if the upper bits...
Craig Topper [Mon, 25 Dec 2017 06:47:10 +0000 (06:47 +0000)]
[X86] Add a DAG combines to turn vXi64 muls into VPMULDQ/VPMULUDQ if the upper bits are all sign bits or zeros.

Normally we catch this during lowering, but vXi64 mul is considered legal when we have AVX512DQ.

This DAG combine allows us to avoid PMULLQ with AVX512DQ if we can prove its unnecessary. PMULLQ is 3 uops that take 4 cycles each. While pmuldq/pmuludq is only one 4 cycle uop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321437 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add avx512vl and avx512dq command lines to combine-pmuldq.ll to demonstrate...
Craig Topper [Mon, 25 Dec 2017 06:47:08 +0000 (06:47 +0000)]
[X86] Add avx512vl and avx512dq command lines to combine-pmuldq.ll to demonstrate where we fail to use pmuldq/pmuludq and use to pmullq instead.

It's nice that pmullq exists, but it has higher latency and probably lower throughput than pmuldq/pmuludq. We should prefer those if we can.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321436 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[cmake] Always respect existing CMAKE_REQUIRED_FLAGS when adding additional ones.
Don Hinton [Mon, 25 Dec 2017 01:23:09 +0000 (01:23 +0000)]
[cmake] Always respect existing CMAKE_REQUIRED_FLAGS when adding additional ones.

Summary:
Always respect existing CMAKE_REQUIRED_FLAGS when adding
additional ones.  This is important when cross compiling where
--sysroot and -target were already added.

In particular, this is needed when cross compiling from Darwin to
Linux, since --sysroot is required to find headers and libraries.

Cmake has a similar bug in check_include_file[_cxx] where
CMAKE_REQUIRED_LIBRARIES isn't passed, which causes
try_compile to fail.
(please see https://gitlab.kitware.com/cmake/cmake/merge_requests/1620)

Reviewers: compnerd, silvas, beanz, brad.king

Reviewed By: compnerd

Subscribers: mgorny, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321434 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Make some helper methods static functions instead. NFC
Craig Topper [Mon, 25 Dec 2017 00:54:53 +0000 (00:54 +0000)]
[X86] Make some helper methods static functions instead. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321433 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use SelectionDAG::getFPExtendOrRound to simplify some code.
Craig Topper [Mon, 25 Dec 2017 00:54:51 +0000 (00:54 +0000)]
[X86] Use SelectionDAG::getFPExtendOrRound to simplify some code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321432 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][AVX] Add AVX1/AVX2 vmul tests
Simon Pilgrim [Sun, 24 Dec 2017 12:51:54 +0000 (12:51 +0000)]
[X86][AVX] Add AVX1/AVX2 vmul tests

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321426 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoMake helpers static. No functionality change.
Benjamin Kramer [Sun, 24 Dec 2017 12:46:22 +0000 (12:46 +0000)]
Make helpers static. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321425 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][X87] Mark pseudo memory fold instructions as load/sideeffects (PR21160, PR34080...
Simon Pilgrim [Sun, 24 Dec 2017 12:20:21 +0000 (12:20 +0000)]
[X86][X87] Mark pseudo memory fold instructions as load/sideeffects (PR21160, PR34080, PR34454).

Match regular x87 memory fold instructions with load/sideeffects tags, to prevent the schedulers from re-ordering them across the fnstcw/fldcw sequences for truncating stores while they are still pseudo during the stack conversion pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321424 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][X87] Renamed CHECK prefix, its not actually broken anymore just scheduled diffe...
Simon Pilgrim [Sun, 24 Dec 2017 10:25:01 +0000 (10:25 +0000)]
[X86][X87] Renamed CHECK prefix, its not actually broken anymore just scheduled differently

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321423 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][X87] Add another test case mentioned on PR34080
Simon Pilgrim [Sun, 24 Dec 2017 10:22:55 +0000 (10:22 +0000)]
[X86][X87] Add another test case mentioned on PR34080

Did my best to reduce this, but the X87 scheduling bug is hard to hit at the best of times...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321422 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix (v2f64 (s/uint_to_fp (v2i1))) to avoid scalarization without AVX512DQ.
Craig Topper [Sun, 24 Dec 2017 06:51:36 +0000 (06:51 +0000)]
[X86] Fix (v2f64 (s/uint_to_fp (v2i1))) to avoid scalarization without AVX512DQ.

Previously we extended v2i1 to v2f64 and then tried to use cvtuqq2pd/cvtqq2pd, but that only works with avx512dq. So we ended up scalarizing it. Now we widen to v4i1 first and extend to v4i32.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321420 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MC] - Teach llvm-mc to handle comdats whose names are numbers.
George Rimar [Sun, 24 Dec 2017 06:13:36 +0000 (06:13 +0000)]
[MC] - Teach llvm-mc to handle comdats whose names are numbers.

Currently llvm-mc ignores COMDATs whose names are numbers,
for example following code:

.section .foo,"G",@progbits,123,comdat

would produce no COMDATs at all.

Patch fixes the issue.

Differential revision: https://reviews.llvm.org/D41552

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321419 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[DAGCombiners] Don't turn ANDs to shuffles with zero so early. Give some other combin...
Craig Topper [Sun, 24 Dec 2017 02:05:18 +0000 (02:05 +0000)]
[DAGCombiners] Don't turn ANDs to shuffles with zero so early. Give some other combines a chance to run.

This moves the combine for turning ANDs into shuffle with zero out of SimplifyVBinOps and places it only in visitAND below the reassociate handling. This fixes the specific case I noticed where we failed to combine two ands with constants.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321417 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add assembler predicates to BITALG/VBMI2/VNNI features to be consistent with...
Craig Topper [Sun, 24 Dec 2017 02:05:17 +0000 (02:05 +0000)]
[X86] Add assembler predicates to BITALG/VBMI2/VNNI features to be consistent with the other AVX512 ISAs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321416 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Teach WidenMaskArithmetic to handle any constant buildvector on the RHS not...
Craig Topper [Sun, 24 Dec 2017 01:03:31 +0000 (01:03 +0000)]
[X86] Teach WidenMaskArithmetic to handle any constant buildvector on the RHS not just all zeros/ones.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321415 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SelectionDAG] Teach SelectionDAG::getNode to constant fold zext/aext/sext of constan...
Craig Topper [Sat, 23 Dec 2017 20:21:29 +0000 (20:21 +0000)]
[SelectionDAG] Teach SelectionDAG::getNode to constant fold zext/aext/sext of constant build vectors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321414 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CallSiteSplitting] Remove isOrHeader restriction.
Florian Hahn [Sat, 23 Dec 2017 20:02:26 +0000 (20:02 +0000)]
[CallSiteSplitting] Remove isOrHeader restriction.

By following the single predecessors of the predecessors of the call
site, we do not need to restrict the control flow.

Reviewed By: junbuml, davide

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321413 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove type restrictions from WidenMaskArithmetic.
Craig Topper [Sat, 23 Dec 2017 18:53:05 +0000 (18:53 +0000)]
[X86] Remove type restrictions from WidenMaskArithmetic.

This can help AVX-512 code where mask types are legal allowing us to remove extends and truncates to/from mask types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321408 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] In WidenMaskArithmetic, make sure we check the input type of a truncate on N1.
Craig Topper [Sat, 23 Dec 2017 18:53:03 +0000 (18:53 +0000)]
[X86] In WidenMaskArithmetic, make sure we check the input type of a truncate on N1.

Later in the code we explicitly bypass the truncate so we should be checking its type to make sure that it's safe.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321407 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove unneeded EVT variable. NFC
Craig Topper [Sat, 23 Dec 2017 18:53:01 +0000 (18:53 +0000)]
[X86] Remove unneeded EVT variable. NFC

Immediately after it is created we check if its equal to another EVT. Then we inconsistently use one or the other variables in the code below.

Instead do the equality check directly on the getValueType result and remove the variable. Use the origina VT variable throughout the remaining code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321406 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][X87] Wrap FpI_ pseudo to use PseudoI. NFCI.
Simon Pilgrim [Sat, 23 Dec 2017 17:25:59 +0000 (17:25 +0000)]
[X86][X87] Wrap FpI_ pseudo to use PseudoI. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321405 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SCCP] Manually fold branches on undef.
Davide Italiano [Sat, 23 Dec 2017 15:06:30 +0000 (15:06 +0000)]
[SCCP] Manually fold branches on undef.

This code was originally removed and replace with an assertion
because believed unnecessary. It turns out there was simply
no test coverage for this case, and the constant folder doesn't
yet know about patterns like `br undef %label1, %label2`.
Presumably at some point the constant folder might learn about
these patterns, but it's a broader change.
A testcase will be added to make sure this doesn't regress again
in the future.

Fixes PR35723.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321402 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add default InstrItinClass to PseudoI
Simon Pilgrim [Sat, 23 Dec 2017 10:47:21 +0000 (10:47 +0000)]
[X86] Add default InstrItinClass to PseudoI

This will be used to help tidyup existing pseudos that we've added scheduling info to.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321401 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Pass the right VT to the getZeroExtendInReg introduced in r321398
Craig Topper [Sat, 23 Dec 2017 06:52:03 +0000 (06:52 +0000)]
[X86] Pass the right VT to the getZeroExtendInReg introduced in r321398

Apparently we don't have tests for this which I didn't realize before. I'll try to fix that but wanted to fix the obvious bug.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321399 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use SelectionDAG::getZeroExtendInReg instead of implementing it manually.
Craig Topper [Sat, 23 Dec 2017 02:54:52 +0000 (02:54 +0000)]
[X86] Use SelectionDAG::getZeroExtendInReg instead of implementing it manually.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321398 91177308-0d34-0410-b5e6-96231b3b80d8