platform/upstream/llvm.git
7 years agoSkip 2 android test what is broken because of debuggerd
Tamas Berghammer [Fri, 12 Aug 2016 14:17:05 +0000 (14:17 +0000)]
Skip 2 android test what is broken because of debuggerd

debuggerd is a crash reporting system on android what installs some
signal handler for SEGV to print a backtrace in the log. Its behavior
breaks tests where the test tries to continue after a SEGV so we skip
them as this behavior isn't required on android anyway.

llvm-svn: 278510

7 years ago[PM] Port NameAnonFunction pass to new pass manager
Teresa Johnson [Fri, 12 Aug 2016 14:03:36 +0000 (14:03 +0000)]
[PM] Port NameAnonFunction pass to new pass manager

Summary:
Port the NameAnonFunction pass and add a test.

Depends on D23439.

Reviewers: mehdi_amini

Subscribers: llvm-commits, mehdi_amini

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

llvm-svn: 278509

7 years ago[PM] Port ModuleSummaryIndex analysis to new pass manager
Teresa Johnson [Fri, 12 Aug 2016 13:53:02 +0000 (13:53 +0000)]
[PM] Port ModuleSummaryIndex analysis to new pass manager

Summary:
Port the ModuleSummaryAnalysisWrapperPass to the new pass manager.
Use it in the ported BitcodeWriterPass (similar to how we use the
legacy ModuleSummaryAnalysisWrapperPass in the legacy WriteBitcodePass).

Also, pass the -module-summary opt flag through to the new pass
manager pipeline and through to the bitcode writer pass, and add
a test that uses it.

Reviewers: mehdi_amini

Subscribers: llvm-commits, mehdi_amini

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

llvm-svn: 278508

7 years ago[ASTMatchers] Add templateTypeParmDecl() to Registry.cpp
Martin Bohme [Fri, 12 Aug 2016 13:51:00 +0000 (13:51 +0000)]
[ASTMatchers] Add templateTypeParmDecl() to Registry.cpp

Summary:
This appears to have been forgotten when templateTypeParmDecl() was initially
added.

Reviewers: alexfh, aaron.ballman

Subscribers: aaron.ballman, klimek, aemerson, rengolin, samparker, cfe-commits

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

llvm-svn: 278507

7 years ago[Core] Retire yet another unused member function.
Davide Italiano [Fri, 12 Aug 2016 12:37:23 +0000 (12:37 +0000)]
[Core] Retire yet another unused member function.

The code in lib/ could use a lot of love :(

llvm-svn: 278506

7 years ago[Core] Simplify a bit. NFCI.
Davide Italiano [Fri, 12 Aug 2016 12:34:39 +0000 (12:34 +0000)]
[Core] Simplify a bit. NFCI.

llvm-svn: 278505

7 years ago[mips] XFAIL the new mips64el compiler-rt tests that fail on clang-cmake-mipsel.
Daniel Sanders [Fri, 12 Aug 2016 11:56:36 +0000 (11:56 +0000)]
[mips] XFAIL the new mips64el compiler-rt tests that fail on clang-cmake-mipsel.

The mips64el compiler-rt build has recently been enabled. XFAIL the failing
tests to make the buildbot green again.

The two asan tests require the integrated assembler. This will be fixed soon
for Debian mips64el but not for any other mips64el targets since doing so
requires triple-related issues to be fixed..
The msan tests are largely failing because caused by a kernel update (a patch
has already been posted for this).
I'm not sure why the dfsan test fails yet.

llvm-svn: 278504

7 years agoFix Wdocumentation unknown parameter warning
Simon Pilgrim [Fri, 12 Aug 2016 11:43:57 +0000 (11:43 +0000)]
Fix Wdocumentation unknown parameter warning

llvm-svn: 278503

7 years ago[X86][SSE] Add support for combining target shuffles to PSLLDQ/PSRLDQ byte shifts
Simon Pilgrim [Fri, 12 Aug 2016 11:24:34 +0000 (11:24 +0000)]
[X86][SSE] Add support for combining target shuffles to PSLLDQ/PSRLDQ byte shifts

llvm-svn: 278502

7 years agoFix For pr28288 - Error message in shift of vector values
Andrey Bokhanko [Fri, 12 Aug 2016 11:22:12 +0000 (11:22 +0000)]
Fix For pr28288 - Error message in shift of vector values

This fixes an error in type checking of shift of vector values.

Patch by Vladimir Yakovlev.

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

llvm-svn: 278501

7 years agoFix-up r278299 for windows
Pavel Labath [Fri, 12 Aug 2016 11:20:21 +0000 (11:20 +0000)]
Fix-up r278299 for windows

FD_SETSIZE on windows limits the number of file descriptors, rather than their individual
magnitude (the underlying implementation uses an array rather than a bitset). This meant that the
assert in the SelectHelper was incorrect, and failing all the time. Fix that.

I am not sure whether this should be #ifdef MSVC, or #ifdef WINDOWS, but my feeling is that a
more posix-conforming implementation on windows would choose the bitset implementation, so I'm
sticking with the former.

llvm-svn: 278500

7 years ago[Hexagon] Standardize pseudo-instructions for calls and returns
Krzysztof Parzyszek [Fri, 12 Aug 2016 11:12:02 +0000 (11:12 +0000)]
[Hexagon] Standardize pseudo-instructions for calls and returns

- CALLv3nr        PS_call_nr
- CALLRv3nr       PS_callr_nr
- CALLstk         PS_call_stk

- TCRETURNi       PS_tailcall_i
- TCRETURNr       PS_tailcall_r

- JMPret          PS_jmpret
- JMPrett         PS_jmprett
- JMPretf         PS_jmpretf
- JMPrettnew      PS_jmprettnew
- JMPretfnew      PS_jmpretfnew
- JMPrettnewpt    PS_jmprettnewpt
- JMPretfnewpt    PS_jmpretfnewpt

llvm-svn: 278499

7 years ago[Hexagon] Treat non-returning indirect calls as scheduling boundaries
Krzysztof Parzyszek [Fri, 12 Aug 2016 11:01:10 +0000 (11:01 +0000)]
[Hexagon] Treat non-returning indirect calls as scheduling boundaries

llvm-svn: 278498

7 years agoFix cuda-detect.cu when CLANG_DEFAULT_CXX_STDLIB is set
Jonas Hahnfeld [Fri, 12 Aug 2016 10:36:04 +0000 (10:36 +0000)]
Fix cuda-detect.cu when CLANG_DEFAULT_CXX_STDLIB is set

Reported by Ismail Donmez!

llvm-svn: 278497

7 years ago[LVI] Take range metadata into account while calculating icmp condition constraints
Artur Pilipenko [Fri, 12 Aug 2016 10:14:11 +0000 (10:14 +0000)]
[LVI] Take range metadata into account while calculating icmp condition constraints

Take range metadata into account for conditions like this:

%length = load i32, i32* %length_ptr, !range !{i32 0, i32 2147483647}
%cmp = icmp ult i32 %a, %length

This is a common pattern for range checks where the length of the array is dynamically loaded.

Reviewed By: sanjoy

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

llvm-svn: 278496

7 years ago[Webassembly] disable unstable test.
Benjamin Kramer [Fri, 12 Aug 2016 10:13:45 +0000 (10:13 +0000)]
[Webassembly] disable unstable test.

It reads uninitialized memory and crashes randomly.

llvm-svn: 278495

7 years ago[X86][SSE] Fixed PALIGNR target shuffle decode
Simon Pilgrim [Fri, 12 Aug 2016 10:10:51 +0000 (10:10 +0000)]
[X86][SSE] Fixed PALIGNR target shuffle decode

The PALIGNR target shuffle decode was not taking into account that DecodePALIGNRMask (rather oddly) expects the operands to be in reverse order, nor was it detecting unary patterns, causing combines to combine with the incorrect input.

The cgbuiltin, auto upgrade and instruction comments code correctly swap the operands so are not affected.

llvm-svn: 278494

7 years ago[LVI] Handle any predicate in comparisons like icmp <pred> (add Val, Offset), ...
Artur Pilipenko [Fri, 12 Aug 2016 10:05:11 +0000 (10:05 +0000)]
[LVI] Handle any predicate in comparisons like icmp <pred> (add Val, Offset), ...

Currently LVI can only gather value constraints from comparisons like:

* icmp <pred> Val, ...
* icmp ult (add Val, Offset), ...

In fact we can handle any predicate in latter comparisons.

Reviewed By: sanjoy

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

llvm-svn: 278493

7 years ago[Sparc][Leon] Missed resetting option flags from check-in 278489.
Chris Dewhurst [Fri, 12 Aug 2016 09:54:39 +0000 (09:54 +0000)]
[Sparc][Leon] Missed resetting option flags from check-in 278489.

llvm-svn: 278492

7 years agoXFAIL TestNamespaceDefinitions on gcc-4.8 and below
Pavel Labath [Fri, 12 Aug 2016 09:52:14 +0000 (09:52 +0000)]
XFAIL TestNamespaceDefinitions on gcc-4.8 and below

llvm-svn: 278491

7 years agoMake TestCallStopAndContinue clang-format-resilient
Pavel Labath [Fri, 12 Aug 2016 09:39:22 +0000 (09:39 +0000)]
Make TestCallStopAndContinue clang-format-resilient

llvm-svn: 278490

7 years ago[Sparc][Leon] Errata fixes for various errata in different versions of the Leon varia...
Chris Dewhurst [Fri, 12 Aug 2016 09:34:26 +0000 (09:34 +0000)]
[Sparc][Leon] Errata fixes for various errata in different versions of the Leon variants of the Sparc 32 bit processor.

The nature of the errata are listed in the comments preceding the errata fix passes. Relevant unit tests are implemented for each of these.

These changes update older versions of these errata fixes with improvements to code and unit tests.

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

llvm-svn: 278489

7 years agoPrune unused diagnostics. NFC.
Benjamin Kramer [Fri, 12 Aug 2016 09:23:14 +0000 (09:23 +0000)]
Prune unused diagnostics. NFC.

llvm-svn: 278488

7 years ago[C++1z] Fix crash when decomposing structs with anonymous members.
Benjamin Kramer [Fri, 12 Aug 2016 09:19:34 +0000 (09:19 +0000)]
[C++1z] Fix crash when decomposing structs with anonymous members.

The diagnostic format was invalid.

llvm-svn: 278487

7 years ago[ELF] - Linkerscript: reimplemented output sections constrains matching functionality.
George Rimar [Fri, 12 Aug 2016 09:07:57 +0000 (09:07 +0000)]
[ELF] - Linkerscript: reimplemented output sections constrains matching functionality.

Previously filtering that was used worked incorrectly.
For example for next script it would just remove both sections completely:

SECTIONS {
. = 0x1000;
.aaa : ONLY_IF_RW { *(.aaa.*) }
. = 0x2000;
.aaa : ONLY_IF_RO { *(.aaa.*) }
}

Patch fixes above issues and adds testcase showing the issue. Testcase is a subset of
FreeBSD script which has:

.eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
...
.eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }

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

llvm-svn: 278486

7 years ago[Coroutines] Move class into anonymous namespace.
Benjamin Kramer [Fri, 12 Aug 2016 08:47:13 +0000 (08:47 +0000)]
[Coroutines] Move class into anonymous namespace.

Hopefully fixes visibility warnings from GCC. No functionality change.

llvm-svn: 278485

7 years agoRevert "[BranchFolding] Restrict tail merging loop blocks after MBP"
Haicheng Wu [Fri, 12 Aug 2016 08:40:24 +0000 (08:40 +0000)]
Revert "[BranchFolding] Restrict tail merging loop blocks after MBP"

This reverts commit r278463 because it hits the bot.

llvm-svn: 278484

7 years agoThis patch implements PR#22821.
Roger Ferrer Ibanez [Fri, 12 Aug 2016 08:04:13 +0000 (08:04 +0000)]
This patch implements PR#22821.

Taking the address of a packed member is dangerous since the reduced
alignment of the pointee is lost. This can lead to memory alignment
faults in some architectures if the pointer value is dereferenced.

This change adds a new warning to clang emitted when taking the address
of a packed member. A packed member is either a field/data member
declared as attribute((packed)) or belonging to a struct/class
declared as such. The associated flag is -Waddress-of-packed-member.
Conversions (either implicit or via a valid casting) to pointer types
with lower or equal alignment requirements (e.g. void* or char*)
will silence the warning.

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

llvm-svn: 278483

7 years ago[ELF][MIPS] Support .MIPS.abiflags section
Simon Atanasyan [Fri, 12 Aug 2016 06:28:49 +0000 (06:28 +0000)]
[ELF][MIPS] Support .MIPS.abiflags section

This section supersedes .reginfo and .MIPS.options sections. But for now
we have to support all three sections for ABI transition period.

llvm-svn: 278482

7 years ago[Coroutines]: Part6b: Add coro.id intrinsic.
Gor Nishanov [Fri, 12 Aug 2016 05:45:49 +0000 (05:45 +0000)]
[Coroutines]: Part6b: Add coro.id intrinsic.

Summary:
1. Make coroutine representation more robust against optimization that may duplicate instruction by introducing coro.id intrinsics that returns a token that will get fed into coro.alloc and coro.begin. Due to coro.id returning a token, it won't get duplicated and can be used as reliable indicator of coroutine identify when a particular coroutine call gets inlined.
2. Move last three arguments of coro.begin into coro.id as they will be shared if coro.begin will get duplicated.
3. doc + test + code updated to support the new intrinsic.

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 278481

7 years ago[ELF][MIPS] Fix the comment
Simon Atanasyan [Fri, 12 Aug 2016 05:43:42 +0000 (05:43 +0000)]
[ELF][MIPS] Fix the comment

llvm-svn: 278480

7 years agoADT: Remove all ilist_iterator => pointer casts, NFC
Duncan P. N. Exon Smith [Fri, 12 Aug 2016 05:05:36 +0000 (05:05 +0000)]
ADT: Remove all ilist_iterator => pointer casts, NFC

Remove all ilist_iterator to pointer casts.  There were two reasons for
casts:

  - Checking for an uninitialized (i.e., null) iterator.  I added
    MachineInstrBundleIterator::isValid() to check for that case.

  - Comparing an iterator against the underlying pointer value while
    avoiding converting the pointer value to an iterator.  This is
    occasionally necessary in MachineInstrBundleIterator, since there is
    an assertion in the constructors that the underlying MachineInstr is
    not bundled (but we don't care about that if we're just checking for
    pointer equality).

To support the latter case, I rewrote the == and != operators for
ilist_iterator and MachineInstrBundleIterator.

  - The implicit constructors now use enable_if to exclude
    const-iterator => non-const-iterator conversions from overload
    resolution (previously it was a compiler error on instantiation, now
    it's SFINAE).

  - The == and != operators are now global (friends), and are not
    templated.

  - MachineInstrBundleIterator has overloads to compare against both
    const_pointer and const_reference.  This avoids the implicit
    conversions to MachineInstrBundleIterator that assert, instead just
    checking the address (and I added unit tests to confirm this).

Notably, the only remaining uses of ilist_iterator::getNodePtrUnchecked
are in ilist.h, and no code outside of ilist*.h directly relies on this
UB end-iterator-to-pointer conversion anymore.  It's still needed for
ilist_*sentinel_traits, but I'll clean that up soon.

llvm-svn: 278478

7 years agoUse the range variant of transform instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 04:32:45 +0000 (04:32 +0000)]
Use the range variant of transform instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278477

7 years agoUse the range variant of transform instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 04:32:42 +0000 (04:32 +0000)]
Use the range variant of transform instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278476

7 years agoUse the range variant of remove_if instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 04:32:37 +0000 (04:32 +0000)]
Use the range variant of remove_if instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278475

7 years agoUse the range variant of count_if instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 04:32:29 +0000 (04:32 +0000)]
Use the range variant of count_if instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278474

7 years agoAdd comments.
Rui Ueyama [Fri, 12 Aug 2016 04:28:20 +0000 (04:28 +0000)]
Add comments.

llvm-svn: 278473

7 years ago[Sema] Fix the wording of a comment. NFC.
George Burgess IV [Fri, 12 Aug 2016 04:19:35 +0000 (04:19 +0000)]
[Sema] Fix the wording of a comment. NFC.

llvm-svn: 278472

7 years ago[Sema] Fix a crash on variadic enable_if functions.
George Burgess IV [Fri, 12 Aug 2016 04:12:31 +0000 (04:12 +0000)]
[Sema] Fix a crash on variadic enable_if functions.

Currently, when trying to evaluate an enable_if condition, we try to
evaluate all arguments a user passes to a function. Given that we can't
use variadic arguments from said condition anyway, not converting them
is a reasonable thing to do. So, this patch makes us ignore any varargs
when attempting to check an enable_if condition.

We'd crash because, in order to convert an argument, we need its
ParmVarDecl. Variadic arguments don't have ParmVarDecls.

llvm-svn: 278471

7 years agoRename getSizeOfHeaders -> getHeaderSize.
Rui Ueyama [Fri, 12 Aug 2016 04:00:22 +0000 (04:00 +0000)]
Rename getSizeOfHeaders -> getHeaderSize.

We have getSectionSize for SIZEOF command. So, I think
getHeaderSize is a better name for SIZEOF_HEADERS.

llvm-svn: 278470

7 years agoUse the range variant of find/find_if instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 03:55:06 +0000 (03:55 +0000)]
Use the range variant of find/find_if instead of unpacking begin/end

If the result of the find is only used to compare against end(), just
use is_contained instead.

No functionality change is intended.

llvm-svn: 278469

7 years agoCore: Remove custom next-prev traits from SimpleReference, NFC
Duncan P. N. Exon Smith [Fri, 12 Aug 2016 03:35:47 +0000 (03:35 +0000)]
Core: Remove custom next-prev traits from SimpleReference, NFC

There's nothing special about the _next/_prev pointers in
SimpleReference, so just use ilist_node to do the work.

llvm-svn: 278468

7 years agoADT: Add ilist_iterator conversions to/from ilist_node
Duncan P. N. Exon Smith [Fri, 12 Aug 2016 03:35:33 +0000 (03:35 +0000)]
ADT: Add ilist_iterator conversions to/from ilist_node

Allow an ilist_iterator to be constructed from an ilist_node, and give
access to the underlying ilist_node as well.

This will be used immediately in lld to support a type-erasure use case.
Longer term, they'll stick around once the iterator is using
ilist_node<NodeTy>* instead of NodeTy*.

llvm-svn: 278467

7 years agoRecommit 'Remove the restriction that MachineSinking is now stopped by
Wei Mi [Fri, 12 Aug 2016 03:33:22 +0000 (03:33 +0000)]
Recommit 'Remove the restriction that MachineSinking is now stopped by
"insert_subreg, subreg_to_reg, and reg_sequence" instructions' after
adjusting some unittest checks.

This is to solve PR28852. The restriction was added at 2010 to make better register
coalescing. We assumed that it was not necessary any more. Testing results on x86
supported the assumption.

We will look closely to any performance impact it will bring and will be prepared
to help analyzing performance problem found on other architectures.

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

llvm-svn: 278466

7 years agoEarly continue. NFC.
Rui Ueyama [Fri, 12 Aug 2016 03:33:04 +0000 (03:33 +0000)]
Early continue. NFC.

llvm-svn: 278465

7 years agoSimplify LinkerScript<ELFT>::createSections.
Rui Ueyama [Fri, 12 Aug 2016 03:31:09 +0000 (03:31 +0000)]
Simplify LinkerScript<ELFT>::createSections.

Previously, we were setting LayoutInputSection's OutputSection member
in createSections. Because when we create LayoutInputSectinos, we
don't know the output section for them, so we backfilled the member
in the function. This patch moves the code to backfill it to assignOffsets.

llvm-svn: 278464

7 years ago[BranchFolding] Restrict tail merging loop blocks after MBP
Haicheng Wu [Fri, 12 Aug 2016 03:30:23 +0000 (03:30 +0000)]
[BranchFolding] Restrict tail merging loop blocks after MBP

To fix PR28014, this patch restricts tail merging to blocks that belong to the
same loop after MBP.

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

llvm-svn: 278463

7 years agoRemove excessive parentheses.
Rui Ueyama [Fri, 12 Aug 2016 03:25:25 +0000 (03:25 +0000)]
Remove excessive parentheses.

llvm-svn: 278462

7 years agoCreate only one section for a name in LinkerScript.
Rui Ueyama [Fri, 12 Aug 2016 03:16:56 +0000 (03:16 +0000)]
Create only one section for a name in LinkerScript.

Previously, we created two or more output sections if there are
input sections with the same name but with different attributes.
That is a wrong behavior. This patch fixes the issue.

One thing we need to do is to merge output section attributes.
Currently, we create an output section based on the first input
section's attributes. This may make a wrong output section
attributes. What we need to do is to bitwise-OR attributes.
We'll do it in a follow-up patch.

llvm-svn: 278461

7 years agoP0217R3: serialization/deserialization support for c++17 decomposition declarations.
Richard Smith [Fri, 12 Aug 2016 02:21:25 +0000 (02:21 +0000)]
P0217R3: serialization/deserialization support for c++17 decomposition declarations.

llvm-svn: 278460

7 years agoRevert "[VFS] Skip non existent files from the VFS tree"
Bruno Cardoso Lopes [Fri, 12 Aug 2016 02:17:26 +0000 (02:17 +0000)]
Revert "[VFS] Skip non existent files from the VFS tree"

Breaking bots:
http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_check/27281/

This reverts commit r278457.

llvm-svn: 278459

7 years agoP0217R3: template instantiation support for decomposition declarations.
Richard Smith [Fri, 12 Aug 2016 01:55:21 +0000 (01:55 +0000)]
P0217R3: template instantiation support for decomposition declarations.

llvm-svn: 278458

7 years ago[VFS] Skip non existent files from the VFS tree
Bruno Cardoso Lopes [Fri, 12 Aug 2016 01:51:04 +0000 (01:51 +0000)]
[VFS] Skip non existent files from the VFS tree

When the VFS uses a YAML file, the real file path for a
virtual file is described in the "external-contents" field. Example:

  ...
  {
     'type': 'file',
     'name': 'a.h',
     'external-contents': '/a/b/c/a.h'
  }

Currently, when parsing umbrella directories, we use
vfs::recursive_directory_iterator to gather the header files to generate the
equivalent modules for. If the external contents for a header does not exist,
we currently are unable to build a module, since the VFS
vfs::recursive_directory_iterator will fail when it finds an entry without a
reliable real path.

Since the YAML file could be prepared ahead of time and shared among
different compiler invocations, an entry might not yet have a reliable
path in 'external-contents', breaking the iteration.

Give the VFS the capability to skip such entries whenever
'ignore-non-existent-contents' property is set in the YAML file.

rdar://problem/27531549

llvm-svn: 278457

7 years ago[VFS] Add 'ignore-non-existent-contents' field to YAML files
Bruno Cardoso Lopes [Fri, 12 Aug 2016 01:50:53 +0000 (01:50 +0000)]
[VFS] Add 'ignore-non-existent-contents' field to YAML files

Add 'ignore-non-existent-contents' to tell the VFS whether an invalid path
obtained via 'external-contents' should cause iteration on the VFS to stop.

If 'true', the VFS should ignore the entry and continue with the next. Allows
YAML files to be shared across multiple compiler invocations regardless of
prior existent paths in 'external-contents'. This global value is overridable
on a per-file basis.

This adds the parsing and write test part, but use by VFS comes next.

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

rdar://problem/27531549

llvm-svn: 278456

7 years agoWholeProgramDevirt: initialize WasDevirt in all constructors.
Ivan Krasin [Fri, 12 Aug 2016 01:40:10 +0000 (01:40 +0000)]
WholeProgramDevirt: initialize WasDevirt in all constructors.

Summary: This is a follow up to r278389 and r278442.

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

llvm-svn: 278455

7 years ago[CMake] If the compiler supports _Atomic include atomic.c in builtins libraries
Chris Bieneman [Fri, 12 Aug 2016 01:29:26 +0000 (01:29 +0000)]
[CMake] If the compiler supports _Atomic include atomic.c in builtins libraries

This fixes a long-standing TODO by implementing a compiler check for supporting the _Atomic keyword. If the _Atomic keyword is supported by the compiler we should include it in the builtin library sources.

llvm-svn: 278454

7 years agoAllocate LayoutInputSections using SpecificBumpPtrAllocator.
Rui Ueyama [Fri, 12 Aug 2016 01:24:53 +0000 (01:24 +0000)]
Allocate LayoutInputSections using SpecificBumpPtrAllocator.

llvm-svn: 278453

7 years agoSimplify output section ownership management.
Rui Ueyama [Fri, 12 Aug 2016 01:10:17 +0000 (01:10 +0000)]
Simplify output section ownership management.

One reason why we are (ab)using OutputSectionFactory class is
because it owns output sections. Technically there's no need
to have it own sections. So, this patch transfers the ownership
to Out<ELFT>.

llvm-svn: 278452

7 years ago[DSE] Don't remove stores made live by a call which unwinds.
Eli Friedman [Fri, 12 Aug 2016 01:09:53 +0000 (01:09 +0000)]
[DSE] Don't remove stores made live by a call which unwinds.

Issue exposed by noalias or more aggressive alias analysis.

Fixes http://llvm.org/PR25422.

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

llvm-svn: 278451

7 years agoRefactor isValidAssumeForContext to reduce duplication and indentation. NFC.
Pete Cooper [Fri, 12 Aug 2016 01:00:15 +0000 (01:00 +0000)]
Refactor isValidAssumeForContext to reduce duplication and indentation.  NFC.

This method had some duplicate code when we did or did not have a dom tree.  Refactor
it to remove the duplication, but also clean up the control flow to have less duplication.

llvm-svn: 278450

7 years agoRemove OutputSectionBuilder::finalize.
Rui Ueyama [Fri, 12 Aug 2016 00:55:08 +0000 (00:55 +0000)]
Remove OutputSectionBuilder::finalize.

The reason why we had to assign offsets only to sections that
don't contain layout sections were unclear. It turned out that
we can live without it.

llvm-svn: 278449

7 years agoRemove unused and undesirable reference from BindingDecl to DecompositionDecl.
Richard Smith [Fri, 12 Aug 2016 00:53:41 +0000 (00:53 +0000)]
Remove unused and undesirable reference from BindingDecl to DecompositionDecl.

llvm-svn: 278448

7 years agoP0217R3: Constant expression evaluation for decomposition declarations.
Richard Smith [Fri, 12 Aug 2016 00:39:32 +0000 (00:39 +0000)]
P0217R3: Constant expression evaluation for decomposition declarations.

llvm-svn: 278447

7 years agoRemove useless local variable.
Rui Ueyama [Fri, 12 Aug 2016 00:36:56 +0000 (00:36 +0000)]
Remove useless local variable.

llvm-svn: 278446

7 years agoSplit LinkerScript<ELFT>::createSections.
Rui Ueyama [Fri, 12 Aug 2016 00:27:23 +0000 (00:27 +0000)]
Split LinkerScript<ELFT>::createSections.

Also avoid to use a lambda that is called only once.

llvm-svn: 278445

7 years ago[Basic] Add const qualifier to SM.isInSystemMacro (NFC)
Vedant Kumar [Fri, 12 Aug 2016 00:20:39 +0000 (00:20 +0000)]
[Basic] Add const qualifier to SM.isInSystemMacro (NFC)

The member function is a predicate, and doesn't apply any changes on the
object.

Patch by Visoiu Mistrih Francis!

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

llvm-svn: 278444

7 years agoUse the range variant of find_if instead of unpacking begin/end
David Majnemer [Fri, 12 Aug 2016 00:18:03 +0000 (00:18 +0000)]
Use the range variant of find_if instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278443

7 years agoWholeProgramDevirt: fix access to a non-initialized field.
Ivan Krasin [Fri, 12 Aug 2016 00:07:14 +0000 (00:07 +0000)]
WholeProgramDevirt: fix access to a non-initialized field.

Summary: This is a follow up to r278389, where I have introduced the bug

Reviewers: mehdi_amini

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

llvm-svn: 278442

7 years agoDecoupled Options from CommandInterpreter.
Todd Fiala [Thu, 11 Aug 2016 23:51:28 +0000 (23:51 +0000)]
Decoupled Options from CommandInterpreter.

Options used to store a reference to the CommandInterpreter instance
in the base Options class.  This made it impossible to parse options
independent of a CommandInterpreter.

This change removes the reference from the base class.  Instead, it
modifies the options-parsing-related methods to take an
ExecutionContext pointer, which the options may inspect if they need
to do so.

Closes https://reviews.llvm.org/D23416
Reviewers: clayborg, jingham

llvm-svn: 278440

7 years agoReplace a variadic forwarding template function with less complex ones.
Rui Ueyama [Thu, 11 Aug 2016 23:22:52 +0000 (23:22 +0000)]
Replace a variadic forwarding template function with less complex ones.

llvm-svn: 278439

7 years agoAdd comment /NFC
Xinliang David Li [Thu, 11 Aug 2016 23:09:56 +0000 (23:09 +0000)]
Add comment /NFC

llvm-svn: 278438

7 years ago[ADT] Migrate DepthFirstIterator to use NodeRef
Tim Shen [Thu, 11 Aug 2016 22:36:16 +0000 (22:36 +0000)]
[ADT] Migrate DepthFirstIterator to use NodeRef

Summary:
Notice that the data layout is changed: instead of using
std::pair<PointerIntPair<NodeType*, 1>, ChildItTy>, now use
std::pair<NodeRef, Optional<ChildItTy>>.

A NFC but worth noticing change is operator==(), since we only compare
an iterator against end(), it's better to put an assert there and make
people noticed when it fails.

Reviewers: dblaikie, chandlerc

Subscribers: mzolotukhin, llvm-commits

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

llvm-svn: 278437

7 years agoFix typos /NFC
Xinliang David Li [Thu, 11 Aug 2016 22:34:00 +0000 (22:34 +0000)]
Fix typos /NFC

llvm-svn: 278436

7 years agoP0217R3: Perform semantic checks and initialization for the bindings in a
Richard Smith [Thu, 11 Aug 2016 22:25:46 +0000 (22:25 +0000)]
P0217R3: Perform semantic checks and initialization for the bindings in a
decomposition declaration for arrays, aggregate-like structs, tuple-like
types, and (as an extension) for complex and vector types.

llvm-svn: 278435

7 years agoRemove unnecessary extra version of isValidAssumeForContext. NFC.
Pete Cooper [Thu, 11 Aug 2016 22:23:07 +0000 (22:23 +0000)]
Remove unnecessary extra version of isValidAssumeForContext.  NFC.

There were 2 versions of this method.  A public one which takes a
const Instruction* and a private implementation which takes a mutable
Value* and casts to an Instruction*.

There was no need for the 2 versions as all callers pass a const Instruction*
and there was no need for a mutable pointer as we only do analysis here.

llvm-svn: 278434

7 years agoUse the range variant of find instead of unpacking begin/end
David Majnemer [Thu, 11 Aug 2016 22:21:41 +0000 (22:21 +0000)]
Use the range variant of find instead of unpacking begin/end

If the result of the find is only used to compare against end(), just
use is_contained instead.

No functionality change is intended.

llvm-svn: 278433

7 years agoDon't import variadic functions
Piotr Padlewski [Thu, 11 Aug 2016 22:13:57 +0000 (22:13 +0000)]
Don't import variadic functions

Summary:
This patch adds IsVariadicFunction bit to summary in order
to not import variadic functions. Inliner doesn't inline
variadic functions because it is hard to reason about it.

This one small fix improves Importer by about 16%
(going from 86% to 100% of imported functions that are
inlined anywhere)
on some spec benchmarks like 'int' and others.

Reviewers: eraman, mehdi_amini, tejohnson

Subscribers: mehdi_amini, llvm-commits

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

llvm-svn: 278432

7 years agoX86-FMA3: Implemented commute transformation for EVEX/AVX512 FMA3 opcodes.
Vyacheslav Klochkov [Thu, 11 Aug 2016 22:07:33 +0000 (22:07 +0000)]
X86-FMA3: Implemented commute transformation for EVEX/AVX512 FMA3 opcodes.
This helped to improved memory-folding and register coalescing optimizations.

Also, this patch fixed the tracker #17229.

Reviewer: Craig Topper.
Differential Revision: https://reviews.llvm.org/D23108

llvm-svn: 278431

7 years agoMake class hierarchy more shallow.
Rui Ueyama [Thu, 11 Aug 2016 22:06:55 +0000 (22:06 +0000)]
Make class hierarchy more shallow.

LayoutInputSection is a dummy class and does not need any features
that the actual implementation (InputSection class) provides.

llvm-svn: 278430

7 years agoRe-commit r278066: Do not ignore SizeOfOptionalHeader in COFF header even if PE heade...
Rui Ueyama [Thu, 11 Aug 2016 22:02:44 +0000 (22:02 +0000)]
Re-commit r278066: Do not ignore SizeOfOptionalHeader in COFF header even if PE header is not present.

llvm-svn: 278429

7 years agoGlobalISel: support 'null' constant in translation.
Tim Northover [Thu, 11 Aug 2016 21:40:55 +0000 (21:40 +0000)]
GlobalISel: support 'null' constant in translation.

It's sharing the integer G_CONSTANT for now since I don't *think* it creates
any ambiguity (even on weird archs). If that turns out wrong we can create a
G_PTRCONSTANT or something.

llvm-svn: 278423

7 years agoExtend trip count instead of truncating IV in LFTR, when legal
Ehsan Amiri [Thu, 11 Aug 2016 21:31:40 +0000 (21:31 +0000)]
Extend trip count instead of truncating IV in LFTR, when legal

When legal, extending trip count in the loop control logic generates better code compared to truncating IV. This is because

(1) extending trip count is a loop invariant operation (see genLoopLimit where we prove trip count is loop invariant).
(2) Scalar Evolution seems to have problems understanding trunc when computing loop trip count. So removing them allows better analysis performed in Scalar Evolution. (In particular this fixes PR 28363 which is the motivation for this change).

I am not going to perform any performance test. Any degradation caused by this should be an indication of a bug elsewhere.

To prove legality, we rely on SCEV to prove zext(trunc(IV)) == IV (or similarly for sext). If this holds, we can prove equivalence of trunc(IV)==ExitCnt (1) and IV == zext(ExitCnt). Simply take zext of boths sides of (1) and apply the proven equivalence.

This commit contains changes in a newly added testcase which was not included in the previous commit (which was reverted later on).

https://reviews.llvm.org/D23075

llvm-svn: 278421

7 years agoRemove trailing whitespace.
Rui Ueyama [Thu, 11 Aug 2016 21:30:42 +0000 (21:30 +0000)]
Remove trailing whitespace.

llvm-svn: 278420

7 years agoDead strip DESC bits should only be set on object files.
Pete Cooper [Thu, 11 Aug 2016 21:27:18 +0000 (21:27 +0000)]
Dead strip DESC bits should only be set on object files.

It only makes sense to set on N_NO_DEAD_STRIP on a relocatable object file.  Otherwise the bits aren't useful for anything.  Matches the ld64 behaviour.

llvm-svn: 278419

7 years ago[MSSA] Use is_contained
Daniel Berlin [Thu, 11 Aug 2016 21:26:50 +0000 (21:26 +0000)]
[MSSA] Use is_contained

llvm-svn: 278418

7 years agoUse range algorithms instead of unpacking begin/end
David Majnemer [Thu, 11 Aug 2016 21:15:00 +0000 (21:15 +0000)]
Use range algorithms instead of unpacking begin/end

No functionality change is intended.

llvm-svn: 278417

7 years ago[Hexagon] Allow non-returning calls in hardware loops
Krzysztof Parzyszek [Thu, 11 Aug 2016 21:14:25 +0000 (21:14 +0000)]
[Hexagon] Allow non-returning calls in hardware loops

llvm-svn: 278416

7 years ago[vim] Add more attributes to llvm.vim
David Majnemer [Thu, 11 Aug 2016 21:14:05 +0000 (21:14 +0000)]
[vim] Add more attributes to llvm.vim

llvm-svn: 278415

7 years agoAMDGPU: Remove unused tablegen utilities
Matt Arsenault [Thu, 11 Aug 2016 21:08:43 +0000 (21:08 +0000)]
AMDGPU: Remove unused tablegen utilities

llvm-svn: 278414

7 years ago[SCEV] Update interface to handle SCEVExpander insert point motion.
Geoff Berry [Thu, 11 Aug 2016 21:05:17 +0000 (21:05 +0000)]
[SCEV] Update interface to handle SCEVExpander insert point motion.

Summary:
This is an extension of the fix in r271424.  That fix dealt with builder
insert points being moved by SCEV expansion, but only for the lifetime
of the expand call.  This change modifies the interface so that LSR can
safely call expand multiple times at the same insert point and do the
right thing if one of the expansions decides to move the original insert
point.

This is a fix for PR28719.

Reviewers: sanjoy

Subscribers: llvm-commits, mcrosier, mzolotukhin

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

llvm-svn: 278413

7 years agoAdd obj2yaml to the list of tool_patterns in lit. NFC
Pete Cooper [Thu, 11 Aug 2016 21:03:56 +0000 (21:03 +0000)]
Add obj2yaml to the list of tool_patterns in lit.  NFC

llvm-svn: 278412

7 years agoRemove empty file left by partial reversion.
Tim Northover [Thu, 11 Aug 2016 21:01:15 +0000 (21:01 +0000)]
Remove empty file left by partial reversion.

llvm-svn: 278411

7 years agoGlobalISel: add translation support for shift operations.
Tim Northover [Thu, 11 Aug 2016 21:01:13 +0000 (21:01 +0000)]
GlobalISel: add translation support for shift operations.

llvm-svn: 278410

7 years agoGlobalISel: support zext & sext during translation phase.
Tim Northover [Thu, 11 Aug 2016 21:01:10 +0000 (21:01 +0000)]
GlobalISel: support zext & sext during translation phase.

llvm-svn: 278409

7 years agoAdd comments.
Rui Ueyama [Thu, 11 Aug 2016 21:00:02 +0000 (21:00 +0000)]
Add comments.

llvm-svn: 278408

7 years agoBetter compress lazy binding info to match ld64.
Pete Cooper [Thu, 11 Aug 2016 20:59:27 +0000 (20:59 +0000)]
Better compress lazy binding info to match ld64.

We should be using one of BIND_OPCODE_SET_DYLIB_SPECIAL_IMM, BIND_OPCODE_SET_DYLIB_ORDINAL_IMM,
and BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB depending on whether ordinals are <= 0, <= 15, > 15.

This matches the behaviour of ld64.

llvm-svn: 278407

7 years agoFix type truncation warnings
Teresa Johnson [Thu, 11 Aug 2016 20:38:39 +0000 (20:38 +0000)]
Fix type truncation warnings

Avoid type truncation warnings from a 32-bit bot due to size_t not
being unsigned long long, by converting the variables and constants to
unsigned. This was introduced by r278338 and caused warnings here:
http://bb.pgr.jp/builders/i686-mingw32-RA-on-linux/builds/15527/steps/build_llvmclang/logs/warnings%20%287%29

llvm-svn: 278406

7 years agoGenerate slightly more compressed binding opcodes when entries are the same as last...
Pete Cooper [Thu, 11 Aug 2016 20:37:02 +0000 (20:37 +0000)]
Generate slightly more compressed binding opcodes when entries are the same as last time.

We already had logic for binding opcodes had the same addend as last time.  This adds
the cases where the ordinal, symbol name, type, and segment offsets are the same as
the last emitted ordinal.

This gets us one step closer to emitting rebase opcodes as compressed as ld64 can manage.

llvm-svn: 278405

7 years agoMove GVNHoist tests into their own directory since it is a separate pass
Daniel Berlin [Thu, 11 Aug 2016 20:35:07 +0000 (20:35 +0000)]
Move GVNHoist tests into their own directory since it is a separate pass

llvm-svn: 278404

7 years agoAMDGPU : Add intrinsic for instruction v_cvt_pk_u8_f32
Wei Ding [Thu, 11 Aug 2016 20:34:48 +0000 (20:34 +0000)]
AMDGPU : Add intrinsic for instruction v_cvt_pk_u8_f32

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

llvm-svn: 278403