OSDN Git Service

android-x86/external-llvm.git
8 years agoPower9] Implement new vsx instructions: compare and conversion
Kit Barton [Fri, 26 Feb 2016 21:11:55 +0000 (21:11 +0000)]
Power9] Implement new vsx instructions: compare and conversion
This change implements the following vsx instructions:

Quad/Double-Precision Compare:
xscmpoqp xscmpuqp
xscmpexpdp xscmpexpqp
xscmpeqdp xscmpgedp xscmpgtdp xscmpnedp
xvcmpnedp(.) xvcmpnesp(.)
Quad-Precision Floating-Point Conversion
xscvqpdp(o) xscvdpqp
xscvqpsdz xscvqpswz xscvqpudz xscvqpuwz xscvsdqp xscvudqp
xscvdphp xscvhpdp xvcvhpsp xvcvsphp
xsrqpi xsrqpix xsrqpxp
28 instructions

Phabricator: http://reviews.llvm.org/D16709

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

8 years ago[CMake] Add the gold plugin before clang
Chris Bieneman [Fri, 26 Feb 2016 21:07:04 +0000 (21:07 +0000)]
[CMake] Add the gold plugin before clang

This is needed to connect dependencies between the LLVMgold plugin and the clang stage-2 builds due to limitations in ExternalProject_Add.

Patch by Mike Edwards

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

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

8 years ago[CMake] Assigning the LTO component to lto.h
Chris Bieneman [Fri, 26 Feb 2016 21:07:02 +0000 (21:07 +0000)]
[CMake] Assigning the LTO component to lto.h

This makes it so lto.h is installed when you run the install-LTO target.

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

8 years ago[x86, InstCombine] transform x86 AVX masked stores to LLVM intrinsics
Sanjay Patel [Fri, 26 Feb 2016 21:04:14 +0000 (21:04 +0000)]
[x86, InstCombine] transform x86 AVX masked stores to LLVM intrinsics

The intended effect of this patch in conjunction with:
http://reviews.llvm.org/rL259392
http://reviews.llvm.org/rL260145

is that customers using the AVX intrinsics in C will benefit from combines when
the store mask is constant:

void mstore_zero_mask(float *f, __m128 v) {
  _mm_maskstore_ps(f, _mm_set1_epi32(0), v);
}

void mstore_fake_ones_mask(float *f, __m128 v) {
  _mm_maskstore_ps(f, _mm_set1_epi32(1), v);
}

void mstore_ones_mask(float *f, __m128 v) {
  _mm_maskstore_ps(f, _mm_set1_epi32(0x80000000), v);
}

void mstore_one_set_elt_mask(float *f, __m128 v) {
  _mm_maskstore_ps(f, _mm_set_epi32(0x80000000, 0, 0, 0), v);
}

...so none of the above will actually generate a masked store for optimized code.

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

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

8 years ago[x86] refactor to eliminate duplicated code; NFCI
Sanjay Patel [Fri, 26 Feb 2016 20:59:05 +0000 (20:59 +0000)]
[x86] refactor to eliminate duplicated code; NFCI

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

8 years agoFix warning in DwarfCFIException. NFC
Amaury Sechet [Fri, 26 Feb 2016 20:49:07 +0000 (20:49 +0000)]
Fix warning in DwarfCFIException. NFC

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

8 years agoRevert r262054 on one file that fails sometimes.
Paul Robinson [Fri, 26 Feb 2016 20:41:07 +0000 (20:41 +0000)]
Revert r262054 on one file that fails sometimes.

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

8 years agoExtract the method to begin and end a fragment in AsmPrinterHandler in their own...
Amaury Sechet [Fri, 26 Feb 2016 20:30:37 +0000 (20:30 +0000)]
Extract the method to begin and end a fragment in AsmPrinterHandler in their own method. NFC

Summary: This is extracted from D17555

Reviewers: davidxl, reames, sanjoy, MatzeB, pete

Subscribers: llvm-commits

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

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

8 years ago[GlobalISel] Fix a ranlib warning about empty TOC.
Quentin Colombet [Fri, 26 Feb 2016 20:05:02 +0000 (20:05 +0000)]
[GlobalISel] Fix a ranlib warning about empty TOC.

Fixes PR26733

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

8 years agoFix tests that used CHECK-NEXT-NOT and CHECK-DAG-NOT.
Paul Robinson [Fri, 26 Feb 2016 19:40:34 +0000 (19:40 +0000)]
Fix tests that used CHECK-NEXT-NOT and CHECK-DAG-NOT.
FileCheck actually doesn't support combo suffixes.

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

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

8 years agoFix Sparc 32bit Lowering to rebundle up v2i32 values.
Nirav Dave [Fri, 26 Feb 2016 18:55:22 +0000 (18:55 +0000)]
Fix Sparc 32bit Lowering to rebundle up v2i32 values.

Summary: Fix LowerCall to rebundle v2i32 values after lowering and add testcase

Reviewers: jyknight

Subscribers: llvm-commits, jyknight

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

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

8 years ago[x86, AVX] fold 'isPositive' 256-bit vector integer operations (PR26701)
Sanjay Patel [Fri, 26 Feb 2016 18:42:50 +0000 (18:42 +0000)]
[x86, AVX] fold 'isPositive' 256-bit vector integer operations (PR26701)

This extends the fold introduced with:
http://reviews.llvm.org/rL262036

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

8 years ago[IR] Optimize bitfield layout of Value for MSVC
Reid Kleckner [Fri, 26 Feb 2016 18:08:59 +0000 (18:08 +0000)]
[IR] Optimize bitfield layout of Value for MSVC

This should save a pointer of padding from all MSVC Value subclasses.

Recall that MSVC will not pack the following bitfields together:
  unsigned Bits : 29;
  unsigned Flag1 : 1;
  unsigned Flag2 : 1;
  unsigned Flag3 : 1;

Add a static_assert because LLVM developers always trip over this
behavior. This regressed in June.

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

8 years ago[x86, AVX] add 256-bit tests
Sanjay Patel [Fri, 26 Feb 2016 18:07:58 +0000 (18:07 +0000)]
[x86, AVX] add 256-bit tests

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

8 years ago[CMAKE] Update build on recent Haiku
Renato Golin [Fri, 26 Feb 2016 17:01:45 +0000 (17:01 +0000)]
[CMAKE] Update build on recent Haiku

This patch updates cmake build scripts to build on Haiku. It adds Haiku x86_64 to config.guess.
Please consider reviewing.

Pathc by Jérôme Duval.

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

8 years ago[x86, SSE] fold 'isPositive' vector integer operations (PR26701)
Sanjay Patel [Fri, 26 Feb 2016 16:56:03 +0000 (16:56 +0000)]
[x86, SSE] fold 'isPositive' vector integer operations (PR26701)

This is one of the cases shown in:
https://llvm.org/bugs/show_bug.cgi?id=26701

Shift and negate is what InstCombine appears to prefer, so I've started with that pattern.
Note that the 'pcmpeq' instructions are always generating the negative one for the actual
'pcmpgt' comparison in each case (side note: why isn't there an alias mnemonic for that?).

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

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

8 years ago[WinEH] Fix funclet return block clobber mask placement
Reid Kleckner [Fri, 26 Feb 2016 16:53:19 +0000 (16:53 +0000)]
[WinEH] Fix funclet return block clobber mask placement

MBB slot index intervals are half open, not closed. getMBBEndIndex()
returns the slot index of the start of the next block in layout order.
Placing a register mask there is incorrect if the successor of the
funclet return is not laid out after the return. Clang generates IR for
catch bodies before generating the following normal code, so we never
noticed this issue until the D frontend authors filed a bug about it.

Instead, we can put the clobber mask on the last instruction of the
funclet return block. We still aren't using a register mask operand on
the CATCHRET instruction because it would cause PEI to spill all CSRs,
including XMM regs, in the prologue.

Fixes PR26679.

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

8 years ago[PM] Finish removing references to fix MSVC builds. Somehow adding base
Chandler Carruth [Fri, 26 Feb 2016 12:30:18 +0000 (12:30 +0000)]
[PM] Finish removing references to fix MSVC builds. Somehow adding base
classes changed whether the decltype of these expressions was
a reference. I'm somewhat horrified why, and there may need to be
a deeper fix on MSVC, but this should at least get the bots a step
further.

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

8 years agoReverting breaking change. Sorry.
Chris Dewhurst [Fri, 26 Feb 2016 12:20:10 +0000 (12:20 +0000)]
Reverting breaking change. Sorry.

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

8 years ago[PM] Speculative patch to try and fix MSVC's compilation.
Chandler Carruth [Fri, 26 Feb 2016 12:17:54 +0000 (12:17 +0000)]
[PM] Speculative patch to try and fix MSVC's compilation.

No idea why r262004 triggered this, but just trying to fix somehow.

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

8 years agoReviewed at reviews.llvm.org/D17133
Chris Dewhurst [Fri, 26 Feb 2016 11:46:47 +0000 (11:46 +0000)]
Reviewed at reviews.llvm.org/D17133

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

8 years ago[PM] Introduce CRTP mixin base classes to help define passes and
Chandler Carruth [Fri, 26 Feb 2016 11:44:45 +0000 (11:44 +0000)]
[PM] Introduce CRTP mixin base classes to help define passes and
analyses in the new pass manager.

These just handle really basic stuff: turning a type name into a string
statically that is nice to print in logs, and getting a static unique ID
for each analysis.

Sadly, the format of passes in anonymous namespaces makes using their
names in tests really annoying so I've customized the names of the no-op
passes to keep tests sane to read.

This is the first of a few simplifying refactorings for the new pass
manager that should reduce boilerplate and confusion.

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

8 years agoInitial test commit only
Chris Dewhurst [Fri, 26 Feb 2016 11:38:24 +0000 (11:38 +0000)]
Initial test commit only

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

8 years ago[PM] Remove a FIXME now that it is no longer needed.
Chandler Carruth [Fri, 26 Feb 2016 10:02:04 +0000 (10:02 +0000)]
[PM] Remove a FIXME now that it is no longer needed.

This has been fixed for some time, but the code hadn't been updated.

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

8 years ago[AMDGPU] Assembler: Basic support for MIMG
Nikolay Haustov [Fri, 26 Feb 2016 09:51:05 +0000 (09:51 +0000)]
[AMDGPU] Assembler: Basic support for MIMG

Add parsing and printing of image operands. Matches legacy sp3 assembler.
Change image instruction order to have data/image/sampler operands in the beginning. This is needed because optional operands in MC are always last.
Update SITargetLowering for new order.
Add basic MC test.
Update CodeGen tests.

Review: http://reviews.llvm.org/D17574

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

8 years ago[PM] Clean up some formatting with the latest clang-format.
Chandler Carruth [Fri, 26 Feb 2016 09:37:52 +0000 (09:37 +0000)]
[PM] Clean up some formatting with the latest clang-format.

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

8 years ago[AArch64] Slight cleanup in FPLoadBalancing
James Molloy [Fri, 26 Feb 2016 09:10:53 +0000 (09:10 +0000)]
[AArch64] Slight cleanup in FPLoadBalancing

Instead of the convoluted if-statment we can just use getColor. This also fixes
a bug where we relied upon the parity of tablegen-generated register indexes
(instead of using the machine encoding).

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

8 years ago[X86][F16C] Added native IR half/float conversion tests.
Simon Pilgrim [Fri, 26 Feb 2016 08:52:29 +0000 (08:52 +0000)]
[X86][F16C] Added native IR half/float conversion tests.

Placeholder tests until we start improving native vector support.

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

8 years agollvm-dwp: provide diagnostics for duplicate DWO IDs
David Blaikie [Fri, 26 Feb 2016 07:30:15 +0000 (07:30 +0000)]
llvm-dwp: provide diagnostics for duplicate DWO IDs

These diagnostics aren't perfect - in the case of merging several dwos
into dwps and those dwps into more dwps - just getting the message about
the original source file name might not be much help (since it's the
same in both dwos, by definition - but doesn't tell you which chain of
dwps to backtrack)

It might be worth adding the DW_AT_dwo_id to the split debug info to
improve the diagnostic experience - might help track down the duplicates
better.

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

8 years agollvm-dwp: Support empty .dwo files
David Blaikie [Fri, 26 Feb 2016 07:04:58 +0000 (07:04 +0000)]
llvm-dwp: Support empty .dwo files

Though a bit odd, this is handy for a few reasons - for example, in a
build system that wants consistent input/output of build steps, but
where split-dwarf might be overriden/disabled by the user on a per-file
basis.

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

8 years ago[X86] Null out some redundant patterns for masked vector register to register moves...
Craig Topper [Fri, 26 Feb 2016 06:50:29 +0000 (06:50 +0000)]
[X86] Null out some redundant patterns for masked vector register to register moves. These can be accomplished with both aligned and unaligned opcodes.

Currently aligned is what is being used so remove the redundant patterns for the unaligned versions. But don't do this for the byte and word vector types since they don't have aligned versions.

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

8 years ago[TableGen] Fix typos in comments. NFC
Craig Topper [Fri, 26 Feb 2016 06:50:27 +0000 (06:50 +0000)]
[TableGen] Fix typos in comments. NFC

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

8 years ago[X86] Add test cases for r261977 and fix a grammatical error.
Craig Topper [Fri, 26 Feb 2016 06:50:24 +0000 (06:50 +0000)]
[X86] Add test cases for r261977 and fix a grammatical error.

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

8 years ago[JumpThreading] Simplify Instructions first in ComputeValueKnownInPredecessors()
Haicheng Wu [Fri, 26 Feb 2016 06:06:04 +0000 (06:06 +0000)]
[JumpThreading] Simplify Instructions first in ComputeValueKnownInPredecessors()

This change tries to find more opportunities to thread over basic blocks.

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

8 years ago[X86] Remove a couple returns after llvm_unreachables. NFC
Craig Topper [Fri, 26 Feb 2016 05:29:39 +0000 (05:29 +0000)]
[X86] Remove a couple returns after llvm_unreachables. NFC

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

8 years ago[X86] Use inclusive ranges for XMM/YMM/ZMM registers in is32Extended and isX86_64Exte...
Craig Topper [Fri, 26 Feb 2016 05:29:35 +0000 (05:29 +0000)]
[X86] Use inclusive ranges for XMM/YMM/ZMM registers in is32Extended and isX86_64ExtendedReg. NFC

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

8 years ago[X86] Explicitly diagnose use of %xmm16-%xmm31, %ymm16-%ymm31 and %zmm16-%zmm31 when...
Craig Topper [Fri, 26 Feb 2016 05:29:32 +0000 (05:29 +0000)]
[X86] Explicitly diagnose use of %xmm16-%xmm31, %ymm16-%ymm31 and %zmm16-%zmm31 when AVX512 is not enabled in the asm parser.

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

8 years agoAnother fix the testcase introduced by r261903 - Add the missing matches
Hongbin Zheng [Fri, 26 Feb 2016 03:41:47 +0000 (03:41 +0000)]
Another fix the testcase introduced by r261903 - Add the missing matches

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

8 years agoMinor doc fix: statepoints are invokable too
Sanjoy Das [Fri, 26 Feb 2016 03:33:59 +0000 (03:33 +0000)]
Minor doc fix: statepoints are invokable too

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

8 years agoMachineCopyPropagation: Catch copies of the form A<-B;A<-B
Matthias Braun [Fri, 26 Feb 2016 03:18:55 +0000 (03:18 +0000)]
MachineCopyPropagation: Catch copies of the form A<-B;A<-B

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

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

8 years agoMachineCopyPropagation: Keep scanning through instructions with regmasks
Matthias Braun [Fri, 26 Feb 2016 03:18:50 +0000 (03:18 +0000)]
MachineCopyPropagation: Keep scanning through instructions with regmasks

This also simplifies the code by removing the overly conservative
NoInterveningSideEffect() function. This function checked:
- That the two copies belong to the same block: We only process one
  block at a time and clear our maps in between it is impossible to find a
  copy from a different block.
- There is no terminator between the two copy instructions: This is not
  allowed anyway (the MachineVerifier would complain)
- Does not have instructions with hasUnmodeledSideEffects() or isCall()
  set: Even for those instructuction we must have all clobbers/defs of
  registers explicit as an operand. If the register is explicitely
  clobbered we would never come to the point of checking for
  NoInterveningSideEffect() anyway.

(I also checked this with a temporary build of the test-suite with all
 potentially failing conditions in NoInterveningSideEffect() turned into
 asserts)

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

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

8 years ago[PGO] Add test case to ensure covmap section is not allocatable.
Xinliang David Li [Fri, 26 Feb 2016 03:05:10 +0000 (03:05 +0000)]
[PGO] Add test case to ensure covmap section is not allocatable.

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

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

8 years ago[LoopUnrollAnalyzer] Check that we're using SCEV for the same loop we're simulating.
Michael Zolotukhin [Fri, 26 Feb 2016 02:57:05 +0000 (02:57 +0000)]
[LoopUnrollAnalyzer] Check that we're using SCEV for the same loop we're simulating.

Summary: Check that we're using SCEV for the same loop we're simulating. Otherwise, we might try to use the iteration number of the current loop in SCEV expressions for inner/outer loops IVs, which is clearly incorrect.

Reviewers: chandlerc, hfinkel

Subscribers: sanjoy, llvm-commits, mzolotukhin

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

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

8 years agoMinor code cleanups. NFC.
Junmo Park [Fri, 26 Feb 2016 02:07:36 +0000 (02:07 +0000)]
Minor code cleanups. NFC.

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

8 years ago[UnitTests] UnrollAnalyzer: make unit-test more general so that it can cover more...
Michael Zolotukhin [Fri, 26 Feb 2016 01:44:04 +0000 (01:44 +0000)]
[UnitTests] UnrollAnalyzer: make unit-test more general so that it can cover more cases in future.

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

8 years ago[sancov] Pruning full dominator blocks from instrumentation.
Mike Aizatsky [Fri, 26 Feb 2016 01:17:22 +0000 (01:17 +0000)]
[sancov] Pruning full dominator blocks from instrumentation.

Summary:
This is the first simple attempt to reduce number of coverage-
instrumented blocks.

If a basic block dominates all its successors, then its coverage
information is useless to us. Ingore such blocks if
santizer-coverage-prune-tree option is set.

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

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

8 years ago[x86, SSE] add tests to show missing pcmp folds
Sanjay Patel [Fri, 26 Feb 2016 01:14:27 +0000 (01:14 +0000)]
[x86, SSE] add tests to show missing pcmp folds

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

8 years agoAdd forward declarations /NFC
Xinliang David Li [Fri, 26 Feb 2016 00:54:08 +0000 (00:54 +0000)]
Add forward declarations /NFC

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

8 years ago[WinEH] Don't remove unannotated inline-asm calls
David Majnemer [Fri, 26 Feb 2016 00:04:25 +0000 (00:04 +0000)]
[WinEH] Don't remove unannotated inline-asm calls

Inline-asm calls aren't annotated with funclet bundle operands because
they don't throw and cannot be inlined through.  We shouldn't require
them to bear an funclet bundle operand.

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

8 years agoMore internal details of SROA pass to library visibility.
Owen Anderson [Thu, 25 Feb 2016 23:34:21 +0000 (23:34 +0000)]
More internal details of SROA pass to library visibility.

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

8 years agoSupport: Give ManagedStatic's helper object library visibility
Justin Bogner [Thu, 25 Feb 2016 22:05:19 +0000 (22:05 +0000)]
Support: Give ManagedStatic's helper object library visibility

It doesn't make much sense to export these symbols.

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

8 years agoReverts change r261907 and r261918
Hemant Kulkarni [Thu, 25 Feb 2016 20:47:07 +0000 (20:47 +0000)]
Reverts change r261907 and r261918

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

8 years agoUse regex in testcase, do not fail windows bots
Hongbin Zheng [Thu, 25 Feb 2016 19:16:40 +0000 (19:16 +0000)]
Use regex in testcase, do not fail windows bots

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

8 years agoFix endianness issue on BE machines introduced by r261907
Hemant Kulkarni [Thu, 25 Feb 2016 18:56:01 +0000 (18:56 +0000)]
Fix endianness issue on BE machines introduced by r261907

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

8 years agoReformatted a comment to fit the 80 column limit. NFC.
David L Kreitzer [Thu, 25 Feb 2016 18:50:45 +0000 (18:50 +0000)]
Reformatted a comment to fit the 80 column limit. NFC.

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

8 years agoTry to fix windows fail at r261902.
Hongbin Zheng [Thu, 25 Feb 2016 18:24:19 +0000 (18:24 +0000)]
Try to fix windows fail at r261902.

Introduce move constructor and move assignment operator to PostDominatorTree.

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

8 years ago[llvm-readobj] Enable GNU style sections and relocations printing
Hemant Kulkarni [Thu, 25 Feb 2016 18:02:00 +0000 (18:02 +0000)]
[llvm-readobj] Enable GNU style sections and relocations printing

http://reviews.llvm.org/D17523

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

8 years agoIntroduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC
Hongbin Zheng [Thu, 25 Feb 2016 17:54:25 +0000 (17:54 +0000)]
Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC

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

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

8 years agoIntroduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFronti...
Hongbin Zheng [Thu, 25 Feb 2016 17:54:15 +0000 (17:54 +0000)]
Introduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFrontier. NFC

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

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

8 years agoIntroduce analysis pass to compute PostDominators in the new pass manager. NFC
Hongbin Zheng [Thu, 25 Feb 2016 17:54:07 +0000 (17:54 +0000)]
Introduce analysis pass to compute PostDominators in the new pass manager. NFC

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

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

8 years agoARM: disallow pc as a base register in Thumb2 memory ops.
Tim Northover [Thu, 25 Feb 2016 16:54:52 +0000 (16:54 +0000)]
ARM: disallow pc as a base register in Thumb2 memory ops.

These should all be deferring to the "OP (literal)" variant according to the
ARM ARM.

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

8 years agoRevert "Introduce analysis pass to compute PostDominators in the new pass manager...
Hongbin Zheng [Thu, 25 Feb 2016 16:45:53 +0000 (16:45 +0000)]
Revert "Introduce analysis pass to compute PostDominators in the new pass manager. NFC"

This reverts commit a3e5cc6a51ab5ad88d1760c63284294a4e34c018.

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

8 years agoRevert "Introduce DominanceFrontierAnalysis to the new PassManager to compute Dominan...
Hongbin Zheng [Thu, 25 Feb 2016 16:45:46 +0000 (16:45 +0000)]
Revert "Introduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFrontier. NFC"

This reverts commit 109c38b2226a87b0be73fa7a0a8c1a81df20aeb2.

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

8 years agoRevert "Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManage...
Hongbin Zheng [Thu, 25 Feb 2016 16:45:37 +0000 (16:45 +0000)]
Revert "Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC"

This reverts commit 8228b4d374edeb4cc0c5fddf6e1ab876918ee126.

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

8 years agorangify; NFCI
Sanjay Patel [Thu, 25 Feb 2016 16:44:27 +0000 (16:44 +0000)]
rangify; NFCI

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

8 years ago[AArch64] Clean up callee-save CFI emission. NFC.
Geoff Berry [Thu, 25 Feb 2016 16:36:08 +0000 (16:36 +0000)]
[AArch64] Clean up callee-save CFI emission. NFC.

Summary:
Avoid special case for FP, LR CFI emission and just allow general
AArch64FrameLowering::emitCalleeSavedFrameMoves() to handle them.  Also,
stop recalculating the stack offsets in emitCalleeSavedFrameMoves()
since we can just reuse the previously calculated offset stored in the
MachineFrameInfo.

Depends on D17000

Reviewers: t.p.northover, rengolin, mcrosier, jmolloy

Subscribers: aemerson, rengolin, mcrosier, llvm-commits

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

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

8 years agoIntroduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC
Hongbin Zheng [Thu, 25 Feb 2016 16:33:26 +0000 (16:33 +0000)]
Introduce RegionInfoAnalysis, which compute Region Tree in the new PassManager. NFC

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

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

8 years agoIntroduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFronti...
Hongbin Zheng [Thu, 25 Feb 2016 16:33:15 +0000 (16:33 +0000)]
Introduce DominanceFrontierAnalysis to the new PassManager to compute DominanceFrontier. NFC

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

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

8 years agoIntroduce analysis pass to compute PostDominators in the new pass manager. NFC
Hongbin Zheng [Thu, 25 Feb 2016 16:33:06 +0000 (16:33 +0000)]
Introduce analysis pass to compute PostDominators in the new pass manager. NFC

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

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

8 years ago[AMDGPU] Disassembler: Support for all VOP1 instructions.
Nikolay Haustov [Thu, 25 Feb 2016 16:09:14 +0000 (16:09 +0000)]
[AMDGPU] Disassembler: Support for all VOP1 instructions.

Support all instructions with VOP1 encoding with 32 or 64-bit operands for VI subtarget:

VGPR_32 and VReg_64 operand register classes
VS_32 and VS_64 operand register classes with inline and literal constants
Tests for VOP1 instructions.

Patch by: skolton

Reviewers: arsenm, tstellarAMD

Review: http://reviews.llvm.org/D17194

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

8 years agodon't repeat names in documentation comments; NFC
Sanjay Patel [Thu, 25 Feb 2016 15:55:28 +0000 (15:55 +0000)]
don't repeat names in documentation comments; NFC

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

8 years agoGC empty directory.
Joerg Sonnenberger [Thu, 25 Feb 2016 15:00:14 +0000 (15:00 +0000)]
GC empty directory.

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

8 years agoAVX512F: Add GATHER/SCATTER assembler Intel syntax tests for knl/skx/avx . Change...
Igor Breger [Thu, 25 Feb 2016 13:30:17 +0000 (13:30 +0000)]
AVX512F: Add GATHER/SCATTER assembler Intel syntax tests for knl/skx/avx . Change memory operand parser handling.

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

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

8 years ago[mips][microMIPS] Implement DINSU, DINSM, DINS instructions
Hrvoje Varga [Thu, 25 Feb 2016 12:53:29 +0000 (12:53 +0000)]
[mips][microMIPS] Implement DINSU, DINSM, DINS instructions
Differential Revision: http://reviews.llvm.org/D16181

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

8 years ago[AMDGPU] Assembler: Simplify handling of optional operands
Nikolay Haustov [Thu, 25 Feb 2016 10:58:54 +0000 (10:58 +0000)]
[AMDGPU] Assembler: Simplify handling of optional operands

Resubmit with index problem fixed. Verified with valgrind.

Prepare to support DPP encodings.

For DPP encodings, we want row_mask/bank_mask/bound_ctrl to be optional operands.
However this means that when parsing instruction which has no mnemonic prefix,
we cannot add both default values for VOP3 and for DPP optional operands
to OperandVector - neither instructions would match. So add default values
for optional operands to MCInst during conversion instead.

Mark more operands as IsOptional = 1 in .td files.
Do not add default values for optional operands to OperandVector in AMDGPUAsmParser.
Add default values for optional operands during conversion using new helper addOptionalImmOperand.
Change to cvtVOP3_2_mod to check instruction flag instead of presence of modifiers. In the future, cvtVOP3* functions can be combined into one.
Separate cvtFlat and cvtFlatAtomic.
Fix CNDMASK_B32 definition to have no modifiers.

Review: http://reviews.llvm.org/D17445

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

8 years ago[PM] Add the IR unit type to the pass manager's logging and make all of
Chandler Carruth [Thu, 25 Feb 2016 10:27:39 +0000 (10:27 +0000)]
[PM] Add the IR unit type to the pass manager's logging and make all of
the testing more more explicit.

This will currently fail on platforms without support for getTypeName.
While an assert failure seems too harsh, I'm hoping we're OK with the
regression test failure, and I'd like to find out about what platforms
actually exist in this state if there are any so we can get
implementations in place for them.

But if we just can't fix all the host compilers to have a reasonably
portable variant of getTypeName and are worried about xfailing this test
on those platforms, I can add the horrible regular expression magic to
make the tests support "unknown" here as well.

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

8 years ago[X86][SSE3] Added combine support for MOVDDUP/MOVSHDUP/MOVSLDUP target shuffles
Simon Pilgrim [Thu, 25 Feb 2016 09:12:12 +0000 (09:12 +0000)]
[X86][SSE3] Added combine support for MOVDDUP/MOVSHDUP/MOVSLDUP target shuffles

Now that PerformShuffleCombine can handle unary shuffles.

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

8 years agoRevert r260064, "Disable llvm/test/tools/llvm-profdata/value-prof.proftext on win32...
NAKAMURA Takumi [Thu, 25 Feb 2016 08:50:26 +0000 (08:50 +0000)]
Revert r260064, "Disable llvm/test/tools/llvm-profdata/value-prof.proftext on win32 for now. Investigating."

It seems unreproducible any more for me.

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

8 years agoRevert r261742, "[AMDGPU] Assembler: Simplify handling of optional operands"
NAKAMURA Takumi [Thu, 25 Feb 2016 08:35:27 +0000 (08:35 +0000)]
Revert r261742, "[AMDGPU] Assembler: Simplify handling of optional operands"

It brought undefined behavior.

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

8 years agoPM: Implement a basic loop pass manager
Justin Bogner [Thu, 25 Feb 2016 07:23:08 +0000 (07:23 +0000)]
PM: Implement a basic loop pass manager

This creates the new-style LoopPassManager and wires it up with dummy
and print passes.

This version doesn't support modifying the loop nest at all. It will
be far easier to discuss and evaluate the approaches to that with this
in place so that the boilerplate is out of the way.

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

8 years agoOptimized loading (zextload) of i1 value from memory.
Elena Demikhovsky [Thu, 25 Feb 2016 07:05:12 +0000 (07:05 +0000)]
Optimized loading (zextload) of i1 value from memory.
This patch is a partial revert of https://llvm.org/svn/llvm-project/llvm/trunk@237793.
Extra "and" causes performance degradation.

We assume that i1 is stored in zero-extended form. And store operation is responsible for zeroing upper bits.

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

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

8 years ago[Support] Don't check for ICC directly and rely on the __GNUC__ check
Chandler Carruth [Thu, 25 Feb 2016 06:13:01 +0000 (06:13 +0000)]
[Support] Don't check for ICC directly and rely on the __GNUC__ check
(which they emulate). This way we don't use that path when compiled with
ICC on Windows where it mimics MSVC's behavior and supports __FUNCSIG__.

Thanks for David Majnemer again for spotting this better pattern!

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

8 years ago[Support] Add a fancy helper function to get a static name for a type.
Chandler Carruth [Thu, 25 Feb 2016 03:58:21 +0000 (03:58 +0000)]
[Support] Add a fancy helper function to get a static name for a type.

This extracts the type name from __PRETTY_FUNCTION__ for compilers that
support it (I've opted Clang, GCC, and ICC into this as I've tested that
they work) and from __FUNCSIG__ which is very similar on MSVC. The
routine falls back gracefully on a stub "UNKNOWN_TYPE" string with
compilers or formats it doesn't understand.

This should be enough for a lot of common cases in LLVM where the real
goal is just to log or print a type name as a debugging aid, and save
a ton of boilerplate in the process. Notably, I'm planning to use this
to remove all the getName() boiler plate from the new pass manager.

The design and implementation is based on a bunch of advice and
discussion with Richard Smith and experimenting with most versions of
Clang and GCC. David Majnemer also provided excellent advice on how best
to do this with MSVC. Richard also checked that ICC does something
reasonable and I'll watch the build bots for other compilers. It'd be
great if someone could contribute logic for xlC and/or other toolchains.

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

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

8 years agoIR: Make the X / undef -> undef fold match the comment
Justin Bogner [Thu, 25 Feb 2016 01:02:18 +0000 (01:02 +0000)]
IR: Make the X / undef -> undef fold match the comment

The constant folding for sdiv and udiv has a big discrepancy between the
comments and the code, which looks like a typo. Currently, we're folding
X / undef pretty inconsistently:

  0 / undef -> undef
  C / undef -> 0
  undef / undef -> 0

Whereas the comments state we do X / undef -> undef. The logic that
returns zero is actually commented as doing undef / X -> 0, despite that
the LHS isn't undef in many of the cases that hit it.

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

8 years ago[CodeGenPrepare] Remove load-based heuristic
Junmo Park [Thu, 25 Feb 2016 00:23:27 +0000 (00:23 +0000)]
[CodeGenPrepare] Remove load-based heuristic

Summary:
Both the hardware and LLVM have changed since 2012.
Now, load-based heuristic don't show big differences any more on OoO cores.

There is no notable regressons and improvements on spec2000/2006. (Cortex-A57, Core i5).

Reviewers: spatel, zansari

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

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

8 years agoMove test/CodeGen/Generic/pr26652.ll to test/CodeGen/X86/pr26652.ll and test it only...
Cong Hou [Thu, 25 Feb 2016 00:12:18 +0000 (00:12 +0000)]
Move test/CodeGen/Generic/pr26652.ll to test/CodeGen/X86/pr26652.ll and test it only on X86.

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

8 years agofix typo
Sanjay Patel [Wed, 24 Feb 2016 23:44:19 +0000 (23:44 +0000)]
fix typo

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

8 years agoDetecte vector reduction operations just before instruction selection.
Cong Hou [Wed, 24 Feb 2016 23:40:36 +0000 (23:40 +0000)]
Detecte vector reduction operations just before instruction selection.

(This is the second attemp to commit this patch, after fixing pr26652 & pr26653).

This patch detects vector reductions before instruction selection. Vector
reductions are vectorized reduction operations, and for such operations we have
freedom to reorganize the elements of the result as long as the reduction of them
stay unchanged. This will enable some reduction pattern recognition during
instruction combine such as SAD/dot-product on X86. A flag is added to
SDNodeFlags to mark those vector reduction nodes to be checked during instruction
combine.

To detect those vector reductions, we search def-use chains starting from the
given instruction, and check if all uses fall into two categories:

1. Reduction with another vector.
2. Reduction on all elements.

in which 2 is detected by recognizing the pattern that the loop vectorizer
generates to reduce all elements in the vector outside of the loop, which
includes several ShuffleVector and one ExtractElement instructions.

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

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

8 years agoadd tests to show missing bitcasted logic transform
Sanjay Patel [Wed, 24 Feb 2016 22:31:18 +0000 (22:31 +0000)]
add tests to show missing bitcasted logic transform

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

8 years agoAdd capability to push/pop DFI in MCStreamer. NFC
Amaury Sechet [Wed, 24 Feb 2016 22:25:18 +0000 (22:25 +0000)]
Add capability to push/pop DFI in MCStreamer. NFC

Summary: This is extracted from D17555

Reviewers: davidxl, reames, sanjoy, MatzeB, pete

Subscribers: llvm-commits

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

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

8 years ago[asan] Do not instrument globals in the special "LLVM" sections
Anna Zaks [Wed, 24 Feb 2016 22:12:18 +0000 (22:12 +0000)]
[asan] Do not instrument globals in the special "LLVM" sections

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

8 years agoMachineInstr: Respect register aliases in clearRegiserKills()
Matthias Braun [Wed, 24 Feb 2016 19:21:48 +0000 (19:21 +0000)]
MachineInstr: Respect register aliases in clearRegiserKills()

This fixes bugs in copy elimination code in llvm. It slightly changes the
semantics of clearRegisterKills(). This is appropriate because:
- Users in lib/CodeGen/MachineCopyPropagation.cpp and
  lib/Target/AArch64RedundantCopyElimination.cpp and
  lib/Target/SystemZ/SystemZElimCompare.cpp are incorrect without it
  (see included testcase).
- All other users in llvm are unaffected (they pass TRI==nullptr)
- (Kill flags are optional anyway so removing too many shouldn't hurt.)

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

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

8 years agoAArch64: remove CRC feature from Cyclone.
Tim Northover [Wed, 24 Feb 2016 18:10:17 +0000 (18:10 +0000)]
AArch64: remove CRC feature from Cyclone.

Turns out we don't actually support those instructions.

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

8 years ago[ThinLTO] Add missing breaks when parsing summaries (NFC)
Teresa Johnson [Wed, 24 Feb 2016 17:57:28 +0000 (17:57 +0000)]
[ThinLTO] Add missing breaks when parsing summaries (NFC)

This wasn't causing a correctness issue, but was causing extra duplicate
entries to be added to the SummaryMap.

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

8 years ago[SimplifyCFG] Use a more elegant solution than r261731
David Majnemer [Wed, 24 Feb 2016 17:30:48 +0000 (17:30 +0000)]
[SimplifyCFG] Use a more elegant solution than r261731

The cleanupret instruction has an invariant that it's 'from' operand be
a cleanuppad.  This invariant was violated when we removed a dead block
which removed a cleanuppad leaving behind a cleanupret with an undef
'from' operand.

This was solved in r261731 by staving off the removal of the dead block
to a later pass.

However, it occured to me that we do not need to do this.
Instead, we can simply avoid processing the cleanupret if it has an
undef 'from' operand because we know that it will be removed soon.

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

8 years ago[X86][SSSE3] Added target shuffle combine tests for SSE3/SSSE3 specific shuffles.
Simon Pilgrim [Wed, 24 Feb 2016 17:08:59 +0000 (17:08 +0000)]
[X86][SSSE3] Added target shuffle combine tests for SSE3/SSSE3 specific shuffles.

Allows us to test SSSE3 PSHUFB intrinsic.

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

8 years agoremove fixme comment that was fixed with r261750
Sanjay Patel [Wed, 24 Feb 2016 17:08:29 +0000 (17:08 +0000)]
remove fixme comment that was fixed with r261750

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

8 years ago[InstCombine] enable optimization of casted vector xor instructions
Sanjay Patel [Wed, 24 Feb 2016 17:00:34 +0000 (17:00 +0000)]
[InstCombine] enable optimization of casted vector xor instructions

This is part of the payoff for the refactoring in:
http://reviews.llvm.org/rL261649
http://reviews.llvm.org/rL261707

In addition to removing a pile of duplicated code, the xor case was
missing the optimization for vector types because it checked
"SrcTy->isIntegerTy()" rather than "SrcTy->isIntOrIntVectorTy()"
like 'and' and 'or' were already doing.

This solves part of:
https://llvm.org/bugs/show_bug.cgi?id=26702

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

8 years agoadd test to show missing bitcasted vector xor fold
Sanjay Patel [Wed, 24 Feb 2016 16:34:29 +0000 (16:34 +0000)]
add test to show missing bitcasted vector xor fold

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

8 years ago`MSP430InstrInfo::loadRegFromStackSlot` forgets to set register def.
Anton Korobeynikov [Wed, 24 Feb 2016 15:15:02 +0000 (15:15 +0000)]
`MSP430InstrInfo::loadRegFromStackSlot` forgets to set register def.

Summary:
For instance, compiling the below results in a panic:

```
llc: ../lib/CodeGen/InlineSpiller.cpp:1140: bool (anonymous namespace)::InlineSpiller::foldMemoryOperand(ArrayRef<std::pair<MachineInstr *, unsigned int> >, llvm::MachineInstr *): Assertion `MO->isDead() && "Cannot fold physreg def"' failed.
#0 0x00007f50fbcf353e llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:321:15
#1 0x00007f50fbcf3929 PrintStackTraceSignalHandler(void*) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:380:1
#2 0x00007f50fbcf22a3 llvm::sys::RunSignalHandlers() /home/h/3rd/llvm/build/../lib/Support/Signals.cpp:45:5
#3 0x00007f50fbcf3bb4 SignalHandler(int) /home/h/3rd/llvm/build/../lib/Support/Unix/Signals.inc:210:1
#4 0x00007f50fa87a180 (/lib/x86_64-linux-gnu/libc.so.6+0x35180)
#5 0x00007f50fa87a107 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35107)
#6 0x00007f50fa87b4e8 abort (/lib/x86_64-linux-gnu/libc.so.6+0x364e8)
#7 0x00007f50fa873226 (/lib/x86_64-linux-gnu/libc.so.6+0x2e226)
#8 0x00007f50fa8732d2 (/lib/x86_64-linux-gnu/libc.so.6+0x2e2d2)
#9 0x00007f50fddd9287 (anonymous namespace)::InlineSpiller::foldMemoryOperand(llvm::ArrayRef<std::pair<llvm::MachineInstr*, unsigned int> >, llvm::MachineInstr*) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1141:21
#10 0x00007f50fddd9ee9 (anonymous namespace)::InlineSpiller::spillAroundUses(unsigned int) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1286:9
#11 0x00007f50fddd388b (anonymous namespace)::InlineSpiller::spillAll() /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1338:21
#12 0x00007f50fddd221d (anonymous namespace)::InlineSpiller::spill(llvm::LiveRangeEdit&) /home/h/3rd/llvm/build/../lib/CodeGen/InlineSpiller.cpp:1391:3
#13 0x00007f50fdfd921b (anonymous namespace)::RAGreedy::selectOrSplitImpl(llvm::LiveInterval&, llvm::SmallVectorImpl<unsigned int>&, llvm::SmallSet<unsigned int, 16u, std::less<unsigned int> >&, unsigned int) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2555:5
#14 0x00007f50fdfd647b (anonymous namespace)::RAGreedy::selectOrSplit(llvm::LiveInterval&, llvm::SmallVectorImpl<unsigned int>&) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2221:12
#15 0x00007f50fdfc89f9 llvm::RegAllocBase::allocatePhysRegs() /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocBase.cpp:110:14
#16 0x00007f50fdfd6337 (anonymous namespace)::RAGreedy::runOnMachineFunction(llvm::MachineFunction&) /home/h/3rd/llvm/build/../lib/CodeGen/RegAllocGreedy.cpp:2611:3
#17 0x00007f50fded33ee llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/h/3rd/llvm/build/../lib/CodeGen/MachineFunctionPass.cpp:43:3
#18 0x00007f50fd6cdc6f llvm::FPPassManager::runOnFunction(llvm::Function&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1550:23
#19 0x00007f50fd6cdf85 llvm::FPPassManager::runOnModule(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1571:16
#20 0x00007f50fd6ce71a (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1627:23
#21 0x00007f50fd6ce246 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1730:16
#22 0x00007f50fd6cec31 llvm::legacy::PassManager::run(llvm::Module&) /home/h/3rd/llvm/build/../lib/IR/LegacyPassManager.cpp:1761:3
#23 0x0000000000415bdc compileModule(char**, llvm::LLVMContext&) /home/h/3rd/llvm/build/../tools/llc/llc.cpp:405:5
#24 0x0000000000414571 main /home/h/3rd/llvm/build/../tools/llc/llc.cpp:211:13
#25 0x00007f50fa866b45 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b45)
#26 0x0000000000414296 _start (/home/h/3rd/llvm/build/bin/llc+0x414296)
Stack dump:
0. Program arguments: ./bin/llc -mtriple msp430 loadstore.ll
1. Running pass 'Function Pass Manager' on module 'loadstore.ll'.
2. Running pass 'Greedy Register Allocator' on function '@inc'
```

Original IR:

```llvm
%struct.VeryLarge = type { i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }

; Function Attrs: norecurse nounwind
define void @inc(%struct.VeryLarge* noalias nocapture sret %agg.result, %struct.VeryLarge* byval align 1 %s) #0 {
entry:
  %p0 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 0
  %0 = load i8, i8* %p0, align 1, !tbaa !1
  %p1 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 1
  %1 = load i32, i32* %p1, align 1, !tbaa !6
  %p2 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 2
  %2 = load i32, i32* %p2, align 1, !tbaa !7
  %p3 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 3
  %3 = load i32, i32* %p3, align 1, !tbaa !8
  %p4 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 4
  %4 = load i32, i32* %p4, align 1, !tbaa !9
  %p5 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 5
  %5 = load i32, i32* %p5, align 1, !tbaa !10
  %p6 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 6
  %6 = load i32, i32* %p6, align 1, !tbaa !11
  %p7 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 7
  %7 = load i32, i32* %p7, align 1, !tbaa !12
  %p8 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 8
  %8 = load i32, i32* %p8, align 1, !tbaa !13
  %p9 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 9
  %9 = load i32, i32* %p9, align 1, !tbaa !14
  %p10 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 10
  %10 = load i32, i32* %p10, align 1, !tbaa !15
  %p11 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 11
  %11 = load i32, i32* %p11, align 1, !tbaa !16
  %p12 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 12
  %12 = load i32, i32* %p12, align 1, !tbaa !17
  %p13 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 13
  %13 = load i32, i32* %p13, align 1, !tbaa !18
  %p14 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 14
  %14 = load i32, i32* %p14, align 1, !tbaa !19
  %p15 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 15
  %15 = load i32, i32* %p15, align 1, !tbaa !20
  %p16 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 16
  %16 = load i32, i32* %p16, align 1, !tbaa !21
  %p17 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 17
  %17 = load i32, i32* %p17, align 1, !tbaa !22
  %p18 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 18
  %18 = load i32, i32* %p18, align 1, !tbaa !23
  %p19 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 19
  %19 = load i32, i32* %p19, align 1, !tbaa !24
  %p20 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 20
  %20 = load i32, i32* %p20, align 1, !tbaa !25
  %p21 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 21
  %21 = load i32, i32* %p21, align 1, !tbaa !26
  %p22 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 22
  %22 = load i32, i32* %p22, align 1, !tbaa !27
  %p23 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 23
  %23 = load i32, i32* %p23, align 1, !tbaa !28
  %p24 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 24
  %24 = load i32, i32* %p24, align 1, !tbaa !29
  %p25 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 25
  %25 = load i32, i32* %p25, align 1, !tbaa !30
  %p26 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 26
  %26 = load i32, i32* %p26, align 1, !tbaa !31
  %p27 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 27
  %27 = load i32, i32* %p27, align 1, !tbaa !32
  %p28 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 28
  %28 = load i32, i32* %p28, align 1, !tbaa !33
  %p29 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 29
  %29 = load i32, i32* %p29, align 1, !tbaa !34
  %p30 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 30
  %30 = load i32, i32* %p30, align 1, !tbaa !35
  %p31 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 31
  %31 = load i32, i32* %p31, align 1, !tbaa !36
  %p32 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %s, i32 0, i32 32
  %32 = load i32, i32* %p32, align 1, !tbaa !37
  %add = add i8 %0, 1
  store i8 %add, i8* %p0, align 1, !tbaa !1
  %add2 = add i32 %1, 2
  store i32 %add2, i32* %p1, align 1, !tbaa !6
  %add3 = add i32 %2, 3
  store i32 %add3, i32* %p2, align 1, !tbaa !7
  %add4 = add i32 %3, 4
  store i32 %add4, i32* %p3, align 1, !tbaa !8
  %add5 = add i32 %4, 5
  store i32 %add5, i32* %p4, align 1, !tbaa !9
  %add6 = add i32 %5, 6
  store i32 %add6, i32* %p5, align 1, !tbaa !10
  %add7 = add i32 %6, 7
  store i32 %add7, i32* %p6, align 1, !tbaa !11
  %add8 = add i32 %7, 8
  store i32 %add8, i32* %p7, align 1, !tbaa !12
  %add9 = add i32 %8, 9
  store i32 %add9, i32* %p8, align 1, !tbaa !13
  %add10 = add i32 %9, 10
  store i32 %add10, i32* %p9, align 1, !tbaa !14
  %add11 = add i32 %10, 11
  store i32 %add11, i32* %p10, align 1, !tbaa !15
  %add12 = add i32 %11, 12
  store i32 %add12, i32* %p11, align 1, !tbaa !16
  %add13 = add i32 %12, 13
  store i32 %add13, i32* %p12, align 1, !tbaa !17
  %add14 = add i32 %13, 14
  store i32 %add14, i32* %p13, align 1, !tbaa !18
  %add15 = add i32 %14, 15
  store i32 %add15, i32* %p14, align 1, !tbaa !19
  %add16 = add i32 %15, 16
  store i32 %add16, i32* %p15, align 1, !tbaa !20
  %add17 = add i32 %16, 17
  store i32 %add17, i32* %p16, align 1, !tbaa !21
  %add18 = add i32 %17, 18
  store i32 %add18, i32* %p17, align 1, !tbaa !22
  %add19 = add i32 %18, 19
  store i32 %add19, i32* %p18, align 1, !tbaa !23
  %add20 = add i32 %19, 20
  store i32 %add20, i32* %p19, align 1, !tbaa !24
  %add21 = add i32 %20, 21
  store i32 %add21, i32* %p20, align 1, !tbaa !25
  %add22 = add i32 %21, 22
  store i32 %add22, i32* %p21, align 1, !tbaa !26
  %add23 = add i32 %22, 23
  store i32 %add23, i32* %p22, align 1, !tbaa !27
  %add24 = add i32 %23, 24
  store i32 %add24, i32* %p23, align 1, !tbaa !28
  %add25 = add i32 %24, 25
  store i32 %add25, i32* %p24, align 1, !tbaa !29
  %add26 = add i32 %25, 26
  store i32 %add26, i32* %p25, align 1, !tbaa !30
  %add27 = add i32 %26, 27
  store i32 %add27, i32* %p26, align 1, !tbaa !31
  %add28 = add i32 %27, 28
  store i32 %add28, i32* %p27, align 1, !tbaa !32
  %add29 = add i32 %28, 29
  store i32 %add29, i32* %p28, align 1, !tbaa !33
  %add30 = add i32 %29, 30
  store i32 %add30, i32* %p29, align 1, !tbaa !34
  %add31 = add i32 %30, 31
  store i32 %add31, i32* %p30, align 1, !tbaa !35
  %add32 = add i32 %31, 32
  store i32 %add32, i32* %p31, align 1, !tbaa !36
  %add33 = add i32 %32, 33
  store i32 %add33, i32* %p32, align 1, !tbaa !37
  %33 = getelementptr inbounds %struct.VeryLarge, %struct.VeryLarge* %agg.result, i32 0, i32 0
  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %33, i8* %p0, i32 129, i32 1, i1 false), !tbaa.struct !38
  ret void
}

; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i32, i1) #1

attributes #0 = { norecurse nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { argmemonly nounwind }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.8.0 (git://github.com/llvm-mirror/clang 40ef2b7531472c41212c4719a9294aeb7bddebbc) (git://github.com/llvm-mirror/llvm c601eaf55606dfb9ad372b514b77aa00d1409be1)"}
!1 = !{!2, !3, i64 0}
!2 = !{!"", !3, i64 0, !5, i64 1, !5, i64 5, !5, i64 9, !5, i64 13, !5, i64 17, !5, i64 21, !5, i64 25, !5, i64 29, !5, i64 33, !5, i64 37, !5, i64 41, !5, i64 45, !5, i64 49, !5, i64 53, !5, i64 57, !5, i64 61, !5, i64 65, !5, i64 69, !5, i64 73, !5, i64 77, !5, i64 81, !5, i64 85, !5, i64 89, !5, i64 93, !5, i64 97, !5, i64 101, !5, i64 105, !5, i64 109, !5, i64 113, !5, i64 117, !5, i64 121, !5, i64 125}
!3 = !{!"omnipotent char", !4, i64 0}
!4 = !{!"Simple C/C++ TBAA"}
!5 = !{!"int", !3, i64 0}
!6 = !{!2, !5, i64 1}
!7 = !{!2, !5, i64 5}
!8 = !{!2, !5, i64 9}
!9 = !{!2, !5, i64 13}
!10 = !{!2, !5, i64 17}
!11 = !{!2, !5, i64 21}
!12 = !{!2, !5, i64 25}
!13 = !{!2, !5, i64 29}
!14 = !{!2, !5, i64 33}
!15 = !{!2, !5, i64 37}
!16 = !{!2, !5, i64 41}
!17 = !{!2, !5, i64 45}
!18 = !{!2, !5, i64 49}
!19 = !{!2, !5, i64 53}
!20 = !{!2, !5, i64 57}
!21 = !{!2, !5, i64 61}
!22 = !{!2, !5, i64 65}
!23 = !{!2, !5, i64 69}
!24 = !{!2, !5, i64 73}
!25 = !{!2, !5, i64 77}
!26 = !{!2, !5, i64 81}
!27 = !{!2, !5, i64 85}
!28 = !{!2, !5, i64 89}
!29 = !{!2, !5, i64 93}
!30 = !{!2, !5, i64 97}
!31 = !{!2, !5, i64 101}
!32 = !{!2, !5, i64 105}
!33 = !{!2, !5, i64 109}
!34 = !{!2, !5, i64 113}
!35 = !{!2, !5, i64 117}
!36 = !{!2, !5, i64 121}
!37 = !{!2, !5, i64 125}
!38 = !{i64 0, i64 1, !39, i64 1, i64 4, !40, i64 5, i64 4, !40, i64 9, i64 4, !40, i64 13, i64 4, !40, i64 17, i64 4, !40, i64 21, i64 4, !40, i64 25, i64 4, !40, i64 29, i64 4, !40, i64 33, i64 4, !40, i64 37, i64 4, !40, i64 41, i64 4, !40, i64 45, i64 4, !40, i64 49, i64 4, !40, i64 53, i64 4, !40, i64 57, i64 4, !40, i64 61, i64 4, !40, i64 65, i64 4, !40, i64 69, i64 4, !40, i64 73, i64 4, !40, i64 77, i64 4, !40, i64 81, i64 4, !40, i64 85, i64 4, !40, i64 89, i64 4, !40, i64 93, i64 4, !40, i64 97, i64 4, !40, i64 101, i64 4, !40, i64 105, i64 4, !40, i64 109, i64 4, !40, i64 113, i64 4, !40, i64 117, i64 4, !40, i64 121, i64 4, !40, i64 125, i64 4, !40}
!39 = !{!3, !3, i64 0}
!40 = !{!5, !5, i64 0}
```

Reviewers: asl

Subscribers: qcolombet

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

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