OSDN Git Service

android-x86/external-llvm.git
7 years ago[InstCombine] add (ashr (shl i32 X, 31), 31), 1 --> and (not X), 1
Sanjay Patel [Wed, 10 May 2017 13:56:52 +0000 (13:56 +0000)]
[InstCombine] add (ashr (shl i32 X, 31), 31), 1 --> and (not X), 1

This is another step towards favoring 'not' ops over random 'xor' in IR:
https://bugs.llvm.org/show_bug.cgi?id=32706

This transformation may have occurred in longer IR sequences using computeKnownBits,
but that could be much more expensive to calculate.

As the scalar result shows, we do not currently favor 'not' in all cases. The 'not'
created by the transform is transformed again (unnecessarily). Vectors don't have
this problem because vectors are (wrongly) excluded from several other combines.

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

7 years agoUse explicit false instead of casted nullptr. NFC.
Serge Guelton [Wed, 10 May 2017 13:24:17 +0000 (13:24 +0000)]
Use explicit false instead of casted nullptr. NFC.

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

7 years agoUse clang++-3.5 compatible initializer_list constructor
Serge Guelton [Wed, 10 May 2017 13:23:47 +0000 (13:23 +0000)]
Use clang++-3.5 compatible initializer_list constructor

Otherwise, a warning is issued.

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

7 years ago[LLVM][inline-asm] Altmacro string escape character '!'
Michael Zuckerman [Wed, 10 May 2017 13:08:11 +0000 (13:08 +0000)]
[LLVM][inline-asm] Altmacro string escape character '!'

This patch is the fourth patch in a series of reviews for the Altmacro feature.
This patch introduces a new escape character '!' and it depends on D32701.

according to https://sourceware.org/binutils/docs/as/Altmacro.html:
"single-character string escape
To include any single character literally in a string (even if the character would otherwise have some special meaning), you can prefix the character with !' (an exclamation mark). For example, you can write <4.3 !> 5.4!!>' to get the literal text `4.3 > 5.4!'. "

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

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

7 years ago[DAGCombiner] Dropped explicit (sra 0, x) -> 0 and (sra -1, x) -> 0 folds.
Simon Pilgrim [Wed, 10 May 2017 13:06:26 +0000 (13:06 +0000)]
[DAGCombiner] Dropped explicit (sra 0, x) -> 0 and (sra -1, x) -> 0 folds.

These are both handled (and tested) by the earlier ComputeNumSignBits == EltSizeInBits fold.

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

7 years ago[IfConversion] Add missing check in IfConversion/canFallThroughTo
Mikael Holmen [Wed, 10 May 2017 13:06:13 +0000 (13:06 +0000)]
[IfConversion] Add missing check in IfConversion/canFallThroughTo

Summary:
When trying to figure out if MBB could fallthrough to ToMBB (possibly by
falling through a bunch of other MBBs) we didn't actually check if there
was fallthrough between the last two blocks in the chain.

Reviewers: kparzysz, iteratee, MatzeB

Reviewed By: kparzysz, iteratee

Subscribers: javed.absar, llvm-commits

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

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

7 years ago[SystemZ] Implement getRepRegClassFor()
Jonas Paulsson [Wed, 10 May 2017 13:03:25 +0000 (13:03 +0000)]
[SystemZ]  Implement getRepRegClassFor()

This method must return a valid register class, or the list-ilp isel
scheduler will crash. For MVT::Untyped nullptr was previously returned, but
now ADDR128BitRegClass is returned instead. This is needed just as long as
list-ilp (and probably also list-hybrid) is still there.

Review: Ulrich Weigand, A Trick
https://reviews.llvm.org/D32802

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

7 years ago[AMDGPU][MC] Corrected v_madak/madmk to avoid printing "_e32" in disassembler output
Dmitry Preobrazhensky [Wed, 10 May 2017 13:00:28 +0000 (13:00 +0000)]
[AMDGPU][MC] Corrected v_madak/madmk to avoid printing "_e32" in disassembler output

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

Reviewers: vpykhtin, artem.tamazov, arsenm

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

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

7 years ago[GlobalISel][X86] Split test file. NFC
Igor Breger [Wed, 10 May 2017 12:58:31 +0000 (12:58 +0000)]
[GlobalISel][X86] Split test file. NFC

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

7 years ago[SystemZ] Add decimal integer instructions
Ulrich Weigand [Wed, 10 May 2017 12:42:45 +0000 (12:42 +0000)]
[SystemZ] Add decimal integer instructions

This adds the set of decimal integer (BCD) instructions for
assembler / disassembler use.

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

7 years ago[SystemZ] Add crypto instructions
Ulrich Weigand [Wed, 10 May 2017 12:42:00 +0000 (12:42 +0000)]
[SystemZ] Add crypto instructions

This adds the set of message-security assist instructions for
assembler / disassembler use.

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

7 years ago[SystemZ] Add translate/convert instructions
Ulrich Weigand [Wed, 10 May 2017 12:41:12 +0000 (12:41 +0000)]
[SystemZ] Add translate/convert instructions

This adds the set of character-set translate and convert instructions
for assembler / disassembler use.

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

7 years ago[SystemZ] Add missing memory/string instructions
Ulrich Weigand [Wed, 10 May 2017 12:40:15 +0000 (12:40 +0000)]
[SystemZ] Add missing memory/string instructions

This adds a number of missing memory and string instructions
for assembler / disassembler use.

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

7 years ago[SystemZ] Reformat assembler/disassembler tests
Ulrich Weigand [Wed, 10 May 2017 12:39:11 +0000 (12:39 +0000)]
[SystemZ] Reformat assembler/disassembler tests

The assembler and disassmebler test cases started out formatted and
sorted in a particular way, but this got lost over time as patches
were added.  Reformat them again.  NFC.

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

7 years ago[DAGCombiner] Add vector support to fold (shl/srl 0, x) -> 0
Simon Pilgrim [Wed, 10 May 2017 12:34:27 +0000 (12:34 +0000)]
[DAGCombiner] Add vector support to fold (shl/srl 0, x) -> 0

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

7 years agoRevert r301950: SpeculativeExecution: Stop using whitelist for costs
Chandler Carruth [Wed, 10 May 2017 12:30:07 +0000 (12:30 +0000)]
Revert r301950: SpeculativeExecution: Stop using whitelist for costs

This pass doesn't correctly handle testing for when it is legal to hoist
arbitrary instructions. The whitelist happens to make it safe, so before
it is removed the pass's legality checks will need to be enhanced.

Details have been added to the code review thread for the patch.

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

7 years ago[AArch64] Fix a comment to match the code. NFC.
Martin Storsjo [Wed, 10 May 2017 10:51:32 +0000 (10:51 +0000)]
[AArch64] Fix a comment to match the code. NFC.

For the ELF case, the default/preferred form is the generic one, not
the short one as used for Apple - fix the comment to say so. Currently
it is a copy-paste typo.

Make the comments on the darwin default a bit more verbose.

Use enum names instead of literal 0/1 to further increase readability
and reduce fragility.

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

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

7 years agoAdd a late IR expansion pass for the experimental reduction intrinsics.
Amara Emerson [Wed, 10 May 2017 09:42:49 +0000 (09:42 +0000)]
Add a late IR expansion pass for the experimental reduction intrinsics.

This pass uses a new target hook to decide whether or not to expand a particular
intrinsic to the shuffevector sequence.

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

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

7 years ago[APInt] Fix indentation of tcDivide. Combine variable declaration and initialization.
Craig Topper [Wed, 10 May 2017 07:50:17 +0000 (07:50 +0000)]
[APInt] Fix indentation of tcDivide. Combine variable declaration and initialization.

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

7 years ago[APInt] Use getNumWords function in udiv/urem/udivrem instead of reimplementinging it.
Craig Topper [Wed, 10 May 2017 07:50:15 +0000 (07:50 +0000)]
[APInt] Use getNumWords function in udiv/urem/udivrem instead of reimplementinging it.

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

7 years ago[GlobalISel][X86] G_ZEXT i1 to i32/i64 support.
Igor Breger [Wed, 10 May 2017 06:52:58 +0000 (06:52 +0000)]
[GlobalISel][X86] G_ZEXT i1 to i32/i64 support.

Summary: Support G_ZEXT i1 to i32/i64 instruction selection.

Reviewers: zvi, guyblank

Reviewed By: guyblank

Subscribers: rovka, llvm-commits, kristof.beyls

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

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

7 years ago[UnreachableBlockElim] Check return value of constrainRegClass().
Mikael Holmen [Wed, 10 May 2017 06:33:43 +0000 (06:33 +0000)]
[UnreachableBlockElim] Check return value of constrainRegClass().

Summary:
MachineRegisterInfo::constrainRegClass() can fail if two register classes
don't have a common subclass or if the register class doesn't contain
enough registers. Check the return value before trying to remove Phi nodes,
and if we can't constrain, we output a COPY instead of simply replacing
registers.

Reviewers: kparzysz, david2050, wmi

Reviewed By: kparzysz

Subscribers: llvm-commits

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

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

7 years ago[CodeGen] Don't require AA in TwoAddress at -O0.
Ahmed Bougacha [Wed, 10 May 2017 00:56:00 +0000 (00:56 +0000)]
[CodeGen] Don't require AA in TwoAddress at -O0.

This is a follow-up to r302611, which moved an -O0 computation of DT
from SDAGISel to TwoAddress.

Don't use it here either, and avoid computing it completely.  The only
use was forwarding the analysis as an optional argument to utility
functions.

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

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

7 years ago[CodeGen] Don't require AA in SDAGISel at -O0.
Ahmed Bougacha [Wed, 10 May 2017 00:39:30 +0000 (00:39 +0000)]
[CodeGen] Don't require AA in SDAGISel at -O0.

Before r247167, the pass manager builder controlled which AA
implementations were used, exporting them all in the AliasAnalysis
analysis group.

Now, AAResultsWrapperPass always uses BasicAA, but still uses other AA
implementations if made available in the pass pipeline.

But regardless, SDAGISel is required at O0, and really doesn't need to
be doing fancy optimizations based on useful AA results.

Don't require AA at CodeGenOpt::None, and only use it otherwise.

This does have a functional impact (and one testcase is pessimized
because we can't reuse a load).  But I think that's desirable no matter
what.

Note that this alone doesn't result in less DT computations: TwoAddress
was previously able to reuse the DT we computed for SDAG.  That will be
fixed separately.

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

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

7 years ago[CodeGen] Compute DT/LI lazily in SafeStackLegacyPass. NFC.
Ahmed Bougacha [Wed, 10 May 2017 00:39:25 +0000 (00:39 +0000)]
[CodeGen] Compute DT/LI lazily in SafeStackLegacyPass. NFC.

We currently require SCEV, which requires DT/LI.  Those are expensive to
compute, but the pass only runs for functions that have the safestack
attribute.

Compute DT/LI to build SCEV lazily, only when the pass is actually going
to transform the function.

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

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

7 years ago[CodeGen] Split SafeStack into a LegacyPass and a utility. NFC.
Ahmed Bougacha [Wed, 10 May 2017 00:39:22 +0000 (00:39 +0000)]
[CodeGen] Split SafeStack into a LegacyPass and a utility. NFC.

This lets the pass focus on gathering the required analyzes, and the
utility class focus on the transformation.

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

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

7 years ago[CodeGen] Add an -O0 backend pipeline test. NFC.
Ahmed Bougacha [Wed, 10 May 2017 00:39:17 +0000 (00:39 +0000)]
[CodeGen] Add an -O0 backend pipeline test. NFC.

This should hopefully makes changes to the O0 pipeline obvious; it's
easy to require expensive passes, and this helps make informed
decisions.

Case in point: in the few weeks separating the time when I initially
wrote this patch to the time when I committed, the test regressed as
r302103 added another use of DT!

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

7 years ago[WebAssembly] Fix build error in wasm YAML code
Sam Clegg [Wed, 10 May 2017 00:14:04 +0000 (00:14 +0000)]
[WebAssembly] Fix build error in wasm YAML code

This warning didn't show up on my local build
but is causing the bots to fail.  Seems like a
bad idea to have types and variables with the
same name anyhow.

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

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

7 years ago[InstCombine] add helper function for add X, C folds; NFCI
Sanjay Patel [Wed, 10 May 2017 00:07:16 +0000 (00:07 +0000)]
[InstCombine] add helper function for add X, C folds; NFCI

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

7 years ago[WebAssembly] Improve libObject support for wasm imports and exports
Sam Clegg [Tue, 9 May 2017 23:48:41 +0000 (23:48 +0000)]
[WebAssembly] Improve libObject support for wasm imports and exports

Previously we had only supported the importing and
exporting of functions and globals.

Also, add usefull overload of getWasmSymbol() and
getNumberOfSymbols() in support of lld port.

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

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

7 years ago[InstCombine] add tests for andn; NFC
Sanjay Patel [Tue, 9 May 2017 23:40:13 +0000 (23:40 +0000)]
[InstCombine] add tests for andn; NFC

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

7 years ago[ProfileSummary] Make getProfileCount a non-static member function.
Easwaran Raman [Tue, 9 May 2017 23:21:10 +0000 (23:21 +0000)]
[ProfileSummary] Make getProfileCount a non-static member function.

This change is required because the notion of count is different for
sample profiling and getProfileCount will need to determine the
underlying profile type.

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

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

7 years agoFunctionImport: Simplify function llvm::thinLTOInternalizeModule. NFCI.
Peter Collingbourne [Tue, 9 May 2017 22:43:31 +0000 (22:43 +0000)]
FunctionImport: Simplify function llvm::thinLTOInternalizeModule. NFCI.

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

7 years ago[ExecutionEngine] Make RuntimeDyld::MemoryManager responsible for tracking EH
Lang Hames [Tue, 9 May 2017 21:32:18 +0000 (21:32 +0000)]
[ExecutionEngine] Make RuntimeDyld::MemoryManager responsible for tracking EH
frames.

RuntimeDyld was previously responsible for tracking allocated EH frames, but it
makes more sense to have the RuntimeDyld::MemoryManager track them (since the
frames are allocated through the memory manager, and written to memory owned by
the memory manager). This patch moves the frame tracking into
RTDyldMemoryManager, and changes the deregisterFrames method on
RuntimeDyld::MemoryManager from:

void deregisterEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size);

to:

void deregisterEHFrames();

Separating this responsibility will allow ORC to continue to throw the
RuntimeDyld instances away post-link (saving a few dozen bytes per lazy
function) while properly deregistering frames when modules are unloaded.

This patch also updates ORC to call deregisterEHFrames when modules are
unloaded. This fixes a bug where an exception that tears down the JIT can then
unwind through dangling EH frames that have been deallocated but not
deregistered, resulting in UB.

For people using SectionMemoryManager this should be pretty much a no-op. For
people with custom allocators that override registerEHFrames/deregisterEHFrames,
you will now be responsible for tracking allocated EH frames.

Reviewed in https://reviews.llvm.org/D32829

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

7 years ago[GVN] Fix a crash on encountering non-integral pointers
Keno Fischer [Tue, 9 May 2017 21:07:20 +0000 (21:07 +0000)]
[GVN] Fix a crash on encountering non-integral pointers

Summary:
This fixes the immediate crash caused by introducing an incorrect inttoptr
before attempting the conversion. There may still be a legality
check missing somewhere earlier for non-integral pointers, but this change
seems necessary in any case.

Reviewers: sanjoy, dberlin

Reviewed By: dberlin

Subscribers: llvm-commits

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

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

7 years ago[AMDGPU] Fixed typo in GCNRegPressure, NFC
Stanislav Mekhanoshin [Tue, 9 May 2017 20:50:04 +0000 (20:50 +0000)]
[AMDGPU] Fixed typo in GCNRegPressure, NFC

VGRP -> VGPR, SGRP -> SGPR

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

7 years ago[InstCombine] update test file to use FileCheck; NFC
Sanjay Patel [Tue, 9 May 2017 20:46:12 +0000 (20:46 +0000)]
[InstCombine] update test file to use FileCheck; NFC

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

7 years agoDAGCombine: Combine shuffles of splat-shuffles
Zvi Rackover [Tue, 9 May 2017 20:25:38 +0000 (20:25 +0000)]
DAGCombine: Combine shuffles of splat-shuffles

Summary: Reapply r299047, but this time handle correctly splat-masks with undef elements.

Reviewers: spatel, RKSimon, eli.friedman, andreadb

Reviewed By: spatel

Subscribers: llvm-commits

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

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

7 years ago[AArch64] Consider widening instructions in cost calculations
Matthew Simpson [Tue, 9 May 2017 20:18:12 +0000 (20:18 +0000)]
[AArch64] Consider widening instructions in cost calculations

The AArch64 instruction set has a few "widening" instructions (e.g., uaddl,
saddl, uaddw, etc.) that take one or more doubleword operands and produce
quadword results. The operands are automatically sign- or zero-extended as
appropriate. However, in LLVM IR, these extends are explicit. This patch
updates TTI to consider these widening instructions as single operations whose
cost is attached to the arithmetic instruction. It marks extends that are part
of a widening operation "free" and applies a sub-target specified overhead
(zero by default) to the arithmetic instructions.

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

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

7 years ago[InstCombine] clean up matchDeMorgansLaws(); NFCI
Sanjay Patel [Tue, 9 May 2017 20:05:05 +0000 (20:05 +0000)]
[InstCombine] clean up matchDeMorgansLaws(); NFCI

The motivation for getting rid of dyn_castNotVal is to allow fixing:
https://bugs.llvm.org/show_bug.cgi?id=32706

So this was supposed to be functional-change-intended for the case
of inverting constants and applying DeMorgan. However, I can't find
any cases where that pattern will actually get to matchDeMorgansLaws()
because we have other folds in visitAnd/visitOr that do the same
thing. So this ends up just being a clean-up patch with slight efficiency
improvement, but no-functional-change-intended.

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

7 years ago[NewGVN] Simplify a DEBUG() statement. NFCI.
Davide Italiano [Tue, 9 May 2017 20:02:48 +0000 (20:02 +0000)]
[NewGVN] Simplify a DEBUG() statement. NFCI.

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

7 years ago[codeview] Check for a DIExpression offset for local variables
Reid Kleckner [Tue, 9 May 2017 19:59:29 +0000 (19:59 +0000)]
[codeview] Check for a DIExpression offset for local variables

Fixes inalloca parameters, which previously all pointed to the same
offset. Extend the test to use llvm-readobj so that we can test the
offset in a readable way.

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

7 years agoMake it illegal for two Functions to point to the same DISubprogram
Adrian Prantl [Tue, 9 May 2017 19:47:37 +0000 (19:47 +0000)]
Make it illegal for two Functions to point to the same DISubprogram

As recently discussed on llvm-dev [1], this patch makes it illegal for
two Functions to point to the same DISubprogram and updates
FunctionCloner to also clone the debug info of a function to conform
to the new requirement. To simplify the implementation it also factors
out the creation of inlineAt locations from the Inliner into a
general-purpose utility in DILocation.

[1] http://lists.llvm.org/pipermail/llvm-dev/2017-May/112661.html
<rdar://problem/31926379>

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

This reapplies r302469 with a fix for a bot failure (reparentDebugInfo
now checks for the case the orig and new function are identical).

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

7 years agoNFC: refactor replaceDominatedUsesWith
Piotr Padlewski [Tue, 9 May 2017 19:39:44 +0000 (19:39 +0000)]
NFC: refactor replaceDominatedUsesWith

Summary:
Since I will post patch with some changes to
replaceDominatedUsesWith, it would be good to avoid
duplicating code again.

Reviewers: davide, dberlin

Subscribers: llvm-commits

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

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

7 years ago[DWARF] Fix a parsing issue with type unit headers.
Wolfgang Pieb [Tue, 9 May 2017 19:38:38 +0000 (19:38 +0000)]
[DWARF] Fix a parsing issue with type unit headers.

Reviewers: dblaikie

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

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

7 years agoFix the Endianness bug by adding the little endian UTF marker.
Eric Beckmann [Tue, 9 May 2017 19:35:45 +0000 (19:35 +0000)]
Fix the Endianness bug by adding the little endian UTF marker.

Summary: Quick fix

Reviewers: zturner, uweigand

Subscribers: llvm-commits

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

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

7 years agoSuppress all uses of LLVM_END_WITH_NULL. NFC.
Serge Guelton [Tue, 9 May 2017 19:31:13 +0000 (19:31 +0000)]
Suppress all uses of LLVM_END_WITH_NULL. NFC.

Use variadic templates instead of relying on <cstdarg> + sentinel.
This enforces better type checking and makes code more readable.

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

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

7 years ago[lanai] Add computeKnownBitsForTargetNode for Lanai.
Jacques Pienaar [Tue, 9 May 2017 18:35:26 +0000 (18:35 +0000)]
[lanai] Add computeKnownBitsForTargetNode for Lanai.

Summary: computeKnownBitsForTargetNode was not defined for Lanai which resulted in additional AND's with 0x1 for the output of SETCC instructions.

Reviewers: eliben, majnemer

Reviewed By: majnemer

Subscribers: llvm-commits

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

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

7 years ago[NewGVN] Explain why sorting by pointer values doesn't introduce non-determinism.
Davide Italiano [Tue, 9 May 2017 18:29:37 +0000 (18:29 +0000)]
[NewGVN] Explain why sorting by pointer values doesn't introduce non-determinism.

Thanks to Eli for pointing out in a post-commit review comment.

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

7 years ago[SystemZ] Support missing relocation types in RuntimeDyldELF
Ulrich Weigand [Tue, 9 May 2017 18:27:39 +0000 (18:27 +0000)]
[SystemZ] Support missing relocation types in RuntimeDyldELF

Handle some more relocation types in
RuntimeDyldELF::resolveSystemZRelocation

This fixes a number of failing LLDB test cases.

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

7 years ago[WebAssembly] Fix validation of start function
Sam Clegg [Tue, 9 May 2017 17:51:38 +0000 (17:51 +0000)]
[WebAssembly] Fix validation of start function

The check for valid start function was inverted.  Added a new
test in test/Object to check this case and fixed the existing
tests in for ObjectYAML.

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

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

7 years ago[RegScavenger] Rangify a loop, NFC
Krzysztof Parzyszek [Tue, 9 May 2017 17:16:52 +0000 (17:16 +0000)]
[RegScavenger] Rangify a loop, NFC

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

7 years agoAdding VSCode syntax colorizer to utils (generated from textmate colorizer).
Puyan Lotfi [Tue, 9 May 2017 17:13:37 +0000 (17:13 +0000)]
Adding VSCode syntax colorizer to utils (generated from textmate colorizer).
--This line, and those below, will be igored--

A    utils/vscode
A    utils/vscode/README
A    utils/vscode/tablegen
A    utils/vscode/tablegen/.vscode
A    utils/vscode/tablegen/.vscode/launch.json
A    utils/vscode/tablegen/CHANGELOG.md
A    utils/vscode/tablegen/README.md
A    utils/vscode/tablegen/language-configuration.json
A    utils/vscode/tablegen/package.json
A    utils/vscode/tablegen/syntaxes
A    utils/vscode/tablegen/syntaxes/TableGen.tmLanguage
A    utils/vscode/tablegen/vsc-extension-quickstart.md

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

7 years ago[NewGVN] Fix a consistent order for phi nodes operands.
Davide Italiano [Tue, 9 May 2017 16:58:28 +0000 (16:58 +0000)]
[NewGVN] Fix a consistent order for phi nodes operands.

The way we currently define congruency for two PHIExpression(s) is:

1) The operands to the phi functions are congruent
2) The PHIs are defined in the same BasicBlock.

NewGVN works under the assumption that phi operands are in predecessor
order, or at least in some consistent order. OTOH, is valid IR:

patatino:
  %meh = phi i16 [ %0, %winky ], [ %conv1, %tinky ]
  %banana = phi i16 [ %0, %tinky ], [ %conv1, %winky ]
  br label %end

and the in-memory representations of the two SSA registers have an
inconsistent order. This violation of NewGVN assumptions results into
two PHIs found congruent when they're not. While we think it's useful
to have always a consistent order enforced, let's fix this in NewGVN
sorting uses in predecessor order before creating a PHI expression.

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

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

7 years ago[APInt] Remove return value from tcFullMultiply.
Craig Topper [Tue, 9 May 2017 16:47:33 +0000 (16:47 +0000)]
[APInt] Remove return value from tcFullMultiply.

The description says it returns the number of words needed to represent the results. But the way it was coded it always returns (lhsWords + rhsWords) or (lhsWords + rhsWords - 1). But the result could be even smaller than that and it wouldn't tell you.

No one uses the result today so rather than try to fix it, just remove it.

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

7 years agoNewGVN: Make all of symbolic evaluation logically const.
Daniel Berlin [Tue, 9 May 2017 16:40:04 +0000 (16:40 +0000)]
NewGVN: Make all of symbolic evaluation logically const.

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

7 years ago[X86] Add more patterns for BZHI isel
Craig Topper [Tue, 9 May 2017 16:32:11 +0000 (16:32 +0000)]
[X86] Add more patterns for BZHI isel

This patch adds more patterns that a reasonable person might write that can be compiled to BZHI.

This adds support for

(~0U >> (32 - b)) & a;

and

a << (32 - b) >> (32 - b);

This was inspired by the code in APInt::clearUnusedBits.

This can pass an index of 32 to the bzhi instruction which a quick test of Haswell hardware shows will not mask any bits. Though the description text in the Intel manual says the "index is saturated to OperandSize-1". The pseudocode in the same manual indicates no bits will be zeroed for this case.

I think this is still missing cases where the subtract portion is an 8-bit operation.

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

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

7 years ago[InstCombineCasts] Fix checks in sext->lshr->trunc pattern.
Sanjay Patel [Tue, 9 May 2017 16:24:59 +0000 (16:24 +0000)]
[InstCombineCasts] Fix checks in sext->lshr->trunc pattern.

The comment says to avoid the case where zero bits are shifted into the truncated value,
but the code checks that the shift is smaller than the truncated value instead of the
number of bits added by the sign extension. Fixing this allows a shift by more than the
value size to be introduced, which is undefined behavior, so the shift is capped at the
value size minus one, which has the expected behavior of filling the value with the sign
bit.

Patch by Jacob Young!

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

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

7 years agoVX512] Only look at lower bit in constant scalar masks
Guy Blank [Tue, 9 May 2017 16:16:48 +0000 (16:16 +0000)]
VX512] Only look at lower bit in constant scalar masks

for scalar masked instructions only the lower bit of the mask is relevant. so for constant masks we should either do an unmasked operation or no operation, depending on the value of the lower bit.
This patch handles cases where the lower bit is '1'.

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

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

7 years agoRe-land "Use the frame index side table for byval and inalloca arguments"
Reid Kleckner [Tue, 9 May 2017 16:02:20 +0000 (16:02 +0000)]
Re-land "Use the frame index side table for byval and inalloca arguments"

This re-lands r302483. It was not the cause of PR32977.

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

7 years agoRe-land "Don't add DBG_VALUE instructions for static allocas in dbg.declare"
Reid Kleckner [Tue, 9 May 2017 16:01:47 +0000 (16:01 +0000)]
Re-land "Don't add DBG_VALUE instructions for static allocas in dbg.declare"

This re-lands commit r302461. It was not the cause of PR32977.

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

7 years ago[Atomic] Remove IsStore/IsLoad in the interface, and pass the instruction instead...
Tim Shen [Tue, 9 May 2017 15:27:17 +0000 (15:27 +0000)]
[Atomic] Remove IsStore/IsLoad in the interface, and pass the instruction instead. NFC.

Now both emitLeadingFence and emitTrailingFence take the instruction
itself, instead of taking IsLoad/IsStore pairs.
Instruction::mayReadFromMemory and Instrucion::mayWriteToMemory are used
for determining those two booleans.

The instruction argument is also useful for later D32763, in
emitTrailingFence. For emitLeadingFence, it seems to have cleaner
interface with the proposed change.

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

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

7 years agoAmend r302535; ifndef and ifdef are different, as it turns out.
Aaron Ballman [Tue, 9 May 2017 15:12:03 +0000 (15:12 +0000)]
Amend r302535; ifndef and ifdef are different, as it turns out.

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

7 years agoARMRegisterBankInfo.h requires LLVM_BUILD_GLOBAL_ISEL to be defined. If it is not...
Aaron Ballman [Tue, 9 May 2017 14:59:48 +0000 (14:59 +0000)]
ARMRegisterBankInfo.h requires LLVM_BUILD_GLOBAL_ISEL to be defined. If it is not defined, then ARMGenRegisterBank.inc is not table generated and the inclusion of this header causes the build to fail.

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

7 years agoRevert r302469 "Make it illegal for two Functions to point to the same DISubprogram"
Hans Wennborg [Tue, 9 May 2017 14:44:15 +0000 (14:44 +0000)]
Revert r302469 "Make it illegal for two Functions to point to the same DISubprogram"

This caused PR32977.

Original commit message:

> Make it illegal for two Functions to point to the same DISubprogram
>
> As recently discussed on llvm-dev [1], this patch makes it illegal for
> two Functions to point to the same DISubprogram and updates
> FunctionCloner to also clone the debug info of a function to conform
> to the new requirement. To simplify the implementation it also factors
> out the creation of inlineAt locations from the Inliner into a
> general-purpose utility in DILocation.
>
> [1] http://lists.llvm.org/pipermail/llvm-dev/2017-May/112661.html
> <rdar://problem/31926379>
>
> Differential Revision: https://reviews.llvm.org/D32975

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

7 years ago[LV] Fix insertion point for shuffle vectors in first order recurrence
Anna Thomas [Tue, 9 May 2017 14:29:33 +0000 (14:29 +0000)]
[LV] Fix insertion point for shuffle vectors in first order recurrence

Summary:
In first order recurrence vectorization, when the previous value is a phi node, we need to
set the insertion point to the first non-phi node.
We can have the previous value being a phi node, due to the generation of new
IVs as part of trunc optimization [1].

[1] https://reviews.llvm.org/rL294967

Reviewers: mssimpso, mkuper

Subscribers: mzolotukhin, llvm-commits

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

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

7 years agoRemoving a file that is not necessary (and was causing link diagnostics with MSVC...
Aaron Ballman [Tue, 9 May 2017 14:22:48 +0000 (14:22 +0000)]
Removing a file that is not necessary (and was causing link diagnostics with MSVC 2015); NFC.

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

7 years ago[X86][AVX512] Refine some avx512er intrinsics tests. NFC.
Guy Blank [Tue, 9 May 2017 14:03:51 +0000 (14:03 +0000)]
[X86][AVX512] Refine some avx512er intrinsics tests. NFC.

The modified tests should test the masked intrinsics.
Currently the mask is constant, which with a future patch (https://reviews.llvm.org/D32805) will cause the intrinsics to be replaced with an unmasked version.
This patch changes the constant mask to be a variable one.

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

7 years agoAdd extra operand to CALLSEQ_START to keep frame part set up previously
Serge Pavlov [Tue, 9 May 2017 13:35:13 +0000 (13:35 +0000)]
Add extra operand to CALLSEQ_START to keep frame part set up previously

Using arguments with attribute inalloca creates problems for verification
of machine representation. This attribute instructs the backend that the
argument is prepared in stack prior to  CALLSEQ_START..CALLSEQ_END
sequence (see http://llvm.org/docs/InAlloca.htm for details). Frame size
stored in CALLSEQ_START in this case does not count the size of this
argument. However CALLSEQ_END still keeps total frame size, as caller can
be responsible for cleanup of entire frame. So CALLSEQ_START and
CALLSEQ_END keep different frame size and the difference is treated by
MachineVerifier as stack error. Currently there is no way to distinguish
this case from actual errors.

This patch adds additional argument to CALLSEQ_START and its
target-specific counterparts to keep size of stack that is set up prior to
the call frame sequence. This argument allows MachineVerifier to calculate
actual frame size associated with frame setup instruction and correctly
process the case of inalloca arguments.

The changes made by the patch are:
- Frame setup instructions get the second mandatory argument. It
  affects all targets that use frame pseudo instructions and touched many
  files although the changes are uniform.
- Access to frame properties are implemented using special instructions
  rather than calls getOperand(N).getImm(). For X86 and ARM such
  replacement was made previously.
- Changes that reflect appearance of additional argument of frame setup
  instruction. These involve proper instruction initialization and
  methods that access instruction arguments.
- MachineVerifier retrieves frame size using method, which reports sum of
  frame parts initialized inside frame instruction pair and outside it.

The patch implements approach proposed by Quentin Colombet in
https://bugs.llvm.org/show_bug.cgi?id=27481#c1.
It fixes 9 tests failed with machine verifier enabled and listed
in PR27481.

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

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

7 years agoRevert "[MIPS] Add support to match more patterns for DINS instruction"
Simon Dardis [Tue, 9 May 2017 13:18:48 +0000 (13:18 +0000)]
Revert "[MIPS] Add support to match more patterns for DINS instruction"

This reverts commit rL302512. This broke the mips buildbots.

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

7 years ago[X86][SSE42] Lower v2i64/v4i64 ASHR(X, 63) as PCMPGTQ(0, X)
Simon Pilgrim [Tue, 9 May 2017 13:14:40 +0000 (13:14 +0000)]
[X86][SSE42] Lower v2i64/v4i64 ASHR(X, 63) as PCMPGTQ(0, X)

Similar to what we do for vXi8 ASHR(X, 7), use SSE42's PCMPGTQ to splat the sign instead of using the PSRAD+PSHUFD.

Avoiding bitcasts this improves combines that utilize computeNumSignBits, permits memory folding and reduces pipe pressure. Although it does require a second register, given that this is a (cheap) zero register the impact is minimal.

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

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

7 years agoRevert "[Dwarf] Disable reference verification for now (PR32972)"
Diana Picus [Tue, 9 May 2017 13:05:43 +0000 (13:05 +0000)]
Revert "[Dwarf] Disable reference verification for now (PR32972)"

This reverts commit r302520 because it break the unit tests.

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

7 years ago[Dwarf] Disable reference verification for now (PR32972)
Renato Golin [Tue, 9 May 2017 12:36:50 +0000 (12:36 +0000)]
[Dwarf] Disable reference verification for now (PR32972)

There is no other explanation about why this only started happening
now, even though it crashes on old code (supposedly reachable from
here).

The only common factor between the failing bots is that they use GCC
(4.9 and 5.3) to compile Clang, while the others use Clang 3.8, but the
failure is while building the tests, as an assertion, on Clang.

Commenting it out for now in hope the bots will go back green, but we
should keep looking for the real cause, and update bugzilla.

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

7 years ago[X86][AVX512] Add test for masking of scalar instructions.
Guy Blank [Tue, 9 May 2017 12:32:48 +0000 (12:32 +0000)]
[X86][AVX512] Add test for masking of scalar instructions.

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

7 years agoIntroduce experimental generic intrinsics for horizontal vector reductions.
Amara Emerson [Tue, 9 May 2017 10:43:25 +0000 (10:43 +0000)]
Introduce experimental generic intrinsics for horizontal vector reductions.

- This change allows targets to opt-in to using them instead of the log2
  shufflevector algorithm.
- The SLP and Loop vectorizers have the common code to do shuffle reductions
  factored out into LoopUtils, and now have a unified interface for generating
  reductions regardless of the preference of the target. LoopUtils now uses TTI
  to determine what kind of reductions the target wants to handle.
- For CodeGen, basic legalization support is added.

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

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

7 years ago[X86] Clang option -fuse-init-array has no effect when generating for MCU target
Nikolai Bozhenov [Tue, 9 May 2017 10:14:03 +0000 (10:14 +0000)]
[X86] Clang option -fuse-init-array has no effect when generating for MCU target

Reviewers: Eugene.Zelenko, dschuff, craig.topper

Reviewed By: craig.topper

Subscribers: ahatanak, aaboud, DavidKreitzer, llvm-commits, cfe-commits

Differential Revision: https://reviews.llvm.org/D32543
Patch by AndreiGrischenko <andrei.l.grischenko@intel.com>

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

7 years ago[MIPS] Add support to match more patterns for DINS instruction
Strahinja Petrovic [Tue, 9 May 2017 10:02:00 +0000 (10:02 +0000)]
[MIPS] Add support to match more patterns for DINS instruction

This patch adds support for recognizing patterns to match
DINS instruction.

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

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

7 years ago[ARM GlobalISel] Remove hand-written G_FADD selection
Diana Picus [Tue, 9 May 2017 08:32:42 +0000 (08:32 +0000)]
[ARM GlobalISel] Remove hand-written G_FADD selection

Remove the code selecting G_FADD - now that TableGen can handle more
opcodes, it's not needed anymore.

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

7 years ago[ConstantRange] Rewrite shl to avoid repeated calls to getUnsignedMax and avoid creat...
Craig Topper [Tue, 9 May 2017 07:04:04 +0000 (07:04 +0000)]
[ConstantRange] Rewrite shl to avoid repeated calls to getUnsignedMax and avoid creating the min APInt until we're sure we need it. Use inplace shift operations.

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

7 years ago[ConstantRange] Combine the two adds max+1 in lshr into a single addition.
Craig Topper [Tue, 9 May 2017 07:04:02 +0000 (07:04 +0000)]
[ConstantRange] Combine the two adds max+1 in lshr into a single addition.

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

7 years ago[ConstantRange] Use APInt::isNullValue in place of comparing with 0. The compiler...
Craig Topper [Tue, 9 May 2017 05:01:29 +0000 (05:01 +0000)]
[ConstantRange] Use APInt::isNullValue in place of comparing with 0. The compiler should be able to generate slightly better code for the former. NFC

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

7 years agoRevert "Don't add DBG_VALUE instructions for static allocas in dbg.declare"
Reid Kleckner [Tue, 9 May 2017 01:57:44 +0000 (01:57 +0000)]
Revert "Don't add DBG_VALUE instructions for static allocas in dbg.declare"

This reverts commit r302461.

It appears to be causing failures compiling gtest with debug info on the
Linux sanitizer bot. I was unable to reproduce the failure locally,
however.

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

7 years agoFix code section prefix for proper layout
Teresa Johnson [Tue, 9 May 2017 01:43:24 +0000 (01:43 +0000)]
Fix code section prefix for proper layout

Summary:
r284533 added hot and cold section prefixes based on profile
information, to enable grouping of hot/cold functions at link time.
However, it used "cold" as the prefix for cold sections, but gold only
recognizes "unlikely" (which is used by gcc for cold sections).
Therefore, cold sections were not properly being grouped. Switch to
using "unlikely"

Reviewers: danielcdh, davidxl

Subscribers: llvm-commits

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

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

7 years agoRevert "Revert "CMake: Move sphinx detection into AddSphinxTarget.cmake""
Tom Stellard [Tue, 9 May 2017 01:41:28 +0000 (01:41 +0000)]
Revert "Revert "CMake: Move sphinx detection into AddSphinxTarget.cmake""

This reverts commit r302054.

Re-commit now that I have fixes for clang/lld.

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

7 years ago[libFuzzer] update docs on -print_coverage/-dump_coverage
Kostya Serebryany [Tue, 9 May 2017 01:34:27 +0000 (01:34 +0000)]
[libFuzzer] update docs on -print_coverage/-dump_coverage

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

7 years ago[libFuzzer] make sure the input data is not overwritten in the fuzz target (if it...
Kostya Serebryany [Tue, 9 May 2017 01:17:29 +0000 (01:17 +0000)]
[libFuzzer] make sure the input data is not overwritten in the fuzz target (if it is -- report an error)

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

7 years agoRevert "Use the frame index side table for byval and inalloca arguments"
Reid Kleckner [Tue, 9 May 2017 01:14:39 +0000 (01:14 +0000)]
Revert "Use the frame index side table for byval and inalloca arguments"

This reverts r302483 and it's follow up fix.

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

7 years ago[APInt] Use default constructor instead of explicitly creating a 1-bit APInt in udiv...
Craig Topper [Mon, 8 May 2017 23:49:54 +0000 (23:49 +0000)]
[APInt] Use default constructor instead of explicitly creating a 1-bit APInt in udiv and urem. NFC

The default constructor does the same thing.

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

7 years ago[APInt] Remove 'else' after 'return' in udiv and urem. NFC
Craig Topper [Mon, 8 May 2017 23:49:49 +0000 (23:49 +0000)]
[APInt] Remove 'else' after 'return' in udiv and urem. NFC

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

7 years agoIgnore !associated metadata with null argument.
Evgeniy Stepanov [Mon, 8 May 2017 23:46:20 +0000 (23:46 +0000)]
Ignore !associated metadata with null argument.

Fixes PR32577 (comment 10).
Such metadata may legitimately appear in LTO.

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

7 years agoRelax Dwarf filecheck test for 32-bit hosts
Reid Kleckner [Mon, 8 May 2017 23:27:52 +0000 (23:27 +0000)]
Relax Dwarf filecheck test for 32-bit hosts

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

7 years agoUse the frame index side table for byval and inalloca arguments
Reid Kleckner [Mon, 8 May 2017 23:20:27 +0000 (23:20 +0000)]
Use the frame index side table for byval and inalloca arguments

Summary:
For inalloca functions, this is a very common code pattern:

  %argpack = type <{ i32, i32, i32 }>
  define void @f(%argpack* inalloca %args) {
  entry:
    %a = getelementptr inbounds %argpack, %argpack* %args, i32 0, i32 0
    %b = getelementptr inbounds %argpack, %argpack* %args, i32 0, i32 1
    %c = getelementptr inbounds %argpack, %argpack* %args, i32 0, i32 2
    tail call void @llvm.dbg.declare(metadata i32* %a, ... "a")
    tail call void @llvm.dbg.declare(metadata i32* %c, ... "b")
    tail call void @llvm.dbg.declare(metadata i32* %b, ... "c")

Even though these GEPs can be simplified to a constant offset from EBP
or RSP, we don't do that at -O0, and each GEP is computed into a
register. Registers used to compute argument addresses are typically
spilled and clobbered very quickly after the initial computation, so
live debug variable tracking loses information very quickly if we use
DBG_VALUE instructions.

This change moves processing of dbg.declare between argument lowering
and basic block isel, so that we can ask if an argument has a frame
index or not. If the argument lives in a register as is the case for
byval arguments on some targets, then we don't put it in the side table
and during ISel we emit DBG_VALUE instructions.

Reviewers: aprantl

Subscribers: llvm-commits

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

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

7 years agoAdd basic test case for -instnamer
Sanjoy Das [Mon, 8 May 2017 23:18:46 +0000 (23:18 +0000)]
Add basic test case for -instnamer

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

7 years ago[InstNamer] Use range-for
Sanjoy Das [Mon, 8 May 2017 23:18:43 +0000 (23:18 +0000)]
[InstNamer] Use range-for

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

7 years ago[InstNamer] Don't check type of arguments (they're never void)
Sanjoy Das [Mon, 8 May 2017 23:18:39 +0000 (23:18 +0000)]
[InstNamer] Don't check type of arguments (they're never void)

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

7 years agoDelete trailing whitespace
Sanjoy Das [Mon, 8 May 2017 23:18:36 +0000 (23:18 +0000)]
Delete trailing whitespace

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

7 years ago[InstCombine] add tests from D32285 to show current problems; NFC
Sanjay Patel [Mon, 8 May 2017 22:33:20 +0000 (22:33 +0000)]
[InstCombine] add tests from D32285 to show current problems; NFC

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

7 years agoAdd const to "DWARFDie &Die" in a few functions as they can't change the DWARFDie.
Greg Clayton [Mon, 8 May 2017 21:29:17 +0000 (21:29 +0000)]
Add const to "DWARFDie &Die" in a few functions as they can't change the DWARFDie.

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

7 years agoFix typo
Eugene Zemtsov [Mon, 8 May 2017 21:20:53 +0000 (21:20 +0000)]
Fix typo

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

7 years agoMake it illegal for two Functions to point to the same DISubprogram
Adrian Prantl [Mon, 8 May 2017 21:17:08 +0000 (21:17 +0000)]
Make it illegal for two Functions to point to the same DISubprogram

As recently discussed on llvm-dev [1], this patch makes it illegal for
two Functions to point to the same DISubprogram and updates
FunctionCloner to also clone the debug info of a function to conform
to the new requirement. To simplify the implementation it also factors
out the creation of inlineAt locations from the Inliner into a
general-purpose utility in DILocation.

[1] http://lists.llvm.org/pipermail/llvm-dev/2017-May/112661.html
<rdar://problem/31926379>

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

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