]> granicus.if.org Git - llvm/log
llvm
5 years ago[ARM] push LR before __gnu_mcount_nc
Jian Cai [Fri, 16 Aug 2019 20:21:08 +0000 (20:21 +0000)]
[ARM] push LR before __gnu_mcount_nc

Push LR register before calling __gnu_mcount_nc as it expects the value of LR register to be the top value of
the stack on ARM32.

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

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

5 years ago[Attributor] Towards a more structured deduction pattern
Johannes Doerfert [Fri, 16 Aug 2019 19:51:23 +0000 (19:51 +0000)]
[Attributor] Towards a more structured deduction pattern

Summary:
This is the first commit aiming to structure the attribute deduction.
The base idea is that we have default propagation patterns as listed
below on top of which we can add specific, e.g., context sensitive,
logic.

Deduction patterns used in this patch:
  - argument states are determined from call site argument states,
    see AAAlignArgument and AAArgumentFromCallSiteArguments.
  - call site argument states are determined as if they were floating
    values, see AAAlignCallSiteArgument and AAAlignFloating.
  - floating value states are determined by traversing the def-use chain
    and combining the states determined for the leaves, see
    AAAlignFloating and genericValueTraversal.
  - call site return states are determined from function return states,
    see AAAlignCallSiteReturned and AACallSiteReturnedFromReturned.
  - function return states are determined from returned value states,
    see AAAlignReturned and AAReturnedFromReturnedValues.

Through this strategy all logic for alignment is concentrated in the
AAAlignFloating::updateImpl method.

Note: This commit works on its own but is part of a larger change that
involves "on-demand" creation of abstract attributes that will
participate in the fixpoint iteration. Without this part, we sometimes
do not have an AAAlign abstract attribute to query, loosing information
we determined before. All tests have appropriate FIXMEs and the
information will be recovered once we added all parts.

Reviewers: sstefan1, uenoku

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

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

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

5 years ago[Attributor][NFC] Introduce aliases for call site attributes
Johannes Doerfert [Fri, 16 Aug 2019 19:49:00 +0000 (19:49 +0000)]
[Attributor][NFC] Introduce aliases for call site attributes

Until we have call site specific liveness and/or value information there
is no need to do call site specific deduction. Though, we need the
symbols in follow up patches that make Attributor::getAAFor return a
reference.

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

5 years ago[Attributor] Introduce initialize calls and move code to keep attributes concise
Johannes Doerfert [Fri, 16 Aug 2019 19:36:17 +0000 (19:36 +0000)]
[Attributor] Introduce initialize calls and move code to keep attributes concise

Summary:
This patch should not change the behavior except that the added
initialize methods might indicate an optimistic fixpoint earlier. The
code movement is done to keep the attribute definitions in a single
block where it makes sense. No functional changes intended there.

Reviewers: uenoku, sstefan1

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

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

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

5 years ago[ORC] Remove some stray debugging output accidentally left in r368707
Lang Hames [Fri, 16 Aug 2019 19:33:37 +0000 (19:33 +0000)]
[ORC] Remove some stray debugging output accidentally left in r368707

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

5 years ago[InstCombine] canonicalize a scalar-select-of-vectors to vector select
Sanjay Patel [Fri, 16 Aug 2019 18:51:30 +0000 (18:51 +0000)]
[InstCombine] canonicalize a scalar-select-of-vectors to vector select

This pattern may arise more frequently with an enhancement to SLP vectorization suggested in PR42755:
https://bugs.llvm.org/show_bug.cgi?id=42755
...but we should handle this pattern to make things easier for the backend either way.

For all in-tree targets that I looked at, codegen for typical vector sizes looks better when we change
to a vector select, so this is safe to do without a cost model (in other words, as a target-independent
canonicalization).

For example, if the condition of the select is a scalar, we end up with something like this on x86:

vpcmpgtd %xmm0, %xmm1, %xmm0
vpextrb $12, %xmm0, %eax
testb $1, %al
jne LBB0_2
  ## %bb.1:
vmovaps %xmm3, %xmm2
  LBB0_2:
vmovaps %xmm2, %xmm0

Rather than the splat-condition variant:

vpcmpgtd %xmm0, %xmm1, %xmm0
vpshufd $255, %xmm0, %xmm0      ## xmm0 = xmm0[3,3,3,3]
vblendvps %xmm0, %xmm2, %xmm3, %xmm0

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

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

5 years agoEscape % in printf format string.
Evgeniy Stepanov [Fri, 16 Aug 2019 18:23:54 +0000 (18:23 +0000)]
Escape % in printf format string.

Fixes branch-relax-block-size.mir on the ASan builder.

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

5 years ago[WebAssembly] Forbid use of EM_ASM with setjmp/longjmp
Guanzhong Chen [Fri, 16 Aug 2019 18:21:08 +0000 (18:21 +0000)]
[WebAssembly] Forbid use of EM_ASM with setjmp/longjmp

Summary:
We tried to support EM_ASM with setjmp/longjmp in binaryen. But with dynamic
linking thrown into the mix, the code is no longer understandable and cannot
be maintained. We also discovered more bugs in the EM_ASM handling code.

To ensure maintainability and correctness of the binaryen code, EM_ASM will
no longer be supported with setjmp/longjmp. This is probably fine since the
support was added recently and haven't be published.

Reviewers: tlively, sbc100, jgravelle-google, kripken

Reviewed By: tlively, kripken

Subscribers: dschuff, hiraditya, aheejin, sunfish, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] resolveTargetShuffleInputs - add DemandedElts variant. NFCI.
Simon Pilgrim [Fri, 16 Aug 2019 18:13:22 +0000 (18:13 +0000)]
[X86] resolveTargetShuffleInputs - add DemandedElts variant. NFCI.

Nothing calls this yet, everything still goes through the non (all) DemandedElts wrapper.

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

5 years ago[AArch64][GlobalISel] Lower G_SHUFFLE_VECTOR with 1 elt src and 1 elt mask.
Amara Emerson [Fri, 16 Aug 2019 18:06:53 +0000 (18:06 +0000)]
[AArch64][GlobalISel] Lower G_SHUFFLE_VECTOR with 1 elt src and 1 elt mask.

Again, it's weird that these are allowed. Since lowering support was added in
r368709 we started crashing on compiling the neon intrinsics test in the test
suite. This fixes the lowering to fold the 1 elt src/mask case into copies.

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

5 years ago[X86] combineExtractWithShuffle - handle extract(truncate(x), 0)
Simon Pilgrim [Fri, 16 Aug 2019 17:35:08 +0000 (17:35 +0000)]
[X86] combineExtractWithShuffle - handle extract(truncate(x), 0)

Eventually we need to generalize combineExtractWithShuffle to handle all faux shuffles and handle truncate (and X86ISD::VTRUNC etc.) there, but we're not ready yet (still creates nodes on the fly, incomplete DemandedElts support, bad use of recursive Depth limit).

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

5 years ago[AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instructions.
Paul Walker [Fri, 16 Aug 2019 17:29:53 +0000 (17:29 +0000)]
[AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instructions.

Recommit with fixes for mac builders.

Summary:
AArch64InstrInfo::getInstSizeInBytes is incorrectly treating meta
instructions (e.g. CFI_INSTRUCTION) as normal instructions and
giving them a size of 4.

This results in branch relaxation calculating block sizes wrong.
Branch relaxation also considers alignment and thus a single
mistake can result in later blocks being incorrectly sized even
when they themselves do not contain meta instructions.

The net result is we might not relax a branch whose destination is
not within range.

Reviewers: nickdesaulniers, peter.smith

Reviewed By: peter.smith

Subscribers: javed.absar, kristof.beyls, llvm-commits

Tags: #llvm

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

llvm-svn: 369111

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

5 years agoRevert [AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instruc...
Paul Walker [Fri, 16 Aug 2019 17:29:42 +0000 (17:29 +0000)]
Revert [AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instructions.

This reverts r369111 (git commit 3ccee5f7c4087ed119dbeba537f3df1b048a4dff)

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

5 years ago[SLPVectorizer] Make the scheduler aware of the TreeEntry operands.
Vasileios Porpodas [Fri, 16 Aug 2019 17:21:18 +0000 (17:21 +0000)]
[SLPVectorizer] Make the scheduler aware of the TreeEntry operands.

Summary:
The scheduler's dependence graph gets the use-def dependencies by accessing the operands of the instructions in a bundle. However, buildTree_rec() may change the order of the operands in TreeEntry, and the scheduler is currently not aware of this. This is not causing any functional issues currently, because reordering is restricted to the operands of a single instruction. Once we support operand reordering across multiple TreeEntries, as shown here: http://www.llvm.org/devmtg/2019-04/slides/Poster-Porpodas-Supernode_SLP.pdf , the scheduler will need to get the correct operands from TreeEntry and not from the individual instructions.

In short, this patch:
- Connects the scheduler's bundle with the corresponding TreeEntry. It introduces new TE and Lane fields in ScheduleData.
- Moves the location where the operands of the TreeEntry are initialized. This used to take place in newTreeEntry() setting one operand at a time, but is now moved pre-order just before the recursion of buildTree_rec(). This is required because the scheduler needs to access both operands of the TreeEntry in tryScheduleBundle().
- Updates the scheduler to access the instruction operands through the TreeEntry operands instead of accessing the instruction operands directly.

Reviewers: ABataev, RKSimon, dtemirbulatov, Ayal, dorit, hfinkel

Reviewed By: ABataev

Subscribers: hiraditya, llvm-commits, lebedev.ri, rcorcs

Tags: #llvm

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

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

5 years ago[ADT] Remove llvm::make_unique utility.
Jonas Devlieghere [Fri, 16 Aug 2019 17:19:57 +0000 (17:19 +0000)]
[ADT] Remove llvm::make_unique utility.

All uses of llvm::make_unique should have been replaced with
std::make_unique. This patch represents the last part of the migration
and removes the utility from LLVM.

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

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

5 years agoFix llvm-config support for CMake build-mode-style builds
Jordan Rose [Fri, 16 Aug 2019 17:17:45 +0000 (17:17 +0000)]
Fix llvm-config support for CMake build-mode-style builds

At some point we and/or CMake changed our build-mode-style builds from
  $LLVM_OBJ_ROOT/bin/$CMAKE_CFG_INTDIR/
to
  $LLVM_OBJ_ROOT/$CMAKE_CFG_INTDIR/bin/
which is way easier to use. But no one updated llvm-config.

https://reviews.llvm.org/D66326

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

5 years ago[SLP] add tests for PR16739; NFC
Sanjay Patel [Fri, 16 Aug 2019 17:01:26 +0000 (17:01 +0000)]
[SLP] add tests for PR16739; NFC

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

5 years ago[X86] Alphabetize pass initialization definitions. NFCI.
Simon Pilgrim [Fri, 16 Aug 2019 16:41:38 +0000 (16:41 +0000)]
[X86] Alphabetize pass initialization definitions. NFCI.

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

5 years ago[CodeGen/Analysis] Intrinsic llvm.assume should not block tail call optimization
Guozhi Wei [Fri, 16 Aug 2019 16:26:12 +0000 (16:26 +0000)]
[CodeGen/Analysis] Intrinsic llvm.assume should not block tail call optimization

In function Analysis.cpp:isInTailCallPosition, instructions between call and ret are checked to see if they block tail call optimization. If an instruction is an intrinsic call, only llvm.lifetime_end is allowed and other intrinsic functions block tail call. When compiling tcmalloc, we found llvm.assume between a hot function call and ret, it blocks the optimization. But llvm.assume doesn't generate instructions, it should not block tail call.

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

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

5 years ago[Hexagon] Generate min/max instructions for 64-bit vectors
Krzysztof Parzyszek [Fri, 16 Aug 2019 16:16:27 +0000 (16:16 +0000)]
[Hexagon] Generate min/max instructions for 64-bit vectors

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

5 years agoRelanding r368987 [AArch64] Change location of frame-record within callee-save area.
Sander de Smalen [Fri, 16 Aug 2019 15:42:28 +0000 (15:42 +0000)]
Relanding r368987 [AArch64] Change location of frame-record within callee-save area.

Changes:
There was a condition for `!NeedsFrameRecord` missing in the assert. The
assert in question has changed to:

+    assert((!RPI.isPaired() || !NeedsFrameRecord || RPI.Reg2 != AArch64::FP ||
+            RPI.Reg1 == AArch64::LR) &&
+           "FrameRecord must be allocated together with LR");

This addresses PR43016.

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

5 years ago[InstCombine] Simplify pow(2.0, itofp(y)) to ldexp(1.0, y)
Evandro Menezes [Fri, 16 Aug 2019 15:33:41 +0000 (15:33 +0000)]
[InstCombine] Simplify pow(2.0, itofp(y)) to ldexp(1.0, y)

Simplify `pow(2.0, itofp(y))` to `ldexp(1.0, y)`.

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

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

5 years ago[TextAPI] Update reader to be supported by lib/Object
Cyndy Ishida [Fri, 16 Aug 2019 15:30:48 +0000 (15:30 +0000)]
[TextAPI] Update reader to be supported by lib/Object

Summary:
To be able to use the TextAPI/Reader for tbd file consumption (by libObject)
it gets passed a MemoryBufferRef which isn't castable to MemoryBuffer.
Updated the tests to expect that input as well.

Reviewers: ributzka, steven_wu

Reviewed By: steven_wu

Subscribers: hiraditya, dexonsmith, llvm-commits

Tags: #llvm

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

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

5 years ago[ARM] MVE sext of a load is free
David Green [Fri, 16 Aug 2019 15:13:37 +0000 (15:13 +0000)]
[ARM] MVE sext of a load is free

MVE also has some sext of loads, which will be free just as scalar
instructions are.

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

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

5 years ago[InstCombine] Shift amount reassociation in bittest: trunc-of-shl (PR42399)
Roman Lebedev [Fri, 16 Aug 2019 15:10:41 +0000 (15:10 +0000)]
[InstCombine] Shift amount reassociation in bittest: trunc-of-shl (PR42399)

Summary:
This is continuation of D63829 / https://bugs.llvm.org/show_bug.cgi?id=42399

I thought naive pattern would solve my issue, but nope, it involved truncation,
thus more folds needed.. This isn't really the fold i'm interested in,
i need trunc-of-lshr, but i'we decided to start with `shl` because it's simpler.

In this case, no extra legality checks are needed:
https://rise4fun.com/Alive/CAb

We should be careful about not increasing instruction count,
since we need to produce `zext` because `and` is done in wider type.

Reviewers: spatel, nikic, xbolva00

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[X86][SSE] Add shuffled load tests from PR16739
Simon Pilgrim [Fri, 16 Aug 2019 14:47:59 +0000 (14:47 +0000)]
[X86][SSE] Add shuffled load tests from PR16739

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

5 years agoRevert rL369112 : [X86][SSE] Add shuffled load tests from PR16739
Simon Pilgrim [Fri, 16 Aug 2019 14:31:45 +0000 (14:31 +0000)]
Revert rL369112 : [X86][SSE] Add shuffled load tests from PR16739

I left typos in this from a WIP copy - reverting and I'll recommit.

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

5 years ago[RISCV] Convert registers from unsigned to Register
Luis Marques [Fri, 16 Aug 2019 14:27:50 +0000 (14:27 +0000)]
[RISCV] Convert registers from unsigned to Register

Only in public interfaces that have not yet been converted should there remain
registers with unsigned type.

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

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

5 years ago[X86][SSE] Add shuffled load tests from PR16739
Simon Pilgrim [Fri, 16 Aug 2019 14:26:11 +0000 (14:26 +0000)]
[X86][SSE] Add shuffled load tests from PR16739

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

5 years ago[AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instructions.
Paul Walker [Fri, 16 Aug 2019 14:17:52 +0000 (14:17 +0000)]
[AArch64InstrInfo] Stop getInstSizeInBytes returning non-zero for meta instructions.

Summary:
AArch64InstrInfo::getInstSizeInBytes is incorrectly treating meta
instructions (e.g. CFI_INSTRUCTION) as normal instructions and
giving them a size of 4.

This results in branch relaxation calculating block sizes wrong.
Branch relaxation also considers alignment and thus a single
mistake can result in later blocks being incorrectly sized even
when they themselves do not contain meta instructions.

The net result is we might not relax a branch whose destination is
not within range.

Reviewers: nickdesaulniers, peter.smith

Reviewed By: peter.smith

Subscribers: javed.absar, kristof.beyls, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Remove unused include. NFCI.
Simon Pilgrim [Fri, 16 Aug 2019 14:05:46 +0000 (14:05 +0000)]
[X86] Remove unused include. NFCI.

We don't use anything from TargetOptions.h directly and its included via TargetLowering.h anyhow.

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

5 years ago[ARM] Correct register for narrowing and widening MVE loads and stores.
David Green [Fri, 16 Aug 2019 13:42:39 +0000 (13:42 +0000)]
[ARM] Correct register for narrowing and widening MVE loads and stores.

The widening and narrowing MVE instructions like VLDRH.32 are only permitted to
use low tGPR registers. This means that if they are used for a stack slot,
where the register used is only decided during frame setup, we need to be able
to correctly pick a thumb1 register over a normal GPR.

This attempts to add the required logic into eliminateFrameIndex and
rewriteT2FrameIndex, only picking the FrameReg if it is a valid register for
the operands register class, and picking a valid scratch register for the
register class.

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

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

5 years ago[x86] fix fdiv test; NFC
Sanjay Patel [Fri, 16 Aug 2019 13:31:23 +0000 (13:31 +0000)]
[x86] fix fdiv test; NFC

The test was just added with rL369106, but forgot to update the instruction
along with the test name.

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

5 years ago[x86] add tests for fdiv with variable operands; NFC
Sanjay Patel [Fri, 16 Aug 2019 13:23:52 +0000 (13:23 +0000)]
[x86] add tests for fdiv with variable operands; NFC

D66050 proposes to change the estimate sequence, but we
don't seem to have test coverage for the common case.

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

5 years agoRevert [CodeGen] Do the Simple Early Return in block-placement pass to optimize the...
Florian Hahn [Fri, 16 Aug 2019 13:19:29 +0000 (13:19 +0000)]
Revert [CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

This reverts r368997 (git commit 2a903c0b679bae1919f9fc01f78e4bc6cff2add0)

It looks like this commit adds invalid predecessors to MBBs. The example
below fails the verifier after MachineBlockPlacement (run llc
-verify-machineinstrs):

@global.4 = external constant i8*

declare i32 @zot(...)

define i16* @snork.67() personality i8* bitcast (i32 (...)* @zot to i8*) {
bb:
  invoke void undef()
          to label %bb5 unwind label %bb4

bb4:                                              ; preds = %bb
  %tmp = landingpad { i8*, i32 }
          catch i8* null
  unreachable

bb5:                                              ; preds = %bb
  %tmp6 = load i32, i32* null, align 4
  %tmp7 = icmp eq i32 %tmp6, 0
  br i1 %tmp7, label %bb14, label %bb8

bb8:                                              ; preds = %bb11, %bb5
  invoke void undef()
          to label %bb9 unwind label %bb11

bb9:                                              ; preds = %bb8
  %tmp10 = invoke i16* undef()
          to label %bb14 unwind label %bb11

bb11:                                             ; preds = %bb9, %bb8
  %tmp12 = landingpad { i8*, i32 }
          cleanup
          catch i8* bitcast (i8** @global.4 to i8*)
  %tmp13 = icmp ult i64 undef, undef
  br i1 %tmp13, label %bb8, label %bb14

bb14:                                             ; preds = %bb11, %bb9, %bb5
  %tmp15 = phi i16* [ null, %bb5 ], [ null, %bb11 ], [ %tmp10, %bb9 ]
  ret i16* %tmp15
}

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

5 years ago[DAGCombiner] Add simple folds for SMULFIX/UMULFIX/SMULFIXSAT
Bjorn Pettersson [Fri, 16 Aug 2019 13:16:48 +0000 (13:16 +0000)]
[DAGCombiner] Add simple folds for SMULFIX/UMULFIX/SMULFIXSAT

Summary:
Add the following DAGCombiner folds for mulfix being
one of SMULFIX/UMULFIX/SMULFIXSAT:
  (mulfix x, undef, scale) -> 0
  (mulfix x, 0, scale) -> 0

Also added canonicalization of constants to RHS.

Reviewers: RKSimon, craig.topper, spatel

Reviewed By: RKSimon

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Add test case for future MULFIX DAG combine folds. NFC
Bjorn Pettersson [Fri, 16 Aug 2019 13:16:38 +0000 (13:16 +0000)]
[X86] Add test case for future MULFIX DAG combine folds. NFC

Add some test cases displaying the lack of DAG combine
folds for SMULFIX/UMULFIX/SMULFIXSAT when either
multiplicand is undef or zero.

It seems like widening vector legalization for X86 can
introduce fixed point multiplication of undef values.
So that is one way that such operations could appear
during ISel.

Multiplication with zero is probably more unlikely, and
could potentially be handled by InstCombine. But I do
not think it would hurt to do such folds in DAGCombiner.

This patch only adds the test case. The folds will be
added in a follow up patch.

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

5 years ago[ARM] Don't pretend we know how to generate MVE VLDn
David Green [Fri, 16 Aug 2019 13:06:49 +0000 (13:06 +0000)]
[ARM] Don't pretend we know how to generate MVE VLDn

We don't yet know how to generate these instructions for MVE. And in the case
of VLD3, we don't even have the instruction. For the moment don't tell the
vectoriser that we have VLD4, just to end up serialising the results.

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

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

5 years ago[RISCV] Allow parsing of bare symbols with offsets
Lewis Revill [Fri, 16 Aug 2019 12:00:56 +0000 (12:00 +0000)]
[RISCV] Allow parsing of bare symbols with offsets

This patch allows symbols followed by an expression for an offset to be
parsed as bare symbols.

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

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

5 years agoRevert "[CallGraph] Refine call graph for indirect calls with !callees metadata"
Benjamin Kramer [Fri, 16 Aug 2019 10:59:18 +0000 (10:59 +0000)]
Revert "[CallGraph] Refine call graph for indirect calls with !callees metadata"

This reverts commit r369025. Crashes clang, test case is on the mailing
list.

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

5 years ago[RISCV] Lower inline asm constraint A for RISC-V
Lewis Revill [Fri, 16 Aug 2019 10:28:34 +0000 (10:28 +0000)]
[RISCV] Lower inline asm constraint A for RISC-V

This allows arguments with the constraint A to be lowered to input nodes
for RISC-V, which implies a memory address stored in a register.

This patch adds the minimal amount of code required to get operands with
the right constraints to compile.

https://reviews.llvm.org/D54296

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

5 years ago[SLPVectorizer] Silence null dereference warning. NFCI.
Simon Pilgrim [Fri, 16 Aug 2019 10:28:23 +0000 (10:28 +0000)]
[SLPVectorizer] Silence null dereference warning. NFCI.

cppcheck + MSVC analyzer both over zealously warn that we might dereference a null Bundle pointer - add an assertion to check for null to silence the warning, plus its a good idea to check that we succeeded in finding a schedule bundle anyway....

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

5 years ago[DebugInfo] Handle complex expressions with spills in LiveDebugValues
Jeremy Morse [Fri, 16 Aug 2019 10:04:17 +0000 (10:04 +0000)]
[DebugInfo] Handle complex expressions with spills in LiveDebugValues

In r369026 we disabled spill-recognition in LiveDebugValues for anything
that has a complex expression. This is because it's hard to recover the
complex expression once the spill location is baked into it.

This patch re-enables spill-recognition and slightly adjusts the DBG_VALUE
insts that LiveDebugValues tracks: instead of tracking the last DBG_VALUE
for a variable, it tracks the last _unspilt_ DBG_VALUE. The spill-restore
code is then able to access and copy the original complex expression; but
the rest of LiveDebugValues has to be aware of the slight semantic shift,
and produce a new spilt location if a spilt location is propagated between
blocks.

The test added produces an incorrect variable location (see FIXME), which
will be the subject of future work.

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

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

5 years agoAssumptionCache: remove old affected values after RAUW.
Tim Northover [Fri, 16 Aug 2019 09:34:27 +0000 (09:34 +0000)]
AssumptionCache: remove old affected values after RAUW.

If they're left in the cache then they can't be removed efficiently when the
cache is notified to unlink a @llvm.assume call, and that can lead to values
from different functions entirely remaining there.

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

5 years ago[ValueTracking] Fix recurrence detection to check both PHI operands.
Florian Hahn [Fri, 16 Aug 2019 09:15:02 +0000 (09:15 +0000)]
[ValueTracking] Fix recurrence detection to check both PHI operands.

Summary:
Currently we fail to compute known bits for recurrences where the
first incoming value is the start value of the recurrence.

Instead of exiting the loop when the first incoming value is not
the step of the recurrence, continue to check the second incoming
value.

The original code uses a loop to handle both cases, but incorrectly
exits instead of continuing.

Reviewers: lebedev.ri, spatel, nikic

Reviewed By: lebedev.ri

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Manually reimplement getTargetInsertSubreg in X86DAGToDAGISel::matchBitExtract...
Craig Topper [Fri, 16 Aug 2019 04:47:44 +0000 (04:47 +0000)]
[X86] Manually reimplement getTargetInsertSubreg in X86DAGToDAGISel::matchBitExtract so we can call insertDAGNode on the target constant.

This is needed to maintain the topological sort order.

Fixes PR42992.

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

5 years agoRemove the temporary code. NFC.
Igor Kudrin [Fri, 16 Aug 2019 03:40:04 +0000 (03:40 +0000)]
Remove the temporary code. NFC.

That should have been done in rL368156 but somehow was missed.

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

5 years agoRevert r368987, it caused PR43016.
Nico Weber [Fri, 16 Aug 2019 02:21:21 +0000 (02:21 +0000)]
Revert r368987, it caused PR43016.

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

5 years ago[PowerPC] add testcases for folding frame offset - NFC
Chen Zheng [Fri, 16 Aug 2019 01:52:50 +0000 (01:52 +0000)]
[PowerPC] add testcases for folding frame offset - NFC

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

5 years agogn build: Merge r369064
Nico Weber [Fri, 16 Aug 2019 00:04:48 +0000 (00:04 +0000)]
gn build: Merge r369064

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

5 years agogn build: Merge r369061
Nico Weber [Fri, 16 Aug 2019 00:04:42 +0000 (00:04 +0000)]
gn build: Merge r369061

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

5 years ago[DebugLine] Don't try to guess the path style
Jonas Devlieghere [Thu, 15 Aug 2019 23:53:15 +0000 (23:53 +0000)]
[DebugLine] Don't try to guess the path style

In r368879 I made an attempt to guess the path style from the files in
the line table. After some consideration I now think this is a poor
idea. This patch undoes that behavior and instead adds an optional
argument to specify the path style. This allows us to make that decision
elsewhere where we have more information. In case of LLDB based on the
Unit.

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

5 years ago[GlobalISel] CSEMIRBuilder: Add support for G_GEP
Volkan Keles [Thu, 15 Aug 2019 23:45:45 +0000 (23:45 +0000)]
[GlobalISel] CSEMIRBuilder: Add support for G_GEP

Summary:
This patch adds G_GEP to `shouldCSEOpc` so that it can be CSEd. It also refactors
`translateGetElementPtr` by replacing `createGenericVirtualRegister` calls with types.

Reviewers: aditya_nandakumar, arsenm, dsanders, paquette, aemerson

Reviewed By: aditya_nandakumar

Subscribers: wdng, rovka, javed.absar, hiraditya, Petar.Avramovic, llvm-commits

Tags: #llvm

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

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

5 years ago[ARM][LowOverheadLoops] Fix generated code for "revert".
Eli Friedman [Thu, 15 Aug 2019 23:35:53 +0000 (23:35 +0000)]
[ARM][LowOverheadLoops] Fix generated code for "revert".

Two issues:

1. t2CMPri shouldn't use CPSR if it isn't predicated. This doesn't
really have any visible effect at the moment, but it might matter in the
future.
2. The t2CMPri generated for t2WhileLoopStart might need to use a
register that isn't LR.

My team found this because we have a patch to track register liveness
late in the pass pipeline. I'll look into upstreaming it to help catch
issues like this earlier.

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

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

5 years ago[NewPM][PassInstrumentation] Fix test added in r369024.
David L. Jones [Thu, 15 Aug 2019 23:24:14 +0000 (23:24 +0000)]
[NewPM][PassInstrumentation] Fix test added in r369024.

llvm-lto2 doesn't treat "-" as stdout, so the test added in r369024 creates a
file named "-.0". This patch makes the test look more like other tests that use
llvm-lto2.

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

5 years ago[Support] Re-introduce the RWMutexImpl for macOS < 10.12
Jonas Devlieghere [Thu, 15 Aug 2019 23:07:20 +0000 (23:07 +0000)]
[Support] Re-introduce the RWMutexImpl for macOS < 10.12

In r369018, Benjamin replaced the custom RWMutex implementation with
their C++14 counterpart. Unfortunately, std::shared_timed_mutex is only
available on macOS 10.12 and later. This prevents LLVM from compiling
even on newer versions of the OS when you have an older deployment
target. This patch reintroduced the old RWMutexImpl but guards it by the
macOS availability macro.

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

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

5 years agoMove isPointerOffset function to ValueTracking (NFC).
Evgeniy Stepanov [Thu, 15 Aug 2019 22:58:28 +0000 (22:58 +0000)]
Move isPointerOffset function to ValueTracking (NFC).

Summary: To be reused in MemTag sanitizer.

Reviewers: pcc, vitalybuka, ostannard

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[Bugpoint redesign] Added Pass to Remove Global Variables
Diego Trevino Ferrer [Thu, 15 Aug 2019 22:54:09 +0000 (22:54 +0000)]
[Bugpoint redesign] Added Pass to Remove Global Variables

Summary:
This pass tries to remove Global Variables, as well as their derived uses. For example if a variable `@x` is used by `%call1` and `%call2`, both these uses and the definition of `@x` are deleted. Moreover if `%call1` or `%call2` are used elsewhere those uses are also deleted, and so on recursively.

I'm still uncertain if this pass should remove derived uses, I'm open to suggestions.

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

llvm-svn: 368918

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

5 years ago[Bugpoint redesign] Output option can now print to STDOUT
Diego Trevino Ferrer [Thu, 15 Aug 2019 22:39:43 +0000 (22:39 +0000)]
[Bugpoint redesign] Output option can now print to STDOUT

Summary:
This also changes all the outs() statements to errs() so the output and
progress streams don't get mixed.

This has been added because D64176 had flaky tests, which I believe were because the reduced file was being catted into `FileCheck`, instead of being pass from STDOUT directly.

Reviewers: chandlerc, dblaikie, xbolva00

Subscribers: llvm-commits

Tags: #llvm

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

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

5 years agoRevert "[Support] Re-introduce the RWMutexImpl for macOS < 10.12"
Jonas Devlieghere [Thu, 15 Aug 2019 22:24:21 +0000 (22:24 +0000)]
Revert "[Support] Re-introduce the RWMutexImpl for macOS < 10.12"

This doesn't work (yet).

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

5 years ago[AIX] For XL, pick GCC-compatible std & default warning options
Hubert Tong [Thu, 15 Aug 2019 22:23:53 +0000 (22:23 +0000)]
[AIX] For XL, pick GCC-compatible std & default warning options

Summary:
LLVM now requires C++14. For IBM XL compilers with C++14 support, this
can be done with the GCC-style options. The relevant block in the CMake
file is split up into smaller parts as part of this patch to allow the
common cases to be shared.

Reviewers: jfb, jasonliu, daltenty, xingxue

Reviewed By: jfb, xingxue

Subscribers: mstorsjo, mgorny, dexonsmith, llvm-commits

Tags: #llvm

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

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

5 years ago[SDAG] Minor code cleanup/standardization of atomic accessors [NFC]
Philip Reames [Thu, 15 Aug 2019 22:21:14 +0000 (22:21 +0000)]
[SDAG] Minor code cleanup/standardization of atomic accessors [NFC]

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

5 years ago[Support] Re-introduce the RWMutexImpl for macOS < 10.12
Jonas Devlieghere [Thu, 15 Aug 2019 22:19:38 +0000 (22:19 +0000)]
[Support] Re-introduce the RWMutexImpl for macOS < 10.12

In r369018, Benjamin replaced the custom RWMutex implementation with
their C++14 counterpart. Unfortunately, std::shared_timed_mutex is only
available on macOS 10.12 and later. This prevents LLVM from compiling
even on newer versions of the OS when you have an older deployment
target. This patch reintroduced the old RWMutexImpl but guards it by the
macOS availability macro.

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

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

5 years ago[Utils][NFC] Copy bisect usage documents from commit msg into script.
Jinsong Ji [Thu, 15 Aug 2019 22:07:59 +0000 (22:07 +0000)]
[Utils][NFC] Copy bisect usage documents from commit msg into script.

Copy the message into script, so that new users won't need to dig into
commit messages to figure out how to use.

The message are copied directly from Michael's commit message in
https://reviews.llvm.org/rL214610.

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

5 years agoAdd missing MIR serialization text for AArch64II::MO_TAGGED.
Evgeniy Stepanov [Thu, 15 Aug 2019 22:03:55 +0000 (22:03 +0000)]
Add missing MIR serialization text for AArch64II::MO_TAGGED.

Reviewers: pcc

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[MemorySSA] Remove restrictive asserts.
Alina Sbirlea [Thu, 15 Aug 2019 21:20:08 +0000 (21:20 +0000)]
[MemorySSA] Remove restrictive asserts.

The verification I added has overly restrictive asserts.
Unreachable blocks can have any incoming value in practice, after an
update due to a "replaceAllUses" call when the repalced entry is
LiveOnEntry.

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

5 years agogn build: Merge r369039
Nico Weber [Thu, 15 Aug 2019 21:00:33 +0000 (21:00 +0000)]
gn build: Merge r369039

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

5 years agogn build: Merge r369018
Nico Weber [Thu, 15 Aug 2019 21:00:26 +0000 (21:00 +0000)]
gn build: Merge r369018

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

5 years agoFix nm on GCC 5.1 after the C++14 move
JF Bastien [Thu, 15 Aug 2019 20:38:42 +0000 (20:38 +0000)]
Fix nm on GCC 5.1 after the C++14 move

Summary:
As in D66306, fix the invocation of std::sort with std::function by not using
std::function, since it's easier to read and is broken in libstdc++ from GCC 5.1
(see https://gcc.gnu.org/PR65942).

Reviewers: thakis

Subscribers: jkorous, mgrang, dexonsmith, rupprecht, llvm-commits

Tags: #llvm

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

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

5 years agoApply llvm-prefer-register-over-unsigned from clang-tidy to LLVM
Daniel Sanders [Thu, 15 Aug 2019 19:22:08 +0000 (19:22 +0000)]
Apply llvm-prefer-register-over-unsigned from clang-tidy to LLVM

Summary:
This clang-tidy check is looking for unsigned integer variables whose initializer
starts with an implicit cast from llvm::Register and changes the type of the
variable to llvm::Register (dropping the llvm:: where possible).

Partial reverts in:
X86FrameLowering.cpp - Some functions return unsigned and arguably should be MCRegister
X86FixupLEAs.cpp - Some functions return unsigned and arguably should be MCRegister
X86FrameLowering.cpp - Some functions return unsigned and arguably should be MCRegister
HexagonBitSimplify.cpp - Function takes BitTracker::RegisterRef which appears to be unsigned&
MachineVerifier.cpp - Ambiguous operator==() given MCRegister and const Register
PPCFastISel.cpp - No Register::operator-=()
PeepholeOptimizer.cpp - TargetInstrInfo::optimizeLoadInstr() takes an unsigned&
MachineTraceMetrics.cpp - MachineTraceMetrics lacks a suitable constructor

Manual fixups in:
ARMFastISel.cpp - ARMEmitLoad() now takes a Register& instead of unsigned&
HexagonSplitDouble.cpp - Ternary operator was ambiguous between unsigned/Register
HexagonConstExtenders.cpp - Has a local class named Register, used llvm::Register instead of Register.
PPCFastISel.cpp - PPCEmitLoad() now takes a Register& instead of unsigned&

Depends on D65919

Reviewers: arsenm, bogner, craig.topper, RKSimon

Reviewed By: arsenm

Subscribers: RKSimon, craig.topper, lenary, aemerson, wuzish, jholewinski, MatzeB, qcolombet, dschuff, jyknight, dylanmckay, sdardis, nemanjai, jvesely, wdng, nhaehnle, sbc100, jgravelle-google, kristof.beyls, hiraditya, aheejin, kbarton, fedor.sergeev, javed.absar, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, tpr, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, Jim, s.egerton, llvm-commits

Tags: #llvm

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

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

5 years ago[Hexagon] Fix instruction selection for vselect v4i8
Krzysztof Parzyszek [Thu, 15 Aug 2019 19:20:09 +0000 (19:20 +0000)]
[Hexagon] Fix instruction selection for vselect v4i8

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

5 years agoRevert [Bugpoint redesign] Added Pass to Remove Global Variables
Diego Trevino Ferrer [Thu, 15 Aug 2019 19:08:15 +0000 (19:08 +0000)]
Revert [Bugpoint redesign] Added Pass to Remove Global Variables

This reverts r368918 because it was unstable!

It broke these builds:
 * http://lab.llvm.org:8011/builders/lld-x86_64-ubuntu-fast/builds/4649
 * http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/29966
 * http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/29964

But surprisingly this passed:
 * http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/29965

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

5 years agoMVT: Add v3i16/v3f16 vectors
Matt Arsenault [Thu, 15 Aug 2019 18:58:25 +0000 (18:58 +0000)]
MVT: Add v3i16/v3f16 vectors

AMDGPU has some buffer intrinsics which theoretically could use
this. Some of the generated tables include the 3 and 4 element vector
versions of these rounded to 64-bits, which is ambiguous. Add these to
help the table disambiguate these.

Assertion change is for the path odd sized vectors now take for R600.
v3i16 is widened to v4i16, which then needs to be promoted to v4i32.

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

5 years ago[NFC] Add a couple of dump routines for RegisterPressure helper classes
Philip Reames [Thu, 15 Aug 2019 18:49:39 +0000 (18:49 +0000)]
[NFC] Add a couple of dump routines for RegisterPressure helper classes

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

5 years ago[ValueTracking] Look through ptrmask intrinsics during getUnderlyingObject.
Florian Hahn [Thu, 15 Aug 2019 18:39:56 +0000 (18:39 +0000)]
[ValueTracking] Look through ptrmask intrinsics during getUnderlyingObject.

Reviewers: nlopes, efriedma, hfinkel, sanjoy, aqjune, jdoerfert

Reviewed By: jdoerfert

Subscribers: jdoerfert, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[NFC] Added tests for 'select with ctlz to cttz' fold
David Bolvansky [Thu, 15 Aug 2019 18:23:37 +0000 (18:23 +0000)]
[NFC] Added tests for 'select with ctlz to cttz' fold

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

5 years ago[X86] Add custom type legalization for bitcasting mmx to v2i32/v4i16/v8i8 to use...
Craig Topper [Thu, 15 Aug 2019 18:23:37 +0000 (18:23 +0000)]
[X86] Add custom type legalization for bitcasting mmx to v2i32/v4i16/v8i8 to use movq2dq instead of going through memory.

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

5 years agoAdd LLVMLibC proposal to docs/index.rst.
Siva Chandra [Thu, 15 Aug 2019 18:08:11 +0000 (18:08 +0000)]
Add LLVMLibC proposal to docs/index.rst.

Reviewers: rupprecht

Subscribers: arphaman, llvm-commits

Tags: #llvm

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

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

5 years agoLink libpthread into LLVMCore.so
Benjamin Kramer [Thu, 15 Aug 2019 18:06:30 +0000 (18:06 +0000)]
Link libpthread into LLVMCore.so

After r369018 the compiler can inline pthread calls into users of
RWMutex.

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

5 years agoRevert "MemoryBuffer: Add a missing error-check to getOpenFileImpl"
Pavel Labath [Thu, 15 Aug 2019 17:52:40 +0000 (17:52 +0000)]
Revert "MemoryBuffer: Add a missing error-check to getOpenFileImpl"

This reverts commit r368977 because it broke a couple of tests in lldb.

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

5 years ago[DebugInfo] Avoid crash from dropped fragments in LiveDebugValues
Jeremy Morse [Thu, 15 Aug 2019 17:49:46 +0000 (17:49 +0000)]
[DebugInfo] Avoid crash from dropped fragments in LiveDebugValues

This patch avoids a crash caused by DW_OP_LLVM_fragments being dropped
from DIExpressions by LiveDebugValues spill-restore code. The appearance
of a previously unseen fragment configuration confuses LDV, as documented
in PR42773, and reproduced by the test function this patch adds (Crashes
on a x86_64 debug build).

To avoid this, on spill restore, we now use fragment information from the
spilt-location-expression.

In addition, when spilling, we now don't spill any DBG_VALUE with a complex
expression, as it can't be safely restored and will definitely lead to an
incorrect variable location. The discussion of this is in D65368.

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

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

5 years ago[CallGraph] Refine call graph for indirect calls with !callees metadata
Mark Lacey [Thu, 15 Aug 2019 17:47:53 +0000 (17:47 +0000)]
[CallGraph] Refine call graph for indirect calls with !callees metadata

For indirect call sites having a small set of possible callees,
!callees metadata can be used to indicate what those callees are.
This patch updates the call graph and lazy call graph analyses so
that they consider this metadata when encountering call sites. For
the call graph, it adds a new external call graph node to the graph
for each unique !callees metadata node. A call graph edge connects
an indirect call site with the external node associated with the
!callees metadata that is attached to it. And there is an edge from
this external node to each of the callees indicated by the metadata.
Similarly, for the lazy call graph, the patch adds Ref edges from a
caller to the possible callees indicated by the metadata.

The primary purpose of the patch is to facilitate iterating over the
functions in a module such that all of the callees indicated by a
given !callees metadata node will be visited prior to the functions
containing call sites annotated by that node. This property is
required by optimizations performing a bottom-up traversal of the
SCC DAG. For example, the inliner can be made to inline through an
indirect call. If the call site is annotated with !callees metadata,
this patch ensures that the inliner will have visited all of the
callees prior to the caller, allowing it to reliably compute the
cost of inlining one or more of the potential callees.

Original patch by @mssimpso. I've made some small changes to get it
to apply, build, and pass tests on the top of tree, as well as
some minor tweaks to formatting and functionality.

Subscribers: mehdi_amini, hiraditya, llvm-commits, mssimpso

Tags: #llvm

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

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

5 years ago[NewPM][PassInstrumentation] IR printing support for (Thin)LTO
Taewook Oh [Thu, 15 Aug 2019 17:47:44 +0000 (17:47 +0000)]
[NewPM][PassInstrumentation] IR printing support for (Thin)LTO

Summary: IR printing has not been correctly supported with (Thin)LTO if the new pass manager is enabled. Previously we only get outputs from backend(codegen) passes, as they are still under legacy pass manager even when the new pass manager is enabled. This patch addresses the issue and enables IR printing for optimization passes with new pass manager + (Thin)LTO setting.

Reviewers: fedor.sergeev, philip.pfaffe

Subscribers: mehdi_amini, inglorion, hiraditya, steven_wu, dexonsmith, dang, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Improve cost model for subvector extraction of less than 128-bit vectors
Craig Topper [Thu, 15 Aug 2019 17:29:42 +0000 (17:29 +0000)]
[X86] Improve cost model for subvector extraction of less than 128-bit vectors

Now that we're using widening legalization. We need to improve our extract_subvector cost model for these types. This patch begins by modeling these as a subvector extract followed by a permute. I've left FIXMEs in the code for future improvements.

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

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

5 years ago[Support] Base RWMutex on std::shared_timed_mutex (C++14)
Benjamin Kramer [Thu, 15 Aug 2019 16:55:23 +0000 (16:55 +0000)]
[Support] Base RWMutex on std::shared_timed_mutex (C++14)

This should have the same semantics. We use std::shared_mutex instead on
MSVC and C++17, std::shared_timed_mutex is less efficient than our
custom implementation on Windows, std::shared_mutex should be faster.

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

5 years ago[LLVM][Alignment] Fix MSVC potential division by 0 warning (PR42911)
Simon Pilgrim [Thu, 15 Aug 2019 16:34:23 +0000 (16:34 +0000)]
[LLVM][Alignment] Fix MSVC potential division by 0 warning (PR42911)

Original Patch by @gchatelet (Guillaume Chatelet)

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

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

5 years ago[Hexagon] Generate vector min/max for HVX
Krzysztof Parzyszek [Thu, 15 Aug 2019 16:13:17 +0000 (16:13 +0000)]
[Hexagon] Generate vector min/max for HVX

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

5 years ago[llvm] Migrate llvm::make_unique to std::make_unique
Jonas Devlieghere [Thu, 15 Aug 2019 15:54:37 +0000 (15:54 +0000)]
[llvm] Migrate llvm::make_unique to std::make_unique

Now that we've moved to C++14, we no longer need the llvm::make_unique
implementation from STLExtras.h. This patch is a mechanical replacement
of (hopefully) all the llvm::make_unique instances across the monorepo.

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

5 years agoAdd a proposal for a libc project under the LLVM umbrella.
Siva Chandra [Thu, 15 Aug 2019 15:50:42 +0000 (15:50 +0000)]
Add a proposal for a libc project under the LLVM umbrella.

Reviewers: chandlerc, dlj, echristo, hfinkel, jfb, zturner

Subscribers: dexonsmith, llvm-commits

Tags: #llvm

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

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

5 years ago[cmake] install_symlink should obey DESTDIR unconditionally
Justin Bogner [Thu, 15 Aug 2019 15:36:13 +0000 (15:36 +0000)]
[cmake] install_symlink should obey DESTDIR unconditionally

Setting DESTDIR was erroneously buried under a condition here - if
it's set it should always be used.

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

5 years ago[MCA] Slightly refactor class RetireControlUnit, and add the ability to override...
Andrea Di Biagio [Thu, 15 Aug 2019 15:27:40 +0000 (15:27 +0000)]
[MCA] Slightly refactor class RetireControlUnit, and add the ability to override the mask of used buffered resources in class mca::Instruction. NFCI

This patch teaches the RCU how to peek 'next' RCUTokens. A new method has been
added to the RetireControlUnit class with the goal of minimizing the complexity
of follow-up patches that will enable macro-fusion support in mca.

This patch also adds method Instruction::getNumMicroOpcodes() to simplify common
interactions with the instruction descriptor (a pattern quite common in some
pipeline stages).

Added the ability to override the default set of consumed scheduler resources
(this -again- is to simplify future patches that add support for macro-op fusion).

No functional change intended.

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

5 years agoRemove SmallBitVector.h include. NFCI.
Simon Pilgrim [Thu, 15 Aug 2019 14:40:37 +0000 (14:40 +0000)]
Remove SmallBitVector.h include. NFCI.

SmallBitVector/BitVector types aren't used at all in the cpp file.

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

5 years agoRemove BitVector.h include. NFCI.
Simon Pilgrim [Thu, 15 Aug 2019 14:39:28 +0000 (14:39 +0000)]
Remove BitVector.h include. NFCI.

BitVector type isn't used at all in the cpp file.

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

5 years ago[PowerPC] Use xxleqv to set all one vector IMM(-1).
Jinsong Ji [Thu, 15 Aug 2019 14:32:51 +0000 (14:32 +0000)]
[PowerPC] Use xxleqv to set all one vector IMM(-1).

Summary:
xxspltib/vspltisb are 3 cycle PM instructions,
xxleqv is 2 cycle ALU instruction.

We should use xxleqv to set all one vectors.

Reviewers: hfinkel, nemanjai, steven.zhang

Subscribers: hiraditya, kbarton, MaskRay, shchenz, llvm-commits

Tags: #llvm

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

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

5 years ago[lib/Object] - Remove objdump-file-header.test
George Rimar [Thu, 15 Aug 2019 13:39:58 +0000 (13:39 +0000)]
[lib/Object] - Remove objdump-file-header.test

objdump-file-header.test is placed in the wrong folder.
I removed it and updated the existent llvm-objdump test cases with
the updated content of the file removed.

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

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

5 years ago[DAGCombine] MergeConsecutiveStores - fix cppcheck/MSVC extension warning. NFCI.
Simon Pilgrim [Thu, 15 Aug 2019 13:07:14 +0000 (13:07 +0000)]
[DAGCombine] MergeConsecutiveStores - fix cppcheck/MSVC extension warning. NFCI.

Set the StartIdx type to size_t so that it matches the StoreNodes SmallVector size() and index types.

Silences the MSVC analyzer warning that unsigned increment might overflow before exceeding size_t on 64-bit targets - this isn't likely to happen but it means we use consistent types and reduces the warning "noise" a little.

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

5 years ago[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
Kang Zhang [Thu, 15 Aug 2019 13:05:16 +0000 (13:05 +0000)]
[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

Summary:

This patch has trigger a bug of r368339, and the r368339 has been reverted, So upstream this patch again.

In `block-placement` pass, it will create some patterns for unconditional we can do the simple early retrun.
But the `early-ret` pass is before `block-placement`, we don't want to run it again.
This patch is to do the simple early return to optimize the blocks at the last of `block-placement`.

Reviewed By: efriedma

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

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

5 years ago[ARM] Fix alignment checks for BE VLDRH
David Green [Thu, 15 Aug 2019 12:54:47 +0000 (12:54 +0000)]
[ARM] Fix alignment checks for BE VLDRH

We need to allow any alignment at least 2, not just exactly 2, so that the big
endian loads and stores can be selected successfully. I've also added extra BE
testing for the load and store tests.

Thanks to Oliver for the report.

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

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

5 years ago[SDAG][x86] check for relaxed math when matching an FP reduction
Sanjay Patel [Thu, 15 Aug 2019 12:43:15 +0000 (12:43 +0000)]
[SDAG][x86] check for relaxed math when matching an FP reduction

If the last step in an FP add reduction allows reassociation and doesn't care
about -0.0, then we are free to recognize that computation as a reduction
that may reorder the intermediate steps.

This is requested directly by PR42705:
https://bugs.llvm.org/show_bug.cgi?id=42705
and solves PR42947 (if horizontal math instructions are actually faster than
the alternative):
https://bugs.llvm.org/show_bug.cgi?id=42947

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

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

5 years ago[MCA] Slightly refactor the logic in ResourceManager. NFCI
Andrea Di Biagio [Thu, 15 Aug 2019 12:39:55 +0000 (12:39 +0000)]
[MCA] Slightly refactor the logic in ResourceManager. NFCI

This patch slightly changes the API in the attempt to simplify resource buffer
queries. It is done in preparation for a patch that will enable support for
macro fusion.

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