149061 Commits

Author SHA1 Message Date
Nikolai Bozhenov
64dbd2ef25 [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
2017-05-09 10:14:03 +00:00
Strahinja Petrovic
4ab11e2a6b [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
2017-05-09 10:02:00 +00:00
Diana Picus
4f0f7c08bf [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
2017-05-09 08:32:42 +00:00
Craig Topper
b23f8ea900 [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
2017-05-09 07:04:04 +00:00
Craig Topper
eef1c41964 [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
2017-05-09 07:04:02 +00:00
Craig Topper
384ba40c27 [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
2017-05-09 05:01:29 +00:00
Reid Kleckner
5c900216f1 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
2017-05-09 01:57:44 +00:00
Teresa Johnson
bb89593724 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
2017-05-09 01:43:24 +00:00
Tom Stellard
9c50cf0c6d 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
2017-05-09 01:41:28 +00:00
Kostya Serebryany
ea56ec314e [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
2017-05-09 01:34:27 +00:00
Kostya Serebryany
de20a5381a [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
2017-05-09 01:17:29 +00:00
Reid Kleckner
3d5255af74 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
2017-05-09 01:14:39 +00:00
Craig Topper
5bc7ae494b [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
2017-05-08 23:49:54 +00:00
Craig Topper
8894742d7d [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
2017-05-08 23:49:49 +00:00
Evgeniy Stepanov
fa138d2588 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
2017-05-08 23:46:20 +00:00
Reid Kleckner
c8a19469c2 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
2017-05-08 23:27:52 +00:00
Reid Kleckner
8c3a49c4c1 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
2017-05-08 23:20:27 +00:00
Sanjoy Das
4531b615cb Add basic test case for -instnamer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302482 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 23:18:46 +00:00
Sanjoy Das
00d88a77e1 [InstNamer] Use range-for
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302481 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 23:18:43 +00:00
Sanjoy Das
284277df9a [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
2017-05-08 23:18:39 +00:00
Sanjoy Das
447ca1ab6d Delete trailing whitespace
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302479 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 23:18:36 +00:00
Sanjay Patel
c4c34cce40 [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
2017-05-08 22:33:20 +00:00
Greg Clayton
cca9d00b74 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
2017-05-08 21:29:17 +00:00
Eugene Zemtsov
4f230b8d83 Fix typo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302470 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 21:20:53 +00:00
Adrian Prantl
28bd5d128c 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
2017-05-08 21:17:08 +00:00
Matthias Braun
ca58fab8c4 STLExtras: Fix enumerate() documentation
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302467 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 21:10:58 +00:00
Greg Clayton
a086b24688 Fix typo "veify" to "verify".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302466 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 20:53:00 +00:00
Sanjay Patel
b8a453126a [InstCombine] add folds for not-of-shift-right
This is another step towards getting rid of dyn_castNotVal, 
so we can recommit:
https://reviews.llvm.org/rL300977

As the tests show, we were missing the lshr case for constants
and both ashr/lshr vector splat folds. The ashr case with constant
was being performed inefficiently in 2 steps. It's also possible
there was a latent bug in that case because we can't do that fold
if the constant is positive:
http://rise4fun.com/Alive/Bge



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302465 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 20:49:59 +00:00
Davide Italiano
29aef3c4af [PartialInlining] Capture by reference rather than by value.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302464 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 20:44:01 +00:00
Tim Northover
a641bd93fb ARM: use divmod libcalls on embedded MachO platforms too.
The separated libcalls are implemented in terms of __divmodsi4 and __udivmodsi4
anyway, so we should always use them if possible.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302462 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 20:00:14 +00:00
Reid Kleckner
550359cb2f Don't add DBG_VALUE instructions for static allocas in dbg.declare
Summary:
An llvm.dbg.declare of a static alloca is always added to the
MachineFunction dbg variable map, so these values are entirely
redundant. They survive all the way through codegen to be ignored by
DWARF emission.

Effectively revert r113967

Two bugpoint-reduced test cases from 2012 broke as a result of this
change. Despite my best efforts, I haven't been able to rewrite the test
case using dbg.value. I'm not too concerned about the lost coverage
because these were reduced from the test-suite, which we still run.

Reviewers: aprantl, dblaikie

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302461 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 19:58:15 +00:00
Zachary Turner
bb0606e8de Add some useful helper methods / operators to TypeIndex.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302460 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 19:46:37 +00:00
Reid Kleckner
d5e8a6baea Update instructions for using the experimental monorepo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302459 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 19:45:57 +00:00
Zachary Turner
886c6baf06 [BitVector] Make find_prev member function const.
NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302458 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 19:45:55 +00:00
Sanjoy Das
6bc9c98728 Add a blurb to the release notes about the WeakVH -> WeakTrackingVH transition
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302456 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 19:15:06 +00:00
Zachary Turner
f019c6b219 [CodeView] Add support for random access type visitors.
Previously type visitation was done strictly sequentially, and
TypeIndexes were computed by incrementing the TypeIndex of the
last visited record.  This works fine for situations like dumping,
but not when you want to visit types in random order.  For example,
in a debug session someone might lookup a symbol by name, find that
it has TypeIndex 10,000 and then want to go straight to TypeIndex
10,000.

In order to make this work, the visitation framework needs a mode
where it can plumb TypeIndices through the callback pipeline.  This
patch adds such a mode.  In doing so, it is necessary to provide
an alternative implementation of TypeDatabase that supports random
access, so that is done as well.

Nothing actually uses these random access capabilities yet, but
this will be done in subsequent patches.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302454 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 18:38:43 +00:00
Quentin Colombet
4a1e357426 [AArch64][RegisterBankInfo] Change the default mapping of fp loads.
This fixes PR32550, in a way that does not imply running the greedy
mode at O0.

The fix consists in checking if a load is used by any floating point
instruction and if yes, we return a default mapping with FPR instead
of GPR.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302453 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 18:16:31 +00:00
Quentin Colombet
3343d80c50 [AArch64][RegisterBankInfo] Fix mapping cost for GPR.
In r292478, we changed the order of the enum that is referenced by
PMI_FirstXXX. This had the side effect of changing the cost of the
mapping of all the loads, instead of just the FPRs ones.

Reinstate the higher cost for all but GPR loads.
Note: This did not have any external visible effects:
- For Fast mode, the cost would have been higher, but we don't care
  because we don't try to use alternative mappings.
- For Greedy mode, the higher cost of the GPR loads, would have
  triggered the use of the supposedly alternative mapping, that
  would be in fact the same GPR mapping but with a lower cost.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302452 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 18:16:23 +00:00
Sanjay Patel
d6b71950da [InstCombine] move/add tests for not(shr (not X), Y); NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302451 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 18:16:04 +00:00
Craig Topper
3f67904aa9 [ARM] Use a Changed flag to avoid making a pass's return value dependent on a compare with a Statistic object.
Statistic compile to always be 0 in release build so this compare would always return false. And in the debug builds Statistic are global variables and remember their values across pass runs. So this compare returns true anytime the pass runs after the first time it modifies something.

This was found after reviewing all usages of comparison operators on a Statistic object. We had some internal code that did a compare with a statistic that caused a mismatch in output between debug and release builds. So we did an audit out of paranoia.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302450 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 18:02:51 +00:00
Craig Topper
0f7e2baed5 [SCEV] Make setRange take ConstantRange by value instead of rvalue reference so we don't force anything on the caller.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302449 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 17:39:08 +00:00
Craig Topper
d81950e977 [SCEV] Don't use std::move on both inputs to APInt::operator+ or operator-. It might be confusing to the reader. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302448 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 17:39:01 +00:00
Daniel Berlin
8517c8ec97 ConstantFold: Handle gep nonnull, undef as well
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302447 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 17:37:33 +00:00
Daniel Berlin
30725541b4 ConstantFold: Fold getelementptr (i32, i32* null, i64 undef) to null.
Transforms/IndVarSimplify/2011-10-27-lftrnull will fail if this regresses.
Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll has been changed to still test what it was
trying to test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302446 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 17:37:29 +00:00
Craig Topper
d99549318e [ValueTracking] Use KnownOnes to provide a better bound on known zeros for ctlz/cttz intrinics
This patch uses KnownOnes of the input of ctlz/cttz to bound the value that can be returned from these intrinsics. This makes these intrinsics more similar to the handling for ctpop which already uses known bits to produce a similar bound.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302444 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 17:22:34 +00:00
Zvi Rackover
fc7bb1b7b3 [X86] Split test configurations. NFC.
Split test that includes reproducer for pr32967 to KNL and SKX.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302442 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 16:54:25 +00:00
Sanjay Patel
e2d19343ab [InstSimplify] fix typo; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302439 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 16:35:02 +00:00
Sanjay Patel
811100c771 [InstCombine] use local variable to reduce code duplication; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302438 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 16:33:42 +00:00
Craig Topper
3f38291e28 [ValueTracking] Introduce a version of computeKnownBits that returns a KnownBits struct. Begin using it to replace internal usages of ComputeSignBit
This introduces a new interface for computeKnownBits that returns the KnownBits object instead of requiring it to be pre-constructed and passed in by reference.

This is a much more convenient interface as it doesn't require the caller to figure out the BitWidth to pre-construct the object. It's so convenient that I believe we can use this interface to remove the special ComputeSignBit flavor of computeKnownBits.

As a step towards that idea, this patch replaces all of the internal usages of ComputeSignBit with this new interface. As you can see from the patch there were a couple places where we called ComputeSignBit which really called computeKnownBits, and then called computeKnownBits again directly. I've reduced those places to only making one call to computeKnownBits. I bet there are probably external users that do it too.

A future patch will update the external users and remove the ComputeSignBit interface. I'll also working on moving more locations to the KnownBits returning interface for computeKnownBits.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302437 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 16:22:48 +00:00
Sanjay Patel
a594399826 [InstCombine/InstSimplify] add comments about code duplication; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302436 91177308-0d34-0410-b5e6-96231b3b80d8
2017-05-08 16:21:55 +00:00