platform/upstream/llvm.git
10 years ago[AVX512] Enabled intrinsics for VPCMPEQD and VPCMPEQQ.
Robert Khasanov [Tue, 30 Sep 2014 11:19:50 +0000 (11:19 +0000)]
[AVX512] Enabled intrinsics for VPCMPEQD and VPCMPEQQ.
Added CMP_MASK intrinsic type

llvm-svn: 218667

10 years agoMake sure aggregates are properly alligned on MSP430.
Job Noorman [Tue, 30 Sep 2014 11:19:13 +0000 (11:19 +0000)]
Make sure aggregates are properly alligned on MSP430.

llvm-svn: 218666

10 years agoMake sure aggregates are properly alligned on MSP430.
Job Noorman [Tue, 30 Sep 2014 11:15:44 +0000 (11:15 +0000)]
Make sure aggregates are properly alligned on MSP430.

llvm-svn: 218665

10 years ago[asan] Run tests with the default compiler on Android.
Evgeniy Stepanov [Tue, 30 Sep 2014 11:12:41 +0000 (11:12 +0000)]
[asan] Run tests with the default compiler on Android.

llvm-svn: 218664

10 years ago[asan] Re-enable lsan_annotations test on Android.
Evgeniy Stepanov [Tue, 30 Sep 2014 11:11:59 +0000 (11:11 +0000)]
[asan] Re-enable lsan_annotations test on Android.

Was fixed by r218605.

llvm-svn: 218663

10 years ago[UBSan] Use <machine/endian.h> on Darwin.
Alexander Potapenko [Tue, 30 Sep 2014 10:07:37 +0000 (10:07 +0000)]
[UBSan] Use <machine/endian.h> on Darwin.

llvm-svn: 218662

10 years agoMS ABI: Correct layout for empty records
David Majnemer [Tue, 30 Sep 2014 06:45:43 +0000 (06:45 +0000)]
MS ABI: Correct layout for empty records

Empty records do not always have size equivalent to their alignment.
They only do so when their alignment is at least as large as the minimum
empty struct size: 1 byte in C++ and 4 bytes in C.

llvm-svn: 218661

10 years ago[OPENMP] Codegen of the ‘aligned’ clause for the ‘omp simd’ directive.
Alexander Musman [Tue, 30 Sep 2014 05:29:28 +0000 (05:29 +0000)]
[OPENMP] Codegen of the ‘aligned’ clause for the ‘omp simd’ directive.
Differential Revision: http://reviews.llvm.org/D5499

llvm-svn: 218660

10 years ago[IndVarSimplify] Widen loop unsigned compares.
Chad Rosier [Tue, 30 Sep 2014 03:17:42 +0000 (03:17 +0000)]
[IndVarSimplify] Widen loop unsigned compares.

This patch extends r217953 to handle unsigned comparison.
Phabricator revision: http://reviews.llvm.org/D5526

llvm-svn: 218659

10 years ago[x86] Revert r218588, r218589, and r218600. These patches were pursuing
Chandler Carruth [Tue, 30 Sep 2014 02:52:28 +0000 (02:52 +0000)]
[x86] Revert r218588, r218589, and r218600. These patches were pursuing
a flawed direction and causing miscompiles. Read on for details.

Fundamentally, the premise of this patch series was to map
VECTOR_SHUFFLE DAG nodes into VSELECT DAG nodes for all blends because
we are going to *have* to lower to VSELECT nodes for some blends to
trigger the instruction selection patterns of variable blend
instructions. This doesn't actually work out so well.

In order to match performance with the existing VECTOR_SHUFFLE
lowering code, we would need to re-slice the blend in order to fit it
into either the integer or floating point blends available on the ISA.
When coming from VECTOR_SHUFFLE (or other vNi1 style VSELECT sources)
this works well because the X86 backend ensures that these types of
operands to VSELECT get sign extended into '-1' and '0' for true and
false, allowing us to re-slice the bits in whatever granularity without
changing semantics.

However, if the VSELECT condition comes from some other source, for
example code lowering vector comparisons, it will likely only have the
required bit set -- the high bit. We can't blindly slice up this style
of VSELECT. Reid found some code using Halide that triggers this and I'm
hopeful to eventually get a test case, but I don't need it to understand
why this is A Bad Idea.

There is another aspect that makes this approach flawed. When in
VECTOR_SHUFFLE form, we have very distilled information that represents
the *constant* blend mask. Converting back to a VSELECT form actually
can lose this information, and so I think now that it is better to treat
this as VECTOR_SHUFFLE until the very last moment and only use VSELECT
nodes for instruction selection purposes.

My plan is to:
1) Clean up and formalize the target pre-legalization DAG combine that
   converts a VSELECT with a constant condition operand into
   a VECTOR_SHUFFLE.
2) Remove any fancy lowering from VSELECT during *legalization* relying
   entirely on the DAG combine to catch cases where we can match to an
   immediate-controlled blend instruction.

One additional step that I'm not planning on but would be interested in
others' opinions on: we could add an X86ISD::VSELECT or X86ISD::BLENDV
which encodes a fully legalized VSELECT node. Then it would be easy to
write isel patterns only in terms of this to ensure VECTOR_SHUFFLE
legalization only ever forms the fully legalized construct and we can't
cycle between it and VSELECT combining.

llvm-svn: 218658

10 years ago[x86] Add some vector-register broadcast operations to the 256-bit v4
Chandler Carruth [Tue, 30 Sep 2014 02:32:36 +0000 (02:32 +0000)]
[x86] Add some vector-register broadcast operations to the 256-bit v4
tests which were missing them.

llvm-svn: 218657

10 years agoFix some errors that crept in when I cut & pasted into emacs.
Jim Ingham [Tue, 30 Sep 2014 01:37:52 +0000 (01:37 +0000)]
Fix some errors that crept in when I cut & pasted into emacs.

llvm-svn: 218656

10 years agoR600: Fix broken check lines, missing scalar case.
Matt Arsenault [Tue, 30 Sep 2014 01:05:29 +0000 (01:05 +0000)]
R600: Fix broken check lines, missing scalar case.

llvm-svn: 218655

10 years agoFix missing C++ mode comment
Matt Arsenault [Tue, 30 Sep 2014 01:05:27 +0000 (01:05 +0000)]
Fix missing C++ mode comment

llvm-svn: 218654

10 years ago[FastISel][AArch64] Fold sign-/zero-extends into the load instruction.
Juergen Ributzka [Tue, 30 Sep 2014 00:49:58 +0000 (00:49 +0000)]
[FastISel][AArch64] Fold sign-/zero-extends into the load instruction.

The sign-/zero-extension of the loaded value can be performed by the memory
instruction for free. If the result of the load has only one use and the use is
a sign-/zero-extend, then we emit the proper load instruction. The extend is
only a register copy and will be optimized away later on.

Other instructions that consume the sign-/zero-extended value are also made
aware of this fact, so they don't fold the extend too.

This fixes rdar://problem/18495928.

llvm-svn: 218653

10 years ago[FastISel][AArch64] Factor out scale factor calculation. NFC.
Juergen Ributzka [Tue, 30 Sep 2014 00:49:54 +0000 (00:49 +0000)]
[FastISel][AArch64] Factor out scale factor calculation. NFC.

Factor out the code that determines the implicit scale factor of memory
operations for a given value type.

llvm-svn: 218652

10 years agoPR20399: Do not assert when adding an implicit member coming from a module at
Richard Smith [Tue, 30 Sep 2014 00:45:29 +0000 (00:45 +0000)]
PR20399: Do not assert when adding an implicit member coming from a module at
writing time.

Patch by Vassil Vassilev!

llvm-svn: 218651

10 years agoAdd a very trivial example for scripted stepping.
Jim Ingham [Tue, 30 Sep 2014 00:24:59 +0000 (00:24 +0000)]
Add a very trivial example for scripted stepping.

llvm-svn: 218650

10 years ago[llvm-objdump] switch some uses of format() to format_hex() and left_justify()
Nick Kledzik [Tue, 30 Sep 2014 00:19:58 +0000 (00:19 +0000)]
[llvm-objdump] switch some uses of format() to format_hex() and left_justify()

llvm-svn: 218649

10 years agoRevert r218616, "Refactor Matcher<T> and DynTypedMatcher to reduce overhead of casts."
NAKAMURA Takumi [Mon, 29 Sep 2014 23:56:21 +0000 (23:56 +0000)]
Revert r218616, "Refactor Matcher<T> and DynTypedMatcher to reduce overhead of casts."

MSC17, aka VS2012, cannot compile it.

  clang/include/clang/ASTMatchers/ASTMatchersInternal.h(387) : error C4519: default template arguments are only allowed on a class template

  clang/include/clang/ASTMatchers/ASTMatchersInternal.h(443) : see reference to class template instantiation 'clang::ast_matchers::internal::Matcher<T>' being compiled

llvm-svn: 218648

10 years agoclang/test/CodeGenCXX/vararg-non-pod-ms-compat.cpp: Appease -Asserts to skip 1st...
NAKAMURA Takumi [Mon, 29 Sep 2014 23:55:58 +0000 (23:55 +0000)]
clang/test/CodeGenCXX/vararg-non-pod-ms-compat.cpp: Appease -Asserts to skip 1st alloca.

llvm-svn: 218647

10 years agoupdate library dependency
Nick Kledzik [Mon, 29 Sep 2014 23:52:50 +0000 (23:52 +0000)]
update library dependency

llvm-svn: 218646

10 years agoTry to fix non-asserts CodeGenCXX/vararg-non-pod-ms-compat.cpp
Hans Wennborg [Mon, 29 Sep 2014 23:45:00 +0000 (23:45 +0000)]
Try to fix non-asserts CodeGenCXX/vararg-non-pod-ms-compat.cpp

There are two GEP's in the function, and it seems the X64 CHECK
was matching the wrong one.

llvm-svn: 218645

10 years agoSimplify conditional.
Eric Christopher [Mon, 29 Sep 2014 23:31:13 +0000 (23:31 +0000)]
Simplify conditional.

llvm-svn: 218643

10 years agoThis checkin is the first step in making the lldb thread stepping mechanism more...
Jim Ingham [Mon, 29 Sep 2014 23:17:18 +0000 (23:17 +0000)]
This checkin is the first step in making the lldb thread stepping mechanism more accessible from
the user level.  It adds the ability to invent new stepping modes implemented by python classes,
and to view the current thread plan stack and to some extent alter it.

I haven't gotten to documentation or tests yet.  But this should not cause any behavior changes
if you don't use it, so its safe to check it in now and work on it incrementally.

llvm-svn: 218642

10 years agodwarf: add dwarf v4 maximum_operations_per_instruction to DWARFDebugLine.
Todd Fiala [Mon, 29 Sep 2014 23:11:09 +0000 (23:11 +0000)]
dwarf: add dwarf v4 maximum_operations_per_instruction to DWARFDebugLine.

See http://reviews.llvm.org/D5533 for details.

Change by Tong Shen.

llvm-svn: 218641

10 years agoDon't trap when passing non-POD arguments to variadic functions in MS-compatibility...
Hans Wennborg [Mon, 29 Sep 2014 23:06:57 +0000 (23:06 +0000)]
Don't trap when passing non-POD arguments to variadic functions in MS-compatibility mode

Clang warns (treated as error by default, but still ignored in system headers)
when passing non-POD arguments to variadic functions, and generates a trap
instruction to crash the program if that code is ever run.

Unfortunately, MSVC happily generates code for such calls without a warning,
and there is code in system headers that use it.

This makes Clang not insert the trap instruction when in -fms-compatibility
mode, while still generating the warning/error message.

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

llvm-svn: 218640

10 years ago[mach-o] Move implementation of MachOFileNode::parse
Nick Kledzik [Mon, 29 Sep 2014 23:04:24 +0000 (23:04 +0000)]
[mach-o] Move implementation of MachOFileNode::parse

Move method implementation from header file to .cpp file.  No functionality
change.

llvm-svn: 218639

10 years agothread state coordinator: added a thread resume request and related tests.
Todd Fiala [Mon, 29 Sep 2014 22:57:05 +0000 (22:57 +0000)]
thread state coordinator: added a thread resume request and related tests.

The thread resume block is executed in the normal flow of thread
state queued event processing.  The tests verify that it is executed
when we track the thread to be stopped and skipped when we track
it to already be running.

llvm-svn: 218638

10 years ago[AVX512] Use X86VectorVTInfo in the masking helper classes and the FMAs
Adam Nemet [Mon, 29 Sep 2014 22:54:41 +0000 (22:54 +0000)]
[AVX512] Use X86VectorVTInfo in the masking helper classes and the FMAs

No functionality change.

Makes the code more compact (see the FMA part).

This needs a new type attribute MemOpFrag in X86VectorVTInfo.  For now I only
defined this in the simple cases.  See the commment before the attribute.

Diff of X86.td.expanded before and after is empty except for the appearance of
the new attribute.

llvm-svn: 218637

10 years agoWinCOFFObjectWriter: optimize the string table for common suffices
Hans Wennborg [Mon, 29 Sep 2014 22:43:20 +0000 (22:43 +0000)]
WinCOFFObjectWriter: optimize the string table for common suffices

This is a follow-up from r207670 which did the same for ELF.

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

llvm-svn: 218636

10 years agoUse ClangToLLVMArgsMapping in CodeGenTypes::GetFunctionType(). NFC.
Alexey Samsonov [Mon, 29 Sep 2014 22:08:00 +0000 (22:08 +0000)]
Use ClangToLLVMArgsMapping in CodeGenTypes::GetFunctionType(). NFC.

This is the last piece of CGCall code that had implicit assumptions about
the order in which Clang arguments are translated to LLVM ones (positions
of inalloca argument, sret, this, padding arguments etc.) Now all of
this data is encapsulated in ClangToLLVMArgsMapping. If this information
would be required somewhere else, this class can be moved to a separate
header or pulled into CGFunctionInfo.

llvm-svn: 218634

10 years ago[lld] [ELF] Support for general dynamic TLS relocations on X86_64
Rafael Auler [Mon, 29 Sep 2014 22:05:26 +0000 (22:05 +0000)]
[lld] [ELF] Support for general dynamic TLS relocations on X86_64

Summary:
This patch adds support for the general dynamic TLS access model for X86_64 (see www.akkadia.org/drepper/tls.pdf).

To properly support TLS, the patch also changes the __tls_get_addr atom to be a shared library atom instead of a regularly defined atom (the previous lld approach). This closely models the reality of a function that will be resolved at runtime by the dynamic linker and loader itself (ld.so). I was tempted to force LLD to link against ld.so itself to resolve these symbols, but since GNU ld does not need the ld.so library to resolve this symbol, I decided to mimic its behavior and keep hardwired a definition of __tls_get_addr in the lld code.

This patch also moves some important logic that previously was only available to the MIPS lld backend to be used to all ELF backends. This logic, which now lives in the DefaultLayout class, will monitor which external (shared lib) symbols are really imported by the current module and will only populate the dynamic symbol table with used symbols, as opposed to the previous approach of dumping all shared lib symbols in the dynamic symbol table. This is important to this patch to avoid __tls_get_addr from getting injected into all dynamic symbol tables.

By solving the previous problem of always adding __tls_get_addr, now the produced symbol tables are slightly smaller. But this impacted several tests that relied on hardwired/predefined sizes of the symbol table, requiring this patch to update such tests.

Test Plan: Added a LIT test case that exercises a simple use case of TLS variable in a shared library.

Reviewers: ruiu, rafael, Bigcheese, shankarke

Reviewed By: Bigcheese, shankarke

Subscribers: emaste, shankarke, joerg, kledzik, mcrosier, llvm-commits

Projects: #lld

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

llvm-svn: 218633

10 years agoAdd soft-float to the key for the subtarget lookup in the TargetMachine
Eric Christopher [Mon, 29 Sep 2014 21:57:54 +0000 (21:57 +0000)]
Add soft-float to the key for the subtarget lookup in the TargetMachine
map, this makes sure that we can compile the same code for two different
ABIs (hard and soft float) in the same module.

Update one testcase accordingly (and fix some confusing naming) and
add a new testcase as well with the ordering swapped which would
highlight the problem.

llvm-svn: 218632

10 years agoFix spelling and reflow comments.
Eric Christopher [Mon, 29 Sep 2014 21:57:52 +0000 (21:57 +0000)]
Fix spelling and reflow comments.

llvm-svn: 218631

10 years agoTest commit. Fix a whitespace in ToolChains.cpp.
Rafael Auler [Mon, 29 Sep 2014 21:50:34 +0000 (21:50 +0000)]
Test commit. Fix a whitespace in ToolChains.cpp.

llvm-svn: 218630

10 years agothread state coordinator: add exec reset support, remove empty virtual destructors.
Todd Fiala [Mon, 29 Sep 2014 21:45:21 +0000 (21:45 +0000)]
thread state coordinator: add exec reset support, remove empty virtual destructors.

Also added a test for the reset handling.  The reset/state clearing happens
as a processed queue event.  The only diff vs. standard processing is that
the exec clears the queue before queueing the activity to clear internal state.
i.e. once we get an exec, we really stop doing any other queue-based activity.

llvm-svn: 218629

10 years agoAST: Fix a typo in RecordLayoutBuilder
David Majnemer [Mon, 29 Sep 2014 21:38:08 +0000 (21:38 +0000)]
AST: Fix a typo in RecordLayoutBuilder

No functional change intended.

llvm-svn: 218628

10 years ago[AArch64] Refines the Cortex-A57 Machine Model
Dave Estes [Mon, 29 Sep 2014 21:27:36 +0000 (21:27 +0000)]
[AArch64] Refines the Cortex-A57 Machine Model

Primarily refines all of the instructions with accurate latency
and micro-op information. Refinements largely focus on the NEON
instructions.

Additionally, a few advanced features are modeled, including
forwarding for MAC instructions and hazards for floating point SQRT
and DIV.

Lastly, the issue-width is reduced to three so that the scheduler
will better accommodate the narrower decode and dispatch width.

llvm-svn: 218627

10 years agoUnit test r218187, changing RTDyldMemoryManager::getSymbolAddress's behavior favor...
David Blaikie [Mon, 29 Sep 2014 21:25:13 +0000 (21:25 +0000)]
Unit test r218187, changing RTDyldMemoryManager::getSymbolAddress's behavior favor mangled lookup over unmangled lookup.

The contract of this function seems problematic (fallback in either
direction seems like it could produce bugs in one client or another),
but here's some tests for its current behavior, at least. See the
commit/review thread of r218187 for more discussion.

llvm-svn: 218626

10 years agoIntroduce CGFunctionInfo::getNumRequiredArgs(). NFC.
Alexey Samsonov [Mon, 29 Sep 2014 21:21:48 +0000 (21:21 +0000)]
Introduce CGFunctionInfo::getNumRequiredArgs(). NFC.

Save the callers from necessity to special-case on variadic functions.

llvm-svn: 218625

10 years agoCUDA: Fix incorrect target inference for implicit members.
Eli Bendersky [Mon, 29 Sep 2014 20:38:29 +0000 (20:38 +0000)]
CUDA: Fix incorrect target inference for implicit members.

As PR20495 demonstrates, Clang currenlty infers the CUDA target (host/device,
etc) for implicit members (constructors, etc.) incorrectly. This causes errors
and even assertions in Clang when compiling code (assertions in C++11 mode where
implicit move constructors are added into the mix).

Fix the problem by inferring the target from the methods the implicit member
should call (depending on its base classes and fields).

llvm-svn: 218624

10 years agoSpeedup ClangToLLVMArgMapping construction. NFC.
Alexey Samsonov [Mon, 29 Sep 2014 20:30:22 +0000 (20:30 +0000)]
Speedup ClangToLLVMArgMapping construction. NFC.

Add a method to calculate the number of arguments given QualType
expnads to. Use this method in ClangToLLVMArgMapping calculation.
This number may be cached in CodeGenTypes for efficiency, if needed.

llvm-svn: 218623

10 years agoFixing the build for compilers which do not yet have support for constexpr functions...
Aaron Ballman [Mon, 29 Sep 2014 20:27:01 +0000 (20:27 +0000)]
Fixing the build for compilers which do not yet have support for constexpr functions, NFC.

llvm-svn: 218622

10 years agoObjective-C [qoi] - provide group name for
Fariborz Jahanian [Mon, 29 Sep 2014 20:17:04 +0000 (20:17 +0000)]
Objective-C [qoi] - provide group name for
warn_property_types_are_incompatible. rdar://18487506

llvm-svn: 218621

10 years ago[asan] add a test for array cookie if the operator new is defined inside the class...
Kostya Serebryany [Mon, 29 Sep 2014 19:40:56 +0000 (19:40 +0000)]
[asan] add a test for array cookie if the operator new is defined inside the class (the cookie should not be poisoned in such case); update the related comment in asan_poisoning.cc

llvm-svn: 218620

10 years agoAdd getValueOr to llvm::Optional<T>.
Jordan Rose [Mon, 29 Sep 2014 18:56:08 +0000 (18:56 +0000)]
Add getValueOr to llvm::Optional<T>.

This takes a single argument convertible to T, and
- if the Optional has a value, returns the existing value,
- otherwise, constructs a T from the argument and returns that.

Inspired by std::experimental::optional from the "Library Fundamentals" C++ TS.

llvm-svn: 218618

10 years agoAdd "typedef T value_type;" to llvm::Optional<T>.
Jordan Rose [Mon, 29 Sep 2014 18:56:05 +0000 (18:56 +0000)]
Add "typedef T value_type;" to llvm::Optional<T>.

Inspired by std::experimental::optional from the "Library Fundamentals" C++ TS.

llvm-svn: 218617

10 years agoRefactor Matcher<T> and DynTypedMatcher to reduce overhead of casts.
Samuel Benzaquen [Mon, 29 Sep 2014 18:43:20 +0000 (18:43 +0000)]
Refactor Matcher<T> and DynTypedMatcher to reduce overhead of casts.

Summary:
This change introduces DynMatcherInterface and changes the internal
representation of DynTypedMatcher and Matcher<T> to use a generic
interface instead.
It removes unnecessary indirections and virtual function calls when
converting matchers by implicit and dynamic casts.
DynTypedMatcher now remembers the stricter type in the chain of casts
and checks it before calling into DynMatcherInterface.
This change improves our clang-tidy related benchmark by ~14%.
Also, it opens the door for more optimizations of this kind that are
coming in future changes.

As a side effect of removing these template instantiations, it also
speeds up compilation of Dynamic/Registry.cpp by ~17% and reduces the number of
symbols generated by ~30%.

Reviewers: klimek

Subscribers: klimek, cfe-commits

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

llvm-svn: 218616

10 years agoRefactor ABIArgInfo::Expand implementation (NFC).
Alexey Samsonov [Mon, 29 Sep 2014 18:41:28 +0000 (18:41 +0000)]
Refactor ABIArgInfo::Expand implementation (NFC).

Hoist the logic which determines the way QualType is expanded
into a separate method. Remove a bunch of copy-paste and simplify
getTypesFromArgs() / ExpandTypeFromArgs() / ExpandTypeToArgs() methods.

llvm-svn: 218615

10 years agoUpdate modules documentation now that C++ support is working pretty well.
Richard Smith [Mon, 29 Sep 2014 17:46:41 +0000 (17:46 +0000)]
Update modules documentation now that C++ support is working pretty well.

llvm-svn: 218614

10 years agoDisable runtime alias checks when we ignore aliasing.
Johannes Doerfert [Mon, 29 Sep 2014 17:06:29 +0000 (17:06 +0000)]
Disable runtime alias checks when we ignore aliasing.

  This is just a optimization to save the compile time and execution time
  for runtime alias checks if the user guarantees no aliasing all together.

llvm-svn: 218613

10 years agoFixing missing C++ mode comment
Matt Arsenault [Mon, 29 Sep 2014 15:55:18 +0000 (15:55 +0000)]
Fixing missing C++ mode comment

llvm-svn: 218612

10 years agoFix include order
Matt Arsenault [Mon, 29 Sep 2014 15:53:15 +0000 (15:53 +0000)]
Fix include order

llvm-svn: 218611

10 years agoR600/SI: Fix hardcoded values for modifiers.
Matt Arsenault [Mon, 29 Sep 2014 15:50:26 +0000 (15:50 +0000)]
R600/SI: Fix hardcoded values for modifiers.

Move enums to SIDefines.h

llvm-svn: 218610

10 years agoR600/SI: Also fix fsub + fadd a, a to mad combines
Matt Arsenault [Mon, 29 Sep 2014 14:59:38 +0000 (14:59 +0000)]
R600/SI: Also fix fsub + fadd a, a to mad combines

llvm-svn: 218609

10 years agoR600/SI: Fix using mad with multiplies by 2
Matt Arsenault [Mon, 29 Sep 2014 14:59:34 +0000 (14:59 +0000)]
R600/SI: Fix using mad with multiplies by 2

These turn into fadds, so combine them into the target
mad node.

fadd (fadd (a, a), b) -> mad 2.0, a, b

llvm-svn: 218608

10 years ago[AArch64] Improve cost model to handle sdiv by a pow-of-two.
Chad Rosier [Mon, 29 Sep 2014 13:59:31 +0000 (13:59 +0000)]
[AArch64] Improve cost model to handle sdiv by a pow-of-two.

This patch improves the target-specific cost model to better handle signed
division by a power of two. The immediate result is that this enables the SLP
vectorizer to do a better job.

http://reviews.llvm.org/D5469
PR20714

llvm-svn: 218607

10 years agoStore TypeUnits in a SmallVector<DWARFUnitSection> instead of a single DWARFUnitSection.
Frederic Riss [Mon, 29 Sep 2014 13:56:39 +0000 (13:56 +0000)]
Store TypeUnits in a SmallVector<DWARFUnitSection> instead of a single DWARFUnitSection.

There will be multiple TypeUnits in an unlinked object that will be extracted
from different sections. Now that we have DWARFUnitSection that is supposed
to represent an input section, we need a DWARFUnitSection<TypeUnit> per
input .debug_types section.

Once this is done, the interface is homogenous and we can move the Section
parsing code into DWARFUnitSection.

This is a respin of r218513 that got reverted because it broke some builders.
This new version features an explicit move constructor for the DWARFUnitSection
class to workaround compilers unable to generate correct C++11 default
constructors.

Reviewers: samsonov, dblaikie

Subscribers: llvm-commits

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

llvm-svn: 218606

10 years ago[sanitizer] Android build cleanup.
Evgeniy Stepanov [Mon, 29 Sep 2014 13:18:55 +0000 (13:18 +0000)]
[sanitizer] Android build cleanup.

* Detect Android toolchain target arch and set correct runtime library name.
* Merged a lot of Android and non-Android code paths.
* Android is only supported in standalone build of compiler-rt now.
* Linking lsan-common in ASan-Android (makes lsan annotations work).
* Relying on -fsanitize=address linker flag when building tests (again,
  unification with non-Android path).
* Runtime library moved from lib/asan to lib/linux.

llvm-svn: 218605

10 years agoUse a loop to simplify the runtime unrolling prologue.
Kevin Qin [Mon, 29 Sep 2014 11:15:00 +0000 (11:15 +0000)]
Use a loop to simplify the runtime unrolling prologue.

Runtime unrolling will create a prologue to execute the extra
iterations which is can't divided by the unroll factor. It
generates an if-then-else sequence to jump into a factor -1
times unrolled loop body, like

    extraiters = tripcount % loopfactor
    if (extraiters == 0) jump Loop:
    if (extraiters == loopfactor) jump L1
    if (extraiters == loopfactor-1) jump L2
    ...
    L1:  LoopBody;
    L2:  LoopBody;
    ...
    if tripcount < loopfactor jump End
    Loop:
    ...
    End:

It means if the unroll factor is 4, the loop body will be 7
times unrolled, 3 are in loop prologue, and 4 are in the loop.
This commit is to use a loop to execute the extra iterations
in prologue, like

        extraiters = tripcount % loopfactor
        if (extraiters == 0) jump Loop:
        else jump Prol
 Prol:  LoopBody;
        extraiters -= 1                 // Omitted if unroll factor is 2.
        if (extraiters != 0) jump Prol: // Omitted if unroll factor is 2.
        if (tripcount < loopfactor) jump End
 Loop:
 ...
 End:

Then when unroll factor is 4, the loop body will be copied by
only 5 times, 1 in the prologue loop, 4 in the original loop.
And if the unroll factor is 2, new loop won't be created, just
as the original solution.

llvm-svn: 218604

10 years ago[Thumb2] ldrexd and strexd are not defined on v7M
Oliver Stannard [Mon, 29 Sep 2014 10:57:29 +0000 (10:57 +0000)]
[Thumb2] ldrexd and strexd are not defined on v7M

The Thumb2 ldrexd and strexd instructions are not defined for
M-class architectures.

llvm-svn: 218603

10 years agoFix bug 20116 - http://llvm.org/bugs/show_bug.cgi?id=20116
Alexey Bataev [Mon, 29 Sep 2014 10:32:21 +0000 (10:32 +0000)]
Fix bug 20116 - llvm.org/bugs/show_bug.cgi?id=20116

Fixes incorrect codegen when devirtualization is aborted due to covariant return types.

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

llvm-svn: 218602

10 years ago[compiler-rt] Do not use ldrexd or strexd on v7M
Oliver Stannard [Mon, 29 Sep 2014 10:23:20 +0000 (10:23 +0000)]
[compiler-rt] Do not use ldrexd or strexd on v7M

The ldrexd and strexd instructions are undefined for the ARMv7M
architecture, so we cannot use them to implement the
__sync_fetch_and_*_8 builtins. There is no other way to implement
these without OS support, so this patch #ifdef's these functions out
for M-class architectures.

There are no tests as I cannot find any existing tests for these
builtins.

I used the __ARM_ARCH_PROFILE predefine because __ARM_FEATURE_LDREX is
deprecated and not set by clang.

llvm-svn: 218601

10 years ago[x86] Make the new vector shuffle lowering lower blends as VSELECT
Chandler Carruth [Mon, 29 Sep 2014 09:57:07 +0000 (09:57 +0000)]
[x86] Make the new vector shuffle lowering lower blends as VSELECT
nodes, and rely exclusively on its logic. This removes a ton of
duplication from the blend lowering and centralizes it in one place.

One downside is that it requires a bunch of hacks to make this work with
the current legalization framework. We have to manually speculate one
aspect of legalizing VSELECT nodes to get everything to work nicely
because the existing legalization framework isn't *actually* bottom-up.

The other grossness is that we somewhat duplicate the analysis of
constant blends. I'm on the fence here. If reviewers thing this would
look better with VSELECT when it has constant operands dumping over tho
VECTOR_SHUFFLE, we could go that way. But it would be a substantial
change because currently all of the actual blend instructions are
matched via patterns in the TD files based around VSELECT nodes (despite
them not being perfect fits for that). Suggestions welcome, but at least
this removes the rampant duplication in the backend.

llvm-svn: 218600

10 years ago[asan] Fix SELinux setup on Android-K.
Evgeniy Stepanov [Mon, 29 Sep 2014 09:48:13 +0000 (09:48 +0000)]
[asan] Fix SELinux setup on Android-K.

On pre-L devices SELinux is set up in such a way that zygote wrapper
has to be in system_file context, not zygote_exec.

llvm-svn: 218599

10 years agoclang-format: Fix GCC warning about implicit bool pointer conversion.
Daniel Jasper [Mon, 29 Sep 2014 08:07:46 +0000 (08:07 +0000)]
clang-format: Fix GCC warning about implicit bool pointer conversion.

Introduced in r217880.

llvm-svn: 218597

10 years agoVery minimal support 24-bit kalimbas. Vanilla "memory read" for data sections
Matthew Gardiner [Mon, 29 Sep 2014 08:02:24 +0000 (08:02 +0000)]
Very minimal support 24-bit kalimbas. Vanilla "memory read" for data sections
works, as do breakpoints, run and pause, display zeroth frame.

See
http://reviews.llvm.org/D5503

for a fuller description of the changes in this commit.

llvm-svn: 218596

10 years agoclang-format: [JS] Improve formatting of function literals in chains
Daniel Jasper [Mon, 29 Sep 2014 07:54:54 +0000 (07:54 +0000)]
clang-format: [JS] Improve formatting of function literals in chains

Before:
  getSomeLongPromise(.....)
      .then(
           function(value) {
             body();
             body();
           })
      .thenCatch(function(error) {
    body();
    body();
  });

After:
  getSomeLongPromise(.....)
      .then(function(value) {
        body();
        body();
      })
      .thenCatch(function(error) {
        body();
        body();
      });

llvm-svn: 218595

10 years agoIncluded cstdarg for compilation of va_start and va_end.
Matthew Gardiner [Mon, 29 Sep 2014 07:12:47 +0000 (07:12 +0000)]
Included cstdarg for compilation of va_start and va_end.

llvm-svn: 218594

10 years agoRemove dead code from DIBuilder
Jyoti Allur [Mon, 29 Sep 2014 06:32:54 +0000 (06:32 +0000)]
Remove dead code from DIBuilder

llvm-svn: 218593

10 years agotesting commit access to clang repo
Jyoti Allur [Mon, 29 Sep 2014 06:23:54 +0000 (06:23 +0000)]
testing commit access to clang repo

llvm-svn: 218592

10 years agoTests for DR600-640.
Richard Smith [Mon, 29 Sep 2014 06:03:56 +0000 (06:03 +0000)]
Tests for DR600-640.

llvm-svn: 218591

10 years agoFix "unsupported friend" diagnostic to also appear for friend functions with dependen...
Richard Smith [Mon, 29 Sep 2014 05:57:29 +0000 (05:57 +0000)]
Fix "unsupported friend" diagnostic to also appear for friend functions with dependent scopes.

llvm-svn: 218590

10 years ago[x86] Delete a bunch of really bad and totally unnecessary code in the
Chandler Carruth [Mon, 29 Sep 2014 02:01:20 +0000 (02:01 +0000)]
[x86] Delete a bunch of really bad and totally unnecessary code in the
X86 target-specific DAG combining that tried to convert VSELECT nodes
into VECTOR_SHUFFLE nodes that it "knew" would lower into
immediate-controlled blend nodes.

Turns out, we have perfectly good lowering of all these VSELECT nodes,
and indeed that lowering already knows how to handle lowering through
BLENDI to immediate-controlled blend nodes. The code just wasn't getting
used much because this thing forced the world to go through the vector
shuffle lowering. Yuck.

This also exposes that I was too aggressive in avoiding domain crossing
in v218588 with that lowering -- when the other option is to expand into
two 128-bit vectors, it is worth domain crossing. Restore that behavior
now that we have nice tests covering it.

The test updates here fall into two camps. One is where previously we
ended up with an unsigned encoding of the blend operand and now we get
a signed encoding. In most of those places there were elaborate comments
explaining exactly what these operands really mean. Rather than that,
just switch these tests to use the nicely decoded comments that make it
obvious that the final shuffle matches.

The other updates are just removing pointless domain crossing by
blending integers with PBLENDW rather than BLENDPS.

llvm-svn: 218589

10 years ago[x86] Refactor all of the VSELECT-as-blend lowering code to avoid domain
Chandler Carruth [Mon, 29 Sep 2014 01:32:54 +0000 (01:32 +0000)]
[x86] Refactor all of the VSELECT-as-blend lowering code to avoid domain
crossing and generally work more like the blend emission code in the new
vector shuffle lowering.

My goal is to have the new vector shuffle lowering just produce VSELECT
nodes that are either matched here to BLENDI or are legal and matched in
the .td files to specific blend instructions. That seems much cleaner as
there are other ways to produce a VSELECT anyways. =]

No *observable* functionality changed yet, mostly because this code
appears to be near-dead. The behavior of this lowering routine did
change though. This code being mostly dead and untestable will change
with my next commit which will also point some new tests at it.

llvm-svn: 218588

10 years agoAdd the tests for __super that I forgot to commit in as part of r218484.
Nikola Smiljanic [Mon, 29 Sep 2014 01:11:55 +0000 (01:11 +0000)]
Add the tests for __super that I forgot to commit in as part of r218484.

llvm-svn: 218587

10 years ago[x86] Improve naming and comments for VSELECT lowering.
Chandler Carruth [Mon, 29 Sep 2014 00:51:58 +0000 (00:51 +0000)]
[x86] Improve naming and comments for VSELECT lowering.

No functionality changed.

llvm-svn: 218586

10 years ago[x86] Add the dispatch skeleton to the new vector shuffle lowering for
Chandler Carruth [Mon, 29 Sep 2014 00:37:27 +0000 (00:37 +0000)]
[x86] Add the dispatch skeleton to the new vector shuffle lowering for
AVX-512.

There is no interesting logic yet. Everything ends up eventually
delegating to the generic code to split the vector and shuffle the
halves. Interestingly, that logic does a significantly better job of
lowering all of these types than the generic vector expansion code does.
Mostly, it lets most of the cases fall back to nice AVX2 code rather
than all the way back to SSE code paths.

Step 2 of basic AVX-512 support in the new vector shuffle lowering. Next
up will be to incrementally add direct support for the basic instruction
set to each type (adding tests first).

llvm-svn: 218585

10 years ago[x86] Make the split-and-lower routine fully generic by relaxing the
Chandler Carruth [Mon, 29 Sep 2014 00:21:49 +0000 (00:21 +0000)]
[x86] Make the split-and-lower routine fully generic by relaxing the
assertion, making the name generic, and improving the documentation.

Step 1 in adding very primitive support for AVX-512. No functionality
changed yet.

llvm-svn: 218584

10 years ago[x86] Teach the new vector shuffle lowering to fall back on AVX-512
Chandler Carruth [Sun, 28 Sep 2014 23:53:10 +0000 (23:53 +0000)]
[x86] Teach the new vector shuffle lowering to fall back on AVX-512
vectors.

Someone will need to build the AVX512 lowering, which should follow
AVX1 and AVX2 *very* closely for AVX512F and AVX512BW resp. I've added
a dummy test which is a port of the v8f32 and v8i32 tests from AVX and
AVX2 to v8f64 and v8i64 tests for AVX512F and AVX512BW. Hopefully this
is enough information for someone to implement proper lowering here. If
not, I'll be happy to help, but right now the AVX-512 support isn't
a priority for me.

llvm-svn: 218583

10 years ago[x86] Fix the new vector shuffle lowering's use of VSELECT for AVX2
Chandler Carruth [Sun, 28 Sep 2014 23:23:55 +0000 (23:23 +0000)]
[x86] Fix the new vector shuffle lowering's use of VSELECT for AVX2
lowerings.

This was hopelessly broken. First, the x86 backend wants '-1' to be the
element value representing true in a boolean vector, and second the
operand order for VSELECT is backwards from the actual x86 instructions.
To make matters worse, the backend is just using '-1' as the true value
to get the high bit to be set. It doesn't actually symbolically map the
'-1' to anything. But on x86 this isn't quite how it works: there *only*
the high bit is relevant. As a consequence weird non-'-1' values like
0x80 actually "work" once you flip the operands to be backwards.

Anyways, thanks to Hal for helping me sort out what these *should* be.

llvm-svn: 218582

10 years agoBuild domtree of new loops correctly
Tobias Grosser [Sun, 28 Sep 2014 22:40:36 +0000 (22:40 +0000)]
Build domtree of new loops correctly

This fixes a bug introduced in r217525.

llvm-svn: 218581

10 years agoRun DR tests in C++17 mode too.
Richard Smith [Sun, 28 Sep 2014 21:56:04 +0000 (21:56 +0000)]
Run DR tests in C++17 mode too.

llvm-svn: 218580

10 years agoAdd MachineOperand::ChangeToFPImmediate and setFPImm
Matt Arsenault [Sun, 28 Sep 2014 19:24:59 +0000 (19:24 +0000)]
Add MachineOperand::ChangeToFPImmediate and setFPImm

llvm-svn: 218579

10 years agothread state coordinator: added new thread support.
Todd Fiala [Sun, 28 Sep 2014 06:50:47 +0000 (06:50 +0000)]
thread state coordinator: added new thread support.

A new thread arriving while a pending signal notification
is outstanding will (1) add the new thread to the list of
stops expected before the deferred signal notification is
fired, (2) send a stop request for the new thread, and
(3) track the new thread as currently running.

llvm-svn: 218578

10 years agoCodeGen: Don't crash when initializing pointer-to-member fields in bases
David Majnemer [Sun, 28 Sep 2014 06:39:30 +0000 (06:39 +0000)]
CodeGen: Don't crash when initializing pointer-to-member fields in bases

Clang uses two types to talk about a C++ class, the
NonVirtualBaseLLVMType and the LLVMType.  Previously, we would allow one
of these to be packed and the other not.

This is problematic.  If both don't agree on a common subset of fields,
then routines like getLLVMFieldNo will point to the wrong field.  Solve
this by copying the 'packed'-ness of the complete type to the
non-virtual subobject.  For this to work, we need to take into account
the non-virtual subobject's size and alignment when we are computing the
layout of the complete object.

This fixes PR21089.

llvm-svn: 218577

10 years ago[x86] Fix a really silly bug that I introduced fixing another bug in the
Chandler Carruth [Sun, 28 Sep 2014 06:11:04 +0000 (06:11 +0000)]
[x86] Fix a really silly bug that I introduced fixing another bug in the
new vector shuffle target DAG combines -- it helps to actually test for
the value you want rather than just using an integer in a boolean
context.

Have I mentioned that I loathe implicit conversions recently? :: sigh ::

llvm-svn: 218576

10 years ago[x86] Fix yet another bug in the new vector shuffle lowering's handling
Chandler Carruth [Sun, 28 Sep 2014 03:30:25 +0000 (03:30 +0000)]
[x86] Fix yet another bug in the new vector shuffle lowering's handling
of widening masks.

We can't widen a zeroing mask unless both elements that would be merged
are either zeroed or undef. This is the only way to widen a mask if it
has a zeroed element.

Also clean up the code here by ordering the checks in a more logical way
and by using the symoblic values for undef and zero. I'm actually torn
on using the symbolic values because the existing code is littered with
the assumption that -1 is undef, and moreover that entries '< 0' are the
special entries. While that works with the values given to these
constants, using the symbolic constants actually makes it a bit more
opaque why this is the case.

llvm-svn: 218575

10 years agoWinCOFFObjectWriter.cpp: make write_uint32_le more efficient
Hans Wennborg [Sun, 28 Sep 2014 00:22:27 +0000 (00:22 +0000)]
WinCOFFObjectWriter.cpp: make write_uint32_le more efficient

llvm-svn: 218574

10 years ago[clang-tidy] Updated documentation
Alexander Kornienko [Sat, 27 Sep 2014 21:47:01 +0000 (21:47 +0000)]
[clang-tidy] Updated documentation

Added an example of check-specific options.

llvm-svn: 218573

10 years ago[clang-tidy] Fix documentation.
Alexander Kornienko [Sat, 27 Sep 2014 21:33:33 +0000 (21:33 +0000)]
[clang-tidy] Fix documentation.

Try using code-block: console for command-line usage examples.

llvm-svn: 218572

10 years ago[clang-tidy] Fix for the documentation.
Alexander Kornienko [Sat, 27 Sep 2014 21:27:05 +0000 (21:27 +0000)]
[clang-tidy] Fix for the documentation.

llvm-svn: 218571

10 years ago[clang-tidy] Updated documentation.
Alexander Kornienko [Sat, 27 Sep 2014 21:25:26 +0000 (21:25 +0000)]
[clang-tidy] Updated documentation.

llvm-svn: 218570

10 years ago[AArch64] Redundant store instructions should be removed as dead code
James Molloy [Sat, 27 Sep 2014 17:02:54 +0000 (17:02 +0000)]
[AArch64] Redundant store instructions should be removed as dead code

If there is a store followed by a store with the same value to the same location, then the store is dead/noop. It can be removed.

This problem is found in spec2006-197.parser.

For example,
  stur    w10, [x11, #-4]
  stur    w10, [x11, #-4]
Then one of the two stur instructions can be removed.

Patch by David Xu!

llvm-svn: 218569

10 years agoEnable llgs to build against experimental Android AOSP lldb/llvm/clang/compiler-rt...
Todd Fiala [Sat, 27 Sep 2014 16:54:22 +0000 (16:54 +0000)]
Enable llgs to build against experimental Android AOSP lldb/llvm/clang/compiler-rt repos.

See http://reviews.llvm.org/D5495 for more details.

These are changes that are part of an effort to support building llgs, within the AOSP source tree, using the Android.mk
build system, when using the llvm/clang/lldb git repos from AOSP replaced with the experimental ones currently in
github.com/tfiala/aosp-{llvm,clang,lldb,compiler-rt}.

llvm-svn: 218568

10 years agoFix llvm::huge_valf multiple initializations with Visual C++.
Yaron Keren [Sat, 27 Sep 2014 14:41:29 +0000 (14:41 +0000)]
Fix llvm::huge_valf multiple initializations with Visual C++.

llvm::huge_valf is defined in a header file, so it is initialized
multiple times in every compiled unit upon program startup.

With non-VC compilers huge_valf is set to a HUGE_VALF which the
compiler can probably optimize out.

With VC numeric_limits<float>::infinity() does not return a number
but a runtime structure member which therotically may change
between calls so the compiler does not optimize out the
initialization and it happens many times. It can be easily seen by
placing a breakpoint on the initialization line.

This patch moves llvm::huge_valf initialization to a source file
instead of the header.

llvm-svn: 218567

10 years ago[RTC] Bail if too many parameters are involved in a RTC access.
Johannes Doerfert [Sat, 27 Sep 2014 11:02:39 +0000 (11:02 +0000)]
[RTC] Bail if too many parameters are involved in a RTC access.

  If too many parameters are involved in accesses used to create RTCs
  we might end up with enormous compile times and RTC expressions.
  The reason is that the lexmin/lexmax is dependent on all these
  parameters and isl might need to create a case for every "ordering"
  of them (e.g., p0 <= p1 <= p2, p1 <= p0 <= p2, ...).

  The exact number of parameters allowed in accesses is defined by the
  command line option -polly-rtc-max-parameters=XXX and set by default
  to 8.

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

llvm-svn: 218566

10 years ago[x86] Fix yet another issue with widening vector shuffle elements.
Chandler Carruth [Sat, 27 Sep 2014 08:40:33 +0000 (08:40 +0000)]
[x86] Fix yet another issue with widening vector shuffle elements.
I spotted this by inspection when debugging something else, so I have no
test case what-so-ever, and am not even sure it is possible to
realistically trigger the bug. But this is what was intended here.

llvm-svn: 218565

10 years agoUpdate test case to match minor formatting change introduced in r218563.
Craig Topper [Sat, 27 Sep 2014 05:36:53 +0000 (05:36 +0000)]
Update test case to match minor formatting change introduced in r218563.

llvm-svn: 218564