7 years ago[PGO] Instr func name var creation code refactoring
Xinliang David Li [Mon, 9 Nov 2015 00:01:22 +0000 (00:01 +0000)]
[PGO]  Instr func name var creation code refactoring

Move the code from cfe to LLMV and become shared interfaces.
There is no functional change.

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

7 years ago[AsmParser] Allow tokens to be put back in to the token stream.
Colin LeMahieu [Sun, 8 Nov 2015 23:48:23 +0000 (23:48 +0000)]
[AsmParser] Allow tokens to be put back in to the token stream.

Differential Revision: http://reviews.llvm.org/D14252

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

7 years ago[RuntimeDyld] Add support for R_X86_64_PC8 relocation.
Maksim Panchenko [Sun, 8 Nov 2015 19:34:17 +0000 (19:34 +0000)]
[RuntimeDyld] Add support for R_X86_64_PC8 relocation.

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

7 years agoAppease hosts without HAVE_BACKTRACE nor ENABLE_BACKTRACES.
NAKAMURA Takumi [Sun, 8 Nov 2015 09:45:06 +0000 (09:45 +0000)]

  llvm/lib/Support/Signals.cpp:66:13: warning: unused function 'printSymbolizedStackTrace' [-Wunused-function]
  llvm/lib/Support/Signals.cpp:52:13: warning: function 'findModulesAndOffsets' has internal linkage but is not defined [-Wundefined-internal]

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

7 years ago[PowerPC] Fix LoopPreIncPrep not to depend on SCEV constant simplifications
Hal Finkel [Sun, 8 Nov 2015 08:04:40 +0000 (08:04 +0000)]
[PowerPC] Fix LoopPreIncPrep not to depend on SCEV constant simplifications

Under most circumstances, if SCEV can simplify X-Y to a constant, then it can
also simplify Y-X to a constant. However, there is no guarantee that this is
always true, and concensus is not to consider that a correctness bug in SCEV
(although it is undesirable).

PPCLoopPreIncPrep gathers pointers used to access memory (via loads, stores and
prefetches) into buckets, where in each bucket the relative pointer offsets are
constant. We used to keep each bucket as a multimap, where SCEV's subtraction
operation was used to define the ordering predicate. Instead, use a fixed SCEV
base expression for each bucket, record the constant offsets from that base
expression, and adjust it later, if desirable, once all pointers have been

Doing it this way should be more compile-time efficient than the previous
scheme (in addition to making the implementation less sensitive to SCEV
simplification quirks).

Fixes PR25170.

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

7 years ago[LoopStrengthReduce] Don't bother fixing up PHIs from EH Pad preds
David Majnemer [Sun, 8 Nov 2015 05:04:07 +0000 (05:04 +0000)]
[LoopStrengthReduce] Don't bother fixing up PHIs from EH Pad preds

We cannot really insert fixup code into a PHI's predecessor.

This fixes PR25445.

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

7 years agoMake bugpoint ehpad/token friendly
David Majnemer [Sun, 8 Nov 2015 04:16:12 +0000 (04:16 +0000)]
Make bugpoint ehpad/token friendly

Tokens shouldn't be blindly replaced with undef/null.  Also, don't try
to remove EH pad instructions from the top of basic blocks.

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

7 years ago[WinEH] Update PHIs of CATCHRET successors
David Majnemer [Sun, 8 Nov 2015 02:36:00 +0000 (02:36 +0000)]
[WinEH] Update PHIs of CATCHRET successors

The TailDuplication machine pass ran across a malformed CFG: a PHI node
referred it's predecessor's predecessor instead of it's predecessor.
This occurred because we split the edge in X86ISelLowering when we
processed the CATCHRET but forgot to do something about the PHI nodes.

This fixes PR25444.

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

7 years agoErase unused FunctionDIs variables after r252219.
Yaron Keren [Sat, 7 Nov 2015 10:21:25 +0000 (10:21 +0000)]
Erase unused FunctionDIs variables after r252219.

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

7 years ago[Bitcode] Add enums for call instruction markers and flags. NFC.
Akira Hatanaka [Sat, 7 Nov 2015 02:48:49 +0000 (02:48 +0000)]
[Bitcode] Add enums for call instruction markers and flags. NFC.

This commit adds enums in LLVMBitCodes.h to improve readability and
maintainability. This is a follow-up to r252368 which was discussed


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

7 years agoTry to fix build more -- like r252392 but for WebAssembly.
Nico Weber [Sat, 7 Nov 2015 02:47:31 +0000 (02:47 +0000)]
Try to fix build more -- like r252392 but for WebAssembly.

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

7 years agoUnbreak the build
Sanjoy Das [Sat, 7 Nov 2015 02:26:53 +0000 (02:26 +0000)]
Unbreak the build

My code clashed with some ilist iterator changes upstream.  Fix by
adding an explicit "&*" coercion.

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

7 years ago[FunctionAttrs] Add comment and clarify assertion message; NFC
Sanjoy Das [Sat, 7 Nov 2015 01:56:07 +0000 (01:56 +0000)]
[FunctionAttrs] Add comment and clarify assertion message; NFC

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

7 years ago[OperandBundles] Rename accessor, NFC
Sanjoy Das [Sat, 7 Nov 2015 01:56:04 +0000 (01:56 +0000)]
[OperandBundles] Rename accessor, NFC

Rename getOperandBundle to getOperandBundleAt since that's more obvious.

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

7 years ago[FunctionAttrs] Add handling for operand bundles
Sanjoy Das [Sat, 7 Nov 2015 01:56:00 +0000 (01:56 +0000)]
[FunctionAttrs] Add handling for operand bundles

Teach the FunctionAttrs to do the right thing for IR with operand

Reviewers: reames, chandlerc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14408

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

7 years ago[FunctionAttrs] Fix an iterator wraparound bug
Sanjoy Das [Sat, 7 Nov 2015 01:55:53 +0000 (01:55 +0000)]
[FunctionAttrs] Fix an iterator wraparound bug

This change fixes an iterator wraparound bug in

Ideally, ++'ing off the `end()` of an iplist should result in a failed
assert, but currently iplist seems to silently wrap to the head of the
list on `end()++`.  This is why the bad behavior is difficult to

Reviewers: chandlerc, reames

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14350

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

7 years ago[WinEH] Update exception pointer registers
Joseph Tremoulet [Sat, 7 Nov 2015 01:11:31 +0000 (01:11 +0000)]
[WinEH] Update exception pointer registers

The CLR's personality routine passes these in rdx/edx, not rax/eax.

Make getExceptionPointerRegister a virtual method parameterized by
personality function to allow making this distinction.

Similarly make getExceptionSelectorRegister a virtual method parameterized
by personality function, for symmetry.

Reviewers: pgavlin, majnemer, rnk

Subscribers: jyknight, dsanders, llvm-commits

Differential Revision: http://reviews.llvm.org/D14344

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

7 years agoReapply "ADT: Require explicit ilist iterator/pointer conversions"
Duncan P. N. Exon Smith [Sat, 7 Nov 2015 00:59:29 +0000 (00:59 +0000)]
Reapply "ADT: Require explicit ilist iterator/pointer conversions"

This reverts commit r252373, reapplying r252372 now that I've updated
clang-tools-extra.  Original commit message follows.

ADT: Require explicit ilist iterator/pointer conversions

Disallow implicit conversions between ilist iterators and element
points.  Explicit conversions still work of course.

This is the first step toward removing the undefined behaviour in
`ilist` and `iplist`:

The motivation for removing the implicit iterators is that I came across
real bugs (that were *really* getting lucky).  More details and some
brief discussion later in that thread:

Note: if you have out-of-tree code, it should be fairly easy to revert
this patch downstream while you update your out-of-tree call sites.
Note that these conversions are occasionally latent bugs (that may
happen to "work" now, but only because of getting lucky with UB;
follow-ups will change your luck).  When they are valid, I suggest using
`->getIterator()` to go from pointer to iterator, and `&*` to go from
iterator to pointer.

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

7 years agoexamples: Remove implicit ilist iterator conversions, NFC
Duncan P. N. Exon Smith [Sat, 7 Nov 2015 00:55:46 +0000 (00:55 +0000)]
examples: Remove implicit ilist iterator conversions, NFC

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

7 years ago[InstCombine] Teach FoldPHIArgZextsIntoPHI about EHPads
David Majnemer [Sat, 7 Nov 2015 00:52:53 +0000 (00:52 +0000)]
[InstCombine] Teach FoldPHIArgZextsIntoPHI about EHPads

FoldPHIArgZextsIntoPHI cannot insert an instruction after the PHI if
there is an EHPad in the BB.  Doing so would result in an instruction
inserted after a terminator.

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

7 years agoRevert "ADT: Require explicit ilist iterator/pointer conversions"
Duncan P. N. Exon Smith [Sat, 7 Nov 2015 00:09:14 +0000 (00:09 +0000)]
Revert "ADT: Require explicit ilist iterator/pointer conversions"

This reverts commit r252372.  Apparently I missed clang-tools-extra.

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

7 years agoADT: Require explicit ilist iterator/pointer conversions
Duncan P. N. Exon Smith [Sat, 7 Nov 2015 00:02:32 +0000 (00:02 +0000)]
ADT: Require explicit ilist iterator/pointer conversions

Disallow implicit conversions between ilist iterators and element
points.  Explicit conversions still work of course.

This is the first step toward removing the undefined behaviour in
`ilist` and `iplist`:

The motivation for removing the implicit iterators is that I came across
real bugs (that were *really* getting lucky).  More details and some
brief discussion later in that thread:

Note: if you have out-of-tree code, it should be fairly easy to revert
this patch downstream while you update your out-of-tree call sites.
Note that these conversions are occasionally latent bugs (that may
happen to "work" now, but only because of getting lucky with UB;
follow-ups will change your luck).  When they are valid, I suggest using
`->getIterator()` to go from pointer to iterator, and `&*` to go from
iterator to pointer.

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

7 years agoADT: Remove last implicit ilist iterator conversions, NFC
Duncan P. N. Exon Smith [Sat, 7 Nov 2015 00:01:16 +0000 (00:01 +0000)]
ADT: Remove last implicit ilist iterator conversions, NFC

Some implicit ilist iterator conversions have crept back into Analysis,
Transforms, Hexagon, and llvm-stress.  This removes them.

I'll commit a patch immediately after this to disallow them (in a
separate patch so that it's easy to revert if necessary).

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

7 years ago[InstCombine] Don't insert an instruction after a terminator
David Majnemer [Fri, 6 Nov 2015 23:59:23 +0000 (23:59 +0000)]
[InstCombine] Don't insert an instruction after a terminator

We tried to insert a cast of a phi in a block whose terminator is an
EHPad.  This is invalid.  Do not attempt the transform in these

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

7 years agoAdd 'notail' marker for call instructions.
Akira Hatanaka [Fri, 6 Nov 2015 23:55:38 +0000 (23:55 +0000)]
Add 'notail' marker for call instructions.

This marker prevents optimization passes from adding 'tail' or
'musttail' markers to a call. Is is used to prevent tail call
optimization from being performed on the call.


Differential Revision: http://reviews.llvm.org/D12923

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

7 years agoRevert r252366: [Support] Use GetTempDir to get the temporary dir path on Windows.
Pawel Bylica [Fri, 6 Nov 2015 23:44:23 +0000 (23:44 +0000)]
Revert r252366: [Support] Use GetTempDir to get the temporary dir path on Windows.

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

7 years ago[Support] Use GetTempDir to get the temporary dir path on Windows.
Pawel Bylica [Fri, 6 Nov 2015 23:21:49 +0000 (23:21 +0000)]
[Support] Use GetTempDir to get the temporary dir path on Windows.

In general GetTempDir follows the same logic as the replaced code: checks env variables TMP, TEMP, USERPROFILE in order. However, it also perform other checks like making separators native (\), making the path absolute, etc.

This change fixes FileSystemTest.CreateDir unittest that had been failing when run from Unix-like shell on Windows (Unix-like path separator (/) used in env variables).

Reviewers: chapuni, rafael, aaron.ballman

Subscribers: rafael, llvm-commits

Differential Revision: http://reviews.llvm.org/D14231

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

7 years ago[AArch64][FastISel] Don't even try to select vector icmps.
Ahmed Bougacha [Fri, 6 Nov 2015 23:16:53 +0000 (23:16 +0000)]
[AArch64][FastISel] Don't even try to select vector icmps.

We used to try to constant-fold them to i32 immediates.
Given that fast-isel doesn't otherwise support vNi1, when selecting
the result users, we'd fallback to SDAG anyway.
However, if the users were in another block, we'd insert broken
cross-class copies (GPR32 to FPR64).

Give up, let SDAG agree with itself on a vNi1 legalization strategy.

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

7 years ago[X86] Fold (trunc (i32 (zextload i16))) into vbroadcast.
Ahmed Bougacha [Fri, 6 Nov 2015 23:16:48 +0000 (23:16 +0000)]
[X86] Fold (trunc (i32 (zextload i16))) into vbroadcast.

When matching non-LSB-extracting truncating broadcasts, we now insert
the necessary SRL. If the scalar resulted from a load, the SRL will be
folded into it, creating a narrower, offset, load.

However, i16 loads aren't Desirable, so we get i16->i32 zextloads.
We already catch i16 aextloads; catch these as well.

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

7 years ago[X86] SRL non-LSB extracts when folding to truncating broadcasts.
Ahmed Bougacha [Fri, 6 Nov 2015 23:16:43 +0000 (23:16 +0000)]
[X86] SRL non-LSB extracts when folding to truncating broadcasts.

Now that we recognize this, we can support it instead of bailing out.
That is, we can fold:
  (v8i16 (shufflevector
    (v8i16 (bitcast (v4i32 (build_vector X, Y, ...)))),
  (v8i16 (vbroadcast (i16 (trunc (srl Y, 16)))))

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

7 years ago[X86] Don't fold non-LSB extracts into truncating broadcasts.
Ahmed Bougacha [Fri, 6 Nov 2015 23:16:38 +0000 (23:16 +0000)]
[X86] Don't fold non-LSB extracts into truncating broadcasts.

We used to incorrectly assume that the offset we're extracting from
was a multiple of the element size. So, we'd fold:
  (v8i16 (shufflevector
    (v8i16 (bitcast (v4i32 (build_vector X, Y, ...)))),
  (v8i16 (vbroadcast (i16 (trunc Y))))
whereas we should have extracted the higher bits from X.

Instead, bail out if the assumption doesn't hold.

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

7 years agoDAGCombiner: Check shouldReduceLoadWidth before combining (and (load), x) -> extload
Tom Stellard [Fri, 6 Nov 2015 21:58:37 +0000 (21:58 +0000)]
DAGCombiner: Check shouldReduceLoadWidth before combining (and (load), x) -> extload

Reviewers: resistor, arsenm

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D13805

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

7 years ago[WebAssembly] Use more explicit types in testcases.
Dan Gohman [Fri, 6 Nov 2015 21:32:42 +0000 (21:32 +0000)]
[WebAssembly] Use more explicit types in testcases.

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

7 years ago[WebAssembly] Add more explicit pushes to the tests.
Dan Gohman [Fri, 6 Nov 2015 21:26:50 +0000 (21:26 +0000)]
[WebAssembly] Add more explicit pushes to the tests.

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

7 years ago[InstCombine] Don't RAUW tokens with undef
David Majnemer [Fri, 6 Nov 2015 21:26:32 +0000 (21:26 +0000)]
[InstCombine] Don't RAUW tokens with undef

Let SimplifyCFG remove unreachable BBs which define token instructions.

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

7 years ago[SimplifyLibCalls] Don't hardcode the function name.
Davide Italiano [Fri, 6 Nov 2015 21:05:07 +0000 (21:05 +0000)]
[SimplifyLibCalls] Don't hardcode the function name.

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

7 years ago[ShrinkWrapping] Teach shrink-wrapping how to analyze RegMask.
Quentin Colombet [Fri, 6 Nov 2015 21:00:13 +0000 (21:00 +0000)]
[ShrinkWrapping] Teach shrink-wrapping how to analyze RegMask.

Previously we were conservatively assuming that RegMask operands clobber
callee saved registers.

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

7 years agoMachineScheduler: Add regpressure information to debug dump
Matthias Braun [Fri, 6 Nov 2015 20:59:02 +0000 (20:59 +0000)]
MachineScheduler: Add regpressure information to debug dump

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

7 years agoAMDGPU/SI: Refactor VOP[12C] tablegen definitions
Tom Stellard [Fri, 6 Nov 2015 20:56:18 +0000 (20:56 +0000)]
AMDGPU/SI: Refactor VOP[12C] tablegen definitions

Pass the VOPProfile object all the through to *_m multiclasses.  This will
allow us to do more simplifications in the future.

Reviewers: arsenm

Subscribers: arsenm, llvm-commits

Differential Revision: http://reviews.llvm.org/D13437

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

7 years agoFix SLPVectorizer commutativity reordering
Mehdi Amini [Fri, 6 Nov 2015 20:17:51 +0000 (20:17 +0000)]
Fix SLPVectorizer commutativity reordering

The SLPVectorizer had a very crude way of trying to benefit
from associativity: it tried to optimize for splat/broadcast
or in order to have the same operator on the same side.
This is benefitial to the cost model and allows more vectorization
to occur.
This patch improve the logic and make the detection optimal (locally,
we don't look at the full tree but only at the immediate children).

Should fix https://llvm.org/bugs/show_bug.cgi?id=25247

Reviewers: mzolotukhin

Differential Revision: http://reviews.llvm.org/D13996

From: Mehdi Amini <mehdi.amini@apple.com>

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

7 years agoImproved the operands commute transformation for X86-FMA3 instructions.
Andrew Kaylor [Fri, 6 Nov 2015 19:47:25 +0000 (19:47 +0000)]
Improved the operands commute transformation for X86-FMA3 instructions.
All 3 operands of FMA3 instructions are commutable now.

Patch by Slava Klochkov

Reviewers: Quentin Colombet(qcolombet), Ahmed Bougacha(ab).

Differential Revision: http://reviews.llvm.org/D13269

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

7 years ago[WebAssembly] Make expression-stack pushing explicit
Dan Gohman [Fri, 6 Nov 2015 19:45:01 +0000 (19:45 +0000)]
[WebAssembly] Make expression-stack pushing explicit

Modelling of the expression stack is evolving. This patch takes another
step by making pushes explicit.

Differential Revision: http://reviews.llvm.org/D14338

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

7 years ago[ValueTracking] Add parameters to isImpliedCondition; NFC
Sanjoy Das [Fri, 6 Nov 2015 19:01:08 +0000 (19:01 +0000)]
[ValueTracking] Add parameters to isImpliedCondition; NFC

This change makes the `isImpliedCondition` interface similar to the rest
of the functions in ValueTracking (in that it takes a DataLayout,
AssumptionCache etc.).  This is an NFC, intended to make a later diff
less noisy.

Depends on D14369

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14391

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

7 years ago[ValueTracking] De-pessimize isImpliedCondition around unsigned compares
Sanjoy Das [Fri, 6 Nov 2015 19:01:03 +0000 (19:01 +0000)]
[ValueTracking] De-pessimize isImpliedCondition around unsigned compares

Currently `isImpliedCondition` will optimize "I +_nuw C < L ==> I < L"
only if C is positive.  This is an unnecessary restriction -- the
implication holds even if `C` is negative.

Reviewers: reames, majnemer

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14369

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

7 years ago[ValueTracking] Add a framework for encoding implication rules
Sanjoy Das [Fri, 6 Nov 2015 19:00:57 +0000 (19:00 +0000)]
[ValueTracking] Add a framework for encoding implication rules

This change adds a framework for adding more smarts to
`isImpliedCondition` around inequalities.  Informally,
`isImpliedCondition` will now try to prove "A < B ==> C < D" by proving
"C <= A && B <= D", since then it follows "C <= A < B <= D".

While this change is in principle NFC, I could not think of a way to not
handle cases like "i +_nsw 1 < L ==> i < L +_nsw 1" (that ValueTracking
did not handle before) while keeping the change understandable.  I've
added tests for these cases.

Reviewers: reames, majnemer, hfinkel

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14368

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

7 years ago[Docs] Change ARM build info to CMake
Renato Golin [Fri, 6 Nov 2015 18:39:34 +0000 (18:39 +0000)]
[Docs] Change ARM build info to CMake

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

7 years agoAMDGPU: Cleanup includes
Matt Arsenault [Fri, 6 Nov 2015 18:23:00 +0000 (18:23 +0000)]
AMDGPU: Cleanup includes

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

7 years agoAMDGPU: Create emergency stack slots during frame lowering
Matt Arsenault [Fri, 6 Nov 2015 18:17:45 +0000 (18:17 +0000)]
AMDGPU: Create emergency stack slots during frame lowering

Test has a bogus verifier error which will be fixed by later commits.

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

7 years agoAMDGPU: Remove unused scratch resource operands
Matt Arsenault [Fri, 6 Nov 2015 18:07:53 +0000 (18:07 +0000)]
AMDGPU: Remove unused scratch resource operands

The SGPR spill pseudos don't actually use them.

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

7 years agoAMDGPU: Add pass to detect used kernel features
Matt Arsenault [Fri, 6 Nov 2015 18:01:57 +0000 (18:01 +0000)]
AMDGPU: Add pass to detect used kernel features

Mark kernels that use certain features that require user
SGPRs to support with kernel attributes. We need to know
before instruction selection begins because it impacts
the kernel calling convention lowering.

For now this only detects the workitem intrinsics.

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

7 years agoAMDGPU: Fix hardcoded alignment of spill.
Matt Arsenault [Fri, 6 Nov 2015 17:54:47 +0000 (17:54 +0000)]
AMDGPU: Fix hardcoded alignment of spill.

Instead of forcing 4 alignment when spilled, set register class

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

7 years agoAMDGPU: Hack for VS_32 register pressure
Matt Arsenault [Fri, 6 Nov 2015 17:54:43 +0000 (17:54 +0000)]
AMDGPU: Hack for VS_32 register pressure

For some reason VS_32 ends up factoring into the pressure heuristics
even though we should never see a virtual register with this class.

When SGPRs are reserved for register spilling, this for some reason
triggers reg-crit scheduling.

Setting isAllocatable = 0 may help with this since that seems to remove
it from the default implementation's generated table.

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

7 years agoRestore "Move metadata linking after lazy global materialization/linking."
Teresa Johnson [Fri, 6 Nov 2015 17:50:53 +0000 (17:50 +0000)]
Restore "Move metadata linking after lazy global materialization/linking."

This reverts commit r251965.

Restore "Move metadata linking after lazy global materialization/linking."

This restores commit r251926, with fixes for the LTO bootstrapping bot

The bot failure was caused by references from debug metadata to
otherwise unreferenced globals. Previously, this caused the lazy linking
to link in their defs, which is unnecessary. With this patch, because
lazy linking is complete when we encounter the metadata reference, the
materializer created a declaration. For definitions such as aliases and
comdats, it is illegal to have a declaration. Furthermore, metadata
linking should not change code generation. Therefore, when linking of
global value bodies is complete, the materializer will simply return
nullptr as the new reference for the linked metadata.

This change required fixing a different test to ensure there was a
real reference to a linkonce global that was only being reference from

Note that the new changes to the only-needed-named-metadata.ll test
illustrate an issue with llvm-link -only-needed handling of comdat
groups, whereby it may result in an incomplete comdat group. I note this
in the test comments, but the issue is orthogonal to this patch (it can
be reproduced without any metadata at head).

Reviewers: dexonsmith, rafael, tra

Subscribers: tobiasvk, joker.eph, llvm-commits

Differential Revision: http://reviews.llvm.org/D14447

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

7 years agoRestore "Move metadata linking after lazy global materialization/linking."
Teresa Johnson [Fri, 6 Nov 2015 17:50:48 +0000 (17:50 +0000)]
Restore "Move metadata linking after lazy global materialization/linking."

This reverts commit r251965.

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

7 years ago[WinEH] Mark funclet entries and exits as clobbering all registers
Reid Kleckner [Fri, 6 Nov 2015 17:06:38 +0000 (17:06 +0000)]
[WinEH] Mark funclet entries and exits as clobbering all registers

In this implementation, LiveIntervalAnalysis invents a few register
masks on basic block boundaries that preserve no registers. The nice
thing about this is that it prevents the prologue inserter from thinking
it needs to spill all XMM CSRs, because it doesn't see any explicit
physreg defs in the MI.

Reviewers: MatzeB, qcolombet, JosephTremoulet, majnemer

Subscribers: MatzeB, llvm-commits

Differential Revision: http://reviews.llvm.org/D14407

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

7 years ago[LIR] Simplify code by making DataLayout globally accessible. NFC.
Chad Rosier [Fri, 6 Nov 2015 16:33:57 +0000 (16:33 +0000)]
[LIR] Simplify code by making DataLayout globally accessible. NFC.

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

7 years ago[AArch64]Enable the narrow ld promotion only on profitable microarchitectures
Jun Bum Lim [Fri, 6 Nov 2015 16:27:47 +0000 (16:27 +0000)]
[AArch64]Enable the narrow ld promotion only on profitable microarchitectures

The benefit from converting narrow loads into a wider load (r251438) could be
micro-architecturally dependent, as it assumes that a single load with two bitfield
extracts is cheaper than two narrow loads. Currently, this conversion is
enabled only in cortex-a57 on which performance benefits were verified.

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

7 years agoBring r252305 back with a test fix.
Rafael Espindola [Fri, 6 Nov 2015 15:30:45 +0000 (15:30 +0000)]
Bring r252305 back with a test fix.

We now create the .eh_frame section early, just like every other special

This means that the special flags are visible in code that explicitly
asks for ".eh_frame".

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

7 years agoRevert "Simplify the creation of .eh_frame/.debug_frame sections."
Rafael Espindola [Fri, 6 Nov 2015 14:51:09 +0000 (14:51 +0000)]
Revert "Simplify the creation of .eh_frame/.debug_frame sections."

This reverts commit r252305.

Investigating a test failure.

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

7 years agoSimplify the creation of .eh_frame/.debug_frame sections.
Rafael Espindola [Fri, 6 Nov 2015 14:47:44 +0000 (14:47 +0000)]
Simplify the creation of .eh_frame/.debug_frame sections.

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

7 years agogit clang-format and fix variable names. NFC.
Rafael Espindola [Fri, 6 Nov 2015 14:12:17 +0000 (14:12 +0000)]
git clang-format and fix variable names. NFC.

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

7 years agoUse SHT_X86_64_UNWIND on every OS.
Rafael Espindola [Fri, 6 Nov 2015 13:35:35 +0000 (13:35 +0000)]
Use SHT_X86_64_UNWIND on every OS.

That is the ABI required type. Linkers still check the section name, so
everything should still work.

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

7 years agoPass SectionStart directly to the one function that uses it.
Rafael Espindola [Fri, 6 Nov 2015 13:14:59 +0000 (13:14 +0000)]
Pass SectionStart directly to the one function that uses it.

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

7 years ago[mips][ias] Range check uimm4 operands and fixed a bug this revealed.
Daniel Sanders [Fri, 6 Nov 2015 12:41:43 +0000 (12:41 +0000)]
[mips][ias] Range check uimm4 operands and fixed a bug this revealed.

The bug was that the sldi instructions have immediate widths dependant on
their element size. So sldi.d has a 1-bit immediate and sldi.b has a 4-bit
immediate. All of these were using 4-bit immediates previously.

Reviewers: vkalintiris

Subscribers: llvm-commits, atanasyan, dsanders

Differential Revision: http://reviews.llvm.org/D14018

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

7 years ago[mips][ias] Range check uimm3 operands.
Daniel Sanders [Fri, 6 Nov 2015 12:31:27 +0000 (12:31 +0000)]
[mips][ias] Range check uimm3 operands.


Reviewers: vkalintiris

Subscribers: atanasyan, dsanders, llvm-commits

Differential Revision: http://reviews.llvm.org/D14016

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

7 years ago[mips][ias] Range check uimm2 operands and fix a bug this revealed.
Daniel Sanders [Fri, 6 Nov 2015 12:22:31 +0000 (12:22 +0000)]
[mips][ias] Range check uimm2 operands and fix a bug this revealed.

The bug was that the MIPS32R6/MIPS64R6/microMIPS32R6 versions of LSA and DLSA
(unlike the MSA version) failed to account for the off-by-one encoding of the
immediate. The range is actually 1..4 rather than 0..3.

Reviewers: vkalintiris

Subscribers: atanasyan, dsanders, llvm-commits

Differential Revision: http://reviews.llvm.org/D14015

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

7 years ago[mips][ias] Range check uimmz operands.
Daniel Sanders [Fri, 6 Nov 2015 12:11:03 +0000 (12:11 +0000)]
[mips][ias] Range check uimmz operands.

Reviewers: vkalintiris

Subscribers: dsanders, atanasyan, llvm-commits

Differential Revision: http://reviews.llvm.org/D14013

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

7 years ago[mips] Define patterns for the atomic_{load,store}_{8,16,32,64} nodes.
Vasileios Kalintiris [Fri, 6 Nov 2015 12:07:20 +0000 (12:07 +0000)]
[mips] Define patterns for the atomic_{load,store}_{8,16,32,64} nodes.

Without these patterns we would generate a complete LL/SC sequence.
This would be problematic for memory regions marked as WRITE-only or
READ-only, as the instructions LL/SC would read/write to the protected
memory regions correspondingly.

Reviewers: dsanders

Subscribers: llvm-commits, dsanders

Differential Revision: http://reviews.llvm.org/D14397

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

7 years agoAMDGPU/SI: Emit HSA kernels with symbol type STT_AMDGPU_HSA_KERNEL
Tom Stellard [Fri, 6 Nov 2015 11:45:14 +0000 (11:45 +0000)]
AMDGPU/SI: Emit HSA kernels with symbol type STT_AMDGPU_HSA_KERNEL

Reviewers: arsenm

Subscribers: arsenm, llvm-commits

Differential Revision: http://reviews.llvm.org/D13804

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

7 years agoAdd a new attribute: norecurse
James Molloy [Fri, 6 Nov 2015 10:32:53 +0000 (10:32 +0000)]
Add a new attribute: norecurse

This attribute allows the compiler to assume that the function never recurses into itself, either directly or indirectly (transitively). This can be used among other things to demote global variables to locals.

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

7 years agoDIBuilder.h: Prune \param(s) corresponding to r252219. [-Wdocumentation]
NAKAMURA Takumi [Fri, 6 Nov 2015 10:30:32 +0000 (10:30 +0000)]
DIBuilder.h: Prune \param(s) corresponding to r252219. [-Wdocumentation]

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

7 years agoRevert r252249 (and r252255, r252258), "[WinEH] Clone funclets with multiple parents"
NAKAMURA Takumi [Fri, 6 Nov 2015 10:07:33 +0000 (10:07 +0000)]
Revert r252249 (and r252255, r252258), "[WinEH] Clone funclets with multiple parents"

It behaved flaky due to iterating pointer key values on std::set and std::map.

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

7 years agoCode style fix (caused by wrongly default clang-format style) (NFC)
Xinliang David Li [Fri, 6 Nov 2015 07:54:21 +0000 (07:54 +0000)]
Code style fix (caused by wrongly default clang-format style) (NFC)

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

7 years agoSimplify the alignment handling in FDE emission.
Rafael Espindola [Fri, 6 Nov 2015 03:02:51 +0000 (03:02 +0000)]
Simplify the alignment handling in FDE emission.

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

7 years agoDelete dead store. NFC.
Rafael Espindola [Fri, 6 Nov 2015 02:44:22 +0000 (02:44 +0000)]
Delete dead store. NFC.

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

7 years agodocs: Document function-attached metadata and IR changes from r252219.
Peter Collingbourne [Fri, 6 Nov 2015 02:41:02 +0000 (02:41 +0000)]
docs: Document function-attached metadata and IR changes from r252219.

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

7 years agoRange-for some LiveIntervals code under review
Reid Kleckner [Fri, 6 Nov 2015 02:01:02 +0000 (02:01 +0000)]
Range-for some LiveIntervals code under review

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

7 years ago[WinEH] Split EH_RESTORE out of CATCHRET for 32-bit EH
Reid Kleckner [Fri, 6 Nov 2015 01:49:05 +0000 (01:49 +0000)]
[WinEH] Split EH_RESTORE out of CATCHRET for 32-bit EH

This adds the EH_RESTORE x86 pseudo instr, which is responsible for
restoring the stack pointers: EBP and ESP, and ESI if stack realignment
is involved. We only need this on 32-bit x86, because on x64 the runtime
restores CSRs for us.

Previously we had to keep the CATCHRET instruction around during SEH so
that we could convince X86FrameLowering to restore our frame pointers.
Now we can split these instructions earlier.

This was confusing, because we had a return instruction which wasn't
really a return and was ultimately going to be removed by
X86FrameLowering. This change also simplifies X86FrameLowering, which
really shouldn't be building new MBBs.

No observable functional change currently, but with the new register
mask stuff in D14407, CATCHRET will become a register allocator barrier,
and our existing tests rely on us having reasonable register allocation
around SEH.

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

7 years agoNFC: Update documentation for createUniqueFile() to explain that models without an...
Cameron Esfahani [Fri, 6 Nov 2015 01:45:30 +0000 (01:45 +0000)]
NFC: Update documentation for createUniqueFile() to explain that models without an absolute path will be created in the current directory.

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

7 years agoUse a range loop.
Rafael Espindola [Fri, 6 Nov 2015 01:25:56 +0000 (01:25 +0000)]
Use a range loop.

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

7 years ago[Statepoints] Mark gc.result and gc.relocate as readonly
Igor Laevsky [Fri, 6 Nov 2015 01:15:58 +0000 (01:15 +0000)]
[Statepoints] Mark gc.result and gc.relocate as readonly

Differential Revision: http://reviews.llvm.org/D14386

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

7 years agoTemporarily disable flaky checks in wineh-multi-parent-cloning.
Andrew Kaylor [Fri, 6 Nov 2015 01:15:04 +0000 (01:15 +0000)]
Temporarily disable flaky checks in wineh-multi-parent-cloning.

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

7 years agoCommandGuide/lit.rst: Document the new commandline option -a
Matthias Braun [Fri, 6 Nov 2015 01:13:40 +0000 (01:13 +0000)]
CommandGuide/lit.rst: Document the new commandline option -a

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

7 years agoFix build warnings
Andrew Kaylor [Fri, 6 Nov 2015 01:08:35 +0000 (01:08 +0000)]
Fix build warnings

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

7 years agoFix bugpoint breakage on libcxx introduced by r252247
Keno Fischer [Fri, 6 Nov 2015 00:45:47 +0000 (00:45 +0000)]
Fix bugpoint breakage on libcxx introduced by r252247

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

7 years ago[WinEH] Clone funclets with multiple parents
Andrew Kaylor [Fri, 6 Nov 2015 00:20:50 +0000 (00:20 +0000)]
[WinEH] Clone funclets with multiple parents

Windows EH funclets need to always return to a single parent funclet.  However, it is possible for earlier optimizations to combine funclets (probably based on one funclet having an unreachable terminator) in such a way that this condition is violated.

These changes add code to the WinEHPrepare pass to detect situations where a funclet has multiple parents and clone such funclets, fixing up the unwind and catch return edges so that each copy of the funclet returns to the correct parent funclet.

Differential Revision: http://reviews.llvm.org/D13274?id=39098

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

7 years ago[bugpoint] Add a named metadata (+their operands) reducer
Keno Fischer [Fri, 6 Nov 2015 00:12:50 +0000 (00:12 +0000)]
[bugpoint] Add a named metadata (+their operands) reducer

We frequently run bugpoint on a linked module that consists of all
modules we create while jitting the julia standard library. This module
has a very large number of compile units (10000+) in `llvm.dbg.cu`,
which didn't get reduced at all, requiring manual post processing.
This is an attempt to have bugpoint go through and attempt to reduce
the number of global named metadata nodes as well as their operands,
to cut down the number of roots for such metadata.

Reviewers: dexonsmith, reames, pete

Subscribers: pete, dexonsmith, reames, llvm-commits

Differential Revision: http://reviews.llvm.org/D14043

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

7 years agoPass the streamer to the constructor instead of every other method. NFC.
Rafael Espindola [Fri, 6 Nov 2015 00:05:57 +0000 (00:05 +0000)]
Pass the streamer to the constructor instead of every other method. NFC.

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

7 years agoSimplify the constructor. NFC.
Rafael Espindola [Thu, 5 Nov 2015 23:55:51 +0000 (23:55 +0000)]
Simplify the constructor. NFC.

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

7 years agogit-clang-format an area I am about to change.
Rafael Espindola [Thu, 5 Nov 2015 23:54:18 +0000 (23:54 +0000)]
git-clang-format an area I am about to change.

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

7 years agoSmall simplification by moving early continue earlier.
Rafael Espindola [Thu, 5 Nov 2015 23:47:20 +0000 (23:47 +0000)]
Small simplification by moving early continue earlier.

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

7 years agoRe-apply r251050 with a for PR25421
Sanjoy Das [Thu, 5 Nov 2015 23:45:38 +0000 (23:45 +0000)]
Re-apply r251050 with a for PR25421

The bug: I missed adding break statements in the switch / case.

Original commit message:

[SCEV] Teach SCEV some axioms about non-wrapping arithmetic

 - A s<  (A + C)<nsw> if C >  0
 - A s<= (A + C)<nsw> if C >= 0
 - (A + C)<nsw> s<  A if C <  0
 - (A + C)<nsw> s<= A if C <= 0

Right now `C` needs to be a constant, but we can later generalize it to
be a non-constant if needed.

Reviewers: atrick, hfinkel, reames, nlewycky

Subscribers: sanjoy, llvm-commits

Differential Revision: http://reviews.llvm.org/D13686

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

7 years agoRevert r251050 to fix miscompile when running Clang -O1
Richard Trieu [Thu, 5 Nov 2015 23:20:36 +0000 (23:20 +0000)]
Revert r251050 to fix miscompile when running Clang -O1

See bug for details: https://llvm.org/bugs/show_bug.cgi?id=25421
Some comparisons were incorrectly replaced with a constant value.

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

7 years agoUpdate tutorial for debug info IR change.
Peter Collingbourne [Thu, 5 Nov 2015 22:55:44 +0000 (22:55 +0000)]
Update tutorial for debug info IR change.

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

7 years agoFix Kaleidoscope example.
Peter Collingbourne [Thu, 5 Nov 2015 22:18:31 +0000 (22:18 +0000)]
Fix Kaleidoscope example.

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

7 years agoDI: Reverse direction of subprogram -> function edge.
Peter Collingbourne [Thu, 5 Nov 2015 22:03:56 +0000 (22:03 +0000)]
DI: Reverse direction of subprogram -> function edge.

Previously, subprograms contained a metadata reference to the function they
described. Because most clients need to get or set a subprogram for a given
function rather than the other way around, this created unneeded inefficiency.

For example, many passes needed to call the function llvm::makeSubprogramMap()
to build a mapping from functions to subprograms, and the IR linker needed to
fix up function references in a way that caused quadratic complexity in the IR
linking phase of LTO.

This change reverses the direction of the edge by storing the subprogram as
function-level metadata and removing DISubprogram's function field.

Since this is an IR change, a bitcode upgrade has been provided.

Fixes PR23367. An upgrade script for textual IR for out-of-tree clients is
attached to the PR.

Differential Revision: http://reviews.llvm.org/D14265

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

7 years agoRemove windows line endings introduced by r252177. NFC.
Tim Northover [Thu, 5 Nov 2015 21:54:58 +0000 (21:54 +0000)]
Remove windows line endings introduced by r252177. NFC.

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

7 years ago[ASan] Disable instrumentation for inalloca variables.
Alexey Samsonov [Thu, 5 Nov 2015 21:18:41 +0000 (21:18 +0000)]
[ASan] Disable instrumentation for inalloca variables.

inalloca variables were not treated as static allocas, therefore didn't
participate in regular stack instrumentation. We don't want them to
participate in dynamic alloca instrumentation as well.

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

7 years agoRefactor: Simplify boolean conditional return statements in lib/llvm/ExecutionEngine/Orc
Alexander Kornienko [Thu, 5 Nov 2015 21:18:09 +0000 (21:18 +0000)]
Refactor: Simplify boolean conditional return statements in lib/llvm/ExecutionEngine/Orc

Patch by Richard Thomson!

Differential revision: http://reviews.llvm.org/D9973

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

7 years ago[WinEH] Fix funclet prologues with stack realignment
Reid Kleckner [Thu, 5 Nov 2015 21:09:49 +0000 (21:09 +0000)]
[WinEH] Fix funclet prologues with stack realignment

We already had a test for this for 32-bit SEH catchpads, but those don't
actually create funclets. We had a bug that only appeared in funclet
prologues, where we would establish EBP and ESI as our FP and BP, and
then downstream prologue code would overwrite them.

While I was at it, I fixed Win64+funclets+stackrealign. This issue
doesn't come up as often there due to the ABI requring 16 byte stack
alignment, but now we can rest easy that AVX and WinEH will work well
together =P.

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