platform/upstream/llvm.git
10 years agoOnly use fast stack unwinding for sanitizers failure reports on FreeBSD
Viktor Kutuzov [Thu, 10 Jul 2014 09:11:15 +0000 (09:11 +0000)]
Only use fast stack unwinding for sanitizers failure reports on FreeBSD
Differential Revision: http://reviews.llvm.org/D4420

llvm-svn: 212691

10 years agoFix getting environment variables for sanitizers needs on FreeBSD
Viktor Kutuzov [Thu, 10 Jul 2014 08:53:29 +0000 (08:53 +0000)]
Fix getting environment variables for sanitizers needs on FreeBSD
Differential Revision: http://reviews.llvm.org/D4229

llvm-svn: 212690

10 years agoAdd clang headers that fix machine-dependent definitions on FreeBSD 9.2
Viktor Kutuzov [Thu, 10 Jul 2014 08:43:39 +0000 (08:43 +0000)]
Add clang headers that fix machine-dependent definitions on FreeBSD 9.2
Differential Revision: http://reviews.llvm.org/D3908

llvm-svn: 212689

10 years agoA test case for not asserting in isDereferenceablePointer upon unsized types
Hal Finkel [Thu, 10 Jul 2014 07:04:37 +0000 (07:04 +0000)]
A test case for not asserting in isDereferenceablePointer upon unsized types

This is the test case for r212687.

llvm-svn: 212688

10 years agoFix isDereferenceablePointer not to try to take the size of an unsized type.
Hal Finkel [Thu, 10 Jul 2014 06:06:11 +0000 (06:06 +0000)]
Fix isDereferenceablePointer not to try to take the size of an unsized type.

I'll add a test-case shortly.

llvm-svn: 212687

10 years agoAllow isDereferenceablePointer to look through some bitcasts
Hal Finkel [Thu, 10 Jul 2014 05:27:53 +0000 (05:27 +0000)]
Allow isDereferenceablePointer to look through some bitcasts

isDereferenceablePointer should not give up upon encountering any bitcast. If
we're casting from a pointer to a larger type to a pointer to a small type, we
can continue by examining the bitcast's operand. This missing capability
was noted in a comment in the function.

In order for this to work, isDereferenceablePointer now takes an optional
DataLayout pointer (essentially all callers already had such a pointer
available). Most code uses isDereferenceablePointer though
isSafeToSpeculativelyExecute (which already took an optional DataLayout
pointer), and to enable the LICM test case, LICM needs to actually provide its DL
pointer to isSafeToSpeculativelyExecute (which it was not doing previously).

llvm-svn: 212686

10 years agoFix a type mismatch in NativeProcessLinux that shows up in 32-bit builds.
Todd Fiala [Thu, 10 Jul 2014 05:25:39 +0000 (05:25 +0000)]
Fix a type mismatch in NativeProcessLinux that shows up in 32-bit builds.

http://llvm.org/bugs/show_bug.cgi?id=20255

llvm-svn: 212685

10 years agoMC: modernise for loop
Saleem Abdulrasool [Thu, 10 Jul 2014 04:50:09 +0000 (04:50 +0000)]
MC: modernise for loop

Convert a for loop to range bsaed form.  NFC.

llvm-svn: 212684

10 years agoMC: add and use an accessor for WinCFI
Saleem Abdulrasool [Thu, 10 Jul 2014 04:50:06 +0000 (04:50 +0000)]
MC: add and use an accessor for WinCFI

This adds a utility method to access the WinCFI information in bulk and uses
that to iterate rather than requesting the count and individually iterating
them.  This is in preparation for restructuring WinCFI handling to enable more
clear sharing across architectures to enable unwind information emission for
Windows on ARM.

llvm-svn: 212683

10 years agoRemove move assignment operator to appease older GCCs.
Peter Collingbourne [Thu, 10 Jul 2014 04:39:40 +0000 (04:39 +0000)]
Remove move assignment operator to appease older GCCs.

llvm-svn: 212682

10 years agoFixes for broken Debian build - g++ 4.7 support.
Todd Fiala [Thu, 10 Jul 2014 04:39:13 +0000 (04:39 +0000)]
Fixes for broken Debian build - g++ 4.7 support.

These fix the broken debian lldb build, which is using g++ 4.7.2.

TypeFormat changes:
1. stopped using the C++11 "dtor = default;" construct.
The generated default destructor in the two derived classes wanted
them to have a different throws() semantic that was causing 4.7 to
fail to generate it.  I switched these to empty destructors defined
in the .cpp file.

2. Switched the m_types map from an ordered map to an unordered_map.
g++ 4.7's c++ library supports the C++11 emplace() used by TypeFormat
but the same c++ library's map impl does not.  Since TypeFormat didn't
look like it depended on ordering in the map, I just switched it to
a std::unordered_map.

NativeProcessLinux - g++ 4.7 chokes on lexing the "<::" in
static_cast<::pid_t>(wpid).  g++ 4.8+ and clang are fine with it.
I just put a space in between the "<" and the "::" and that cleared
it up.

llvm-svn: 212681

10 years ago[x86] Initial improvements to the new shuffle lowering for v16i8
Chandler Carruth [Thu, 10 Jul 2014 04:34:06 +0000 (04:34 +0000)]
[x86] Initial improvements to the new shuffle lowering for v16i8
shuffles specifically for cases where a small subset of the elements in
the input vector are actually used.

This is specifically targetted at improving the shuffles generated for
trunc operations, but also helps out splat-like operations.

There is still some really low-hanging fruit here that I want to address
but this is a huge step in the right direction.

llvm-svn: 212680

10 years agoExplicitly define move constructor and move assignment operator to appease MSVC.
Peter Collingbourne [Thu, 10 Jul 2014 04:29:06 +0000 (04:29 +0000)]
Explicitly define move constructor and move assignment operator to appease MSVC.

llvm-svn: 212679

10 years agoSpecialCaseList: use std::unique_ptr.
Peter Collingbourne [Thu, 10 Jul 2014 03:55:02 +0000 (03:55 +0000)]
SpecialCaseList: use std::unique_ptr.

llvm-svn: 212678

10 years ago[AArch64]Fix an assertion failure in DAG Combiner about concating 2 build_vector.
Hao Liu [Thu, 10 Jul 2014 03:41:50 +0000 (03:41 +0000)]
[AArch64]Fix an assertion failure in DAG Combiner about concating 2 build_vector.

llvm-svn: 212677

10 years agoR600/SI: Add support for llvm.convert.{to|from}.fp16
Matt Arsenault [Thu, 10 Jul 2014 03:22:20 +0000 (03:22 +0000)]
R600/SI: Add support for llvm.convert.{to|from}.fp16

llvm-svn: 212676

10 years agoFix types in documentation.
Matt Arsenault [Thu, 10 Jul 2014 03:22:16 +0000 (03:22 +0000)]
Fix types in documentation.

The examples were using f32, but the IR type is called float

llvm-svn: 212675

10 years ago[x86] Refactor some of the new code for lowering v16i8 shuffles to
Chandler Carruth [Thu, 10 Jul 2014 02:24:26 +0000 (02:24 +0000)]
[x86] Refactor some of the new code for lowering v16i8 shuffles to
remove duplication and make it easier to select different strategies.

No functionality changed.

llvm-svn: 212674

10 years agoAdd a new 'stresstest' category, set the api/multiple-debuggers test case as a stress...
Jason Molenda [Thu, 10 Jul 2014 02:21:16 +0000 (02:21 +0000)]
Add a new 'stresstest' category, set the api/multiple-debuggers test case as a stresstest.

llvm-svn: 212673

10 years agoAdd lit configs for libcxxabi tests.
Dan Albert [Thu, 10 Jul 2014 02:20:11 +0000 (02:20 +0000)]
Add lit configs for libcxxabi tests.

This makes running libcxxabi tests on Linux _much_ easier.
Adds a check-libcxxabi target to cmake.

Also defaults to building a dynamic libc++abi. This is so that the
default options still test the libc++abi that is being built. There are
two problems with testing a static libc++abi. In the case of a
standalone build, the tests will link the system's libc++, which might
not have been built against our libc++abi. In the case of an in tree
build, libc++ will prefer a dynamic libc++abi from the system over a
static libc++abi from the output directory.

llvm-svn: 212672

10 years agoAdd a new test in api/multiple-debuggers which tries to create 50
Jason Molenda [Thu, 10 Jul 2014 02:17:31 +0000 (02:17 +0000)]
Add a new test in api/multiple-debuggers which tries to create 50
debug sessions simultaneously to expose race conditoin/locking
issues.

This directory has an inferior program, testprog.cpp that has a
couple of functions we can put breakpoints on.

It has a driver program, multi-process-driver.cpp, which links
against the LLDB solib and uses the SB APIs.  It creates 50 pthreads,
creates a debugger on all of them, launches a debug session of the
inferior testprog, hits a couple breakpoints, walks the stack,
continues, etc., and then kills the inferior and ends the debug
session.

A pass is if all fifty debug sessions complete successfully
in the alloted time (~60 seconds).

We may need to tweak this one to work correctly on different
platforms/targets but I wanted to get it checked in to start.

llvm-svn: 212671

10 years agoPrevent link warnings due to -Wframe-larger-than=
Alp Toker [Thu, 10 Jul 2014 02:13:29 +0000 (02:13 +0000)]
Prevent link warnings due to -Wframe-larger-than=

Although this is nominally a -W option, we actually handle it in the driver
exactly as an f-group flag that's translated directly to -mllvm.

That means f_Group (and unintuitively, not W_Group) has the semantics we want
to make it behave like a standard warning flag: no automatic forwarding, no
warning for link invocations and compile-only.

Silences diagnostics like:

  [691/1545] Linking CXX executable bin/llvm-diff
  clang-3.5: warning: argument unused during compilation: '-Wframe-larger-than=2048'

(Hopefully we can move towards handling these in the frontend but that'll
require some infrastructure work.)

llvm-svn: 212670

10 years agoMS ABI: Fix __fastcall methods that return structs
Reid Kleckner [Thu, 10 Jul 2014 01:58:55 +0000 (01:58 +0000)]
MS ABI: Fix __fastcall methods that return structs

The sret paramater consumes the register after the implicit 'this'
parameter, as with other calling conventions.

Fixes PR20278, which turned out to be very easy.

llvm-svn: 212669

10 years ago[dfsan] Handle bitcast aliases.
Peter Collingbourne [Thu, 10 Jul 2014 01:30:39 +0000 (01:30 +0000)]
[dfsan] Handle bitcast aliases.

llvm-svn: 212668

10 years agoCleanup. No functionality change.
Richard Smith [Thu, 10 Jul 2014 01:20:17 +0000 (01:20 +0000)]
Cleanup. No functionality change.

llvm-svn: 212667

10 years ago[Driver] Expose getARMCPUForMArch() function in the Driver API; NFC.
Argyrios Kyrtzidis [Thu, 10 Jul 2014 01:03:37 +0000 (01:03 +0000)]
[Driver] Expose getARMCPUForMArch() function in the Driver API; NFC.

llvm-svn: 212666

10 years agoFix configure+make build of profile runtime library
Alexey Samsonov [Thu, 10 Jul 2014 00:53:20 +0000 (00:53 +0000)]
Fix configure+make build of profile runtime library

llvm-svn: 212665

10 years ago[ASan] Force the compiler to generate frame pointer in certain Mac-specific interceptors.
Alexey Samsonov [Thu, 10 Jul 2014 00:06:53 +0000 (00:06 +0000)]
[ASan] Force the compiler to generate frame pointer in certain Mac-specific interceptors.

Patch by Kuba Brecka!

llvm-svn: 212664

10 years ago[Sanitizer] Remove SANITIZER_NEEDS_SEGV from shared sanitizer_common headers.
Alexey Samsonov [Wed, 9 Jul 2014 23:59:40 +0000 (23:59 +0000)]
[Sanitizer] Remove SANITIZER_NEEDS_SEGV from shared sanitizer_common headers.

Otherwise, it can be accidentally redefined when we build specific sanitizer
runtime. This definition should be provided only once - when we build
sanitizer_common library.

llvm-svn: 212663

10 years agoSkip tests that are intermittent on Linux, fix gdb-remote port-grabbing code.
Todd Fiala [Wed, 9 Jul 2014 23:10:43 +0000 (23:10 +0000)]
Skip tests that are intermittent on Linux, fix gdb-remote port-grabbing code.

Marked skipped for Linux:
TestCallStopAndContinue
TestConvenienceVariables
TestStopHookMultipleThreads

Fixed up gdb-remote port-grabbing code to use a random port in a wide range,
and to allow that to fail more gracefully.  This appears to have solved some
gdb-remote intermittent failing behavior.

llvm-svn: 212662

10 years ago[SDAG] Make the new zext-vector-inreg node default to expand so targets
Chandler Carruth [Wed, 9 Jul 2014 22:53:04 +0000 (22:53 +0000)]
[SDAG] Make the new zext-vector-inreg node default to expand so targets
don't need to set it manually.

This is based on feedback from Tom who pointed out that if every target
needs to handle this we need to reach out to those maintainers. In fact,
it doesn't make sense to duplicate everything when anything other than
expand seems unlikely at this stage.

llvm-svn: 212661

10 years agoSkip TestCallStopAndContinue and TestCallThatRestarts on Darwin.
Todd Fiala [Wed, 9 Jul 2014 22:03:30 +0000 (22:03 +0000)]
Skip TestCallStopAndContinue and TestCallThatRestarts on Darwin.

These are failing intermittently.

See http://llvm.org/bugs/show_bug.cgi?id=19246 for TestCallThatRestarts.  Also applies to Linux.
See http://llvm.org/bugs/show_bug.cgi?id=20274 for TestCallStopAndContinue.

llvm-svn: 212660

10 years agoMarked TestTargetAPI.test_launch_new_process_and_redirect_stdout_with_* as XFAIL...
Todd Fiala [Wed, 9 Jul 2014 21:24:41 +0000 (21:24 +0000)]
Marked TestTargetAPI.test_launch_new_process_and_redirect_stdout_with_* as XFAIL on Darwin.

See http://llvm.org/bugs/show_bug.cgi?id=20273

llvm-svn: 212659

10 years agoRemoved the "-fix" suffix from tests that verify both fixes and messages.
Alexander Kornienko [Wed, 9 Jul 2014 21:21:39 +0000 (21:21 +0000)]
Removed the "-fix" suffix from tests that verify both fixes and messages.

llvm-svn: 212658

10 years agoTestRealDefinition tests marked XFAIL on Darwin.
Todd Fiala [Wed, 9 Jul 2014 21:21:39 +0000 (21:21 +0000)]
TestRealDefinition tests marked XFAIL on Darwin.

http://llvm.org/bugs/show_bug.cgi?id=20272

llvm-svn: 212657

10 years agoMarked failing TestObjCDynamicValue tests as XFAIL on Darwin.
Todd Fiala [Wed, 9 Jul 2014 21:19:03 +0000 (21:19 +0000)]
Marked failing TestObjCDynamicValue tests as XFAIL on Darwin.

See http://llvm.org/bugs/show_bug.cgi?id=20271

llvm-svn: 212656

10 years agoMarked failing TestObjCDynamicSBType tests XFAIL on Darwin.
Todd Fiala [Wed, 9 Jul 2014 21:15:46 +0000 (21:15 +0000)]
Marked failing TestObjCDynamicSBType tests XFAIL on Darwin.

See http://llvm.org/bugs/show_bug.cgi?id=20270

llvm-svn: 212655

10 years agoMarked failing TestHiddenIvars tests as XFAIL on Darwin.
Todd Fiala [Wed, 9 Jul 2014 21:10:13 +0000 (21:10 +0000)]
Marked failing TestHiddenIvars tests as XFAIL on Darwin.

See http://llvm.org/bugs/show_bug.cgi?id=20269

llvm-svn: 212654

10 years agoCheck messages and fixes in the same test.
Alexander Kornienko [Wed, 9 Jul 2014 21:09:26 +0000 (21:09 +0000)]
Check messages and fixes in the same test.

Summary: This reduces duplication of test code and improves locality of checks.

Reviewers: sbenza, djasper

Reviewed By: sbenza, djasper

Subscribers: cfe-commits

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

llvm-svn: 212653

10 years agoMove GOTPass and StubsPass from Core to MachO
Nick Kledzik [Wed, 9 Jul 2014 21:04:24 +0000 (21:04 +0000)]
Move GOTPass and StubsPass from Core to MachO

llvm-svn: 212652

10 years agoAdd a reset method to the counting predicates in the test suite
Marshall Clow [Wed, 9 Jul 2014 21:04:22 +0000 (21:04 +0000)]
Add a reset method to the counting predicates in the test suite

llvm-svn: 212651

10 years agoMarked TestObjCMethods failing tests XFAIL, fixed cleanup code, removed now-passing...
Todd Fiala [Wed, 9 Jul 2014 21:02:52 +0000 (21:02 +0000)]
Marked TestObjCMethods failing tests XFAIL, fixed cleanup code, removed now-passing expected failure markers.

All tests matching '-p TestObjCMethods' now are marked correctly for MacOSX, and some
error classes have been removed in cleanup code looking for files that
might not exist due to previous failure.

See http://llvm.org/bugs/show_bug.cgi?id=20267

llvm-svn: 212650

10 years agoRecommit r212203: Don't try to construct debug LexicalScopes hierarchy for functions...
David Blaikie [Wed, 9 Jul 2014 21:02:41 +0000 (21:02 +0000)]
Recommit r212203: Don't try to construct debug LexicalScopes hierarchy for functions that do not have top level debug information.

Reverted by Eric Christopher (Thanks!) in r212203 after Bob Wilson
reported LTO issues. Duncan Exon Smith and Aditya Nandakumar helped
provide a reduced reproduction, though the failure wasn't too hard to
guess, and even easier with the example to confirm.

The assertion that the subprogram metadata associated with an
llvm::Function matches the scope data referenced by the DbgLocs on the
instructions in that function is not valid under LTO. In LTO, a C++
inline function might exist in multiple CUs and the subprogram metadata
nodes will refer to the same llvm::Function. In this case, depending on
the order of the CUs, the first intance of the subprogram metadata may
not be the one referenced by the instructions in that function and the
assertion will fail.

A test case (test/DebugInfo/cross-cu-linkonce-distinct.ll) is added, the
assertion removed and a comment added to explain this situation.

Original commit message:

If a function isn't actually in a CU's subprogram list in the debug info
metadata, ignore all the DebugLocs and don't try to build scopes, track
variables, etc.

While this is possibly a minor optimization, it's also a correctness fix
for an incoming patch that will add assertions to LexicalScopes and the
debug info verifier to ensure that all scope chains lead to debug info
for the current function.

Fix up a few test cases that had broken/incomplete debug info that could
violate this constraint.

Add a test case where this occurs by design (inlining a
debug-info-having function in an attribute nodebug function - we want
this to work because /if/ the nodebug function is then inlined into a
debug-info-having function, it should be fine (and will work fine - we
just stitch the scopes up as usual), but should the inlining not happen
we need to not assert fail either).

llvm-svn: 212649

10 years agoMarked failing test XFAIL for TestRegisterVariables.test_with_dsym_and_run_command...
Todd Fiala [Wed, 9 Jul 2014 20:45:09 +0000 (20:45 +0000)]
Marked failing test XFAIL for TestRegisterVariables.test_with_dsym_and_run_command on Darwin

See http://llvm.org/bugs/show_bug.cgi?id=20266

llvm-svn: 212648

10 years agoMarked failing Darwin TestProcessLaunch tests as XFAIL
Todd Fiala [Wed, 9 Jul 2014 20:42:14 +0000 (20:42 +0000)]
Marked failing Darwin TestProcessLaunch tests as XFAIL

See http://llvm.org/bugs/show_bug.cgi?id=20265

llvm-svn: 212647

10 years agoTestDataFormatterStdVector.test_with_dsym_and_run_command marked XFAIL on Darwin
Todd Fiala [Wed, 9 Jul 2014 20:38:27 +0000 (20:38 +0000)]
TestDataFormatterStdVector.test_with_dsym_and_run_command marked XFAIL on Darwin

See http://llvm.org/bugs/show_bug.cgi?id=20264

llvm-svn: 212646

10 years agoDisable TestDataFormatterStdMap.test_with_dsym_and_run_command on Darwin
Todd Fiala [Wed, 9 Jul 2014 20:33:51 +0000 (20:33 +0000)]
Disable TestDataFormatterStdMap.test_with_dsym_and_run_command on Darwin

See http://llvm.org/bugs/show_bug.cgi?id=20263

llvm-svn: 212645

10 years agoMake sure the "command regex add" has a unique name for editline history purposes.
Greg Clayton [Wed, 9 Jul 2014 20:18:54 +0000 (20:18 +0000)]
Make sure the "command regex add" has a unique name for editline history purposes.

llvm-svn: 212644

10 years agoDecouple llvm::SpecialCaseList text representation and its LLVM IR semantics.
Alexey Samsonov [Wed, 9 Jul 2014 19:40:08 +0000 (19:40 +0000)]
Decouple llvm::SpecialCaseList text representation and its LLVM IR semantics.

Turn llvm::SpecialCaseList into a simple class that parses text files in
a specified format and knows nothing about LLVM IR. Move this class into
LLVMSupport library. Implement two users of this class:
  * DFSanABIList in DFSan instrumentation pass.
  * SanitizerBlacklist in Clang CodeGen library.
The latter will be modified to use actual source-level information from frontend
(source file names) instead of unstable LLVM IR things (LLVM Module identifier).

Remove dependency edge from ClangCodeGen/ClangDriver to LLVMTransformUtils.

No functionality change.

llvm-svn: 212643

10 years agoDon't check lint for SpecialCaseList.cpp
Alexey Samsonov [Wed, 9 Jul 2014 19:29:10 +0000 (19:29 +0000)]
Don't check lint for SpecialCaseList.cpp

llvm-svn: 212642

10 years agoUse simpler constructor for range adapter.
Tim Northover [Wed, 9 Jul 2014 19:14:34 +0000 (19:14 +0000)]
Use simpler constructor for range adapter.

It is a good idea, it's slightly clearer and simpler. Unfortunately
the headline news is: we save one line!

llvm-svn: 212641

10 years agoAdd trunc (select c, a, b) -> select c (trunc a), (trunc b) combine.
Matt Arsenault [Wed, 9 Jul 2014 19:12:07 +0000 (19:12 +0000)]
Add trunc (select c, a, b) -> select c (trunc a), (trunc b) combine.

Do this if the truncate is free and the select is legal.

llvm-svn: 212640

10 years agoMark failing tests in TestDataFormatterObjC on Darwin as XFAIL
Todd Fiala [Wed, 9 Jul 2014 19:00:21 +0000 (19:00 +0000)]
Mark failing tests in TestDataFormatterObjC on Darwin as XFAIL

See http://llvm.org/bugs/show_bug.cgi?id=20260 for more details.

llvm-svn: 212639

10 years agoAArch64: Better codegen for storing to __fp16.
Jim Grosbach [Wed, 9 Jul 2014 18:55:52 +0000 (18:55 +0000)]
AArch64: Better codegen for storing to __fp16.

Storing will generally be immediately preceded by rounding from an f32
or f64, so make sure to match those patterns directly to convert into the
FPR16 register class directly rather than going through the integer GPRs.

This also eliminates an extra step in the convert-from-f64 path
which was first converting to f32 and then to f16 from there.

rdar://17594379

llvm-svn: 212638

10 years agoChange an assert() to a diagnostic.
Jim Grosbach [Wed, 9 Jul 2014 18:55:49 +0000 (18:55 +0000)]
Change an assert() to a diagnostic.

llvm-svn: 212637

10 years agoTargetRegisterInfo: Remove function that fell out of use years ago.
Benjamin Kramer [Wed, 9 Jul 2014 18:53:57 +0000 (18:53 +0000)]
TargetRegisterInfo: Remove function that fell out of use years ago.

llvm-svn: 212636

10 years agoUpdate ReleaseNotes to mention Atomic NAND semantic changes.
Cameron McInally [Wed, 9 Jul 2014 18:29:55 +0000 (18:29 +0000)]
Update ReleaseNotes to mention Atomic NAND semantic changes.

llvm-svn: 212635

10 years ago[X86] AVX512: Enable it in the Loop Vectorizer
Adam Nemet [Wed, 9 Jul 2014 18:22:33 +0000 (18:22 +0000)]
[X86] AVX512: Enable it in the Loop Vectorizer

This lets us experiment with 512-bit vectorization without passing
force-vector-width manually.

The code generated for a simple integer memset loop is properly vectorized.
Disassembly is still broken for it though :(.

llvm-svn: 212634

10 years agoMake AArch64FastISel::EmitIntExt explicitly check its source and destination types
Louis Gerbarg [Wed, 9 Jul 2014 17:54:32 +0000 (17:54 +0000)]
Make AArch64FastISel::EmitIntExt explicitly check its source and destination types

This is a follow up to r212492. There should be no functional difference, but
this patch makes it clear that SrcVT must be an i1/i8/16/i32 and DestVT must be
an i8/i16/i32/i64.

rdar://17516686

llvm-svn: 212633

10 years agoremoved duplicate testcase
Sanjay Patel [Wed, 9 Jul 2014 17:49:58 +0000 (17:49 +0000)]
removed duplicate testcase

llvm-svn: 212632

10 years agoSema: Allow aliases to have incomplete type
David Majnemer [Wed, 9 Jul 2014 17:15:52 +0000 (17:15 +0000)]
Sema: Allow aliases to have incomplete type

gcc supports this behavior and it is pervasively used inside the Linux
kernel.

Note that both gcc and clang will reject code that attempts to do this
in a C++ language mode.

This fixes PR17998.

llvm-svn: 212631

10 years agoDont' use a random probe & alloc strategy for the IRMemoryMap.
Zachary Turner [Wed, 9 Jul 2014 16:42:27 +0000 (16:42 +0000)]
Dont' use a random probe & alloc strategy for the IRMemoryMap.

The current strategy for host allocation is to choose a random
address and attempt to allocate there, eventually failing if the
allocation cannot be satisfied.

The C standard only guarantees that RAND_MAX >= 32767, so for
platforms that use a very small RAND_MAX allocations will fail
with very high probability.  On such platforms (Windows is one),
you can reproduce this trivially by running lldb, typing "expr (3)"
and then hitting enter you see a failure.  Failures generally
happen with a frequency of about 1 failure every 5 evaluations.

There is no good reason that allocations need to look like "real"
pointers, so this patch changes the allocation scheme to simply
jump straight to the end and grab a free chunk of memory.

Reviewed By: Sean Callanan

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

llvm-svn: 212630

10 years agoFix for PR20059 (instcombine reorders shufflevector after instruction that may trap)
Sanjay Patel [Wed, 9 Jul 2014 16:34:54 +0000 (16:34 +0000)]
Fix for PR20059 (instcombine reorders shufflevector after instruction that may trap)

In PR20059 ( http://llvm.org/pr20059 ), instcombine eliminates shuffles that are necessary before performing an operation that can trap (srem).

This patch calls isSafeToSpeculativelyExecute() and bails out of the optimization in SimplifyVectorOp() if needed.

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

llvm-svn: 212629

10 years agoFix tests broken by the OptionValidator changes.
Zachary Turner [Wed, 9 Jul 2014 16:32:07 +0000 (16:32 +0000)]
Fix tests broken by the OptionValidator changes.

The getopt library has a structure called option (lowercase).  We
have a structure called Option (uppercase).  previously the two
structures had exactly the same definitions, and we were doing a
C-style cast of an Option* to an option*.  C-style casts don't
bother to warn you when you cast to unrelated types, but in the
original OptionValidator patch I modified the definition of Option.

This patch fixes the errors by building an array of option
structures and filling it out the correct way before passing it to
the getopt library.

This also fixes one other source of test failures: an uninitialized
read that occurs due to not initializing a field of the
OptionDefinition.

Reviewed By: Todd Fiala

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

llvm-svn: 212628

10 years agoRevert "Fix broken tests due to new error output."
Zachary Turner [Wed, 9 Jul 2014 16:31:49 +0000 (16:31 +0000)]
Revert "Fix broken tests due to new error output."

This reverts commit ec7c94f8e6860968d384b578e5564a9c55c80b4a and
re-enables OptionValidators.

llvm-svn: 212627

10 years agoAdd Imagination Technologies to the vendors in llvm::Triple
Daniel Sanders [Wed, 9 Jul 2014 16:03:10 +0000 (16:03 +0000)]
Add Imagination Technologies to the vendors in llvm::Triple

Summary: This is a pre-requisite for supporting the mips-img-linux-gnu triple in clang.

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

llvm-svn: 212626

10 years ago[mips][mips64r6] Implement -mips32r6 and -mips64r6 aliases to -march=mips32r6 and...
Daniel Sanders [Wed, 9 Jul 2014 14:21:18 +0000 (14:21 +0000)]
[mips][mips64r6] Implement -mips32r6 and -mips64r6 aliases to -march=mips32r6 and -march=mips64r6

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

llvm-svn: 212625

10 years agoProspective legacy build system fix following r212620
Alp Toker [Wed, 9 Jul 2014 14:12:55 +0000 (14:12 +0000)]
Prospective legacy build system fix following r212620

llvm-svn: 212624

10 years agoRemove dead code from r212620
Alp Toker [Wed, 9 Jul 2014 14:09:52 +0000 (14:09 +0000)]
Remove dead code from r212620

llvm-svn: 212622

10 years agoFix 'source-level' hyphenations
Alp Toker [Wed, 9 Jul 2014 14:06:35 +0000 (14:06 +0000)]
Fix 'source-level' hyphenations

llvm-svn: 212621

10 years agocc1as: consolidate option flags with cc1 and eliminate duplication
Alp Toker [Wed, 9 Jul 2014 14:05:11 +0000 (14:05 +0000)]
cc1as: consolidate option flags with cc1 and eliminate duplication

The clang -cc1as options are nearly a strict subset of -cc1. Instead of
duplicating the definitions and documentation, let's go ahead and share the
definitions in a similar way the current handling of combined driver and
frontend flags, eliminating some of the vestigial legacy surrounding the
assembler subcommand.

llvm-svn: 212620

10 years ago[mips][mips64r6] Define _MIPS_FPSET, __mips_fpr, and __mips_nan2008 correctly on...
Daniel Sanders [Wed, 9 Jul 2014 13:56:23 +0000 (13:56 +0000)]
[mips][mips64r6] Define _MIPS_FPSET, __mips_fpr, and __mips_nan2008 correctly on MIPS32r6/MIPS64r6

Summary:
This removes the need to pass -mnan=2008 explicitly to be able to compile
the test-suite for MIPS32r6/MIPS64r6.

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

llvm-svn: 212619

10 years ago[mips] clz is defined to give 32 for zero. Similarly, dclz gives 64.
Daniel Sanders [Wed, 9 Jul 2014 13:43:19 +0000 (13:43 +0000)]
[mips] clz is defined to give 32 for zero. Similarly, dclz gives 64.

Summary:
While debugging another issue, I noticed that Mips currently specifies that the
count leading zero builtins are undefined when the input is zero. The
architecture specifications say that the clz and dclz instructions write 32 or
64 respectively when given zero.

This doesn't fix any bugs that I'm aware of but it may improve optimisation in
some cases.

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

llvm-svn: 212618

10 years agoclang-format: Fix behavior around pointer-to-member invocations.
Daniel Jasper [Wed, 9 Jul 2014 13:07:57 +0000 (13:07 +0000)]
clang-format: Fix behavior around pointer-to-member invocations.

Before:
  (aaaaaaaaaa->*
   bbbbbbb)(aaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa));

After:
  (aaaaaaaaaa->*bbbbbbb)(
      aaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa));

llvm-svn: 212617

10 years ago[all]: Use range-based ArgList adapter instead of filtered_begin/filtered_end
Tim Northover [Wed, 9 Jul 2014 13:03:54 +0000 (13:03 +0000)]
[all]: Use range-based ArgList adapter instead of filtered_begin/filtered_end

Some of those loops were pretty monstrous.

llvm-svn: 212616

10 years agoGeneric: add range-adapter for option parsing.
Tim Northover [Wed, 9 Jul 2014 13:03:37 +0000 (13:03 +0000)]
Generic: add range-adapter for option parsing.

I want to use it in lld, but while I'm here I'll update LLVM uses.

llvm-svn: 212615

10 years ago[x86] Fix a bug in my new zext-vector-inreg DAG trickery where we were
Chandler Carruth [Wed, 9 Jul 2014 12:36:54 +0000 (12:36 +0000)]
[x86] Fix a bug in my new zext-vector-inreg DAG trickery where we were
not widening the input type to the node sufficiently to let the ext take
place in a register.

This would in turn result in a mysterious bitcast assertion failure
downstream. First change here is to add back the helpful assert I had in
an earlier version of the code to catch this immediately.

Next change is to add support to the type legalization to detect when we
have widened the operand either too little or too much (for whatever
reason) and find a size-matched legal vector type to convert it to
first. This can also fail so we get a new fallback path, but that seems
OK.

With this, we no longer crash on vec_cast2.ll when using widening. I've
also added the CHECK lines for the zero-extend cases here. We still need
to support sign-extend and trunc (or something) to get plausible code
for the other two thirds of this test which is one of the regression
tests that showed the most scalarization when widening was
force-enabled. Slowly closing in on widening being a viable legalization
strategy without it resorting to scalarization at every turn. =]

llvm-svn: 212614

10 years ago[Mips] Make rel-dynamic-08.test test case independent from external input files.
Simon Atanasyan [Wed, 9 Jul 2014 12:31:11 +0000 (12:31 +0000)]
[Mips] Make rel-dynamic-08.test test case independent from external input files.

llvm-svn: 212613

10 years agoSink two variables only used in an assert into the assert itself. Should
Chandler Carruth [Wed, 9 Jul 2014 11:13:16 +0000 (11:13 +0000)]
Sink two variables only used in an assert into the assert itself. Should
fix the release builds with Werror.

llvm-svn: 212612

10 years agoX86: When lowering v8i32 himuls use the correct shuffle masks for AVX2.
Benjamin Kramer [Wed, 9 Jul 2014 11:12:39 +0000 (11:12 +0000)]
X86: When lowering v8i32 himuls use the correct shuffle masks for AVX2.

Turns out my trick of using the same masks for SSE4.1 and AVX2 didn't work out
as we have to blend two vectors. While there remove unecessary cross-lane moves
from the shuffles so the backend can lower it to palignr instead of vperm.

Fixes PR20118, a miscompilation of vector sdiv by constant on AVX2.

llvm-svn: 212611

10 years ago[x86] Add a ZERO_EXTEND_VECTOR_INREG DAG node and use it when widening
Chandler Carruth [Wed, 9 Jul 2014 10:58:18 +0000 (10:58 +0000)]
[x86] Add a ZERO_EXTEND_VECTOR_INREG DAG node and use it when widening
vector types to be legal and a ZERO_EXTEND node is encountered.

When we use widening to legalize vector types, extend nodes are a real
challenge. Either the input or output is likely to be legal, but in many
cases not both. As a consequence, we don't really have any way to
represent this situation and the prior code in the widening legalization
framework would just scalarize the extend operation completely.

This patch introduces a new DAG node to represent doing a zero extend of
a vector "in register". The core of the idea is to allow legal but
different vector types in the input and output. The output vector must
have fewer lanes but wider elements. The operation is defined to zero
extend the low elements of the input to the size of the output elements,
and drop all of the high elements which don't have a corresponding lane
in the output vector.

It also includes generic expansion of this node in terms of blending
a zero vector into the high elements of the vector and bitcasting
across. This in turn yields extremely nice code for x86 SSE2 when we use
the new widening legalization logic in conjunction with the new shuffle
lowering logic.

There is still more to do here. We need to support sign extension, any
extension, and potentially int-to-float conversions. My current plan is
to continue using similar synthetic nodes to model each of these
transitions with generic lowering code for each one.

However, with this patch LLVM already reaches performance parity with
GCC for the core C loops of the x264 code (assuming you disable the
hand-written assembly versions) when compiling for SSE2 and SSE3
architectures and enabling the new widening and lowering logic for
vectors.

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

llvm-svn: 212610

10 years agoclang-format polly to avoid buildbot noise
Tobias Grosser [Wed, 9 Jul 2014 10:50:10 +0000 (10:50 +0000)]
clang-format polly to avoid buildbot noise

llvm-svn: 212609

10 years ago[mips][mips64r6] Correct select patterns that have the condition or true/false values...
Daniel Sanders [Wed, 9 Jul 2014 10:47:26 +0000 (10:47 +0000)]
[mips][mips64r6] Correct select patterns that have the condition or true/false values backwards

Summary: This bug caused SingleSource/Regression/C/uint64_to_float and SingleSource/UnitTests/2002-05-02-CastTest3 to fail (among others).

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

llvm-svn: 212608

10 years ago[mips][mips64r6] Correct cond names in the cmp.cond.[ds] instructions
Daniel Sanders [Wed, 9 Jul 2014 10:40:20 +0000 (10:40 +0000)]
[mips][mips64r6] Correct cond names in the cmp.cond.[ds] instructions

Summary:
It seems we accidentally read the wrong column of the table MIPS64r6 spec
and used the names for c.cond.fmt instead of cmp.cond.fmt.

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

llvm-svn: 212607

10 years ago[x86] Initialize a pointer to null to fix a bug in r212602.
Chandler Carruth [Wed, 9 Jul 2014 10:36:42 +0000 (10:36 +0000)]
[x86] Initialize a pointer to null to fix a bug in r212602.

This should restore GCC hosts (which happen to put the bad stuff into
the pointer) and MSan, etc.

llvm-svn: 212606

10 years ago[mips][mips64r6] Use JALR for indirect branches instead of JR (which is not available...
Daniel Sanders [Wed, 9 Jul 2014 10:21:59 +0000 (10:21 +0000)]
[mips][mips64r6] Use JALR for indirect branches instead of JR (which is not available on MIPS32r6/MIPS64r6)

Summary:
This completes the change to use JALR instead of JR on MIPS32r6/MIPS64r6.

Reviewers: jkolek, vmedic, zoran.jovanovic, dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

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

llvm-svn: 212605

10 years ago[mips][mips64r6] Use JALR for returns instead of JR (which is not available on MIPS32...
Daniel Sanders [Wed, 9 Jul 2014 10:16:07 +0000 (10:16 +0000)]
[mips][mips64r6] Use JALR for returns instead of JR (which is not available on MIPS32r6/MIPS64r6)

Summary:
RET, and RET_MM have been replaced by a pseudo named PseudoReturn.
In addition a version with a 64-bit GPR named PseudoReturn64 has been
added.

Instruction selection for a return matches RetRA, which is expanded post
register allocation to PseudoReturn/PseudoReturn64. During MipsAsmPrinter,
this PseudoReturn/PseudoReturn64 are emitted as:
- (JALR64 $zero, $rs) on MIPS64r6
- (JALR $zero, $rs) on MIPS32r6
- (JR_MM $rs) on microMIPS
- (JR $rs) otherwise

On MIPS32r6/MIPS64r6, 'jr $rs' is an alias for 'jalr $zero, $rs'. To aid
development and review (specifically, to ensure all cases of jr are
updated), these aliases are temporarily named 'r6.jr' instead of 'jr'.
A follow up patch will change them back to the correct mnemonic.

Added (JALR $zero, $rs) to MipsNaClELFStreamer's definition of an indirect
jump, and removed it from its definition of a call.
Note: I haven't accounted for MIPS64 in MipsNaClELFStreamer since it's
doesn't appear to account for any MIPS64-specifics.

The return instruction created as part of eh_return expansion is now expanded
using expandRetRA() so we use the right return instruction on MIPS32r6/MIPS64r6
('jalr $zero, $rs').

Also, fixed a misuse of isABI_N64() to detect 64-bit wide registers in
expandEhReturn().

Reviewers: jkolek, vmedic, mseaborn, zoran.jovanovic, dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

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

llvm-svn: 212604

10 years agoAdd ability to emit internal instruction representation to CodeGen assembly output.
Daniel Sanders [Wed, 9 Jul 2014 10:07:36 +0000 (10:07 +0000)]
Add ability to emit internal instruction representation to CodeGen assembly output.

Summary:
This patch re-uses the implementation of 'llvm-mc -show-inst' and makes it
available to llc as 'llc -asm-show-inst'.

This is necessary to test parts of MIPS32r6/MIPS64r6 without resorting to
'llc -filetype=obj' tests. For example, on MIPS32r2 and earlier we use the
'jr $rs' instruction for indirect branches and returns. On MIPS32r6, we no
longer have 'jr $rs' and use 'jalr $zero, $rs' instead. The catch is that,
on MIPS32r6, 'jr $rs' is an alias for 'jalr $zero, $rs' and is the preferred
way of writing this instruction. As a result, all MIPS ISA's emit 'jr $rs' in
their assembly output and the assembler encodes this to different opcodes
according to the ISA.

Using this option, we can check that the MCInst really is a JR or a JALR by
matching the emitted comment. This removes the need for a 'llc -filetype=obj'
test.

Reviewers: rafael, dsanders

Reviewed By: dsanders

Subscribers: zoran.jovanovic, llvm-commits

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

llvm-svn: 212603

10 years ago[x86] Re-apply a variant of the x86 side of r212324 now that the rest
Chandler Carruth [Wed, 9 Jul 2014 10:06:58 +0000 (10:06 +0000)]
[x86] Re-apply a variant of the x86 side of r212324 now that the rest
has settled without incident, removing the x86-specific and overly
strict 'isVectorSplat' routine in favor of generic and more powerful
splat detection.

The primary motivation and result of this is that the x86 backend can
now see through splats which contain undef elements. This is essential
if we are using a widening form of legalization and I've updated a test
case to also run in that mode as before this change the generated code
for the test case was completely scalarized.

This version of the patch much more carefully handles the undef lanes.
- We aren't overly conservative about them in the shift lowering
  (where we will never use the splat itself).
- One place where the splat would have been re-used by the existing code
  now explicitly constructs a new constant splat that will be safe.
- The broadcast lowering is much more reasonable with undefs by doing
  a correct check of whether the splat is the only user of a loaded
  value, checking that the splat actually crosses multiple lanes before
  using a broadcast, and handling broadcasts of non-constant splats.

As a consequence of the last bullet, the weird usage of vpshufd instead
of vbroadcast is gone, and we actually can lower an AVX splat with
vbroadcastss where before we emitted a really strange pattern of
a vector load and a manual splat across the vector.

llvm-svn: 212602

10 years agoFixed incompatibility with MSVC builds in range-based for loops in DataRecursiveASTVi...
Alexey Bataev [Wed, 9 Jul 2014 10:00:31 +0000 (10:00 +0000)]
Fixed incompatibility with MSVC builds in range-based for loops in DataRecursiveASTVisitor and RecursiveASTVisitor for OpenMP constructs.

llvm-svn: 212601

10 years agoRevert commit 212599.
Alexey Bataev [Wed, 9 Jul 2014 09:50:46 +0000 (09:50 +0000)]
Revert commit 212599.

llvm-svn: 212600

10 years ago[OPENMP] Fixed incompatibility in [Data]RecursiveASTVisitor::TraverseOMPExecutableDir...
Alexey Bataev [Wed, 9 Jul 2014 09:33:29 +0000 (09:33 +0000)]
[OPENMP] Fixed incompatibility in [Data]RecursiveASTVisitor::TraverseOMPExecutableDirective method with MSVC for range-based loops.

llvm-svn: 212599

10 years agoARM: use LLVM's atomicrmw instructions when ldrex/strex are available.
Tim Northover [Wed, 9 Jul 2014 09:24:43 +0000 (09:24 +0000)]
ARM: use LLVM's atomicrmw instructions when ldrex/strex are available.

Having some kind of weird kernel-assisted ABI for these when the
native instructions are available appears to be (and should be) the
exception; OSs have been gradually opting in for years and the code
was getting silly.

So let LLVM decide whether it's possible/profitable to inline them by
default.

Patch by Phoebe Buckheister.

llvm-svn: 212598

10 years agoclang-format: Add new option to indent wrapped function declarations.
Daniel Jasper [Wed, 9 Jul 2014 08:42:42 +0000 (08:42 +0000)]
clang-format: Add new option to indent wrapped function declarations.

Though not completely identical, make former
IndentFunctionDeclarationAfterType change this flag for backwards
compatibility (it is somewhat close in meaning and better the err'ing on
an unknown config flag).

llvm-svn: 212597

10 years ago[ASan/Win] Don't instrument COMDAT globals. Properly fixes PR20244.
Timur Iskhodzhanov [Wed, 9 Jul 2014 08:35:33 +0000 (08:35 +0000)]
[ASan/Win] Don't instrument COMDAT globals. Properly fixes PR20244.

llvm-svn: 212596

10 years agoSourceMgr: consistently use 'unsigned' for the memory buffer ID type
Dmitri Gribenko [Wed, 9 Jul 2014 08:30:15 +0000 (08:30 +0000)]
SourceMgr: consistently use 'unsigned' for the memory buffer ID type

llvm-svn: 212595

10 years agoclang-format: Update flag documentation.
Daniel Jasper [Wed, 9 Jul 2014 08:19:11 +0000 (08:19 +0000)]
clang-format: Update flag documentation.

llvm-svn: 212594

10 years agoDelete removed formatting option.
Daniel Jasper [Wed, 9 Jul 2014 08:18:31 +0000 (08:18 +0000)]
Delete removed formatting option.

llvm-svn: 212593

10 years ago[OPENMP] Improved code of DataRecursiveASTVisitor and RecursiveASTVisitor for OpenMP...
Alexey Bataev [Wed, 9 Jul 2014 08:00:46 +0000 (08:00 +0000)]
[OPENMP] Improved code of DataRecursiveASTVisitor and RecursiveASTVisitor for OpenMP constructs per Tobias Grosser comments.

llvm-svn: 212592

10 years agoclang-format: Revamp function declaration/definition indentation.
Daniel Jasper [Wed, 9 Jul 2014 07:50:33 +0000 (07:50 +0000)]
clang-format: Revamp function declaration/definition indentation.

Key changes:
- Correctly (well ...) distinguish function declarations and variable
  declarations with ()-initialization.
- Don't indent when breaking function declarations/definitions after the
  return type.
- Indent variable declarations and typedefs when breaking after the
  type.

This fixes llvm.org/PR17999.

llvm-svn: 212591