95300 Commits

Author SHA1 Message Date
Geoff Berry
51e92d172e [AArch64] Improve add/sub/cmp isel of uxtw forms.
Don't match the UXTW extended reg forms of ADD/ADDS/SUB/SUBS if the
32-bit to 64-bit zero-extend can be done for free by taking advantage
of the 32-bit defining instruction zeroing the upper 32-bits of the X
register destination.  This enables better instruction selection in a
few cases, such as:

  sub x0, xzr, x8
  instead of:
  mov x8, xzr
  sub x0, x8, w9, uxtw

  madd x0, x1, x1, x8
  instead of:
  mul x9, x1, x1
  add x0, x9, w8, uxtw

  cmp x2, x8
  instead of:
  sub x8, x2, w8, uxtw
  cmp x8, #0

  add x0, x8, x1, lsl #3
  instead of:
  lsl x9, x1, #3
  add x0, x9, w8, uxtw

Reviewers: t.p.northover, jmolloy

Subscribers: mcrosier, aemerson, llvm-commits, rengolin

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282413 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 15:34:47 +00:00
Evandro Menezes
653861f9c7 Add support to optionally limit the size of jump tables.
Many high-performance processors have a dedicated branch predictor for
indirect branches, commonly used with jump tables.  As sophisticated as such
branch predictors are, they tend to have well defined limits beyond which
their effectiveness is hampered or even nullified.  One such limit is the
number of possible destinations for a given indirect branches that such
branch predictors can handle.

This patch considers a limit that a target may set to the number of
destination addresses in a jump table.

Patch by: Evandro Menezes <e.menezes@samsung.com>, Aditya Kumar
<aditya.k7@samsung.com>, Sebastian Pop <s.pop@samsung.com>.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282412 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 15:32:33 +00:00
Alexey Bataev
34552649e8 [InstCombine] Fixed bug introduced in r282237
The index of the new insertelement instruction was evaluated in the
wrong way, it was considered as the index of the inserted value instead
of index of the position, where the value should be inserted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282401 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 13:18:59 +00:00
Andrea Di Biagio
56f90d72c8 [InstCombine] Teach the udiv folding logic how to handle constant expressions.
This patch fixes PR30366.

Function foldUDivShl() worked under the assumption that one of the values
in input to the function was always an instance of llvm::Instruction.
However, function visitUDivOperand() (the only user of foldUDivShl) was
clearly violating that precondition; internally, visitUDivOperand() uses pattern
matches to check the operands of a udiv. Pattern matchers for binary operators
know how to handle both Instruction and ConstantExpr values.

This patch fixes the problem in foldUDivShl(). Now we use pattern matchers
instead of explicit casts to Instruction. The reduced test case from PR30366
has been added to test file InstCombine/udiv-simplify.ll.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282398 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 12:07:23 +00:00
Dylan McKay
679be7ea7e [AVR] Add AVRMCExpr
Summary: This adds the AVRMCExpr headers and implementation.

Reviewers: arsenm, ruiu, grosbach, kparzysz

Subscribers: wdng, beanz, mgorny, kparzysz, jtbandes, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282397 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 11:35:32 +00:00
Sam Kolton
ecba0242f4 Revert "[AMDGPU] Disassembler: print label names in branch instructions"
This reverts commit 6c6dbe625263ec9fcf8de0df27263cf147cde550.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282396 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 11:29:03 +00:00
Sam Kolton
6c6dbe6252 [AMDGPU] Disassembler: print label names in branch instructions
Summary: Add AMDGPUSymbolizer for finding names for labels from ELF symbol table.

Reviewers: vpykhtin, artem.tamazov, tstellarAMD

Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tony-tye

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282394 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 10:05:50 +00:00
James Molloy
ba54dc2e88 [ARM] Promote small global constants to constant pools
If a constant is unamed_addr and is only used within one function, we can save
on the code size and runtime cost of an indirection by changing the global's storage
to inside the constant pool. For example, instead of:

      ldr r0, .CPI0
      bl printf
      bx lr
    .CPI0: &format_string
    format_string: .asciz "hello, world!\n"

We can emit:

      adr r0, .CPI0
      bl printf
      bx lr
    .CPI0: .asciz "hello, world!\n"

This can cause significant code size savings when many small strings are used in one
function (4 bytes per string).

This recommit contains fixes for a nasty bug related to fast-isel fallback - because
fast-isel doesn't know about this optimization, if it runs and emits references to
a string that we inline (because fast-isel fell back to SDAG) we will end up
with an inlined string and also an out-of-line string, and we won't emit the
out-of-line string, causing backend failures.

It also contains fixes for emitting .text relocations which made the sanitizer
bots unhappy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282387 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 07:26:24 +00:00
Zvi Rackover
9209299b97 [X86] Optimization for replacing LEA with MOV at frame index elimination time
Summary:
Replace a LEA instruction of the form 'lea (%esp), %ebx' --> 'mov %esp, %ebx'

MOV is preferable over LEA because usually there are more issue-slots available to execute MOVs than LEAs. Latest processors also support zero-latency MOVs.

Fixes pr29022.

Reviewers: hfinkel, delena, igorb, myatsina, mkuper

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282385 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 06:42:07 +00:00
Ayman Musa
de3ef8ab93 [X86][avx512] Fix bug in masked compress store.
Differential Revision: https://reviews.llvm.org/D23984


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282381 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 06:22:08 +00:00
Chandler Carruth
ce297d7352 [SCEV] Fix the order of members in the initializer list.
Noticed due to the warning on this line. Sanjoy is on
a less-than-awesome internet connection, so committing on his behalf.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282380 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 04:49:58 +00:00
Sanjoy Das
efbeb45816 [SCEV] Assign LoopPropertiesCache in the move constructor
In a previous change I collapsed two different caches into one.  When
doing that I noticed that ScalarEvolution's move constructor was not
moving those caches.

To keep the previous change simple, I've moved that bugfix into this
separate change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282376 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 02:44:10 +00:00
Sanjoy Das
a80a7d1c30 [SCEV] Combine two predicates into one; NFC
Both `loopHasNoSideEffects` and `loopHasNoAbnormalExits` involve walking
the loop and maintaining similar sorts of caches.  This commit changes
SCEV to compute both the predicates via a single walk, and maintain a
single cache instead of two.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282375 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 02:44:07 +00:00
Sanjoy Das
98e898ce46 [SCEV] Make it obvious BackedgeTakenInfo's constructor steals storage
Specifically, it moves SCEVUnionPredicates from its input into its own
storage.  Make this obvious at the type level.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282374 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 01:10:27 +00:00
Sanjoy Das
643807ace9 [SCEV] Further isolate incidental data structure; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282373 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 01:10:25 +00:00
Sanjoy Das
475c580270 [SCEV] Simplify BackedgeTakenInfo::getMax; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282372 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-26 01:10:22 +00:00
Sanjoy Das
72ec6f5dda [SCEV] Reserve space in SmallVector; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282368 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 23:12:08 +00:00
Sanjoy Das
347d5b6432 [SCEV] Have ExitNotTakenInfo keep a pointer to its predicate; NFC
SCEVUnionPredicate is a "heavyweight" structure, so it is beneficial to
store the (optional) data out of line.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282366 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 23:12:04 +00:00
Sanjoy Das
a2d692b82c [SCEV] Simplify tracking ExitNotTakenInfo instances; NFC
This change simplifies a data structure optimization in the
`BackedgeTakenInfo` class for loops with exactly one computable exit.

I've sanity checked that this does not regress compile time performance,
using sqlite3's amalgamated build.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282365 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 23:12:00 +00:00
Sanjoy Das
f4f66fe033 [SCEV] Rename a couple of fields; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282364 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 23:11:57 +00:00
Sanjoy Das
3b4332c090 [SCEV] Remove incidental data structure; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282363 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 23:11:55 +00:00
Craig Topper
8ab193a8a5 [X86] Remove what appears to be leftover MMX code involving (v1i64 scalar_to_vector).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282361 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:34:11 +00:00
Craig Topper
277575f893 [X86] Remove patterns for scalar_to_vector from FR32/FR64 to 256-bit vectors. Lowering explicitly avoids creating this pattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282360 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:34:09 +00:00
Craig Topper
444f89a273 [AVX-512] Replace get512BitSuperRegister with calls to TargetRegisterInfo::getMatchingSuperReg.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282359 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:34:06 +00:00
Craig Topper
7913ebb85c [AVX-512] Fix some patterns predicates to properly enforce priority for various versions of CVTDQ2PD instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282358 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:34:02 +00:00
Craig Topper
d064828e3f [AVX-512] Add rounding versions of instructions to hasUndefRegUpdate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282357 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:33:59 +00:00
Craig Topper
a7c6d16bf9 [AVX-512] Add the scalar unsigned integer to fp conversion instructions to hasUndefRegUpdate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282356 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:33:57 +00:00
Craig Topper
1239ce3145 [AVX-512] Remove duplicate instructions for converting integer to scalar floating point. We can use patterns to point to the other instructions instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 16:33:53 +00:00
Craig Topper
386ab19245 [AVX-512] Don't use two opcodes for INTR_TYPE_SCALAR_MASK_RM. The handling was such that if the second opcode was present the first was ingored, so we can just have one opcode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282344 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-25 01:03:10 +00:00
Craig Topper
6928dfadcd [X86] Teach combineShuffle to avoid creating floating point operations with integer types and integer operations with floating point types. Seems isOperationLegal lies for mismatched types and operations.
Fixes PR30511.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282341 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 21:42:49 +00:00
Craig Topper
1e23cc89e7 [AVX-512] Split scalar version of X86ISD::SELECT into a separate opcode because isel is not robust with multiple type profiles for the same opcode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282340 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 21:42:47 +00:00
Craig Topper
9ca28eca4f [AVX-512] Remove the patterns for selecting scalar VCOMI/VUCOMI instructions with SAE as there is no way to create the pattern.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282339 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 21:42:43 +00:00
Duncan P. N. Exon Smith
affe79938b ObjCARC: Don't look at users of ConstantData
Stop looking at users of UndefValue and ConstantPointerNull in the
objective C ARC optimizers.  The other users aren't actually
interesting, since they're not pointing at a particular object.  I
imagine these calls could be optimized through -instcombine... maybe
they already are?

These early returns will be required at some point in the future, with a
WIP patch that asserts when someone accesses a use-list on ConstantData.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282338 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 21:01:20 +00:00
Duncan P. N. Exon Smith
5cb2954160 Analysis: Return early for UndefValue in computeKnownBits
There is no benefit in looking through assumptions on UndefValue to
guess known bits.  Return early to avoid walking their use-lists, and
assert that all instances of ConstantData are handled here for similar
reasons (UndefValue was the only integer/pointer holdout).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282337 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 20:42:02 +00:00
Sanjay Patel
c7ebf69800 [x86] don't try to create a vector integer inst for an SSE1 target (PR30512)
This bug was introduced with:
http://reviews.llvm.org/rL272511

We need to restrict the lowering to v4f32 comparisons because that's all SSE1 can handle.

This should fix:
https://llvm.org/bugs/show_bug.cgi?id=28044



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282336 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 20:24:06 +00:00
Duncan P. N. Exon Smith
3a296bc80d Scalar: Ignore ConstantData in processAssumption
Assumptions on UndefValue and ConstantPointerNull aren't relevant to
other users.  Ignore them entirely to avoid wasting cycles walking
through their (possibly extremely extensive (cross-module)) use-lists.

It wasn't clear how to add a specific test for this, and it'll be
covered anyway by an eventual patch that asserts when trying to access
the use-list of an instance of ConstantData.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282334 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 20:00:38 +00:00
Duncan P. N. Exon Smith
e31ddb4329 Analysis: Return early in isKnownNonNullAt for ConstantData
Check and return early for ConstantPointerNull and UndefValue
specifically in isKnownNonNullAt, and assert that ConstantData never
make it to isKnownNonNullFromDominatingCondition.

This confirms that isKnownNonNullFromDominatingCondition never walks
through the use-list of an instance of ConstantData.  Given that such
use-lists cross module boundaries, it never really made sense to do so,
and was potentially very expensive.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282333 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 19:39:47 +00:00
Dylan McKay
2e99ba25d5 [AVR] Update signature of AVRTargetObjectFile::SelectSectionForGlobal
It was changed recently, and was breaking compilation of the backend.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282329 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 11:38:08 +00:00
Quentin Colombet
9b473140dd [RegisterBankInfo] Constify the member of the XXXMapping maps.
This makes it obvious that items in those maps behave like statically
created objects.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282327 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 04:54:03 +00:00
Quentin Colombet
d1ab103882 [RegisterBankInfo] Add statistics for dynamic value mappings.
Like partial mappings, as we move toward TableGen'ed information, the
number should reach zero eventually.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282325 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 04:53:55 +00:00
Quentin Colombet
9545266289 [RegisterBankInfo] Uniquely generate ValueMapping.
This is a step toward statically allocate ValueMapping. Like the
previous few commits, the goal is to move toward a TableGen'ed like
structure with no dynamic allocation at all.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282324 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 04:53:52 +00:00
Quentin Colombet
245edb6c14 [RegisterBankInfo] Keep valid pointers for PartialMappings.
Previously we were using the address of the unique instance of a partial
mapping in the related map to access this instance. However, when the
map grows, the whole set of instances may be moved elsewhere and the
previous addresses are not valid anymore.

Instead, keep the address of the unique heap allocated instance of a
partial mapping.

Note: I did not see any actual bugs for that problem as the number of
partial mappings dynamically allocated is small (<= 4).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282323 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 04:53:48 +00:00
Kostya Serebryany
ec25365d1b [libFuzzer] add a standalone build script
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282321 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 04:00:00 +00:00
Duncan P. N. Exon Smith
c1ce9acb64 GlobalStatus: Don't walk use-lists of ConstantData
Return early from llvm::isSafeToDestroyConstant() whenever the value
`isa<ConstantData>()`.  These constants are shared across the
LLVMContext.  We never really want to delete them here, and walking
their use-lists can be very expensive.

(This is motivated by an eventual goal of removing use-lists entirely
from ConstantData.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282320 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-24 02:30:11 +00:00
Kostya Serebryany
e2e54904b7 [libFuzzer] simplify HandleTrace again, start re-running interesting units and collecting their features.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282316 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 23:51:58 +00:00
Peter Collingbourne
9194bd40e5 Add qualification to fix MSVC build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282313 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 23:23:23 +00:00
Sanjay Patel
e86f70292b [x86] fix FCOPYSIGN lowering to create constants instead of ConstantPool loads
This is similar to:
https://reviews.llvm.org/rL279958

By not prematurely lowering to loads, we should be able to more easily eliminate
the 'or' with zero instructions seen in copysign-constant-magnitude.ll.

We should also be able to extend this code to handle vectors.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282312 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 23:17:29 +00:00
Petr Hosek
2a09485a4b [MC] Support .ds directives in assembler parser
These directives are already supported by GNU assembler.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282303 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 21:53:36 +00:00
Matthias Braun
a92ff23987 llc: Add -start-before/-stop-before options
Differential Revision: https://reviews.llvm.org/D23089

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282302 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 21:46:02 +00:00
Peter Collingbourne
91d99c6edf LTO: Simplify caching interface.
The NativeObjectOutput class has a design problem: it mixes up the caching
policy with the interface for output streams, which makes the client-side
code hard to follow and would for example make it harder to replace the
cache implementation in an arbitrary client.

This change separates the two aspects by moving the caching policy
to a separate field in Config, replacing NativeObjectOutput with a
NativeObjectStream class which only deals with streams and does not need to
be overridden by most clients and introducing an AddFile callback for adding
files (e.g. from the cache) to the link.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282299 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-23 21:33:43 +00:00