OSDN Git Service

android-x86/external-llvm.git
8 years agoRevert "Properly handle short file names on the command line in Windows"
Adrian McCarthy [Fri, 17 Jun 2016 19:45:59 +0000 (19:45 +0000)]
Revert "Properly handle short file names on the command line in Windows"

This reverts commit 3e5651782cfc985fca9d94595cad63059e587e2f.

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

8 years ago[PM] Port MergedLoadStoreMotion to the new pass manager, take two.
Davide Italiano [Fri, 17 Jun 2016 19:10:09 +0000 (19:10 +0000)]
[PM] Port MergedLoadStoreMotion to the new pass manager, take two.

This is indeed a much cleaner approach (thanks to Daniel Berlin
for pointing out), and also David/Sean for review.

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

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

8 years agoAvoid duplicated map lookups. No functionality change intended.
Benjamin Kramer [Fri, 17 Jun 2016 18:59:41 +0000 (18:59 +0000)]
Avoid duplicated map lookups. No functionality change intended.

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

8 years agoARM: take account of possible bundle when erasing an instruction.
Tim Northover [Fri, 17 Jun 2016 18:40:46 +0000 (18:40 +0000)]
ARM: take account of possible bundle when erasing an instruction.

Fortunately this appears to be the only ARM-specific pass that runs while
bundles might be in play, so no other cases need modifying.

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

8 years ago[IRObjectFile] Handle .weak in RecordStreamer.
Davide Italiano [Fri, 17 Jun 2016 18:20:14 +0000 (18:20 +0000)]
[IRObjectFile] Handle .weak in RecordStreamer.

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

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

8 years agoSupport expanding partial-word cmpxchg to full-word cmpxchg in AtomicExpandPass.
James Y Knight [Fri, 17 Jun 2016 18:11:48 +0000 (18:11 +0000)]
Support expanding partial-word cmpxchg to full-word cmpxchg in AtomicExpandPass.

Many CPUs only have the ability to do a 4-byte cmpxchg (or ll/sc), not 1
or 2-byte. For those, you need to mask and shift the 1 or 2 byte values
appropriately to use the 4-byte instruction.

This change adds support for cmpxchg-based instruction sets (only SPARC,
in LLVM). The support can be extended for LL/SC-based PPC and MIPS in
the future, supplanting the ISel expansions those architectures
currently use.

Tests added for the IR transform and SPARCv9.

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

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

8 years ago[Codegen] Change PICLevel.
Davide Italiano [Fri, 17 Jun 2016 18:07:14 +0000 (18:07 +0000)]
[Codegen] Change PICLevel.

We convert `Default` to `NotPIC` so that target independent code
can reason about this correctly.

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

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

8 years agoLoopSimplifyCFG: Prefer `const auto &` to `auto &`, for clarity. NFC
Justin Bogner [Fri, 17 Jun 2016 17:59:48 +0000 (17:59 +0000)]
LoopSimplifyCFG: Prefer `const auto &` to `auto &`, for clarity. NFC

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

8 years agoDon't use the new x86 relax relocations on the gold plugin.
Rafael Espindola [Fri, 17 Jun 2016 17:53:57 +0000 (17:53 +0000)]
Don't use the new x86 relax relocations on the gold plugin.

Should bring back the bots with old versions.

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

8 years agoChange RelaxELFRelocations for llc.
Rafael Espindola [Fri, 17 Jun 2016 17:43:41 +0000 (17:43 +0000)]
Change RelaxELFRelocations for llc.

As a developer tool it makes sense for it to use the new relocations.

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

8 years agoChange RelaxELFRelocations' default.
Rafael Espindola [Fri, 17 Jun 2016 17:26:07 +0000 (17:26 +0000)]
Change RelaxELFRelocations' default.

NFC to the existing clients since they all set it already.

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

8 years agoChange the default of -relax-relocations.
Rafael Espindola [Fri, 17 Jun 2016 17:04:56 +0000 (17:04 +0000)]
Change the default of -relax-relocations.

llvm-mc is a developer tool, as such it make sense for it to use new
features by default.

This doesn't change the user facing clang, which still defaults to non
relaxable relocations.

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

8 years ago[InstCombine] allow more than one use for vector bitcast folding with selects
Sanjay Patel [Fri, 17 Jun 2016 16:46:50 +0000 (16:46 +0000)]
[InstCombine] allow more than one use for vector bitcast folding with selects

The motivating example for this transform is similar to D20774 where bitcasts interfere
with a single cmp/select sequence, but in this case we have 2 uses of each bitcast to
produce min and max ops:

define void @minmax_bc_store(<4 x float> %a, <4 x float> %b, <4 x float>* %ptr1, <4 x float>* %ptr2) {
  %cmp = fcmp olt <4 x float> %a, %b
  %bc1 = bitcast <4 x float> %a to <4 x i32>
  %bc2 = bitcast <4 x float> %b to <4 x i32>
  %sel1 = select <4 x i1> %cmp, <4 x i32> %bc1, <4 x i32> %bc2
  %sel2 = select <4 x i1> %cmp, <4 x i32> %bc2, <4 x i32> %bc1
  %bc3 = bitcast <4 x float>* %ptr1 to <4 x i32>*
  store <4 x i32> %sel1, <4 x i32>* %bc3
  %bc4 = bitcast <4 x float>* %ptr2 to <4 x i32>*
  store <4 x i32> %sel2, <4 x i32>* %bc4
  ret void
}

With this patch, we move the selects up to use the input args which allows getting rid of
all of the bitcasts:

define void @minmax_bc_store(<4 x float> %a, <4 x float> %b, <4 x float>* %ptr1, <4 x float>* %ptr2) {
  %cmp = fcmp olt <4 x float> %a, %b
  %sel1.v = select <4 x i1> %cmp, <4 x float> %a, <4 x float> %b
  %sel2.v = select <4 x i1> %cmp, <4 x float> %b, <4 x float> %a
  store <4 x float> %sel1.v, <4 x float>* %ptr1, align 16
  store <4 x float> %sel2.v, <4 x float>* %ptr2, align 16
  ret void
}

The asm for x86 SSE then improves from:

movaps  %xmm0, %xmm2
cmpltps %xmm1, %xmm2
movaps  %xmm2, %xmm3
andnps  %xmm1, %xmm3
movaps  %xmm2, %xmm4
andnps  %xmm0, %xmm4
andps %xmm2, %xmm0
orps  %xmm3, %xmm0
andps %xmm1, %xmm2
orps  %xmm4, %xmm2
movaps  %xmm0, (%rdi)
movaps  %xmm2, (%rsi)

To:

movaps  %xmm0, %xmm2
minps %xmm1, %xmm2
maxps %xmm0, %xmm1
movaps  %xmm2, (%rdi)
movaps  %xmm1, (%rsi)

The TODO comments show that we're limiting this transform only to vectors and only to bitcasts
because we need to improve other transforms or risk creating worse codegen.

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

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

8 years ago[CodeView] Refactor enumerator emission
David Majnemer [Fri, 17 Jun 2016 16:13:21 +0000 (16:13 +0000)]
[CodeView] Refactor enumerator emission

This addresses Amjad's review comments on D21442.

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

8 years ago[codeview] Make function names more consistent with MSVC
Reid Kleckner [Fri, 17 Jun 2016 16:11:20 +0000 (16:11 +0000)]
[codeview] Make function names more consistent with MSVC

Names in function id records don't include nested name specifiers or
template arguments, but names in the symbol stream include both.

For the symbol stream, instead of having Clang put the fully qualified
name in the subprogram display name, recreate it from the subprogram
scope chain. For the type stream, take the unqualified name and chop of
any template arguments.

This makes it so that CodeView DI metadata is more similar to DWARF DI
metadata.

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

8 years agoRefactor and cleanup Assembly Parsing / Lexing
Nirav Dave [Fri, 17 Jun 2016 16:06:17 +0000 (16:06 +0000)]
Refactor and cleanup Assembly Parsing / Lexing

Recommiting after fixing non-atomic insert to front of SmallVector in
MCAsmLexer.h

Add explicit Comment Token in Assembly Lexing for future support for
outputting explicit comments from inline assembly. As part of this,
CPPHash Directives are now explicitly distinguished from Hash line
comments in Lexer.

Line comments are recorded as EndOfStatement tokens, not Comment tokens
to simplify compatibility with current TargetParsers. This slightly
complicates comment output.

This remove all lexing tasks out of the parser, does minor cleanup
to remove extraneous newlines Asm Output, and some improvements white
space handling.

Reviewers: rtrieu, dwmw2, rnk

Subscribers: llvm-commits

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

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

8 years ago[MCContext] Don't use getenv inside class constructor
Igor Laevsky [Fri, 17 Jun 2016 15:19:41 +0000 (15:19 +0000)]
[MCContext] Don't use getenv inside class constructor

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

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

8 years ago[X86][SSE4A] Remove the GCCBuiltins from the movntsd/movntss intrinsic defs so we...
Simon Pilgrim [Fri, 17 Jun 2016 14:27:38 +0000 (14:27 +0000)]
[X86][SSE4A] Remove the GCCBuiltins from the movntsd/movntss intrinsic defs so we can emit native IR from clang.

Clang-side sibling commit to follow.

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

8 years ago[ARM] Strength reduce vectors to arrays.
Benjamin Kramer [Fri, 17 Jun 2016 14:14:29 +0000 (14:14 +0000)]
[ARM] Strength reduce vectors to arrays.

No functionality change intended.

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

8 years ago[PPC] Strength-reduce SmallVectors into arrays.
Benjamin Kramer [Fri, 17 Jun 2016 13:15:10 +0000 (13:15 +0000)]
[PPC] Strength-reduce SmallVectors into arrays.

No functionality change intended.

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

8 years ago[libFuzzer] make the single-run output more reliable
Kostya Serebryany [Fri, 17 Jun 2016 13:07:06 +0000 (13:07 +0000)]
[libFuzzer] make the single-run output more reliable

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

8 years ago[X86] Pre-size several SmallVectors instead of calling push_back in a loop. NFC
Craig Topper [Fri, 17 Jun 2016 12:20:50 +0000 (12:20 +0000)]
[X86] Pre-size several SmallVectors instead of calling push_back in a loop. NFC

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

8 years ago[X86] Fix formatting. NFC
Craig Topper [Fri, 17 Jun 2016 12:20:48 +0000 (12:20 +0000)]
[X86] Fix formatting. NFC

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

8 years ago[LLE] Don't hard-code the name of the preheader in test
Adam Nemet [Fri, 17 Jun 2016 09:13:15 +0000 (09:13 +0000)]
[LLE] Don't hard-code the name of the preheader in test

Turns out a didn't get this right because symbolic stride versioning
changes the name.  Relax the matching.

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

8 years ago[PM] Run clang-format over various parts of the new pass manager code
Chandler Carruth [Fri, 17 Jun 2016 07:15:29 +0000 (07:15 +0000)]
[PM] Run clang-format over various parts of the new pass manager code
prior to some very substantial patches to isolate any formatting-only
changes.

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

8 years agoRevert "InstCombine: Reduce trunc (shl x, K) width."
Matt Arsenault [Fri, 17 Jun 2016 06:28:53 +0000 (06:28 +0000)]
Revert "InstCombine: Reduce trunc (shl x, K) width."

This reverts commit r272987.

This might be causing crashes on some bots.

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

8 years ago[esan|cfrag] Add the struct field size array in StructInfo
Qin Zhao [Fri, 17 Jun 2016 04:50:20 +0000 (04:50 +0000)]
[esan|cfrag] Add the struct field size array in StructInfo

Summary:
Adds the struct field size array in struct StructInfo.

Updates test struct_field_count_basic.ll.

Reviewers: aizatsky

Subscribers: vitalybuka, zhaoqin, kcc, eugenis, bruening, llvm-commits

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

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

8 years agoInstCombine: Reduce trunc (shl x, K) width.
Matt Arsenault [Fri, 17 Jun 2016 04:43:22 +0000 (04:43 +0000)]
InstCombine: Reduce trunc (shl x, K) width.

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

8 years ago[ARM] Add support for mrrc/mrrc2 intrinsics.
Ranjeet Singh [Fri, 17 Jun 2016 00:52:41 +0000 (00:52 +0000)]
[ARM] Add support for mrrc/mrrc2 intrinsics.

Reapplying patch as it was reverted when it was first
committed because of an assertion failure when the
mrrc2 intrinsic was called in ARM mode. The failure
was happening because the instruction was being built
in ARMISelDAGToDAG.cpp and the tablegen description for
mrrc2 instruction doesn't allow you to use a predicate.

The ARM architecture manuals do say that mrrc2 in ARM
mode can be predicated with AL in assembly but this has
no effect on the encoding of the instruction as the top
4 bits will always be 1111 not 1110 which is the encoding
for the condition AL.

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

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

8 years ago[RS4GC] Pass CallSite by value instead of const ref; NFC
Sanjoy Das [Fri, 17 Jun 2016 00:45:00 +0000 (00:45 +0000)]
[RS4GC] Pass CallSite by value instead of const ref; NFC

That's the idiomatic LLVM pattern.

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

8 years ago[PM] Remove support for omitting the AnalysisManager argument to new
Chandler Carruth [Fri, 17 Jun 2016 00:11:01 +0000 (00:11 +0000)]
[PM] Remove support for omitting the AnalysisManager argument to new
pass manager passes' `run` methods.

This removes a bunch of SFINAE goop from the pass manager and just
requires pass authors to accept `AnalysisManager<IRUnitT> &` as a dead
argument. This is a small price to pay for the simplicity of the system
as a whole, despite the noise that changing it causes at this stage.

This will also helpfull allow us to make the signature of the run
methods much more flexible for different kinds af passes to support
things like intelligently updating the pass's progression over IR units.

While this touches many, many, files, the changes are really boring.
Mostly made with the help of my trusty perl one liners.

Thanks to Sean and Hal for bouncing ideas for this with me in IRC.

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

8 years agoUse m_APInt in SimplifyCFG
Chuang-Yu Cheng [Fri, 17 Jun 2016 00:04:39 +0000 (00:04 +0000)]
Use m_APInt in SimplifyCFG

Switch from m_Constant to m_APInt per David's request. NFC.

Author: Thomas Jablin (tjablin)
Reviewers: majnemer cycheng

http://reviews.llvm.org/D21440

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

8 years ago[LV] Move management of symbolic strides to LAA. NFCI
Adam Nemet [Thu, 16 Jun 2016 22:57:55 +0000 (22:57 +0000)]
[LV] Move management of symbolic strides to LAA. NFCI

This is still NFCI, so the list of clients that allow symbolic stride
speculation does not change (yes: LV and LoopVersioningLICM, no: LLE,
LDist).  However since the symbolic strides are now managed by LAA
rather than passed by client a new bool parameter is used to enable
symbolic stride speculation.

The existing test Transforms/LoopVectorize/version-mem-access.ll checks
that stride speculation is performed for LV.

The previously added test Transforms/LoopLoadElim/symbolic-stride.ll
ensures that no speculation is performed for LLE.

The next patch will change the functionality and turn on symbolic stride
speculation in all of LAA's clients and remove the bool parameter.

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

8 years ago[safestack] Sink unsafe address computation to each use.
Evgeniy Stepanov [Thu, 16 Jun 2016 22:34:04 +0000 (22:34 +0000)]
[safestack] Sink unsafe address computation to each use.

This is a fix for PR27844.
When replacing uses of unsafe allocas, emit the new location
immediately after each use. Without this, the pointer stays live from
the function entry to the last use, while it's usually cheaper to
recalculate.

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

8 years ago[safestack] Fixup llvm.dbg.value when rewriting unsafe allocas.
Evgeniy Stepanov [Thu, 16 Jun 2016 22:34:00 +0000 (22:34 +0000)]
[safestack] Fixup llvm.dbg.value when rewriting unsafe allocas.

When moving unsafe allocas to the unsafe stack, dbg.declare intrinsics are
updated to refer to the new location.

This change does the same to dbg.value intrinsics.

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

8 years agoProperly handle short file names on the command line in Windows
Adrian McCarthy [Thu, 16 Jun 2016 22:07:55 +0000 (22:07 +0000)]
Properly handle short file names on the command line in Windows

Some build systems use the short (8.3) file names on Windows, especially if the path has spaces in it. The shortening made it impossible for clang to distinguish between clang.exe, clang++.exe, and clang-cl.exe.  So this expands short names in the first argument and does wildcard expansion for the rest.

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

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

8 years ago[LV] Make getSymbolicStrides return a pointer rather than a reference. NFC
Adam Nemet [Thu, 16 Jun 2016 21:55:10 +0000 (21:55 +0000)]
[LV] Make getSymbolicStrides return a pointer rather than a reference. NFC

Turns out SymbolicStrides is actually used in canVectorizeWithIfConvert
before it gets set up in canVectorizeMemory.

This works fine as long as SymbolicStrides resides in LV since we just
have an empty map.  Based on this the conclusion is made that there are
no symbolic strides which is conservatively correct.

However once SymbolicStrides becomes part of LAI, LAI is nullptr at this
point so we need to differentiate the uninitialized state by returning a
nullptr for SymbolicStrides.

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

8 years agoFix BitVector move ctor/assignment.
Evgeniy Stepanov [Thu, 16 Jun 2016 21:45:13 +0000 (21:45 +0000)]
Fix BitVector move ctor/assignment.

Current implementation leaves the object in an invalid state.

This reverts commit bf0c389ac683cd6c0e5959b16537e59e5f4589e3.

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

8 years agoTTI: Add hook for memory width to vectorize
Matt Arsenault [Thu, 16 Jun 2016 21:43:12 +0000 (21:43 +0000)]
TTI: Add hook for memory width to vectorize

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

8 years ago[CodeView] Implement support for enums
David Majnemer [Thu, 16 Jun 2016 21:32:16 +0000 (21:32 +0000)]
[CodeView] Implement support for enums

MSVC handles enums differently from structs and classes: a forward
declaration is not emitted unconditionally.  MSVC does not emit an S_UDT
record for the enum.

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

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

8 years agoAArch64: Fix range loop contradicting comment above it
Matt Arsenault [Thu, 16 Jun 2016 21:21:49 +0000 (21:21 +0000)]
AArch64: Fix range loop contradicting comment above it

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

8 years agoAMDGPU/SI: Propagate the Kill flag in storeRegToStackSlot and eliminateFrameIndex
Changpeng Fang [Thu, 16 Jun 2016 21:20:47 +0000 (21:20 +0000)]
AMDGPU/SI: Propagate the Kill flag in storeRegToStackSlot and eliminateFrameIndex

Reviewers: arsenm, tstellarAMD

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

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

8 years agoRevert "Refactor and cleanup Assembly Parsing / Lexing"
Nirav Dave [Thu, 16 Jun 2016 21:19:23 +0000 (21:19 +0000)]
Revert "Refactor and cleanup Assembly Parsing / Lexing"

Reverting for unexpected crashes on various platforms.

This reverts commit r272953.

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

8 years agoAMDGPU: Fix maximum instruction size for amdgcn
Matt Arsenault [Thu, 16 Jun 2016 21:14:05 +0000 (21:14 +0000)]
AMDGPU: Fix maximum instruction size for amdgcn

This was causing the conservative estimate of inline asm
size to be twice as big as expected.

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

8 years ago[EarlyCSE] Minor cosmetic NFC changes
Sanjoy Das [Thu, 16 Jun 2016 21:00:57 +0000 (21:00 +0000)]
[EarlyCSE] Minor cosmetic NFC changes

 - Avoid implicit conversion from pointer to bool
 - Add a comment when passing in a boolean value

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

8 years ago[EarlyCSE] Fold invariant loads
Sanjoy Das [Thu, 16 Jun 2016 20:47:57 +0000 (20:47 +0000)]
[EarlyCSE] Fold invariant loads

Redundant invariant loads can be CSE'ed with very little extra effort
over what early-cse already tracks, so it looks reasonable to make
early-cse handle this case.

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

8 years agoRefactor and cleanup Assembly Parsing / Lexing
Nirav Dave [Thu, 16 Jun 2016 20:34:22 +0000 (20:34 +0000)]
Refactor and cleanup Assembly Parsing / Lexing

Add explicit Comment Token in Assembly Lexing for future support for
outputting explicit comments from inline assembly. As part of this,
CPPHash Directives are now explicitly distinguished from Hash line
comments in Lexer.

Line comments are recorded as EndOfStatement tokens, not Comment tokens
to simplify compatibility with current TargetParsers. This slightly
complicates comment output.

This remove all lexing tasks out of the parser, does minor cleanup
to remove extraneous newlines Asm Output, and some improvements white
space handling.

Reviewers: rtrieu, dwmw2, rnk

Subscribers: llvm-commits

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

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

8 years ago[libFuzzer] use the new chainable malloc hooks instead of the old un-chainable ones...
Kostya Serebryany [Thu, 16 Jun 2016 20:17:41 +0000 (20:17 +0000)]
[libFuzzer] use the new chainable malloc hooks instead of the old un-chainable ones, use atomic for malloc/free counters instead of a thread local counter in the main thread. This should make on-the-spot leak detection in libFuzzer more reliable

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

8 years agoFix strip-dead-debug-info test if path contains "bar".
Justin Lebar [Thu, 16 Jun 2016 19:39:55 +0000 (19:39 +0000)]
Fix strip-dead-debug-info test if path contains "bar".

This test checks that the string 'bar' (no quotes) doesn't exist in the
output after running opt.  But opt embeds the absolute path to the
filename, and on my machine, the filename contains the string 'jlebar',
causing the test to fail.

This patch changes the test to look for the string '"bar"' instead.

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

8 years agoMake check lines not match themselves.
Paul Robinson [Thu, 16 Jun 2016 19:38:48 +0000 (19:38 +0000)]
Make check lines not match themselves.
Noticed during review of the recent FileCheck change.

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

8 years agoRefactor more duplicated code.
Rafael Espindola [Thu, 16 Jun 2016 19:30:55 +0000 (19:30 +0000)]
Refactor more duplicated code.

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

8 years agoNFC; refactor getFrameIndexReferenceFromSP
Sanjoy Das [Thu, 16 Jun 2016 18:54:06 +0000 (18:54 +0000)]
NFC; refactor getFrameIndexReferenceFromSP

Summary:
... into getFrameIndexReferencePreferSP.  This change folds the
fail-then-retry logic into getFrameIndexReferencePreferSP.

There is a non-functional but behaviorial change in WinException --
earlier if `getFrameIndexReferenceFromSP` failed we'd trip an assert,
but now we'll silently use the (wrong) offset from the base pointer.  I
could not write the assert I'd like to write ("FrameReg ==
StackRegister", like I've done in X86FrameLowering) since there is no
easy way to get to the stack register from WinException (happy to be
proven wrong here).  One solution to this is to add a `bool
OnlyStackPointer` parameter to `getFrameIndexReferenceFromSP` that
asserts if it could not satisfy its promise of returning an offset from
a stack pointer, but that seems overkill.

Reviewers: rnk

Subscribers: sanjoy, mcrosier, llvm-commits

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

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

8 years agoRefactor duplicated code.
Rafael Espindola [Thu, 16 Jun 2016 18:50:12 +0000 (18:50 +0000)]
Refactor duplicated code.

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

8 years ago[x86] autoupgrade and remove AVX2 integer min/max intrinsics
Sanjay Patel [Thu, 16 Jun 2016 18:44:20 +0000 (18:44 +0000)]
[x86] autoupgrade and remove AVX2 integer min/max intrinsics

This will (hopefully very temporarily) break clang.
The clang side of this should be the next commit.

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

8 years ago[codeview] Use hashBufferV8 to verify all type records.
Rui Ueyama [Thu, 16 Jun 2016 18:39:17 +0000 (18:39 +0000)]
[codeview] Use hashBufferV8 to verify all type records.

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

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

8 years agoResubmit "[pdb] Change type visitor pattern to be dynamic."
Zachary Turner [Thu, 16 Jun 2016 18:22:27 +0000 (18:22 +0000)]
Resubmit "[pdb] Change type visitor pattern to be dynamic."

There was a regression introduced during type stream merging when
visiting a field list record.  This has been fixed in this patch.

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

8 years agodos2unix this test. NFC.
Rafael Espindola [Thu, 16 Jun 2016 18:21:11 +0000 (18:21 +0000)]
dos2unix this test. NFC.

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

8 years agoRevert "[pdb] Change type visitor pattern to be dynamic."
Zachary Turner [Thu, 16 Jun 2016 18:09:04 +0000 (18:09 +0000)]
Revert "[pdb] Change type visitor pattern to be dynamic."

This reverts commit fb0dd311e1ad945827b8ffd5354f4810e2be1579.

This breaks some llvm-readobj tests.

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

8 years ago[pdb] Change type visitor pattern to be dynamic.
Zachary Turner [Thu, 16 Jun 2016 18:00:28 +0000 (18:00 +0000)]
[pdb] Change type visitor pattern to be dynamic.

This allows better catching of compiler errors since we can use
the override keyword to verify that methods are actually
overridden.

Also in this patch I've changed from storing a boolean Error
code everywhere to returning an llvm::Error, to propagate richer
error information up the call stack.

Reviewed By: ruiu, rnk
Differential Revision: http://reviews.llvm.org/D21410

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

8 years ago[PM] Revert the port of MergeLoadStoreMotion to the new pass manager.
Davide Italiano [Thu, 16 Jun 2016 17:40:53 +0000 (17:40 +0000)]
[PM] Revert the port of MergeLoadStoreMotion to the new pass manager.

Daniel Berlin expressed some real concerns about the port and proposed
and alternative approach. I'll revert this for now while working on a
new patch, which I hope to put up for review shortly. Sorry for the churn.

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

8 years ago[DSE] Minor style cleanup. NFC.
Chad Rosier [Thu, 16 Jun 2016 17:06:04 +0000 (17:06 +0000)]
[DSE] Minor style cleanup. NFC.

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

8 years agoremove old FileCheck lines that are no longer used
Sanjay Patel [Thu, 16 Jun 2016 17:04:16 +0000 (17:04 +0000)]
remove old FileCheck lines that are no longer used

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

8 years ago[DAG] Remove redundant FMUL in Newton-Raphson SQRT code
Sanjay Patel [Thu, 16 Jun 2016 16:58:54 +0000 (16:58 +0000)]
[DAG] Remove redundant FMUL in Newton-Raphson SQRT code

When calculating a square root using Newton-Raphson with two constants,
a naive implementation is to use five multiplications (four muls to calculate
reciprocal square root and another one to calculate the square root itself).
However, after some reassociation and CSE the same result can be obtained
with only four multiplications. Unfortunately, there's no reliable way to do
such a reassociation in the back-end. So, the patch modifies NR code itself
so that it directly builds optimal code for SQRT and doesn't rely on any
further reassociation.

Patch by Nikolai Bozhenov!

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

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

8 years agoAMDGPU: Add v_mad 16-bit instructions definition.
Wei Ding [Thu, 16 Jun 2016 16:50:04 +0000 (16:50 +0000)]
AMDGPU: Add v_mad 16-bit instructions definition.

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

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

8 years ago[LLE] New test to check that no versioning for symbolic strides occurs. NFC
Adam Nemet [Thu, 16 Jun 2016 16:45:29 +0000 (16:45 +0000)]
[LLE] New test to check that no versioning for symbolic strides occurs. NFC

This is currently only performed in the Vectorizer.  I will change this
as symbolic stride collection is moved to LAA.

This test will track when the actual functional change occurs.

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

8 years agoLangRef: Note expectations when loading with extra alignment
Matt Arsenault [Thu, 16 Jun 2016 16:33:41 +0000 (16:33 +0000)]
LangRef: Note expectations when loading with extra alignment

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

8 years agoRevert r272891 "[JumpThreading] Prevent dangling pointer problems in BranchProbabilit...
Igor Laevsky [Thu, 16 Jun 2016 16:25:53 +0000 (16:25 +0000)]
Revert r272891 "[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo"

It was causing failures in Profile-i386 and Profile-x86_64 tests.

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

8 years ago[PATCH] Fix RuntimeDyldCOFFI386 to handle relocations with a non-zero addend
Reid Kleckner [Thu, 16 Jun 2016 16:21:41 +0000 (16:21 +0000)]
[PATCH] Fix RuntimeDyldCOFFI386 to handle relocations with a non-zero addend

This fixes IMAGE_REL_I386_DIR32, IMAGE_REL_I386_DIR32NB,
IMAGE_REL_I386_SECREL, and IMAGE_REL_I386_REL32 relocations.

Based on patch by Jon Turney <jon.turney@dronecode.org.uk>

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

8 years agoDon't print (PLT) on arm.
Rafael Espindola [Thu, 16 Jun 2016 16:09:53 +0000 (16:09 +0000)]
Don't print (PLT) on arm.

The R_ARM_PLT32 relocation is deprecated and is not produced by MC.

This means that the code being deleted is dead from the .o point of
view and was making the .s more confusing.

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

8 years ago[x86] autoupgrade and remove SSE2/SSE41 integer min/max intrinsics
Sanjay Patel [Thu, 16 Jun 2016 15:48:30 +0000 (15:48 +0000)]
[x86] autoupgrade and remove SSE2/SSE41 integer min/max intrinsics

Follow-up to:
http://reviews.llvm.org/rL272806
http://reviews.llvm.org/rL272807

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

8 years agoRemove redundant -mattr options from llvm-objdump commands.
Daniel Sanders [Thu, 16 Jun 2016 15:47:19 +0000 (15:47 +0000)]
Remove redundant -mattr options from llvm-objdump commands.

The -mattr options in these four tests have no effect on the output of
llvm-objdump. In the case of the two Mips tests, removing the -mattr option
left duplicate RUN lines so the duplicates have been removed.

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

8 years agoRefactor duplicated code. NFC.
Rafael Espindola [Thu, 16 Jun 2016 15:44:06 +0000 (15:44 +0000)]
Refactor duplicated code. NFC.

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

8 years agoRefactor duplicated code. NFC.
Rafael Espindola [Thu, 16 Jun 2016 15:40:24 +0000 (15:40 +0000)]
Refactor duplicated code. NFC.

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

8 years agoRefactor duplicated code. NFC.
Rafael Espindola [Thu, 16 Jun 2016 15:31:06 +0000 (15:31 +0000)]
Refactor duplicated code. NFC.

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

8 years agoRefactor duplicated code. NFC.
Rafael Espindola [Thu, 16 Jun 2016 15:22:01 +0000 (15:22 +0000)]
Refactor duplicated code. NFC.

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

8 years ago[codeview] Pass CVRecord to visitTypeBegin callback.
Rui Ueyama [Thu, 16 Jun 2016 14:47:23 +0000 (14:47 +0000)]
[codeview] Pass CVRecord to visitTypeBegin callback.

Both parameters to visitTypeBegin are actually members of CVRecord,
so we can just pass CVRecord instead of destructuring it.

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

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

8 years ago[codeview] Remove unused parameter.
Rui Ueyama [Thu, 16 Jun 2016 14:41:22 +0000 (14:41 +0000)]
[codeview] Remove unused parameter.

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

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

8 years ago[mips] Fix small typo. NFC.
Vasileios Kalintiris [Thu, 16 Jun 2016 14:25:13 +0000 (14:25 +0000)]
[mips] Fix small typo. NFC.

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

8 years agoImplement pdb::hashBufferV8 hash function.
Rui Ueyama [Thu, 16 Jun 2016 13:48:16 +0000 (13:48 +0000)]
Implement pdb::hashBufferV8 hash function.

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

8 years ago[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo
Igor Laevsky [Thu, 16 Jun 2016 13:28:25 +0000 (13:28 +0000)]
[JumpThreading] Prevent dangling pointer problems in BranchProbabilityInfo

We should update results of the BranchProbabilityInfo after removing block in JumpThreading. Otherwise
we will get dangling pointer inside BranchProbabilityInfo cache.

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

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

8 years agoRemove redundant namespace specifiers.
Rui Ueyama [Thu, 16 Jun 2016 13:17:59 +0000 (13:17 +0000)]
Remove redundant namespace specifiers.

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

8 years ago[codeview] Use CVTypeVisitor instead of a hand-written switch-cases.
Rui Ueyama [Thu, 16 Jun 2016 13:14:42 +0000 (13:14 +0000)]
[codeview] Use CVTypeVisitor instead of a hand-written switch-cases.

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

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

8 years agoPR27938: Don't remove valid DebugLoc in Scalarizer
Patrik Hagglund [Thu, 16 Jun 2016 10:48:54 +0000 (10:48 +0000)]
PR27938: Don't remove valid DebugLoc in Scalarizer

Added checks to make sure the Scalarizer::transferMetadata() don't
remove valid debug locations from instructions. This is important as
the verifier pass require that e.g. inlinable callsites have a valid
debug location.

https://llvm.org/bugs/show_bug.cgi?id=27938

Patch by Karl-Johan Karlsson

Reviewers: dblaikie

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

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

8 years ago[mips][mips16] Fix machine verifier errors about incorrect register classes on load...
Daniel Sanders [Thu, 16 Jun 2016 10:20:59 +0000 (10:20 +0000)]
[mips][mips16] Fix machine verifier errors about incorrect register classes on load/stores.

Summary:
[ls][bh] and [ls][bh]u cannot use sp-relative addresses and must therefore
lower frameindex nodes such that there is a copy to a CPU16Regs register. This
is now done consistently using a separate addressing mode that does not
permit frameindex nodes.

As part of this I've had to remove an optimization that reduced the number of
instructions needed to work around the lack of sp-relative addresses on [ls][bh]
and [ls][bh]u. This optimization used one of the eight CPU16Regs registers as
a copy of the stack pointer and it's implementation was the root cause of many
of the register vs register class mismatches.

lw/sw can use sp-relative addresses but we ought to ensure that we use the
correct version of lw/sw internally for things like IAS. This is not currently
the case and this change does not fix this. However, this change does clean it
up sufficiently well to fix the machine verifier failures.

Also removed irrelevant functions from stchar.ll.

Reviewers: sdardis

Subscribers: dsanders, sdardis, llvm-commits

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

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

8 years ago[llvm-objdump] Support detection of feature bits from the object and implement this...
Daniel Sanders [Thu, 16 Jun 2016 09:17:03 +0000 (09:17 +0000)]
[llvm-objdump] Support detection of feature bits from the object and implement this for Mips.

Summary:
The Mips implementation only covers the feature bits described by the ELF
e_flags so far. Mips stores additional feature bits such as MSA in the
.MIPS.abiflags section.

Also fixed a small bug this revealed where microMIPS wouldn't add the
EF_MIPS_MICROMIPS flag when using -filetype=obj.

Reviewers: echristo, rafael

Subscribers: rafael, mehdi_amini, dsanders, sdardis, llvm-commits

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

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

8 years ago[LAA] Rename Strides to SymblicStrides in analyzeLoop. NFC
Adam Nemet [Thu, 16 Jun 2016 08:27:03 +0000 (08:27 +0000)]
[LAA] Rename Strides to SymblicStrides in analyzeLoop. NFC

This is to facilitate to move of SymblicStrides from LV to LAA.

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

8 years ago[LAA] Default getInfo to not speculate symbolic strides. NFC
Adam Nemet [Thu, 16 Jun 2016 08:26:56 +0000 (08:26 +0000)]
[LAA] Default getInfo to not speculate symbolic strides. NFC

Soon we won't be passing Strides to getInfo and then we'll have fewer
call sites to update.

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

8 years ago[modules] Combine Pass.h, PassSupport.h and PassAnalysisSupport.h into one module.
Vassil Vassilev [Thu, 16 Jun 2016 08:00:29 +0000 (08:00 +0000)]
[modules] Combine Pass.h, PassSupport.h and PassAnalysisSupport.h into one module.

The header files are designed to be used always together (through Pass.h).

Addresses the first part of https://llvm.org/bugs/show_bug.cgi?id=27991

Patch by Cristina Cristescu and me.

Reviewed by Richard Smith.

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

8 years ago[mips][micromips] Implement DCLO, DCLZ, DROTR, DROTR32 and DROTRV instructions
Hrvoje Varga [Thu, 16 Jun 2016 07:06:25 +0000 (07:06 +0000)]
[mips][micromips] Implement DCLO, DCLZ, DROTR, DROTR32 and DROTRV instructions
Differential Revision: http://reviews.llvm.org/D16917

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

8 years agoAttempt to define friend function more portably.
Sean Silva [Thu, 16 Jun 2016 07:00:19 +0000 (07:00 +0000)]
Attempt to define friend function more portably.

Patch written by Reid. I verified it locally with clang.

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

8 years agoSimplifyCFG is able to detect the pattern:
Chuang-Yu Cheng [Thu, 16 Jun 2016 04:44:25 +0000 (04:44 +0000)]
SimplifyCFG is able to detect the pattern:
    (i == 5334 || i == 5335)
to:
    ((i & -2) == 5334)

This transformation has some incorrect side conditions. Specifically, the
transformation is only applied when the right-hand side constant (5334 in
the example) is a power of two not equal and not equal to the negated mask.
These side conditions were added in r258904 to fix PR26323. The correct side
condition is that: ((Constant & Mask) == Constant)[(5334 & -2) == 5334].

It's a little bit hard to see why these transformations are correct and what
the side conditions ought to be. Here is a CVC3 program to verify them for
64-bit values:
    ONE  : BITVECTOR(64) = BVZEROEXTEND(0bin1, 63);
    x    : BITVECTOR(64);
    y    : BITVECTOR(64);
    z    : BITVECTOR(64);
    mask : BITVECTOR(64) = BVSHL(ONE, z);
    QUERY( (y & ~mask = y) =>
           ((x & ~mask = y) <=> (x = y OR x = (y |  mask)))
    );

Please note that each pattern must be a dual implication (<--> or iff). One
directional implication can create spurious matches. If the implication is
only one-way, an unsatisfiable condition on the left side can imply a
satisfiable condition on the right side. Dual implication ensures that
satisfiable conditions are transformed to other satisfiable conditions and
unsatisfiable conditions are transformed to other unsatisfiable conditions.

Here is a concrete example of a unsatisfiable condition on the left
implying a satisfiable condition on the right:
    mask = (1 << z)
    (x & ~mask) == y --> (x == y || x == (y | mask))

Substituting y = 3, z = 0 yields:
    (x & -2) == 3 --> (x == 3 || x == 2)

The version of this code before r258904 had no side-conditions and
incorrectly justified itself in comments through one-directional
implication.

Thanks to Chandler for the suggestion!

Author: Thomas Jablin (tjablin)
Reviewers: chandlerc majnemer hfinkel cycheng

http://reviews.llvm.org/D21417

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

8 years ago[X86] Pre-size some SmallVectors using the constructor in the shuffle lowering code...
Craig Topper [Thu, 16 Jun 2016 03:58:45 +0000 (03:58 +0000)]
[X86] Pre-size some SmallVectors using the constructor in the shuffle lowering code instead of using push_back. Some of these already did this but used resize or assign instead of the constructor. NFC

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

8 years ago[X86] Remove else after return. NFC
Craig Topper [Thu, 16 Jun 2016 03:58:42 +0000 (03:58 +0000)]
[X86] Remove else after return. NFC

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

8 years ago[X86] Inline a couple lambdas into their callers since they are only used once and...
Craig Topper [Thu, 16 Jun 2016 03:11:00 +0000 (03:11 +0000)]
[X86] Inline a couple lambdas into their callers since they are only used once and it all fits on a single line. NFC

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

8 years ago[InstCombine] Don't widen metadata on store-to-load forwarding
Eli Friedman [Thu, 16 Jun 2016 02:33:42 +0000 (02:33 +0000)]
[InstCombine] Don't widen metadata on store-to-load forwarding

The original check for load CSE or store-to-load forwarding is wrong
when the forwarded stored value happened to be a load.

Ref https://github.com/JuliaLang/julia/issues/16894

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

Patch by Yichao Yu!

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

8 years agoFix test from D21194
Vitaly Buka [Thu, 16 Jun 2016 01:52:48 +0000 (01:52 +0000)]
Fix test from D21194

Bot sets ASAN_OPTIONS=handle_abort=1 which prevents expected crash.

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

8 years agoAArch64: allow MOV (imm) alias to be printed
Tim Northover [Thu, 16 Jun 2016 01:42:25 +0000 (01:42 +0000)]
AArch64: allow MOV (imm) alias to be printed

The backend has been around for years, it's pretty ridiculous that we can't
even use the preferred form for printing "MOV" aliases. Unfortunately, TableGen
can't handle the complex predicates when printing so it's a bunch of nasty C++.
Oh well.

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

8 years ago[codeview] Regenerate test case with unique identifiers
Reid Kleckner [Thu, 16 Jun 2016 01:33:59 +0000 (01:33 +0000)]
[codeview] Regenerate test case with unique identifiers

Clang now emits these, and these match MSVC. Should allow more powerful
merging of type records across TUs.

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

8 years agoDebugging D21194 issues on bot
Vitaly Buka [Thu, 16 Jun 2016 01:26:46 +0000 (01:26 +0000)]
Debugging D21194 issues on bot

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

8 years agoTidy the asm parser: 80-col, whitespace.
Eric Christopher [Thu, 16 Jun 2016 01:00:53 +0000 (01:00 +0000)]
Tidy the asm parser: 80-col, whitespace.

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