platform/upstream/llvm.git
8 years agoFix typo in comment. NFC
Nick Lewycky [Sun, 24 Apr 2016 17:55:57 +0000 (17:55 +0000)]
Fix typo in comment. NFC

llvm-svn: 267354

8 years agoRemove emacs mode markers from .cpp files. NFC
Nick Lewycky [Sun, 24 Apr 2016 17:55:41 +0000 (17:55 +0000)]
Remove emacs mode markers from .cpp files. NFC

.cpp files are unambiguously C++, you only need the mode markers on .h files.

llvm-svn: 267353

8 years ago[X86][InstCombine] Tidyup VPERMILVAR -> shufflevector conversion to helper function...
Simon Pilgrim [Sun, 24 Apr 2016 17:23:46 +0000 (17:23 +0000)]
[X86][InstCombine] Tidyup VPERMILVAR -> shufflevector conversion to helper function. NFCI.

llvm-svn: 267352

8 years ago[X86][InstCombine] Tidyup PSHUFB -> shufflevector conversion to helper function....
Simon Pilgrim [Sun, 24 Apr 2016 17:00:34 +0000 (17:00 +0000)]
[X86][InstCombine] Tidyup PSHUFB -> shufflevector conversion to helper function. NFCI.

llvm-svn: 267351

8 years ago[X86][SSE] getTargetShuffleMaskIndices - dropped (unused) UNDEF handling
Simon Pilgrim [Sun, 24 Apr 2016 16:49:53 +0000 (16:49 +0000)]
[X86][SSE] getTargetShuffleMaskIndices - dropped (unused) UNDEF handling

We aren't currently making use of this in any successful mask decode and its actually incorrect as it inserts the wrong number of SM_SentinelUndef mask elements.

llvm-svn: 267350

8 years ago[X86][SSE] Use range loop. NFCI.
Simon Pilgrim [Sun, 24 Apr 2016 16:33:35 +0000 (16:33 +0000)]
[X86][SSE] Use range loop. NFCI.

llvm-svn: 267349

8 years ago[Lanai] Use EVT::getEVTString() to print a type as a string instead of an enum encodi...
Craig Topper [Sun, 24 Apr 2016 16:30:51 +0000 (16:30 +0000)]
[Lanai] Use EVT::getEVTString() to print a type as a string instead of an enum encoding value.

llvm-svn: 267348

8 years ago[X86][SSE] Added SSSE3/AVX/AVX2 BITREVERSE tests
Simon Pilgrim [Sun, 24 Apr 2016 15:45:06 +0000 (15:45 +0000)]
[X86][SSE] Added SSSE3/AVX/AVX2 BITREVERSE tests

Codegen is pretty bad at the moment but could use PSHUFB quite efficiently

llvm-svn: 267347

8 years ago[X86][XOP] Fixed VPPERM permute op decoding (PR27472).
Simon Pilgrim [Sun, 24 Apr 2016 15:05:04 +0000 (15:05 +0000)]
[X86][XOP] Fixed VPPERM permute op decoding (PR27472).

Fixed issue with VPPERM target shuffle mask decoding that was incorrectly masking off the 3-bit permute op with a 2-bit mask.

llvm-svn: 267346

8 years agoBitcodeReader: Delay metadata parsing until reading a function body
Duncan P. N. Exon Smith [Sun, 24 Apr 2016 15:04:28 +0000 (15:04 +0000)]
BitcodeReader: Delay metadata parsing until reading a function body

There's hardly any functionality change here.  Instead of calling
materializeMetadata on the first call to materialize(GlobalValue*), wait
until the first one that's actually going to do something.  Noticed by
inspection; I don't have a concrete case where this makes a difference.

Added an assertion in materializeMetadata to be sure this (or a future
change) doesn't delay materializeMetadata after function-level metadata.

llvm-svn: 267345

8 years ago[ThinLTO] Remove GlobalValueInfo class from index
Teresa Johnson [Sun, 24 Apr 2016 14:57:11 +0000 (14:57 +0000)]
[ThinLTO] Remove GlobalValueInfo class from index

Summary:
Remove the GlobalValueInfo and change the ModuleSummaryIndex to directly
reference summary objects. The info structure was there to support lazy
parsing of the combined index summary objects, which is no longer
needed and not supported.

Reviewers: joker.eph

Subscribers: joker.eph, llvm-commits

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

llvm-svn: 267344

8 years ago[X86][SSE] Improved support for decoding target shuffle masks through bitcasts
Simon Pilgrim [Sun, 24 Apr 2016 14:53:54 +0000 (14:53 +0000)]
[X86][SSE] Improved support for decoding target shuffle masks through bitcasts

Reused the ability to split constants of a type wider than the shuffle mask to work with masks generated from scalar constants transfered to xmm.

This fixes an issue preventing PSHUFB target shuffle masks decoding rematerialized scalar constants and also exposes the XOP VPPERM bug described in PR27472.

llvm-svn: 267343

8 years agoModuleSummaryIndex: Avoid enum bitfields for MSVC portability
Duncan P. N. Exon Smith [Sun, 24 Apr 2016 14:25:37 +0000 (14:25 +0000)]
ModuleSummaryIndex: Avoid enum bitfields for MSVC portability

Enum bitfields have crazy portability issues with MSVC.  Use unsigned
instead of LinkageTypes here in the ModuleSummaryIndex to address
Takumi's concerns from r267335.

llvm-svn: 267342

8 years agoRevert "Declare GlobalValue::LinkageTypes based on unsigned."
Duncan P. N. Exon Smith [Sun, 24 Apr 2016 14:13:17 +0000 (14:13 +0000)]
Revert "Declare GlobalValue::LinkageTypes based on unsigned."

This reverts commit r267335.  The build has been broken for hours
because of it:

  http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/23352/

The correct fix is avoid using any enum in a bitfield.

llvm-svn: 267341

8 years ago[SystemZ] [SSP] Add support for LOAD_STACK_GUARD.
Marcin Koscielnicki [Sun, 24 Apr 2016 13:57:49 +0000 (13:57 +0000)]
[SystemZ] [SSP] Add support for LOAD_STACK_GUARD.

This fixes PR22248 on s390x.  The previous attempt at this was D19101,
which was before LOAD_STACK_GUARD existed.  Compared to the previous
version, this always emits a rather ugly block of 4 instructions, involving
a thread pointer load that can't be shared with other potential users.
However, this is necessary for SSP - spilling the guard value (or thread
pointer used to load it) is counter to the goal, since it could be
overwritten along with the frame it protects.

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

llvm-svn: 267340

8 years ago[X86][SSE] Demonstrate issue with decoding shuffle masks that have been lowered as...
Simon Pilgrim [Sun, 24 Apr 2016 13:45:30 +0000 (13:45 +0000)]
[X86][SSE] Demonstrate issue with decoding shuffle masks that have been lowered as rematerialized constants on scalar unit

Found whilst investigating PR27472

llvm-svn: 267339

8 years agoImprove diagnostic checking for va_start to also warn on other instances of undefined...
Aaron Ballman [Sun, 24 Apr 2016 13:30:21 +0000 (13:30 +0000)]
Improve diagnostic checking for va_start to also warn on other instances of undefined behavior, such as a parameter declared with the register keyword in C, or a parameter of a type that undergoes default argument promotion.

This helps cover some more of the CERT secure coding rule EXP58-CPP. Pass an object of the correct type to va_start (https://www.securecoding.cert.org/confluence/display/cplusplus/EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start).

llvm-svn: 267338

8 years agoSilence two C4806 warnings ('|': unsafe operation: no value of type 'bool' promoted...
Aaron Ballman [Sun, 24 Apr 2016 13:03:20 +0000 (13:03 +0000)]
Silence two C4806 warnings ('|': unsafe operation: no value of type 'bool' promoted to type 'const unsigned int' can equal the given constant). The fact that they trigger with this code seems like it may be a bug, but the warning itself is still generally useful enough to retain it for now.

llvm-svn: 267337

8 years agoRemove unused iterators [NFC]
Johannes Doerfert [Sun, 24 Apr 2016 12:31:02 +0000 (12:31 +0000)]
Remove unused iterators [NFC]

llvm-svn: 267336

8 years agoDeclare GlobalValue::LinkageTypes based on unsigned.
NAKAMURA Takumi [Sun, 24 Apr 2016 10:11:45 +0000 (10:11 +0000)]
Declare GlobalValue::LinkageTypes based on unsigned.

Or, "LinkageTypes Linkage : 4;" might be sign-extended on msc.

llvm-svn: 267335

8 years agollvm/test/tools/gold/X86/thinlto.ll: Possible fix corresponding to r267318.
NAKAMURA Takumi [Sun, 24 Apr 2016 08:02:00 +0000 (08:02 +0000)]
llvm/test/tools/gold/X86/thinlto.ll: Possible fix corresponding to r267318.

llvm-svn: 267334

8 years ago[ELF] Simplify. Remove unneeded else. NFC.
Davide Italiano [Sun, 24 Apr 2016 07:19:32 +0000 (07:19 +0000)]
[ELF] Simplify. Remove unneeded else. NFC.

llvm-svn: 267333

8 years agoBitcodeReader: Fix some holes in upgrade from r267296
Duncan P. N. Exon Smith [Sun, 24 Apr 2016 06:52:01 +0000 (06:52 +0000)]
BitcodeReader: Fix some holes in upgrade from r267296

Add tests for some missing cases to bitcode upgrade in r267296.

  - DICompositeType with an 'elements:' field, which will cause it to be
    involved in a cycle after the upgrade.

  - A DIDerivedType that references a class in 'extraData:'.

I updated test/Bitcode/dityperefs-3.8.ll with the missing cases and
regenerated test/Bitcode/dityperefs-3.8.ll.bc.

llvm-svn: 267332

8 years ago[X86] Merge LowerCTLZ and LowerCTLZ_ZERO_UNDEF into a single function that branches...
Craig Topper [Sun, 24 Apr 2016 06:27:39 +0000 (06:27 +0000)]
[X86] Merge LowerCTLZ and LowerCTLZ_ZERO_UNDEF into a single function that branches internally for the one difference, allowing the rest of the code to be common. NFC

llvm-svn: 267331

8 years ago[X86] Node need to check if AVX512 is supported when lowering vector CTLZ. The CTLZ...
Craig Topper [Sun, 24 Apr 2016 06:27:35 +0000 (06:27 +0000)]
[X86] Node need to check if AVX512 is supported when lowering vector CTLZ. The CTLZ operation is only Custom for vectors if AVX512 is enabled so if a vector gets here AVX512 is implied. NFC

llvm-svn: 267330

8 years agoAdd "hasSection" flag in the Summary
Mehdi Amini [Sun, 24 Apr 2016 05:31:43 +0000 (05:31 +0000)]
Add "hasSection" flag in the Summary

Reviewers: tejohnson

Subscribers: llvm-commits

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267329

8 years ago[MachineCombiner] Support for floating-point FMA on ARM64 (re-commit r267098)
Gerolf Hoflehner [Sun, 24 Apr 2016 05:14:01 +0000 (05:14 +0000)]
[MachineCombiner] Support for floating-point FMA on ARM64 (re-commit r267098)

The original patch caused crashes because it could derefence a null pointer
for SelectionDAGTargetInfo for targets that do not define it.

Evaluates fmul+fadd -> fmadd combines and similar code sequences in the
machine combiner. It adds support for float and double similar to the existing
integer implementation. The key features are:

- DAGCombiner checks whether it should combine greedily or let the machine
combiner do the evaluation. This is only supported on ARM64.
- It gives preference to throughput over latency: the heuristic used is
to combine always in loops. The targets decides whether the machine
combiner should optimize for throughput or latency.
- Supports for fmadd, f(n)msub, fmla, fmls patterns
- On by default at O3 ffast-math

llvm-svn: 267328

8 years ago[ELF][MIPS] Add test case to check creation of GOT entries for weak symbols. NFC
Simon Atanasyan [Sun, 24 Apr 2016 05:08:43 +0000 (05:08 +0000)]
[ELF][MIPS] Add test case to check creation of GOT entries for weak symbols. NFC

llvm-svn: 267327

8 years ago[X86] Remove isel patterns for selecting tzcnt/lzcnt from cmove/ne+cttz/ctlz. These...
Craig Topper [Sun, 24 Apr 2016 04:38:34 +0000 (04:38 +0000)]
[X86] Remove isel patterns for selecting tzcnt/lzcnt from cmove/ne+cttz/ctlz. These are folded by DAG combine now.

llvm-svn: 267326

8 years ago[CodeGen] Teach DAG combine to fold select_cc seteq X, 0, sizeof(X), ctlz_zero_undef...
Craig Topper [Sun, 24 Apr 2016 04:38:32 +0000 (04:38 +0000)]
[CodeGen] Teach DAG combine to fold select_cc seteq X, 0, sizeof(X), ctlz_zero_undef(X) -> ctlz(X). InstCombine already does this for IR and X86 pattern matches this during isel.

A follow up commit will remove the X86 patterns to allow this to be tested.

llvm-svn: 267325

8 years agoFix an assertion that can never fire because the condition ANDed with the string...
Craig Topper [Sun, 24 Apr 2016 04:38:29 +0000 (04:38 +0000)]
Fix an assertion that can never fire because the condition ANDed with the string is just true or 1.

llvm-svn: 267324

8 years agoELF: Simplify preemption logic. Do not include weak undefined symbols in non-DSOs.
Peter Collingbourne [Sun, 24 Apr 2016 04:29:59 +0000 (04:29 +0000)]
ELF: Simplify preemption logic. Do not include weak undefined symbols in non-DSOs.
Add a test for -Bsymbolic + undefined symbols.

llvm-svn: 267323

8 years agoRevert "Verifier: Verify that each inlinable callsite of a debug-info-bearing function"
Adrian Prantl [Sun, 24 Apr 2016 03:47:37 +0000 (03:47 +0000)]
Revert "Verifier: Verify that each inlinable callsite of a debug-info-bearing function"

This reverts commit r267320 while investigating an OpenMP buildbot failure.

llvm-svn: 267322

8 years agoMake thinlto clang test more robust against LLVM changes.
Mehdi Amini [Sun, 24 Apr 2016 03:44:55 +0000 (03:44 +0000)]
Make thinlto clang test more robust against LLVM changes.

We should just test the effect of the clang level option here, i.e.
that a summary is correctly emitted with -flto=thin

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267321

8 years agoVerifier: Verify that each inlinable callsite of a debug-info-bearing function
Adrian Prantl [Sun, 24 Apr 2016 03:23:02 +0000 (03:23 +0000)]
Verifier: Verify that each inlinable callsite of a debug-info-bearing function
in a debug-info-bearing function has a debug location attached to it. Failure to
do so causes an "!dbg attachment points at wrong subprogram for function"
assertion failure when the inliner sets up inline scope info.

rdar://problem/25878916

llvm-svn: 267320

8 years agoReorganize GlobalValueSummary with a "Flags" bitfield.
Mehdi Amini [Sun, 24 Apr 2016 03:18:18 +0000 (03:18 +0000)]
Reorganize GlobalValueSummary with a "Flags" bitfield.

Right now it only contains the LinkageType, but will be extended
with "hasSection", "isOptSize", "hasInlineAssembly", etc.

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267319

8 years agoAdd a version field in the bitcode for the summary
Mehdi Amini [Sun, 24 Apr 2016 03:18:11 +0000 (03:18 +0000)]
Add a version field in the bitcode for the summary

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267318

8 years agoAdd an internalization step to the ThinLTOCodeGenerator
Mehdi Amini [Sun, 24 Apr 2016 03:18:01 +0000 (03:18 +0000)]
Add an internalization step to the ThinLTOCodeGenerator

Keeping as much as possible internal/private is
known to help the optimizer. Let's try to benefit from
this in ThinLTO.
Note: this is early work, but is enough to build clang (and
all the LLVM tools). I still need to write some lit-tests...

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267317

8 years agoTest what I intended to test.
Peter Collingbourne [Sun, 24 Apr 2016 02:42:34 +0000 (02:42 +0000)]
Test what I intended to test.

llvm-svn: 267316

8 years agoELF: Forbid undefined symbols with non-default visibility in DSOs.
Peter Collingbourne [Sun, 24 Apr 2016 02:31:04 +0000 (02:31 +0000)]
ELF: Forbid undefined symbols with non-default visibility in DSOs.

llvm-svn: 267315

8 years agoELF: Always include undefined DSO symbols in the symbol table.
Peter Collingbourne [Sun, 24 Apr 2016 02:31:02 +0000 (02:31 +0000)]
ELF: Always include undefined DSO symbols in the symbol table.

Fixes check-llvm when bootstrapping.

Also remove mostly dead and most likely incorrect logic regarding preemption
of weak undefined symbols.

llvm-svn: 267314

8 years agoFix a couple assertions that can never fire because the condition ANDed with the...
Craig Topper [Sun, 24 Apr 2016 02:08:22 +0000 (02:08 +0000)]
Fix a couple assertions that can never fire because the condition ANDed with the string is just true or 1.

llvm-svn: 267313

8 years agoFix a couple assertions that can never fire because they just contained the text...
Craig Topper [Sun, 24 Apr 2016 02:01:25 +0000 (02:01 +0000)]
Fix a couple assertions that can never fire because they just contained the text string which always evaluates to true. Add a ! so they'll evaluate to false.

llvm-svn: 267312

8 years ago[X86] Fix patterns that turn cmove/cmovne+ctlz/cttz into lzcnt/tzcnt instructions...
Craig Topper [Sun, 24 Apr 2016 02:01:22 +0000 (02:01 +0000)]
[X86] Fix patterns that turn cmove/cmovne+ctlz/cttz into lzcnt/tzcnt instructions. Only one of the conditions should be valid for each pattern, not both. Update tests accordingly.

llvm-svn: 267311

8 years ago[ELF] Use llvm-mc rather than checking in a file.
Davide Italiano [Sun, 24 Apr 2016 01:56:02 +0000 (01:56 +0000)]
[ELF] Use llvm-mc rather than checking in a file.

Now that the support for the 'new' relocations is available.

llvm-svn: 267310

8 years ago[RuntimeDyldELF] Handle GOTPCRELX/REX_GOTPCRELX.
Davide Italiano [Sun, 24 Apr 2016 01:36:37 +0000 (01:36 +0000)]
[RuntimeDyldELF] Handle GOTPCRELX/REX_GOTPCRELX.

llvm-svn: 267309

8 years ago[MC/ELF] Make the relaxation test more interesting.
Davide Italiano [Sun, 24 Apr 2016 01:08:35 +0000 (01:08 +0000)]
[MC/ELF] Make the relaxation test more interesting.

Add a case where we can't relax.

llvm-svn: 267308

8 years ago[MC/ELF] Implement support for GOTPCRELX/REX_GOTPCRELX.
Davide Italiano [Sun, 24 Apr 2016 01:03:57 +0000 (01:03 +0000)]
[MC/ELF] Implement support for GOTPCRELX/REX_GOTPCRELX.

The option to control the emission of the new relocations
is -relax-relocations (blatantly copied from GNU as).
It can't be enabled by default because it breaks relatively
recent versions of ld.bfd/ld.gold (late 2015).

llvm-svn: 267307

8 years agoRelax test using CHECK-DAG instead of CHECK-NEXT
Mehdi Amini [Sun, 24 Apr 2016 00:25:15 +0000 (00:25 +0000)]
Relax test using CHECK-DAG instead of CHECK-NEXT

It seems we still have some ordering issue in the combined index
emission, but I can't figure out why right now.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267306

8 years agoFix test stability (was sensitive to the path)
Mehdi Amini [Sun, 24 Apr 2016 00:03:57 +0000 (00:03 +0000)]
Fix test stability (was sensitive to the path)

This is a fixup for r267304.
The test was sensitive to the path in a subtle way:
the index in memory is sorted by GUID, which are hashes
that include the source filename for local globals.
Teresa recently added a directive at the IR level, so
we can specify it here to make the test independent of
the path.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267305

8 years agoStore and emit original name in combined index
Mehdi Amini [Sat, 23 Apr 2016 23:38:17 +0000 (23:38 +0000)]
Store and emit original name in combined index

Summary:
As discussed in D18298, some local globals can't
be renamed/promoted (because they have a section, or because
they are referenced from inline assembly).
To be able to detect naming collision, we need to keep around
the "GUID" using their original name without taking the linkage
into account.

Reviewers: tejohnson

Subscribers: joker.eph, llvm-commits

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267304

8 years agoAlways traverse GlobalVariable initializer when computing the export list
Mehdi Amini [Sat, 23 Apr 2016 23:29:24 +0000 (23:29 +0000)]
Always traverse GlobalVariable initializer when computing the export list

Summary:
We are always importing the initializer for a GlobalVariable.
So if a GlobalVariable is in the export-list, we pull in any
refs as well.

Reviewers: tejohnson

Subscribers: llvm-commits

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267303

8 years agoDebugInfo: DIGlobalVariables became 'distinct' in LLVM r267301
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 22:29:26 +0000 (22:29 +0000)]
DebugInfo: DIGlobalVariables became 'distinct' in LLVM r267301

Update testcases due to DIBuilder change.

llvm-svn: 267302

8 years agoDebugInfo: Change DIBuilder to make distinct DIGlobalVariables
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 22:29:09 +0000 (22:29 +0000)]
DebugInfo: Change DIBuilder to make distinct DIGlobalVariables

A long overdue change to make DIGlobalVariable distinct.  Much like
DISubprogram definitions (changed in r246098), it isn't logical to
unique DIGlobalVariable definitions from two different compile units.

(Longer-term, we should also find a way to reverse the link between
GlobalVariable and DIGlobalVariable, and between DIGlobalVariable and
DICompileUnit, so that debug info to do with optimized-out globals
disappears.  Admittedly it's harder than with Function/DISubprogram,
since global variables may be constant-folded and the debug info should
still describe that somehow.)

llvm-svn: 267301

8 years ago[MC/ELF] Pass Fixup to getRelocType64.
Davide Italiano [Sat, 23 Apr 2016 22:26:31 +0000 (22:26 +0000)]
[MC/ELF] Pass Fixup to getRelocType64.

In preparation for other changes.

llvm-svn: 267300

8 years agoBitcodeReader: Avoid std::vector with non-movable types from r267296
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 21:36:59 +0000 (21:36 +0000)]
BitcodeReader: Avoid std::vector with non-movable types from r267296

r267298 didn't quite fix the build errors.  Use SmallVector instead of
std::vector, the latter of which I think is trying to maintain a strong
exception safety guarantee.

http://lab.llvm.org:8011/builders/lldb-amd64-ninja-freebsd11/builds/6228

llvm-svn: 267299

8 years agoBitcodeReader: Avoid non-moving std::piecewise_construct from r267296
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 21:23:41 +0000 (21:23 +0000)]
BitcodeReader: Avoid non-moving std::piecewise_construct from r267296

Not exactly sure why the host tries to use a copy constructor here, but
it's easy enough to work around it.

http://lab.llvm.org:8011/builders/lldb-amd64-ninja-freebsd11/builds/6227

llvm-svn: 267298

8 years agoDebugInfo: Adapt to loss of DITypeRef in LLVM r267296
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 21:08:27 +0000 (21:08 +0000)]
DebugInfo: Adapt to loss of DITypeRef in LLVM r267296

LLVM stopped using MDString-based type references, and DIBuilder no
longer fills 'retainedTypes:' with every DICompositeType that has an
'identifier:' field.   There are just minor changes to keep the same
behaviour in CFE.

Leaving 'retainedTypes:' unfilled has a dramatic impact on the output
order of the IR though.  There are a huge number of testcase changes,
which were unfortunately not really scriptable.

llvm-svn: 267297

8 years agoDebugInfo: Remove MDString-based type references
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 21:08:00 +0000 (21:08 +0000)]
DebugInfo: Remove MDString-based type references

Eliminate DITypeIdentifierMap and make DITypeRef a thin wrapper around
DIType*.  It is no longer legal to refer to a DICompositeType by its
'identifier:', and DIBuilder no longer retains all types with an
'identifier:' automatically.

Aside from the bitcode upgrade, this is mainly removing logic to resolve
an MDString-based reference to an actualy DIType.  The commits leading
up to this have made the implicit type map in DICompileUnit's
'retainedTypes:' field superfluous.

This does not remove DITypeRef, DIScopeRef, DINodeRef, and
DITypeRefArray, or stop using them in DI-related metadata.  Although as
of this commit they aren't serving a useful purpose, there are patchces
under review to reuse them for CodeView support.

The tests in LLVM were updated with deref-typerefs.sh, which is attached
to the thread "[RFC] Lazy-loading of debug info metadata":

  http://lists.llvm.org/pipermail/llvm-dev/2016-April/098318.html

llvm-svn: 267296

8 years agoreplace duplicated static functions for profile metadata access with BranchInst membe...
Sanjay Patel [Sat, 23 Apr 2016 20:01:22 +0000 (20:01 +0000)]
replace duplicated static functions for profile metadata access with BranchInst member function; NFCI

llvm-svn: 267295

8 years agoRevert "[AArch64] Fix optimizeCondBranch logic."
Renato Golin [Sat, 23 Apr 2016 19:30:52 +0000 (19:30 +0000)]
Revert "[AArch64] Fix optimizeCondBranch logic."

This reverts commit r267206, as it broke self-hosting on AArch64.

llvm-svn: 267294

8 years ago[esan] EfficiencySanitizer libc interceptors
Derek Bruening [Sat, 23 Apr 2016 16:41:24 +0000 (16:41 +0000)]
[esan] EfficiencySanitizer libc interceptors

Summary:
Adds libc interceptors to the runtime library for the new
EfficiencySanitizer ("esan") family of tools.  The interceptors cover
the memory operations in most common library calls and will be shared
among all esan tools.

Reviewers: aizatsky

Subscribers: zhaoqin, tberghammer, danalbert, srhines, llvm-commits, vitalybuka, eugenis, kcc

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

llvm-svn: 267293

8 years agoimprove documentation comments; NFC
Sanjay Patel [Sat, 23 Apr 2016 16:31:48 +0000 (16:31 +0000)]
improve documentation comments; NFC

llvm-svn: 267292

8 years agoObjectFile: parse EABI Attributes
Saleem Abdulrasool [Sat, 23 Apr 2016 16:00:15 +0000 (16:00 +0000)]
ObjectFile: parse EABI Attributes

This adds basic parsing of the EABI attributes section.  This section contains
additional information about the target for which the file was built.  Attempt
to infer additional architecture information from that section.

llvm-svn: 267291

8 years agoclang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp: Use raw_string_ostream:...
NAKAMURA Takumi [Sat, 23 Apr 2016 14:54:28 +0000 (14:54 +0000)]
clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp: Use raw_string_ostream::str() to flush the buffer explicitly.

llvm-svn: 267290

8 years agoAdd an invalid domain to memory accesses
Johannes Doerfert [Sat, 23 Apr 2016 14:32:34 +0000 (14:32 +0000)]
Add an invalid domain to memory accesses

  Memory accesses can have non-precisely modeled access functions that
  would cause us to build incorrect execution context for hoisted loads.
  This is the same issue that occurred during the domain construction for
  statements and it is dealt with the same way.

llvm-svn: 267289

8 years agoTranslate SCEVs to isl_pw_aff and their invalid domain
Johannes Doerfert [Sat, 23 Apr 2016 14:31:17 +0000 (14:31 +0000)]
Translate SCEVs to isl_pw_aff and their invalid domain

  The SCEVAffinator will now produce not only the isl representaiton of
  a SCEV but also the domain under which it is invalid. This is used to
  record possible overflows that can happen in the statement domains in
  the statements invalid domain. The result is that invalid loads have
  an accurate execution contexts with regards to the validity of their
  statements domain. While the SCEVAffinator currently is only taking
  "no-wrapping" assumptions, we can add more withouth worrying about the
  execution context of loads that are optimistically hoisted.

llvm-svn: 267288

8 years agoRename a few tests that had typos in their names. No functional change. Thanks to...
Marshall Clow [Sat, 23 Apr 2016 14:31:00 +0000 (14:31 +0000)]
Rename a few tests that had typos in their names. No functional change. Thanks to STL for the catch

llvm-svn: 267287

8 years agoTrack invalid domains not invalid contexts for statements
Johannes Doerfert [Sat, 23 Apr 2016 13:02:23 +0000 (13:02 +0000)]
Track invalid domains not invalid contexts for statements

  The invalid context is not enough to describe the parameter constraints under
  which a statement is not modeled precisely. The reason is that during the
  domain construction the bounds on the induction variables are not known but
  needed to check if e.g., an overflow can actually happen. To this end we
  replace the invalid context of a statement with an invalid domain. It is
  initialized during domain construction and intersected with the domain once
  it was completely build. Later this invalid domain allows to eliminate
  falsely assumed wrapping cases and other falsely assumed mismatches in the
  modeling.

llvm-svn: 267286

8 years agoImprove accuracy of Scop::hasFeasibleRuntimeContext
Johannes Doerfert [Sat, 23 Apr 2016 13:00:27 +0000 (13:00 +0000)]
Improve accuracy of Scop::hasFeasibleRuntimeContext

  If the AssumptionContext is a subset of the InvalidContext the runtime
  context is not feasible.

llvm-svn: 267285

8 years agoSimplify the execution context for dereferencable loads
Johannes Doerfert [Sat, 23 Apr 2016 12:59:18 +0000 (12:59 +0000)]
Simplify the execution context for dereferencable loads

  If we know it is safe to execute a load we do not need an execution
  context, however only if we are sure it was modeled correctly.

llvm-svn: 267284

8 years agoRemove simplification calls for the execution domain [NFC]
Johannes Doerfert [Sat, 23 Apr 2016 12:56:58 +0000 (12:56 +0000)]
Remove simplification calls for the execution domain [NFC]

  These calls were sometimes costly and do not show any improvements on our
  small test cases.

llvm-svn: 267283

8 years ago[X86][XOP] Added VPPERM -> BLEND-WITH-ZERO Test
Simon Pilgrim [Sat, 23 Apr 2016 11:14:18 +0000 (11:14 +0000)]
[X86][XOP] Added VPPERM -> BLEND-WITH-ZERO Test

Currently failing due to poor blend matching, found whilst investigating PR27472

llvm-svn: 267282

8 years agoUse %T instead of cd'ing to Output directly.
Benjamin Kramer [Sat, 23 Apr 2016 11:01:36 +0000 (11:01 +0000)]
Use %T instead of cd'ing to Output directly.

%T expands to Output if not configured differently.

llvm-svn: 267281

8 years ago[CodeGen] When promoting CTTZ operations to larger type, don't insert a select to...
Craig Topper [Sat, 23 Apr 2016 05:20:47 +0000 (05:20 +0000)]
[CodeGen] When promoting CTTZ operations to larger type, don't insert a select to detect if the input is zero to return the original size instead of the extended size. Instead just set the first bit in the zero extended part.

llvm-svn: 267280

8 years ago[gold] Gate value name discarding under save-temps
Teresa Johnson [Sat, 23 Apr 2016 05:15:59 +0000 (05:15 +0000)]
[gold] Gate value name discarding under save-temps

Summary:
This removes a couple of flags added to control this behavior, and
simply keeps all value names when save-temps is specified.

Reviewers: rafael

Subscribers: llvm-commits, pcc, davide

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

llvm-svn: 267279

8 years agoBitcodeWriter: Emit uniqued subgraphs after all distinct nodes
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:59:22 +0000 (04:59 +0000)]
BitcodeWriter: Emit uniqued subgraphs after all distinct nodes

Since forward references for uniqued node operands are expensive (and
those for distinct node operands are cheap due to
DistinctMDOperandPlaceholder), minimize forward references in uniqued
node operands.

Moreover, guarantee that when a cycle is broken by a distinct node, none
of the uniqued nodes have any forward references.  In
ValueEnumerator::EnumerateMetadata, enumerate uniqued node subgraphs
first, delaying distinct nodes until all uniqued nodes have been
handled.  This guarantees that uniqued nodes only have forward
references when there is a uniquing cycle (since r267276 changed
ValueEnumerator::organizeMetadata to partition distinct nodes in front
of uniqued nodes as a post-pass).

Note that a single uniqued subgraph can hit multiple distinct nodes at
its leaves.  Ideally these would themselves be emitted in post-order,
but this commit doesn't attempt that; I think it requires an extra pass
through the edges, which I'm not convinced is worth it (since
DistinctMDOperandPlaceholder makes forward references quite cheap
between distinct nodes).

I've added two testcases:

  - test/Bitcode/mdnodes-distinct-in-post-order.ll is just like
    test/Bitcode/mdnodes-in-post-order.ll, except with distinct nodes
    instead of uniqued ones.  This confirms that, in the absence of
    uniqued nodes, distinct nodes are still emitted in post-order.

  - test/Bitcode/mdnodes-distinct-nodes-break-cycles.ll is the minimal
    example where a naive post-order traversal would cause one uniqued
    node to forward-reference another.  IOW, it's the motivating test.

llvm-svn: 267278

8 years agoAvoid MSVC failure with default arguments in lambdas from r267270
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:52:47 +0000 (04:52 +0000)]
Avoid MSVC failure with default arguments in lambdas from r267270

http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/11700

llvm-svn: 267277

8 years agoBitcodeWriter: Emit distinct nodes before uniqued nodes
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:42:39 +0000 (04:42 +0000)]
BitcodeWriter: Emit distinct nodes before uniqued nodes

When an operand of a distinct node hasn't been read yet, the reader can
use a DistinctMDOperandPlaceholder.  This is much cheaper than forward
referencing from a uniqued node.  Change
ValueEnumerator::organizeMetadata to partition distinct nodes and
uniqued nodes to reduce the overhead of cycles broken by distinct nodes.

Mehdi measured this for me; this removes most of the RAUW from the
importing step of -flto=thin, even after a WIP patch that removes
string-based DITypeRefs (introducing many more cycles to the metadata
graph).

llvm-svn: 267276

8 years agoAdd #ifndef NDEBUG markers around EXPECT_DEATH after r267270
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:34:11 +0000 (04:34 +0000)]
Add #ifndef NDEBUG markers around EXPECT_DEATH after r267270

http://bb.pgr.jp/builders/cmake-llvm-x86_64-linux/builds/36076

llvm-svn: 267275

8 years agoAddress comments.
Teresa Johnson [Sat, 23 Apr 2016 04:31:20 +0000 (04:31 +0000)]
Address comments.

llvm-svn: 267274

8 years agoRefactor bitcode writer into classes (NFC)
Teresa Johnson [Sat, 23 Apr 2016 04:30:47 +0000 (04:30 +0000)]
Refactor bitcode writer into classes (NFC)

Summary:
As discussed in on the mailing list yesterday, I have refactored
BitcodeWriter.cpp to use classes to manage the bitcode writing process,
instead of passing around long lists of parameters between static
functions. See:
  http://lists.llvm.org/pipermail/llvm-dev/2016-April/098610.html

I created a parent BitcodeWriter class to own the BitstreamWriter,
write the header, and contain the main entry point into the writing
process. There are two derived classes, one for writing a module and one
for writing a combined index file (for ThinLTO), which manage the
writing process specific to those bitcode file types.

I also changed the functions to conform to LLVM coding standards
(lowercase function name first letter). The only two routines that still
start with an uppercase letter are the two external interfaces, which
can be fixed as a follow-on (I wanted to keep this round just within
BitcodeWriter.cpp).

Reviewers: dexonsmith, joker.eph

Subscribers: llvm-commits

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

llvm-svn: 267273

8 years agoAvoid ternery statement to please g++ after r267270, NFC
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:23:57 +0000 (04:23 +0000)]
Avoid ternery statement to please g++ after r267270, NFC

http://bb.pgr.jp/builders/cmake-llvm-x86_64-linux/builds/36074

llvm-svn: 267272

8 years agoValueEnumerator: Use std::find_if, NFC
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:22:38 +0000 (04:22 +0000)]
ValueEnumerator: Use std::find_if, NFC

Mehdi's pattern recognition pulled this one out.  This is cleaner with
std::find_if than with the strange helper function that took an iterator
by reference and updated it.

llvm-svn: 267271

8 years agoBitcodeReader: Avoid referencing unresolved nodes from distinct ones
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:15:56 +0000 (04:15 +0000)]
BitcodeReader: Avoid referencing unresolved nodes from distinct ones

Each reference to an unresolved MDNode is expensive, since the RAUW
support in MDNode uses a separate allocation and side map.  Since
a distinct MDNode doesn't require its operands on creation (unlike
uniuqed nodes, there's no need to check for structural equivalence),
use nullptr for any of its unresolved operands.  Besides reducing the
burden on MDNode maps, this can avoid allocating temporary MDNodes in
the first place.

We need some way to track operands.  Invent DistinctMDOperandPlaceholder
for this purpose, which is a Metadata subclass that holds an ID and
points at its single user.  DistinctMDOperandPlaceholder::replaceUseWith
is just like RAUW, but its name highlights that there is only ever
exactly one use.

There is no support for moving (or, obviously, copying) these.  Move
support would be possible but expensive; leaving it unimplemented
prevents user error.  In the BitcodeReader I originally considered
allocating on a BumpPtrAllocator and keeping a vector of pointers to
them, and then I realized that std::deque implements exactly this.

A couple of obvious follow-ups:

  - Change ValueEnumerator to emit distinct nodes first to take more
    advantage of this optimization.  (How convenient... I think I might
    have a couple of patches for this.)

  - Change DIBuilder and its consumers (like CGDebugInfo in clang) to
    use something like this when constructing debug info in the first
    place.

llvm-svn: 267270

8 years agoTag the end of an anonymous namespace, NFC
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:02:39 +0000 (04:02 +0000)]
Tag the end of an anonymous namespace, NFC

Prevent clang-format from moving the closing branch.

llvm-svn: 267269

8 years agoBitcodeReader: Consistently use IsDistinct, NFC
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 04:01:57 +0000 (04:01 +0000)]
BitcodeReader: Consistently use IsDistinct, NFC

Consistently use the IsDistinct variable and start relying on it in
GET_OR_DISTINCT.  This change has NFC, but prepares for using IsDistinct
to optimize the behaviour of the getMD() and getMDOrNull() helpers.

llvm-svn: 267268

8 years agoBitcodeReader: Use getMD/getMDOrNull helpers consistently, almost NFC
Duncan P. N. Exon Smith [Sat, 23 Apr 2016 03:55:14 +0000 (03:55 +0000)]
BitcodeReader: Use getMD/getMDOrNull helpers consistently, almost NFC

The only functionality change was removing an error check from the
BitcodeReader (and an assertion from DILocation::getImpl) that is
already caught by Verifier::visitDILocation.  The Verifier is a better
place for this anyway, and being inconsistent with other subclasses of
MDNode isn't serving anyone.

llvm-svn: 267267

8 years ago[Hexagon] Set ctlz_zero_undef/cttz_zero_undef to Expand so LegalizeDAG will convert...
Craig Topper [Sat, 23 Apr 2016 02:49:31 +0000 (02:49 +0000)]
[Hexagon] Set ctlz_zero_undef/cttz_zero_undef to Expand so LegalizeDAG will convert them to ctlz/cttz. Remove the now unneccessary isel patterns. NFC

llvm-svn: 267266

8 years ago[NVPTX] Set ctlz_zero_undef to Expand so LegalizeDAG will convert it to ctlz. Remove...
Craig Topper [Sat, 23 Apr 2016 02:49:29 +0000 (02:49 +0000)]
[NVPTX] Set ctlz_zero_undef to Expand so LegalizeDAG will convert it to ctlz. Remove the now unneccessary isel patterns. NFC

llvm-svn: 267265

8 years ago[WebAssembly] Set ctlz_zero_undef/cttz_zero_undef to Expand so LegalizeDAG will conve...
Craig Topper [Sat, 23 Apr 2016 02:49:25 +0000 (02:49 +0000)]
[WebAssembly] Set ctlz_zero_undef/cttz_zero_undef to Expand so LegalizeDAG will convert them to ctlz/cttz. Remove the now unneccessary isel patterns. NFC

llvm-svn: 267264

8 years ago[profile] Fix another use of the driver.
Sean Silva [Sat, 23 Apr 2016 02:13:48 +0000 (02:13 +0000)]
[profile] Fix another use of the driver.

Follow-on to r267262.

llvm-svn: 267263

8 years ago[profile] Use cc1 in these tests instead of the driver.
Sean Silva [Sat, 23 Apr 2016 02:11:16 +0000 (02:11 +0000)]
[profile] Use cc1 in these tests instead of the driver.

I ran into this when seeing what tests would break if we make a
driver-level decision about whether FEPGO or IRPGO is the default.

llvm-svn: 267262

8 years agoAdd a file comment about the Ulrich's document and don't repeat it in other comments.
Rui Ueyama [Sat, 23 Apr 2016 01:10:15 +0000 (01:10 +0000)]
Add a file comment about the Ulrich's document and don't repeat it in other comments.

llvm-svn: 267261

8 years agoAdd more comment.
Rui Ueyama [Sat, 23 Apr 2016 01:10:13 +0000 (01:10 +0000)]
Add more comment.

llvm-svn: 267260

8 years agoAdd comments.
Rui Ueyama [Sat, 23 Apr 2016 00:26:32 +0000 (00:26 +0000)]
Add comments.

llvm-svn: 267259

8 years agoStyle fix in Core.h / Core.cpp. NFC
Amaury Sechet [Sat, 23 Apr 2016 00:12:45 +0000 (00:12 +0000)]
Style fix in Core.h / Core.cpp. NFC

llvm-svn: 267257

8 years ago[sanitizer] add a function MmapNoAccess that mmaps a protected region *somewhere...
Kostya Serebryany [Sat, 23 Apr 2016 00:05:24 +0000 (00:05 +0000)]
[sanitizer] add a function MmapNoAccess that mmaps a protected region *somewhere*; use MmapNoAccess in the Allocator when SpaceBeg is not a constant. In this mode the allocator will be a bit more hardened

llvm-svn: 267256

8 years agoUse ScriptParserBase features to parse linker script expressions.
Rui Ueyama [Sat, 23 Apr 2016 00:04:03 +0000 (00:04 +0000)]
Use ScriptParserBase features to parse linker script expressions.

Previously, we have re-implemented utility functions such as `expect`
or `next` in LinkerScript.cpp. This patch reuses the existing
implementation that is in ScriptParser.cpp.

llvm-svn: 267255

8 years ago[clang-tidy] Fix misc-macro-repeated-side-effects false positive with stringified...
Alexander Kornienko [Sat, 23 Apr 2016 00:00:08 +0000 (00:00 +0000)]
[clang-tidy] Fix misc-macro-repeated-side-effects false positive with stringified arguments

llvm-svn: 267254