platform/upstream/llvm.git
8 years agoRe-commit "Introduce a cmake module to figure out whether we need to link with libato...
Vasileios Kalintiris [Thu, 11 Feb 2016 12:43:04 +0000 (12:43 +0000)]
Re-commit "Introduce a cmake module to figure out whether we need to link with libatomic."

This re-applies commit r260235. However, this time we add -gcc-toolchain
to the compiler's flags when the user has specified the LIBCXX_GCC_TOOLCHAIN
variable.

llvm-svn: 260515

8 years agoTeach __hash_table how to handle unordered_map's __hash_value_type.
Eric Fiselier [Thu, 11 Feb 2016 12:25:27 +0000 (12:25 +0000)]
Teach __hash_table how to handle unordered_map's __hash_value_type.

This patch is fairly large and contains a number of changes. The main change
is teaching '__hash_table' how to handle '__hash_value_type'. Unfortunately
this change is a rampant layering violation, but it's required to make
unordered_map conforming without re-writing all of __hash_table.
After this change 'unordered_map' can delegate to '__hash_table' in almost all cases.

The major changes found in this patch are:

  * Teach __hash_table to differentiate between the true container value type
    and the node value type by introducing the "__container_value_type" and
    "__node_value_type" typedefs. In the case of unordered_map '__container_value_type'
    is 'pair<const Key, Value>' and '__node_value_type' is '__hash_value_type'.

  * Switch almost all overloads in '__hash_table' previously taking 'value_type'
    (AKA '__node_value_type) to take  '__container_value_type' instead. Previously
    'pair<K, V>' would be implicitly converted to '__hash_value_type<K, V>' because
    of the function signature.

  * Add '__get_key', '__get_value', '__get_ptr', and '__move' static functions to
    '__key_value_types'. These functions allow '__hash_table' to unwrap
    '__node_value_type' objects into '__container_value_type' and its sub-parts.

  * Pass  '__hash_value_type::__value_'  to 'a.construct(p, ...)' instead of
    '__hash_value_type' itself. The C++14 standard requires that 'a.construct()'
    and 'a.destroy()' are only ever instantiated for the containers value type.

  * Remove '__hash_value_type's constructors and destructors. We should never
    construct an instance of this type.
    (TODO this is UB but we already do it in plenty of places).

  * Add a generic "try-emplace" function to '__hash_table' called
    '__emplace_unique_key_args(Key const&, Args...)'.

The following changes were done as cleanup:

  * Introduce the '_LIBCPP_CXX03_LANG' macro to be used in place of
    '_LIBCPP_HAS_NO_VARIADICS' or '_LIBCPP_HAS_NO_RVALUE_REFERENCE'.

  * Cleanup C++11 only overloads that assume an incomplete C++11 implementation.
    For example this patch removes the __construct_node overloads that do
    manual pack expansion.

  * Forward 'unordered_map::emplace' to '__hash_table' and remove dead code
    resulting from the change. This includes almost all
    'unordered_map::__construct_node' overloads.

The following changes are planed for future revisions:

  * Fix LWG issue #2469 by delegating 'unordered_map::operator[]' to use
    '__emplace_unique_key_args'.

  * Rewrite 'unordered_map::try_emplace' in terms of '__emplace_unique_key_args'.

  * Optimize '__emplace_unique' to call '__emplace_unique_key_args' when possible.
    This prevent unneeded allocations when inserting duplicate entries.

The additional follow up work needed after this patch:

  * Respect the lifetime rules for '__hash_value_type' by actually constructing it.
  * Make '__insert_multi' act similar to '__insert_unique' for objects of type
    'T&' and 'T const &&' with 'T = __container_value_type'.

llvm-svn: 260514

8 years agoTeach __hash_table how to handle unordered_map's __hash_value_type.
Eric Fiselier [Thu, 11 Feb 2016 11:59:44 +0000 (11:59 +0000)]
Teach __hash_table how to handle unordered_map's __hash_value_type.

This patch is fairly large and contains a number of changes. The main change
is teaching '__hash_table' how to handle '__hash_value_type'. Unfortunately
this change is a rampant layering violation, but it's required to make
unordered_map conforming without re-writing all of __hash_table.
After this change 'unordered_map' can delegate to '__hash_table' in almost all cases.

The major changes found in this patch are:

  * Teach __hash_table to differentiate between the true container value type
    and the node value type by introducing the "__container_value_type" and
    "__node_value_type" typedefs. In the case of unordered_map '__container_value_type'
    is 'pair<const Key, Value>' and '__node_value_type' is '__hash_value_type'.

  * Switch almost all overloads in '__hash_table' previously taking 'value_type'
    (AKA '__node_value_type) to take  '__container_value_type' instead. Previously
    'pair<K, V>' would be implicitly converted to '__hash_value_type<K, V>' because
    of the function signature.

  * Add '__get_key', '__get_value', '__get_ptr', and '__move' static functions to
    '__key_value_types'. These functions allow '__hash_table' to unwrap
    '__node_value_type' objects into '__container_value_type' and its sub-parts.

  * Pass  '__hash_value_type::__value_'  to 'a.construct(p, ...)' instead of
    '__hash_value_type' itself. The C++14 standard requires that 'a.construct()'
    and 'a.destroy()' are only ever instantiated for the containers value type.

  * Remove '__hash_value_type's constructors and destructors. We should never
    construct an instance of this type.
    (TODO this is UB but we already do it in plenty of places).

  * Add a generic "try-emplace" function to '__hash_table' called
    '__emplace_unique_key_args(Key const&, Args...)'.

The following changes were done as cleanup:

  * Introduce the '_LIBCPP_CXX03_LANG' macro to be used in place of
    '_LIBCPP_HAS_NO_VARIADICS' or '_LIBCPP_HAS_NO_RVALUE_REFERENCE'.

  * Cleanup C++11 only overloads that assume an incomplete C++11 implementation.
    For example this patch removes the __construct_node overloads that do
    manual pack expansion.

  * Forward 'unordered_map::emplace' to '__hash_table' and remove dead code
    resulting from the change. This includes almost all
    'unordered_map::__construct_node' overloads.

The following changes are planed for future revisions:

  * Fix LWG issue #2469 by delegating 'unordered_map::operator[]' to use
    '__emplace_unique_key_args'.

  * Rewrite 'unordered_map::try_emplace' in terms of '__emplace_unique_key_args'.

  * Optimize '__emplace_unique' to call '__emplace_unique_key_args' when possible.
    This prevent unneeded allocations when inserting duplicate entries.

The additional follow up work needed after this patch:

  * Respect the lifetime rules for '__hash_value_type' by actually constructing it.
  * Make '__insert_multi' act similar to '__insert_unique' for objects of type
    'T&' and 'T const &&' with 'T = __container_value_type'.

llvm-svn: 260513

8 years agoHandle floating-point type homogeneous aggregate return values in ABISysV_arm
Omair Javaid [Thu, 11 Feb 2016 11:41:22 +0000 (11:41 +0000)]
Handle floating-point type homogeneous aggregate return values in ABISysV_arm

For details refer to review link given below.

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

llvm-svn: 260512

8 years agoFix MSVC 2013 build after rL260504
Tamas Berghammer [Thu, 11 Feb 2016 11:27:51 +0000 (11:27 +0000)]
Fix MSVC 2013 build after rL260504

llvm-svn: 260511

8 years ago[MCU] Fix assertion failure on function returning empty union.
Denis Zobnin [Thu, 11 Feb 2016 11:26:03 +0000 (11:26 +0000)]
[MCU] Fix assertion failure on function returning empty union.

Treat empty struct/union in return type as void for MCU ABI. PR26438.

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

llvm-svn: 260510

8 years agoDon't propagate dereferenceable attribute through gc.relocate in InstCombine
Artur Pilipenko [Thu, 11 Feb 2016 11:22:46 +0000 (11:22 +0000)]
Don't propagate dereferenceable attribute through gc.relocate in InstCombine

Reviewed By: reames

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

llvm-svn: 260509

8 years ago[ELF] - Remove R_X86_64_GOTTPOFF from static relocation processing
George Rimar [Thu, 11 Feb 2016 11:14:46 +0000 (11:14 +0000)]
[ELF] - Remove R_X86_64_GOTTPOFF from static relocation processing

R_X86_64_TPOFF64 is a dynamic relocation,
it should not appear in static relocation processing.
Patch fixes it.

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

llvm-svn: 260508

8 years ago[X86] Enable the LEA optimization pass by default.
Andrey Turetskiy [Thu, 11 Feb 2016 10:51:26 +0000 (10:51 +0000)]
[X86] Enable the LEA optimization pass by default.

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

llvm-svn: 260507

8 years agoUpdate of "GCC extensions not implemented yet" in Clang User's Manual
Andrey Bokhanko [Thu, 11 Feb 2016 10:36:06 +0000 (10:36 +0000)]
Update of "GCC extensions not implemented yet" in Clang User's Manual

#pragma weak, global register variables and static initialization of flexible
array members are supported now, so they are removed from "GCC extensions not
implemented yet" list.

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

llvm-svn: 260506

8 years ago[clang-tidy] Fix an assert failure in 'readability-braces-around-statements' check.
Haojian Wu [Thu, 11 Feb 2016 09:57:55 +0000 (09:57 +0000)]
[clang-tidy] Fix an assert failure in 'readability-braces-around-statements' check.

Summary:
The check will trigger a assert failure("CondEndLoc.isValid") when
checking the IfStmt whose condition expression is not parsed.

In this case, we should ignore that.

Reviewers: alexfh

Subscribers: cfe-commits

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

llvm-svn: 260505

8 years agoFixed typo in comment & coding style for LoopVersioningLICM.
Ashutosh Nema [Thu, 11 Feb 2016 09:23:53 +0000 (09:23 +0000)]
Fixed typo in comment & coding style for LoopVersioningLICM.

llvm-svn: 260504

8 years ago[clang-tidy] Add a check to find unintended semicolons that changes the semantics.
Gabor Horvath [Thu, 11 Feb 2016 09:23:33 +0000 (09:23 +0000)]
[clang-tidy] Add a check to find unintended semicolons that changes the semantics.

Reviewers: hokein, alexfh

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

llvm-svn: 260503

8 years ago[TableGen] Use range-based for loops. NFC
Craig Topper [Thu, 11 Feb 2016 07:39:29 +0000 (07:39 +0000)]
[TableGen] Use range-based for loops. NFC

llvm-svn: 260502

8 years ago[TableGen] Don't call emitSourceFileHeader a second time in the middle of the output...
Craig Topper [Thu, 11 Feb 2016 07:39:27 +0000 (07:39 +0000)]
[TableGen] Don't call emitSourceFileHeader a second time in the middle of the output file.

llvm-svn: 260501

8 years ago[TableGen] Whitespace cleanup in output file. NFC
Craig Topper [Thu, 11 Feb 2016 07:39:25 +0000 (07:39 +0000)]
[TableGen] Whitespace cleanup in output file. NFC

llvm-svn: 260500

8 years ago[TableGen] Simplify code slightly. NFC
Craig Topper [Thu, 11 Feb 2016 07:39:22 +0000 (07:39 +0000)]
[TableGen] Simplify code slightly. NFC

llvm-svn: 260499

8 years ago[MC][ELF] Handle MIPS specific .sdata and .sbss directives
Simon Atanasyan [Thu, 11 Feb 2016 06:45:54 +0000 (06:45 +0000)]
[MC][ELF] Handle MIPS specific .sdata and .sbss directives

MIPS specific .sdata and .sbss directives create corresponding sections
with proper initialized ELF flags including ELF::SHF_MIPS_GPREL.

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

llvm-svn: 260498

8 years agoclang-format: Make it more expensive to break template parameters.
Daniel Jasper [Thu, 11 Feb 2016 06:43:01 +0000 (06:43 +0000)]
clang-format: Make it more expensive to break template parameters.

In particular, make it more expensive than breaking after the return
type of a function definition/declaration.

Before:
  template <typename T>
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaa<
      T>::aaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa);

After:
  template <typename T>
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaa<T>::aaaaaaaaaaaaa(
      aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa);

llvm-svn: 260497

8 years ago[Objective-c] Stop attaching section "datacoal_nt" to global variables.
Akira Hatanaka [Thu, 11 Feb 2016 06:36:35 +0000 (06:36 +0000)]
[Objective-c] Stop attaching section "datacoal_nt" to global variables.

The current macho linker just copies symbols in section datacoal_nt to
section data, so it doesn't really matter whether or not section
"datacoal_nt" is attached to the global variable.

This is a follow-up to r250370, which made changes in llvm to stop
putting functions and data in the *coal* sections.

rdar://problem/24528611

llvm-svn: 260496

8 years agoAMDGPU: Fix constant bus use check with subregisters
Matt Arsenault [Thu, 11 Feb 2016 06:15:39 +0000 (06:15 +0000)]
AMDGPU: Fix constant bus use check with subregisters

If the two operands to an instruction were both
subregisters of the same super register, it would incorrectly
think this counted as the same constant bus use.

This fixes the verifier error in fmin_legacy.ll which
was missing -verify-machineinstrs.

llvm-svn: 260495

8 years agoAMDGPU: Fix passes depending on dominator tree for no reason
Matt Arsenault [Thu, 11 Feb 2016 06:15:34 +0000 (06:15 +0000)]
AMDGPU: Fix passes depending on dominator tree for no reason

llvm-svn: 260494

8 years agoAMDGPU: Remove some old intrinsic uses from tests
Matt Arsenault [Thu, 11 Feb 2016 06:02:01 +0000 (06:02 +0000)]
AMDGPU: Remove some old intrinsic uses from tests

llvm-svn: 260493

8 years ago[OPENMP] Rename OMPCapturedFieldDecl to OMPCapturedExprDecl, NFC.
Alexey Bataev [Thu, 11 Feb 2016 05:35:55 +0000 (05:35 +0000)]
[OPENMP] Rename OMPCapturedFieldDecl to OMPCapturedExprDecl, NFC.
OMPCapturedExprDecl allows caopturing not only of fielddecls, but also
other expressions. It also allows to simplify codegen for several
clauses.

llvm-svn: 260492

8 years agoAMDGPU: Fix not handling new workitem intrinsics in DivergenceAnalysis
Matt Arsenault [Thu, 11 Feb 2016 05:32:51 +0000 (05:32 +0000)]
AMDGPU: Fix not handling new workitem intrinsics in DivergenceAnalysis

llvm-svn: 260491

8 years agoAMDGPU: Split R600 and SI store lowering
Matt Arsenault [Thu, 11 Feb 2016 05:32:46 +0000 (05:32 +0000)]
AMDGPU: Split R600 and SI store lowering

These were only sharing some somewhat incorrect
logic for when to scalarize or split vectors.

llvm-svn: 260490

8 years ago[readobj] Dump DT_JMPREL relocations when outputting dynamic relocations.
Michael J. Spencer [Thu, 11 Feb 2016 04:59:53 +0000 (04:59 +0000)]
[readobj] Dump DT_JMPREL relocations when outputting dynamic relocations.

llvm-svn: 260489

8 years ago[readobj] Handle ELF files with no section table or with no program headers.
Michael J. Spencer [Thu, 11 Feb 2016 04:59:45 +0000 (04:59 +0000)]
[readobj] Handle ELF files with no section table or with no program headers.

This adds support for finding the dynamic table and dynamic symbol table via
the section table or the program header table. If there's no section table an
attempt is made to figure out the length of the dynamic symbol table.

llvm-svn: 260488

8 years ago[readobj] Move dynamic table parsing to a new function. NFC.
Michael J. Spencer [Thu, 11 Feb 2016 04:59:37 +0000 (04:59 +0000)]
[readobj] Move dynamic table parsing to a new function. NFC.

llvm-svn: 260487

8 years ago[readobj] Sort switch by enum value.
Michael J. Spencer [Thu, 11 Feb 2016 04:59:32 +0000 (04:59 +0000)]
[readobj] Sort switch by enum value.

Sort by enum value, but keep related entries adjacent. This makes it
easier to compare against documentation.

llvm-svn: 260486

8 years ago[readobj] Parse sections before dynamic table.
Michael J. Spencer [Thu, 11 Feb 2016 04:59:26 +0000 (04:59 +0000)]
[readobj] Parse sections before dynamic table.

NFC. This code will be expanded to handle dynamic tables that don't have a
PT_DYNAMIC.

llvm-svn: 260485

8 years agoFix const confusion while lambda function usage
Hemant Kulkarni [Thu, 11 Feb 2016 03:41:34 +0000 (03:41 +0000)]
Fix const confusion while lambda function usage

llvm-svn: 260484

8 years ago[AMDGPU] Assembler: Fix VOP3 only instructions
Tom Stellard [Thu, 11 Feb 2016 03:28:15 +0000 (03:28 +0000)]
[AMDGPU] Assembler: Fix VOP3 only instructions

Separate methods to convert parsed instructions to MCInst:

  - VOP3 only instructions (always create modifiers as operands in MCInst)
  - VOP2 instrunctions with modifiers (create modifiers as operands
    in MCInst when e64 encoding is forced or modifiers are parsed)
  - VOP2 instructions without modifiers (do not create modifiers
    as operands in MCInst)
  - Add VOP3Only flag. Pass HasMods flag to VOP3Common.
  - Simplify code that deals with modifiers (-1 is now same as
    0). This is no longer needed.
  - Add few tests (more will be added separately).
    Update error message now correct.

Patch By: Nikolay Haustov

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

llvm-svn: 260483

8 years ago[llvm-nm] Simplify code logic. Rewrite a single function an inline.
Davide Italiano [Thu, 11 Feb 2016 02:56:02 +0000 (02:56 +0000)]
[llvm-nm] Simplify code logic. Rewrite a single function an inline.

llvm-svn: 260482

8 years agoUn-XFAIL a passing test on Windows
Reid Kleckner [Thu, 11 Feb 2016 02:02:56 +0000 (02:02 +0000)]
Un-XFAIL a passing test on Windows

llvm-svn: 260481

8 years agoMove mmap_limit_mp test to Posix
Reid Kleckner [Thu, 11 Feb 2016 02:02:52 +0000 (02:02 +0000)]
Move mmap_limit_mp test to Posix

This test isn't posix specific, but it doesn't pass on Windows and is
XFAILed. I suspect that this test, which is expected to fail, is causing
the hangs I'm seeing on our WinASan builder.  Moving it to Posix seems
to be the cleanest way to avoid running it on Windows.

llvm-svn: 260480

8 years ago[CUDA] Don't crash when trying to printf a non-scalar object.
Justin Lebar [Thu, 11 Feb 2016 02:00:52 +0000 (02:00 +0000)]
[CUDA] Don't crash when trying to printf a non-scalar object.

Summary:
We can't do the right thing, since there's no right thing to do, but at
least we can not crash the compiler.

Reviewers: majnemer, rnk

Subscribers: cfe-commits, jhen, tra

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

llvm-svn: 260479

8 years agoRemove unused ToolChain arg from Driver::ConstructPhaseAction and BuildAction.
Justin Lebar [Thu, 11 Feb 2016 02:00:50 +0000 (02:00 +0000)]
Remove unused ToolChain arg from Driver::ConstructPhaseAction and BuildAction.

Summary:
Actions don't depend on the toolchain; they get bound to a particular
toolchain via BindArch.

No functional changes.

Reviewers: echristo

Subscribers: cfe-commits

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

llvm-svn: 260478

8 years agoELF: Sort .[cd]tors by priority as we do for .{init,fini}_array.
Rui Ueyama [Thu, 11 Feb 2016 01:07:19 +0000 (01:07 +0000)]
ELF: Sort .[cd]tors by priority as we do for .{init,fini}_array.

llvm-svn: 260477

8 years agoReduce code repetition. NFC.
Rui Ueyama [Thu, 11 Feb 2016 01:07:18 +0000 (01:07 +0000)]
Reduce code repetition. NFC.

llvm-svn: 260476

8 years agoSilence MSVC warning about non-void prototypes
Reid Kleckner [Thu, 11 Feb 2016 00:22:43 +0000 (00:22 +0000)]
Silence MSVC warning about non-void prototypes

It thinks that these functions don't match the function pointer type
that they are passed with:

GCDAProfiling.c(578) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
GCDAProfiling.c(579) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
GCDAProfiling.c(580) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'

llvm-svn: 260475

8 years ago[GlobalISel][MachineRegisterInfo] Add a method to create generic vregs.
Quentin Colombet [Thu, 11 Feb 2016 00:19:17 +0000 (00:19 +0000)]
[GlobalISel][MachineRegisterInfo] Add a method to create generic vregs.
For now, generic virtual registers will not have a register class. We may want
to change that. For instance, if we want to use all the methods from
TargetRegisterInfo with generic virtual registers, we need to either have some
sort of generic register classes that do what we want, or teach those methods
how to deal with nullptr register class.

Although the latter seems easy enough to do, we may still want to differenciate
generic register classes from nullptr to catch cases where nullptr gets
introduced by a bug of some sort.

Anyway, I will file a PR to keep track of that.

llvm-svn: 260474

8 years ago[asan] Dump adb output on failure.
Evgeniy Stepanov [Thu, 11 Feb 2016 00:16:28 +0000 (00:16 +0000)]
[asan] Dump adb output on failure.

This is an asan/android test harness change aiming to catch
"adb pull" failures on the buildbot.

llvm-svn: 260473

8 years agoFix two tests relying on LLVM -O1 behavior
Reid Kleckner [Thu, 11 Feb 2016 00:14:04 +0000 (00:14 +0000)]
Fix two tests relying on LLVM -O1 behavior

Something changed the inference of nonnull.

llvm-svn: 260472

8 years agoFix build failure caused in r260430
Hemant Kulkarni [Thu, 11 Feb 2016 00:01:47 +0000 (00:01 +0000)]
Fix build failure caused in r260430

llvm-svn: 260471

8 years ago[llvm-nm] Minor style change. Prefer EXIT_SUCCESS over 0.
Davide Italiano [Wed, 10 Feb 2016 23:56:18 +0000 (23:56 +0000)]
[llvm-nm] Minor style change. Prefer EXIT_SUCCESS over 0.

llvm-svn: 260470

8 years agoFix Windows bot failure in Transforms/FunctionImport/funcimport.ll
Teresa Johnson [Wed, 10 Feb 2016 23:47:38 +0000 (23:47 +0000)]
Fix Windows bot failure in Transforms/FunctionImport/funcimport.ll

Make sure we split ":" from the end of the global function id (which
is <path>:<function> for local functions) instead of the beginning to
avoid splitting at the wrong place for Windows file paths that contain
a ":".

llvm-svn: 260469

8 years ago[GlobalISel] Remember the size of generic virtual registers
Quentin Colombet [Wed, 10 Feb 2016 23:43:48 +0000 (23:43 +0000)]
[GlobalISel] Remember the size of generic virtual registers

llvm-svn: 260468

8 years agoReorder code to improve readability. NFC.
Rui Ueyama [Wed, 10 Feb 2016 23:43:16 +0000 (23:43 +0000)]
Reorder code to improve readability. NFC.

llvm-svn: 260467

8 years agoFunctionImport: add a progressive heuristic to limit importing too deep in the callgraph
Mehdi Amini [Wed, 10 Feb 2016 23:31:45 +0000 (23:31 +0000)]
FunctionImport: add a progressive heuristic to limit importing too deep in the callgraph

The current function importer will walk the callgraph, importing
transitively any callee that is below the threshold. This can
lead to import very deep which is costly in compile time and not
necessarily beneficial as most of the inline would happen in
imported function and not necessarilly in user code.

The actual factor has been carefully chosen by flipping a coin ;)
Some tuning need to be done (just at the existing limiting threshold).

Reviewers: tejohnson

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

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

8 years agoDon't include NOBITS TLS in PT_LOAD.
Rafael Espindola [Wed, 10 Feb 2016 23:29:38 +0000 (23:29 +0000)]
Don't include NOBITS TLS in PT_LOAD.

They don't count for the memory or file size, so this is mostly just a
simplification.

The only noticeable difference should be fewer empty program headers.

llvm-svn: 260465

8 years agoMake llvm-nm test consistent with other tests
Hemant Kulkarni [Wed, 10 Feb 2016 23:28:43 +0000 (23:28 +0000)]
Make llvm-nm test consistent with other tests

llvm-svn: 260464

8 years agoELF: Use stable sort to sort .{init,fini}_array sections.
Rui Ueyama [Wed, 10 Feb 2016 23:26:27 +0000 (23:26 +0000)]
ELF: Use stable sort to sort .{init,fini}_array sections.

Global constructors and destructors are guaranteed to be called
in the order as they appear in a translation unit. So we don't want
to mess up the order if they have the same priority.

llvm-svn: 260463

8 years agoUse a StringSet in Internalize, and allow to create the pass from an existing one...
Mehdi Amini [Wed, 10 Feb 2016 23:24:31 +0000 (23:24 +0000)]
Use a StringSet in Internalize, and allow to create the pass from an existing one (NFC)

There is not reason to pass an array of "char *" to rebuild a set if
the client already has one.

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

8 years agoAdd the ability to initialize a StringSet from a pair of iterators (NFC)
Mehdi Amini [Wed, 10 Feb 2016 23:24:21 +0000 (23:24 +0000)]
Add the ability to initialize a StringSet from a pair of iterators (NFC)

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

8 years agoELF: Implement __attribute__((init_priority(N)) support.
Rui Ueyama [Wed, 10 Feb 2016 23:20:42 +0000 (23:20 +0000)]
ELF: Implement __attribute__((init_priority(N)) support.

llvm-svn: 260460

8 years ago[llvm-nm] Prefer range-based loop over explicit iterator.
Davide Italiano [Wed, 10 Feb 2016 23:16:17 +0000 (23:16 +0000)]
[llvm-nm] Prefer range-based loop over explicit iterator.

llvm-svn: 260459

8 years agoAdd a new insert_as() method to DenseMap and use it for ConstantUniqueMap
Mehdi Amini [Wed, 10 Feb 2016 23:07:29 +0000 (23:07 +0000)]
Add a new insert_as() method to DenseMap and use it for ConstantUniqueMap

Summary:
Just like the existing find_as() method, the new insert_as() accepts
an extra parameter which is used as a key to find the bucket in the
map.
When creating a Constant, we want to check the map before actually
creating the object. In this case we have to perform two queries to
the map, and this extra parameter can save recomputing the hash value
for the second query.

Reviewers: dexonsmith, chandlerc

Subscribers: llvm-commits

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

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

8 years ago[CMake] Add a macro definition to detect if we are building GlobalISel:
Quentin Colombet [Wed, 10 Feb 2016 23:00:57 +0000 (23:00 +0000)]
[CMake] Add a macro definition to detect if we are building GlobalISel:
LLVM_BUILD_GLOBAL_ISEL

llvm-svn: 260457

8 years ago[GlobalISel] More detailed skeleton for the IRTranslator.
Quentin Colombet [Wed, 10 Feb 2016 22:59:27 +0000 (22:59 +0000)]
[GlobalISel] More detailed skeleton for the IRTranslator.

llvm-svn: 260456

8 years agoBitcode reader: replace DecodeChar6() with a lookup table (NFC)
Mehdi Amini [Wed, 10 Feb 2016 22:47:48 +0000 (22:47 +0000)]
Bitcode reader: replace DecodeChar6() with a lookup table (NFC)

Summary: Measured to be more performant when reading bitcode.

Reviewers: rafael, dexonsmith

Subscribers: llvm-commits

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

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

8 years agoSimplify handleOperandChangeImpl() removing last argument (NFC)
Mehdi Amini [Wed, 10 Feb 2016 22:47:15 +0000 (22:47 +0000)]
Simplify handleOperandChangeImpl() removing last argument (NFC)

The Use argument was used to compute the operand number for a fast
path when replacing only one operand. However we always have to go
through all the operands. So the argument number can be recomputed
locally anyway.

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

8 years agoSplit the creation of program headers in a few steps.
Rafael Espindola [Wed, 10 Feb 2016 22:43:13 +0000 (22:43 +0000)]
Split the creation of program headers in a few steps.

IMHO this makes the code easier to read and should help with linker
scripts.

This is strongly based on D16575. The main differences are:

We record a range of sections, not every section in a program header.

scanHeaders takes case of deciding what goes in every program header,
including PT_GNU_RELRO

We create dummy sections for the start of the file

With this, program header creation has 3 isolated stages:

Map sections to program headers.
Assign addresses to *sections*
Looking at sections find the address and size of each program header.

Thanks to George Rimar for the initial version.

llvm-svn: 260453

8 years agoRevert 260436. I pretty consistently upper-case the letter I use for the
Jim Ingham [Wed, 10 Feb 2016 22:30:20 +0000 (22:30 +0000)]
Revert 260436.  I pretty consistently upper-case the letter I use for the
short option as an aid to memory.  Like it's w because of the W in throW.

That helps me remember.  If we are going to take these out we should take them
all out.  But I kind of like them.

llvm-svn: 260452

8 years agoFollow up to 260439, Speculative fix to clang builders
Philip Reames [Wed, 10 Feb 2016 22:22:41 +0000 (22:22 +0000)]
Follow up to 260439, Speculative fix to clang builders

It looks like clang has a couple of test cases which caught the fact LVI was not slightly more precise after 260439.  When looking at the failures, it struck me as wasteful to be querying nullness of a constant via LVI, so instead of tweaking the clang tests, let's just stop querying constants from this source.

llvm-svn: 260451

8 years ago[PGO] Make the number of records for each value site metada adjustable
Rong Xu [Wed, 10 Feb 2016 22:19:43 +0000 (22:19 +0000)]
[PGO] Make the number of records for each value site metada adjustable

The patch adds a parameter in annotateValueSite() to control the max number
of records written to the value profile meta data for each value site. The
default is kept as the current value of 3.

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

llvm-svn: 260450

8 years agoRevert r260388 "[MS ABI] Never reference dllimport'd vtables"
Hans Wennborg [Wed, 10 Feb 2016 22:18:37 +0000 (22:18 +0000)]
Revert r260388 "[MS ABI] Never reference dllimport'd vtables"

This caused the compiler to fail with "invalid linkage type
for global declaration" (PR26569).

llvm-svn: 260449

8 years agoBail on compilation as soon as a job fails.
Justin Lebar [Wed, 10 Feb 2016 22:17:00 +0000 (22:17 +0000)]
Bail on compilation as soon as a job fails.

Previously we attempted to be smart; if one job failed, we'd run all
jobs that didn't depend on the failing job.

Problem is, this doesn't work well for e.g. CUDA compilation without
-save-temps.  In this case, the device-side and host-side Assemble
actions (which actually are responsible for preprocess, compile,
backend, and assemble, since we're not saving temps) are necessarily
distinct.  So our clever heuristic doesn't help us, and we repeat every
error message once for host and once for each device arch.

The main effect of this change, other than fixing CUDA, is that if you
pass multiple cc files to one instance of clang and you get a compile
error, we'll stop when the first cc1 job fails.

Reviewers: tra, echristo

Subscribers: jhen, cfe-commits

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

llvm-svn: 260448

8 years agoAPInt: Simplify EqualSlowCase
Matthias Braun [Wed, 10 Feb 2016 22:13:10 +0000 (22:13 +0000)]
APInt: Simplify EqualSlowCase

Previously the code used getActiveBits() to determine the highest set
bit of each APInt first. However doing so requires the same amount of
memory accesses as simply comparing both numbers right away.

Removing all the active bit checks leads to simpler code and is faster
in my benchmark.

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

llvm-svn: 260447

8 years agoFix buildbot failure (hosts without zlib)
Xinliang David Li [Wed, 10 Feb 2016 22:05:41 +0000 (22:05 +0000)]
Fix buildbot failure (hosts without zlib)

llvm-svn: 260446

8 years agoWhen importing Objective-C protocols, mark them as having external decls.
Sean Callanan [Wed, 10 Feb 2016 22:00:32 +0000 (22:00 +0000)]
When importing Objective-C protocols, mark them as having external decls.

We already do this for Objective-C interfaces, but we never handled protocols
because the DWARF didn't represent them.  Nowadays, though, we can import them
from modules, and we have to mark them properly.

<rdar://problem/24193009>

llvm-svn: 260445

8 years agoELF: Combine cases that has the same code.
Rui Ueyama [Wed, 10 Feb 2016 22:00:21 +0000 (22:00 +0000)]
ELF: Combine cases that has the same code.

llvm-svn: 260444

8 years agoRemove changes that snuck in within r260431
Eric Fiselier [Wed, 10 Feb 2016 21:58:36 +0000 (21:58 +0000)]
Remove changes that snuck in within r260431

llvm-svn: 260443

8 years agoRestore "[ThinLTO] Use MD5 hash in function index." with fix
Teresa Johnson [Wed, 10 Feb 2016 21:55:02 +0000 (21:55 +0000)]
Restore "[ThinLTO] Use MD5 hash in function index." with fix

This restores commit r260408, along with a fix for a bot failure.

The bot failure was caused by dereferencing a unique_ptr in the same
call instruction parameter list where it was passed via std::move.
Apparently due to luck this was not exposed when I built the compiler
with clang, only with gcc.

llvm-svn: 260442

8 years agoFix invalid casts in <functional>.
Evgeniy Stepanov [Wed, 10 Feb 2016 21:53:28 +0000 (21:53 +0000)]
Fix invalid casts in <functional>.

static_cast of a pointer to object before the start of the object's
lifetime has undefined behavior.

This code triggers CFI warnings.

This change replaces C-style casts with reinterpret_cast, which is
fine per the standard, add applies an attribute to silence CFI (which
barks on reinterpret_cast, too).

llvm-svn: 260441

8 years agoFix copy/paste error in TestCModules.
Zachary Turner [Wed, 10 Feb 2016 21:47:36 +0000 (21:47 +0000)]
Fix copy/paste error in TestCModules.

llvm-svn: 260440

8 years ago[LVI] Handle constants defensively
Philip Reames [Wed, 10 Feb 2016 21:46:32 +0000 (21:46 +0000)]
[LVI] Handle constants defensively

There's nothing preventing callers of LVI from asking for lattice values representing a Constant.  In fact, given that several callers are walking back through PHI nodes and trying to simplify predicates, such queries are actually quite common.  This is mostly harmless today, but we start volatiling assertions if we add new calls to getBlockValue in otherwise reasonable places.

Note that this change is not NFC.  Specifically:
1) The result returned through getValueAt will now be more precise.  In principle, this could trigger any latent infinite optimization loops in callers, but in practice, we're unlikely to see this.
2) The result returned through getBlockValueAt is potentially weakened for non-constants that were previously queried.  With the old code, you had the possibility that a later query might bypass the cache and discover some information the original query did not.  I can't find a scenario which actually causes this to happen, but it was in principle possible.  On the other hand, this may end up reducing compile time when the same value is queried repeatedly.

llvm-svn: 260439

8 years ago[WebAssembly] Re-triage list of compilation failures for torture tests
Derek Schuff [Wed, 10 Feb 2016 21:43:16 +0000 (21:43 +0000)]
[WebAssembly] Re-triage list of compilation failures for torture tests

llvm-svn: 260438

8 years agoUse ArrayRef instead of deep copies of CompactUnwindEntries. NFC.
Pete Cooper [Wed, 10 Feb 2016 21:32:24 +0000 (21:32 +0000)]
Use ArrayRef instead of deep copies of CompactUnwindEntries.  NFC.

We have a vector of all of the compact unwind entries anyway, and
its live as long as we need it to be.  So instead of copying from that
vector to another, just take references to the range of the original vector
we need for each compact unwind page.

llvm-svn: 260437

8 years agoNo reason for these two letters to be uppercase
Enrico Granata [Wed, 10 Feb 2016 21:30:20 +0000 (21:30 +0000)]
No reason for these two letters to be uppercase

llvm-svn: 260436

8 years ago[clang-cl] /Z7 now generates normal debug info, not just line info
Reid Kleckner [Wed, 10 Feb 2016 21:28:38 +0000 (21:28 +0000)]
[clang-cl] /Z7 now generates normal debug info, not just line info

Previously LLVM could not process any debug info we produced, so it
didn't make sense to spend time generating it. Now that it has primitive
support for local variable info, it does make sense to generate normal
debug info.

llvm-svn: 260435

8 years agoNow that SymbolFileDWARF supports having types in completely separate .pcm file with...
Greg Clayton [Wed, 10 Feb 2016 21:28:13 +0000 (21:28 +0000)]
Now that SymbolFileDWARF supports having types in completely separate .pcm file with "-fmodules -gmodules", each SymbolFileDWARF can reference module DWARF info by looking in other DWARF files. Then if you have 1000 .o files that each reference one or more .pcm files in their debug info, a simple Module::FindTypes(...) call can end up searching the same .pcm file over and over and over. Now all internal FindTypes methods in classes (ModuleList, Module, SymbolFile) now take an extra argument:

    llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files

Each time a SymbolFile::FindTypes() is called, it needs to check the searched_symbol_files list to make sure it hasn't already been asked to find the type and return immediately if it has been checked. This will stop circular dependencies from also crashing LLDB during type queries.

This has proven to be an issue when debugging large applications on MacOSX that use DWARF in .o files.

<rdar://problem/24581488>

llvm-svn: 260434

8 years agoTest commit, fixed "clang" to "Clang" in docs
Mandeep Singh Grang [Wed, 10 Feb 2016 21:06:10 +0000 (21:06 +0000)]
Test commit, fixed "clang" to "Clang" in docs

Reviewers: weimingz

Subscribers: cfe-commits

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

llvm-svn: 260433

8 years ago[codeview] Describe int local variables using .cv_def_range
Reid Kleckner [Wed, 10 Feb 2016 20:55:49 +0000 (20:55 +0000)]
[codeview] Describe int local variables using .cv_def_range

Summary:
Refactor common value, scope, and label tracking logic out of DwarfDebug
into a common base class called DebugHandlerBase.

Update an old LLVM IR test case to avoid an assertion in LexicalScopes.

Reviewers: dblaikie, majnemer

Subscribers: llvm-commits

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

llvm-svn: 260432

8 years agoRecommit r260012 - Cleanup node-type handling in the unordered containers.
Eric Fiselier [Wed, 10 Feb 2016 20:46:23 +0000 (20:46 +0000)]
Recommit r260012 - Cleanup node-type handling in the unordered containers.

This time I kept <ext/hash_map> working!

This patch is the first in a series of patches that's meant to better
support unordered_map. unordered_map has a special "value_type" that
differs from pair<const Key, Value>. In order to meet the EmplaceConstructible
and CopyInsertable requirements we need to teach __hash_table about this
special value_type.

This patch creates a "__hash_node_types" traits class that contains
all of the typedefs needed by the unordered containers and it's iterators.
These typedefs include ones for each node type and  node pointer type,
as well as special typedefs for "unordered_map"'s value type.

As a result of this change all of the unordered containers now all support
incomplete types.

As a drive-by fix I changed the difference_type in __hash_table to always
be ptrdiff_t. There is a corresponding change to size_type but it cannot
take affect until an ABI break.

This patch will be followed up shortly with fixes for various unordered_map
bugs and problems.

llvm-svn: 260431

8 years ago[llvm-readobj] Option to emit readelf like output
Hemant Kulkarni [Wed, 10 Feb 2016 20:40:55 +0000 (20:40 +0000)]
[llvm-readobj] Option to emit readelf like output

New option --elf-output-style=LLVM or GNU
Enables -file-headers in readelf style when elf-output-style=GNU

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

llvm-svn: 260430

8 years ago[WebAssembly] Address comments left over from r260421
Derek Schuff [Wed, 10 Feb 2016 20:14:15 +0000 (20:14 +0000)]
[WebAssembly] Address comments left over from r260421

llvm-svn: 260429

8 years ago[Coverage] add covmap v2 binary format regression test
Xinliang David Li [Wed, 10 Feb 2016 20:14:04 +0000 (20:14 +0000)]
[Coverage] add covmap v2 binary format regression test

llvm-svn: 260428

8 years agoAMDGPU: Release the scavenged offset register during VGPR spill
Nicolai Haehnle [Wed, 10 Feb 2016 20:13:58 +0000 (20:13 +0000)]
AMDGPU: Release the scavenged offset register during VGPR spill

Summary:
This fixes a crash where subsequent spills would be unable to scavenge
a register. In particular, it fixes a crash in piglit's
spec@glsl-1.50@execution@geometry@max-input-components (the test still
has a shader that fails to compile because of too many SGPR spills, but
at least it doesn't crash any more).

This is a candidate for the release branch.

Reviewers: arsenm, tstellarAMD

Subscribers: qcolombet, arsenm

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

llvm-svn: 260427

8 years ago[x86] refactor masked load/store combine logic ; NFCI
Sanjay Patel [Wed, 10 Feb 2016 20:02:45 +0000 (20:02 +0000)]
[x86] refactor masked load/store combine logic ; NFCI

llvm-svn: 260426

8 years agoDon't assume that there is only one strchr overload in the global namespace;
Richard Smith [Wed, 10 Feb 2016 20:02:04 +0000 (20:02 +0000)]
Don't assume that there is only one strchr overload in the global namespace;
that's not true in general. Instead, use a preference order to pick the
standard C++ signature 'char*(char*, int)' where possible and fall back to the
C signature 'char*(const char*, int)' only when it's unavailable.

llvm-svn: 260425

8 years ago[ELF][MIPS] Add lazy relocation support for MIPS
Simon Atanasyan [Wed, 10 Feb 2016 19:57:19 +0000 (19:57 +0000)]
[ELF][MIPS] Add lazy relocation support for MIPS

The patch adds lazy relocation support for MIPS and R_MIPS_26 relocation
handing.

R_MIPS_26 relocation might require PLT entry creation. In that case it
is fully supported by the patch. But if the relocation target is a local
symbol we need to use a different expression to calculate the relocation
result. This case is not implemented yet because there is no method to
get know the kind of relocation target in the `relocateOne` routine.

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

llvm-svn: 260424

8 years agoRemove skipUnlessListedRemote.
Zachary Turner [Wed, 10 Feb 2016 19:53:45 +0000 (19:53 +0000)]
Remove skipUnlessListedRemote.

This was supposed to have been removed but made it back in
accidentally.

llvm-svn: 260423

8 years agoRemove expectedFailureLinux decorator.
Zachary Turner [Wed, 10 Feb 2016 19:53:36 +0000 (19:53 +0000)]
Remove expectedFailureLinux decorator.

llvm-svn: 260422

8 years ago[WebAssembly] Switch varags calling convention to use a register
Derek Schuff [Wed, 10 Feb 2016 19:51:04 +0000 (19:51 +0000)]
[WebAssembly] Switch varags calling convention to use a register

Instead of passing varargs directly on the user stack, allocate a buffer in
the caller's stack frame and pass a pointer to it. This simplifies the C
ABI (e.g. non-C callers of C functions do not need to use C's user stack if
they have their own mechanism) and allows further optimizations in the future
(e.g. fewer functions may need to use the stack).

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

llvm-svn: 260421

8 years ago[analyzer] Windows: launch scan-build from an arbitrary location.
Anton Yartsev [Wed, 10 Feb 2016 19:46:41 +0000 (19:46 +0000)]
[analyzer] Windows: launch scan-build from an arbitrary location.

The following batch files allow to launch scan-build from an arbitrary location if path to clang\tools\scan-build-py\bin is added to %PATH%.

llvm-svn: 260420

8 years ago[AArch64] Refactor is logic into a helper function. NFC.
Chad Rosier [Wed, 10 Feb 2016 19:45:48 +0000 (19:45 +0000)]
[AArch64] Refactor is logic into a helper function.  NFC.

llvm-svn: 260419

8 years agoFix a -Wsign-compare in Support Path unittests
Reid Kleckner [Wed, 10 Feb 2016 19:29:01 +0000 (19:29 +0000)]
Fix a -Wsign-compare in Support Path unittests

llvm-svn: 260418

8 years agoSilence MSVC warning about falling off the end of a function after a fully covered...
Reid Kleckner [Wed, 10 Feb 2016 19:28:13 +0000 (19:28 +0000)]
Silence MSVC warning about falling off the end of a function after a fully covered switch

llvm-svn: 260417

8 years agoDisable MSVC 2015's warning about zero extending after ~ and others
Reid Kleckner [Wed, 10 Feb 2016 19:25:51 +0000 (19:25 +0000)]
Disable MSVC 2015's warning about zero extending after ~ and others

Very often in LLVM we have APIs that take a bitwidth and a uint64_t that
we pass immediates such as ~0U to. Consider APInt, Constant, and
MachineInstrBuilder::addImm. Fixing all uses of these APIs to manually
extend their arguments to uint64_t doesn't seem worth it.

llvm-svn: 260416