platform/upstream/llvm.git
7 years ago[Support] Make the default chunk size of raw_fd_ostream to 1 GiB.
Rui Ueyama [Tue, 31 Oct 2017 17:37:20 +0000 (17:37 +0000)]
[Support] Make the default chunk size of raw_fd_ostream to 1 GiB.

Previously, we call write(2) for each 32767 byte chunk. That is not
efficient because Linux can handle much larger write requests.
This patch changes the chunk size on Linux to 1 GiB.

This patch also changes the default chunks size to SSIZE_MAX. I think
that doesn't in practice change this function's behavior on any operating
system because SSIZE_MAX on 64-bit machine is unrealistically large,
and writing 2 GiB (SSIZE_MAX on 32-bit) on a 32-bit machine by a single
call of write(2) is also unrealistic, as the userspace is usually
limited to 2 GiB. That said, it is in general a good thing to do because
a write larger than SSIZE_MAX is implementation-defined in POSIX.

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

llvm-svn: 317015

7 years ago[ELF] Remove unnecessary function call. NFC.
James Henderson [Tue, 31 Oct 2017 17:28:44 +0000 (17:28 +0000)]
[ELF] Remove unnecessary function call. NFC.

StringTableSection does not implement postThunkContents, so calling it on these
sections is pointless (it calls an empty virtual function), and we can remove it.

Reviewers: ruiu

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

llvm-svn: 317014

7 years agoRemove a redundant union member.
Rui Ueyama [Tue, 31 Oct 2017 17:07:47 +0000 (17:07 +0000)]
Remove a redundant union member.

This removes DefinedCOFF from SymbolUnion because DefinedCOFF is
not a leaf class. Pointed out by pcc.

llvm-svn: 317013

7 years ago[IndVarSimplify] Simplify code using a dictionary
Philip Reames [Tue, 31 Oct 2017 17:06:32 +0000 (17:06 +0000)]
[IndVarSimplify] Simplify code using a dictionary

Possibly very slightly slower, but this code is not performance critical and the readability benefit alone is huge.

llvm-svn: 317012

7 years ago[X86][AsmParser] Treat '%' as the modulo operator under Intel syntax
Reid Kleckner [Tue, 31 Oct 2017 16:47:38 +0000 (16:47 +0000)]
[X86][AsmParser] Treat '%' as the modulo operator under Intel syntax

It can't be a register prefix, anyway. This is consistent with the masm
docs on MSDN: https://msdn.microsoft.com/en-us/library/t4ax90d2.aspx

This is a straight-forward extension of our support for "MOD"
implemented in https://reviews.llvm.org/D33876 / r306425

llvm-svn: 317011

7 years agoLTOModule::isBitcodeFile() shouldn't assert when returning false.
Nico Weber [Tue, 31 Oct 2017 16:39:47 +0000 (16:39 +0000)]
LTOModule::isBitcodeFile() shouldn't assert when returning false.

Fixes a bunch of assert-on-invalid-bitcode regressions after 315483.
Expected<> calls assertIsChecked() in its dtor, and operator bool() only calls
setChecked() if there's no error. So for functions that don't return an error
itself, the Expected<> version needs explicit code to disarm the error that the
ErrorOr<> code didn't need.

https://reviews.llvm.org/D39437

llvm-svn: 317010

7 years ago[asan] Upgrade private linkage globals to internal linkage on COFF
Reid Kleckner [Tue, 31 Oct 2017 16:16:08 +0000 (16:16 +0000)]
[asan] Upgrade private linkage globals to internal linkage on COFF

COFF comdats require symbol table entries, which means the comdat leader
cannot have private linkage.

llvm-svn: 317009

7 years ago[ZoneAlgo/ForwardOpTree] Normalize PHIs to their known incoming values.
Michael Kruse [Tue, 31 Oct 2017 16:11:46 +0000 (16:11 +0000)]
[ZoneAlgo/ForwardOpTree] Normalize PHIs to their known incoming values.

Represent PHIs by their incoming values instead of an opaque value of
themselves. This allows ForwardOpTree to "look through" the PHIs and
forward the incoming values since forwardings PHIs is currently not
supported.

This is particularly useful to cope with PHIs inserted by GVN LoadPRE.
The incoming values all resolve to a load from a single array element
which then can be forwarded.

It should in theory also reduce spurious conflicts in value mapping
(DeLICM), but I have not yet found a profitable case yet, so it is
not included here.

To avoid transitive closure and potentially necessary overapproximations
of those, PHIs that may reference themselves are excluded from
normalization and keep their opaque self-representation.

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

llvm-svn: 317008

7 years ago[COFF] Merge Symbol and SymbolBody.
Rui Ueyama [Tue, 31 Oct 2017 16:10:24 +0000 (16:10 +0000)]
[COFF] Merge Symbol and SymbolBody.

llvm-svn: 317007

7 years agoMerge SymbolBody and Symbol into one class, SymbolBody.
Rui Ueyama [Tue, 31 Oct 2017 16:07:41 +0000 (16:07 +0000)]
Merge SymbolBody and Symbol into one class, SymbolBody.

SymbolBody and Symbol were separated classes due to a historical reason.
Symbol used to be a pointer to a SymbolBody, and the relationship
between Symbol and SymbolBody was n:1.

r2681780 changed that. Since that patch, SymbolBody and Symbol are
allocated next to each other to improve memory locality, and they have
1:1 relationship now. So, the separation of Symbol and SymbolBody no
longer makes sense.

This patch merges them into one class. In order to avoid updating too
many places, I chose SymbolBody as a unified name. I'll rename it Symbol
in a follow-up patch.

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

llvm-svn: 317006

7 years ago[X86][SSE] Add VSRLI/VSRAI/VSLLI demanded elts support to computeKnownBits/ComputeNum...
Simon Pilgrim [Tue, 31 Oct 2017 16:06:21 +0000 (16:06 +0000)]
[X86][SSE] Add VSRLI/VSRAI/VSLLI demanded elts support to computeKnownBits/ComputeNumSignBits

Mainly a perf improvements as most combines will have occurred before we lower to these instructions

llvm-svn: 317005

7 years agoAdd a "watchpoint" test category and annotate tests appropriately
Pavel Labath [Tue, 31 Oct 2017 15:27:19 +0000 (15:27 +0000)]
Add a "watchpoint" test category and annotate tests appropriately

Most of the watchpoint tests are organized into subtrees, so we can use the
file-based .categories approach to annotate them. The exception are the
concurrent_events tests, which needed to be annotated on a per-test basis.

The motivation behind this is to provide an easy way to disable watchpoint
tests on systems where the watchpoint functionality is not present/unreliable.

llvm-svn: 317004

7 years ago[LoopVectorize] Replace manual VPlan memory management with unique_ptr.
Benjamin Kramer [Tue, 31 Oct 2017 14:58:22 +0000 (14:58 +0000)]
[LoopVectorize] Replace manual VPlan memory management with unique_ptr.

No functionality change intended.

llvm-svn: 317003

7 years ago[ELF] - Remove useless code. NFC.
George Rimar [Tue, 31 Oct 2017 14:21:30 +0000 (14:21 +0000)]
[ELF] - Remove useless code. NFC.

We set Type and Flags inside OutputSection::addSection,
so this lines looks to be excessive.

llvm-svn: 317002

7 years ago[test] Fix dsymutil/cmdline.test
Jonas Devlieghere [Tue, 31 Oct 2017 14:19:02 +0000 (14:19 +0000)]
[test] Fix dsymutil/cmdline.test

This fixes dsymutil/cmdline.test on platforms where the dsymutil binary
has an extension.

llvm-svn: 317001

7 years ago[Reassociate] Remove FIXME from looptest.ll (NFC)
Florian Hahn [Tue, 31 Oct 2017 14:06:31 +0000 (14:06 +0000)]
[Reassociate] Remove FIXME from looptest.ll (NFC)

Summary: The loop invariant add (i+j) is reassoicated, I think the FIXME can be removed, because this is what the test case tries to check (AFAIK). I also changed the test to use FileCheck.

Reviewers: mcrosier, davide

Reviewed By: mcrosier, davide

Subscribers: davide, llvm-commits

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

llvm-svn: 317000

7 years ago[dsymutil] Implement the --threads option
Jonas Devlieghere [Tue, 31 Oct 2017 13:54:15 +0000 (13:54 +0000)]
[dsymutil] Implement the --threads option

This patch adds the --threads option to dsymutil to process
architectures in parallel. The feature is already present in the version
distributed with Xcode, but was not yet upstreamed.

This is NFC as far as the linking behavior is concerned. As threads are
used automatically, the current tests cover the change in
implementation.

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

llvm-svn: 316999

7 years ago[lld] Fix --exclude-libs broken when --whole-archive is used
Oleg Ranevskyy [Tue, 31 Oct 2017 13:51:06 +0000 (13:51 +0000)]
[lld] Fix --exclude-libs broken when --whole-archive is used

Summary:
**Problem**
`--exclude-libs` does not work for static libraries affected by the `--whole-archive` option.

**Description**
`--exclude-libs` creates a list of static library paths and does library lookups in this list.
`--whole-archive` splits the static libraries that follow it into separate objects. As a result, lld no longer sees static libraries among linked files and does no `--exclude-libs` lookups.

**Solution**
The proposed solution is to make `--exclude-libs` consider object files too. When lld finds an object file it checks whether this file originates from an archive and, if so, looks the archive up in the `--exclude-libs` list.

Reviewers: ruiu, rafael

Reviewed By: ruiu

Subscribers: asl, ikudrin, llvm-commits, emaste

Tags: #lld

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

llvm-svn: 316998

7 years agoFix LLVM_LINK_LLVM_DYLIB build (pr35053)
Pavel Labath [Tue, 31 Oct 2017 13:23:19 +0000 (13:23 +0000)]
Fix LLVM_LINK_LLVM_DYLIB build (pr35053)

Summary:
r316368 broke this build when it introduced a reference to a pthread
function to the Utility module. This caused cmake to generate an
incorrect link line (wrong order of libs) because it did not see the
dependency from Utility to the system libraries. Instead these libraries
were being manually added to each final target.

This changes moves the dependency management from the individual targets
to the lldbUtility module, which is consistent with how llvm does it.
The final targets will pick up these libraries as they will be a part of
the link interface of the module.

Technically, some of these dependencies could go into the host module,
as that's where most of the os-specific code is, but I did not try to
investigate which ones.

Reviewers: zturner, sylvestre.ledru

Subscribers: lldb-commits, mgorny

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

llvm-svn: 316997

7 years ago[ThinLTO] Double bits of module hash used for renaming
Teresa Johnson [Tue, 31 Oct 2017 12:56:09 +0000 (12:56 +0000)]
[ThinLTO] Double bits of module hash used for renaming

Summary:
Use 64 instead of 32 bits of the module hash as the suffix when renaming
after promotion to reduce the likelihood of a collision (which we
observed in a binary when using 32 bits).

Reviewers: pcc

Subscribers: llvm-commits, inglorion

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

llvm-svn: 316996

7 years ago[DeLICM] Fix wrong assumed access execution order.
Michael Kruse [Tue, 31 Oct 2017 12:50:25 +0000 (12:50 +0000)]
[DeLICM] Fix wrong assumed access execution order.

ForwardOpTree may already transform a scalar access to an array
accesses. The access remains implicit (isOriginalScalarKind(), meaning
that the access is always executed at the begin/end of a statement), but
targets an array (isLatestArrayKind(), which is unrelated to whether the
execution is implicit/explicit).

Fix by properly using isOriginalXXX() to determine execution order.

This fixes the buildbots on MultiSource/Benchmarks/DOE-ProxyApps-C/miniGMG.

llvm-svn: 316995

7 years ago[InstCombine] Simplify selects that test cmpxchg instructions
Matthew Simpson [Tue, 31 Oct 2017 12:34:02 +0000 (12:34 +0000)]
[InstCombine] Simplify selects that test cmpxchg instructions

If a select instruction tests the returned flag of a cmpxchg instruction and
selects between the returned value of the cmpxchg instruction and its compare
operand, the result of the select will always be equal to its false value.

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

llvm-svn: 316994

7 years agoIncrease AdbClient read timeout
Pavel Labath [Tue, 31 Oct 2017 12:27:46 +0000 (12:27 +0000)]
Increase AdbClient read timeout

The previous value was not sufficient for Pixel 2 phones. One would have
hoped that the newer phones are faster, but that does not seem to be the
case here.

llvm-svn: 316993

7 years agoAdd data formatter for libc++'s forward_list
Pavel Labath [Tue, 31 Oct 2017 12:27:43 +0000 (12:27 +0000)]
Add data formatter for libc++'s forward_list

Summary:
This adds a data formatter for the implementation of forward_list in
libc++. I've refactored the existing std::list data formatter a bit to
enable more sharing of code (mainly the loop detection stuff).

Reviewers: jingham, EricWF

Subscribers: srhines, eugene, lldb-commits

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

llvm-svn: 316992

7 years agoFix mac build broken in r316987
Pavel Labath [Tue, 31 Oct 2017 11:48:33 +0000 (11:48 +0000)]
Fix mac build broken in r316987

Forgot one occurence of ArchSpec::SetTriple in mac-specific code.

llvm-svn: 316990

7 years agoAdding a shufflevector and select LLVM IR instructions fuzz tool
Ayman Musa [Tue, 31 Oct 2017 11:39:31 +0000 (11:39 +0000)]
Adding a shufflevector and select LLVM IR instructions fuzz tool

Based on similar python tool - utils/shuffle-fuzz.py - this tool extends the ability of it's previous by optionally attaching select instruction to the generated shufflevector instructions.
This was mainly developed to perform exhaustive testing of the X86 AVX512 masked shuffle instructions. But yet it can be used for various other targets.
The general design of the implementation is much modular than the original shuffle_fuzz.py tool, which makes it easier for anyone to extend it further.

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

Change-Id: I0efc2aaa091b61a8a9552311c21cc77916a97111
llvm-svn: 316989

7 years ago[CodeGen] Propagate may-alias'ness of lvalues with TBAA info
Ivan A. Kosarev [Tue, 31 Oct 2017 11:05:34 +0000 (11:05 +0000)]
[CodeGen] Propagate may-alias'ness of lvalues with TBAA info

This patch fixes various places in clang to propagate may-alias
TBAA access descriptors during construction of lvalues, thus
eliminating the need for the LValueBaseInfo::MayAlias flag.

This is part of D38126 reworked to be a separate patch to
simplify review.

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

llvm-svn: 316988

7 years agoInvert ArchSpec<->Platform dependency
Pavel Labath [Tue, 31 Oct 2017 10:56:03 +0000 (10:56 +0000)]
Invert ArchSpec<->Platform dependency

Summary:
ArchSpec::SetTriple was taking a Platform as an argument, and used it to
fill in missing pieces of the specified triple. I invert the dependency
by moving this code to other classes. For this purpose, I've created
three new functions.
- HostInfo::GetAugmentedArchSpec: fills in the triple using the host
  platform (this used to be implemented by passing a null platform
  pointer). By putting this code in the Host module, we can provide a
  way to anyone who does not have a platform instance (lldb-server) an
  easy way to get Host data.
- Platform::GetAugmentedArchSpec: if you have a platform instance, you
  can call this to let it fill in the triple.
- static Platform::GetAugmentedArchSpec: implements the "if platform ==
  0 then use_host() else use_platform()" part.

Reviewers: zturner, jingham, clayborg

Subscribers: mgorny, javed.absar, lldb-commits

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

llvm-svn: 316987

7 years ago[LoopUnroll] Clean up remarks for unroll remainder
David Green [Tue, 31 Oct 2017 10:47:46 +0000 (10:47 +0000)]
[LoopUnroll] Clean up remarks for unroll remainder

The optimisation remarks for loop unrolling with an unrolled remainder looks something like:

test.c:7:18: remark: completely unrolled loop with 3 iterations [-Rpass=loop-unroll]
            C[i] += A[i*N+j];
                 ^
test.c:6:9: remark: unrolled loop by a factor of 4 with run-time trip count [-Rpass=loop-unroll]
        for(int j = 0; j < N; j++)
        ^
This removes the first of the two messages.

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

llvm-svn: 316986

7 years agoAndroid.rules: build with "unified android headers"
Pavel Labath [Tue, 31 Oct 2017 10:33:03 +0000 (10:33 +0000)]
Android.rules: build with "unified android headers"

Unified headers will be the only way to build applications in NDK r16,
and it also works with NDK r15.

This also bumps the minimum supported android version to 16.

llvm-svn: 316985

7 years ago[ELF] - Simplify output section creation.
George Rimar [Tue, 31 Oct 2017 10:31:58 +0000 (10:31 +0000)]
[ELF] - Simplify output section creation.

When there is no SECTION commands given, all sections are
technically orphans, but now we handle script orphans sections
and regular "orphans" sections for non-scripted case differently,
though we can handle them at one place.

Patch do that change.

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

llvm-svn: 316984

7 years ago[OpenMP] Fix reference collection of latest base ptrs.
Michael Kruse [Tue, 31 Oct 2017 10:28:22 +0000 (10:28 +0000)]
[OpenMP] Fix reference collection of latest base ptrs.

When collecting base pointers that need to be made available in parallel
subfunctions, use the base pointer associated with the latest
ScopArrayInfo, instead of the original one.

llvm-svn: 316983

7 years agoSplit makefile for TestTopLevelExprs
Pavel Labath [Tue, 31 Oct 2017 10:01:30 +0000 (10:01 +0000)]
Split makefile for TestTopLevelExprs

this test was using a single makefile to build two executables. This
setup, although not supported by Makefile.rules, happened to
work in most configurations, except when building with the android ndk
r16.

Here I move the building of the second executable to a separate
makefile, which is the solution other tests use for multiple targets.

llvm-svn: 316982

7 years ago[AVX512] Adding new patterns for extract_subvector of vXi1
Michael Zuckerman [Tue, 31 Oct 2017 10:00:19 +0000 (10:00 +0000)]
[AVX512] Adding new patterns for extract_subvector of vXi1

extract subvector of vXi1 from vYi1 is poorly supported by LLVM and most of the time end with an assertion.
This patch fixes this issue by adding new patterns to the TD file.

Reviewers:
1. guyblank
2. igorb
3. zvi
4. ayman
5. craig.topper

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

Change-Id: Ideb4d7e946c8d40cfce2920891f2d89fe64c58f8
llvm-svn: 316981

7 years ago[CGP] Fix the detection of trivial case for addressing mode
Serguei Katkov [Tue, 31 Oct 2017 07:01:35 +0000 (07:01 +0000)]
[CGP] Fix the detection of trivial case for addressing mode

The address can be presented as a bitcast of baseReg.
In this case it is still trivial but OriginalValue != baseReg.

llvm-svn: 316980

7 years ago[IRCE][NFC] Rename fields of InductiveRangeCheck
Max Kazantsev [Tue, 31 Oct 2017 06:19:05 +0000 (06:19 +0000)]
[IRCE][NFC] Rename fields of InductiveRangeCheck

Rename `Offset`, `Scale`, `Length` into `Begin`, `Step`, `End` respectively
to make naming of similar entities for Ranges and Range Checks more
consistent.

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

llvm-svn: 316979

7 years ago[X86] Make AVX512_512_SET0 XMM16-31 lower to 128-bit XOR when AVX512VL is enabled...
Craig Topper [Tue, 31 Oct 2017 06:01:04 +0000 (06:01 +0000)]
[X86] Make AVX512_512_SET0 XMM16-31 lower to 128-bit XOR when AVX512VL is enabled. Use 128-bit VLX instruction when VLX is enabled.

Unfortunately, this weakens our ability to do domain fixing when AVX512DQ is not enabled, but it is consistent with our 256-bit behavior.

Maybe we should add custom handling to domain fixing to allow EVEX integer XOR/AND/OR/ANDN to switch to VEX encoded fp instructions if the high registers aren't being used?

llvm-svn: 316978

7 years ago[NFC] Get rid of variables used in assert only
Max Kazantsev [Tue, 31 Oct 2017 05:33:58 +0000 (05:33 +0000)]
[NFC] Get rid of variables used in assert only

llvm-svn: 316977

7 years ago[IndVarSimplify] Simplify code using preheader assumption
Philip Reames [Tue, 31 Oct 2017 05:16:46 +0000 (05:16 +0000)]
[IndVarSimplify] Simplify code using preheader assumption

As noted in the nice block comment, the previous code didn't actually handle multi-entry loops correctly, it just assumed SCEV didn't analyze such loops.  Given SCEV has comments to the contrary, that seems a bit suspect.  More importantly, the pass actually requires loopsimplify form which ensures a loop-preheader is available.  Remove the excessive generaility and shorten the code greatly.

Note that we do successfully analyze many multi-entry loops, but we do so by converting them to single entry loops.  See the added test case.

llvm-svn: 316976

7 years agoReapply "[GVN] Prevent LoadPRE from hoisting across instructions that don't pass...
Max Kazantsev [Tue, 31 Oct 2017 05:07:56 +0000 (05:07 +0000)]
Reapply "[GVN] Prevent LoadPRE from hoisting across instructions that don't pass control flow to successors"

This patch fixes the miscompile that happens when PRE hoists loads across guards and
other instructions that don't always pass control flow to their successors. PRE is now prohibited
to hoist across such instructions because there is no guarantee that the load standing after such
instruction is still valid before such instruction. For example, a load from under a guard may be
invalid before the guard in the following case:
  int array[LEN];
  ...
  guard(0 <= index && index < LEN);
  use(array[index]);

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

llvm-svn: 316975

7 years ago[SimplifyIndVar] Extract out invariant expression handling
Philip Reames [Tue, 31 Oct 2017 04:19:06 +0000 (04:19 +0000)]
[SimplifyIndVar] Extract out invariant expression handling

Previously, the code returned early from the *function* when it couldn't find a free expansion, it should be returning from the *transform*.  I don't have a test case, noticed this via inspection.

As a follow up, I'm going to revisit the logic in the extract function.  I think that essentially the whole helper routine can be replaced with SCEVExpander, but I wanted to do that in a series of separate commits.

llvm-svn: 316974

7 years ago[X86] Clang-format some code. NFC
Craig Topper [Tue, 31 Oct 2017 02:34:29 +0000 (02:34 +0000)]
[X86] Clang-format some code. NFC

llvm-svn: 316973

7 years ago[cmake] Make check_linker_flags operate via linker flags
Shoaib Meenai [Tue, 31 Oct 2017 01:30:46 +0000 (01:30 +0000)]
[cmake] Make check_linker_flags operate via linker flags

`check_linker_flags` currently sets the *compiler* flags (via
`CMAKE_REQUIRED_FLAGS`), and thus implicitly relies on cmake's default
behavior of passing the compiler flags to the linker. This breaks when
cmake's build rules have been altered to not pollute the link line with
compiler flags (which can be desirable for build cleanliness). Instead,
set `CMAKE_EXE_LINKER_FLAGS` explicitly and use `CMP0056` to ensure the
linker flags are passed along. Additionally, since we're inside a
function, we can just alter the variable directly (as the alteration
will be limited to the scope of the function) rather than saving and
restoring the old value.

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

llvm-svn: 316972

7 years ago[refactor] select the entire DeclStmt if one ifs decls is selected
Alex Lorenz [Tue, 31 Oct 2017 01:28:17 +0000 (01:28 +0000)]
[refactor] select the entire DeclStmt if one ifs decls is selected

llvm-svn: 316971

7 years agoFix broken links; update more issues.
Marshall Clow [Tue, 31 Oct 2017 00:19:47 +0000 (00:19 +0000)]
Fix broken links; update more issues.

llvm-svn: 316970

7 years agoAdd a fail test for aligned_union of an incomplete type. See LWG#2979. NFC
Marshall Clow [Tue, 31 Oct 2017 00:05:17 +0000 (00:05 +0000)]
Add a fail test for aligned_union of an incomplete type. See LWG#2979. NFC

llvm-svn: 316969

7 years agoUndo accidental commit
Philip Reames [Tue, 31 Oct 2017 00:04:09 +0000 (00:04 +0000)]
Undo accidental commit

These files shouldn't have been submitted in 316967

llvm-svn: 316968

7 years ago[CGP] Fix crash on i96 bit multiply
Philip Reames [Mon, 30 Oct 2017 23:59:51 +0000 (23:59 +0000)]
[CGP] Fix crash on i96 bit multiply

Issue found by llvm-isel-fuzzer on OSS fuzz, https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3725

If anyone actually cares about > 64 bit arithmetic, there's a lot more to do in this area.  There's a bunch of obviously wrong code in the same function.  I don't have the time to fix all of them and am just using this to understand what the workflow for fixing fuzzer cases might look like.

llvm-svn: 316967

7 years agoTypo correct the condition of 'do-while' before exiting its scope
Alex Lorenz [Mon, 30 Oct 2017 22:55:11 +0000 (22:55 +0000)]
Typo correct the condition of 'do-while' before exiting its scope

rdar://35172419

llvm-svn: 316966

7 years ago[modules] Retain multiple using-directives in the same scope even if they name the...
Richard Smith [Mon, 30 Oct 2017 22:38:20 +0000 (22:38 +0000)]
[modules] Retain multiple using-directives in the same scope even if they name the same namespace.

They might have different visibility, and thus discarding all but one of them
can result in rejecting valid code. Also fix name lookup to cope with multiple
using-directives being found that denote the same namespace, where some are not
visible -- don't cache an "already visited" state for a using-directive that we
didn't visit because it was hidden.

llvm-svn: 316965

7 years agoFix unused variable warnings. NFCI.
Simon Pilgrim [Mon, 30 Oct 2017 22:38:07 +0000 (22:38 +0000)]
Fix unused variable warnings. NFCI.

llvm-svn: 316964

7 years ago[analyzer] Use the same filename for the header and the implementation of BugReporter...
George Karpenkov [Mon, 30 Oct 2017 22:31:57 +0000 (22:31 +0000)]
[analyzer] Use the same filename for the header and the implementation of BugReporterVisitor

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

llvm-svn: 316963

7 years ago[SelectionDAG] Tidyup computeKnownBits extension/truncation cases. NFCI.
Simon Pilgrim [Mon, 30 Oct 2017 22:23:57 +0000 (22:23 +0000)]
[SelectionDAG] Tidyup computeKnownBits extension/truncation cases. NFCI.

We don't need to extend/truncate the Known structure before calling computeKnownBits - it will reset at the start of the function.

llvm-svn: 316962

7 years agoGive .note.gnu.build-id section alignment 4
Jake Ehrlich [Mon, 30 Oct 2017 22:08:11 +0000 (22:08 +0000)]
Give .note.gnu.build-id section alignment 4

All SHT_NOTE sections should have minimum alignment 4.

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

llvm-svn: 316961

7 years ago[AArch64]: range loopify frame-lowering
Javed Absar [Mon, 30 Oct 2017 22:00:06 +0000 (22:00 +0000)]
[AArch64]: range loopify frame-lowering

llvm-svn: 316960

7 years ago[sanitizer][Fuchsia] Add a missing semicolon
Petr Hosek [Mon, 30 Oct 2017 21:29:26 +0000 (21:29 +0000)]
[sanitizer][Fuchsia] Add a missing semicolon

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

llvm-svn: 316959

7 years agoFix -fuse-ld feature detection error.
Rui Ueyama [Mon, 30 Oct 2017 21:19:54 +0000 (21:19 +0000)]
Fix -fuse-ld feature detection error.

check_cxx_compiler_flag doesn't seem to try to link a program, so
the existing code doesn't correctly detect the availability of a given
linker.  This patch uses check_cxx_source_compiles instead.

I confirmed that cmake now reports this error

  Host compiler does not support '-fuse-ld=foo'

for -DLLVM_USE_LINKER=foo.

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

llvm-svn: 316958

7 years agoInferAddressSpaces: Fix bug about replacing addrspacecast
Yaxun Liu [Mon, 30 Oct 2017 21:19:41 +0000 (21:19 +0000)]
InferAddressSpaces: Fix bug about replacing addrspacecast

InferAddressSpaces assumes the pointee type of addrspacecast
is the same as the operand, which is not always true and causes
invalid IR.

This bug cause build failure in HCC.

This patch fixes that.

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

llvm-svn: 316957

7 years ago[CMake] Fix linker detection in AddLLVM.cmake
Tim Shen [Mon, 30 Oct 2017 21:12:14 +0000 (21:12 +0000)]
[CMake] Fix linker detection in AddLLVM.cmake

Fix linker not being correctly detected when a custom one is specified
through LLVM_USE_LINKER CMake variable.

In particular,

  cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_LINKER=gold ../llvm

resulted into

  Linker detection: GNU ld

instead of

  Linker detection: GNU Gold

due to the construction not accounting for such variable. It led to the general
confusion and prevented setting linker-specific flags inside functions defined
in AddLLVM.cmake.

Thanks Oleksii Vilchanskyi for the patch!

llvm-svn: 316956

7 years ago[X86] Add AVX512 support to fast isel's X86ChooseCmpOpcode.
Craig Topper [Mon, 30 Oct 2017 21:09:19 +0000 (21:09 +0000)]
[X86] Add AVX512 support to fast isel's X86ChooseCmpOpcode.

llvm-svn: 316955

7 years agoRemove a stray space.
Jim Ingham [Mon, 30 Oct 2017 20:44:45 +0000 (20:44 +0000)]
Remove a stray space.

llvm-svn: 316954

7 years ago[NewGVN] Stop assuming PHI args ordering when looking at phi-of-ops.
Davide Italiano [Mon, 30 Oct 2017 20:20:16 +0000 (20:20 +0000)]
[NewGVN] Stop assuming PHI args ordering when looking at phi-of-ops.

It's not guaranteed. There's a bug open to sort them in predecessor
order, but it won't happen anytime soon. In the meanwhile, passes
will have to do an O(#preds) scan. Such is life.

llvm-svn: 316953

7 years agoRevert "[PowerPC] Try to simplify a Swap if it feeds a Splat"
Stefan Pintilie [Mon, 30 Oct 2017 19:55:38 +0000 (19:55 +0000)]
Revert "[PowerPC] Try to simplify a Swap if it feeds a Splat"

Revert r316478.
A test case has failed.
Will recommit this change once we find and fix the failure.

This reverts commit 7c330fabaedaba3d02c58bc3cc1198896c895f34.

llvm-svn: 316952

7 years agoAdd more fuzzing bits: partial_sort_copy, partition_copy, unique, unique_copy. No...
Marshall Clow [Mon, 30 Oct 2017 19:51:58 +0000 (19:51 +0000)]
Add more fuzzing bits: partial_sort_copy, partition_copy, unique, unique_copy. No functional change to libc++; this is all test infastructure

llvm-svn: 316951

7 years agoCreate instruction classes for identifying any atomicity of memory intrinsic. (NFC)
Daniel Neilson [Mon, 30 Oct 2017 19:51:48 +0000 (19:51 +0000)]
Create instruction classes for identifying any atomicity of memory intrinsic. (NFC)

Summary:
For reference, see: http://lists.llvm.org/pipermail/llvm-dev/2017-August/116589.html

This patch fleshes out the instruction class hierarchy with respect to atomic and
non-atomic memory intrinsics. With this change, the relevant part of the class
hierarchy becomes:

IntrinsicInst
  -> MemIntrinsicBase (methods-only class)
    -> MemIntrinsic (non-atomic intrinsics)
      -> MemSetInst
      -> MemTransferInst
        -> MemCpyInst
        -> MemMoveInst
    -> AtomicMemIntrinsic (atomic intrinsics)
      -> AtomicMemSetInst
      -> AtomicMemTransferInst
        -> AtomicMemCpyInst
        -> AtomicMemMoveInst
    -> AnyMemIntrinsic (both atomicities)
      -> AnyMemSetInst
      -> AnyMemTransferInst
        -> AnyMemCpyInst
        -> AnyMemMoveInst

This involves some class renaming:
    ElementUnorderedAtomicMemCpyInst -> AtomicMemCpyInst
    ElementUnorderedAtomicMemMoveInst -> AtomicMemMoveInst
    ElementUnorderedAtomicMemSetInst -> AtomicMemSetInst
A script for doing this renaming in downstream trees is included below.

An example of where the Any* classes should be used in LLVM is when reasoning
about the effects of an instruction (ex: aliasing).

---
Script for renaming AtomicMem* classes:
PREFIXES="[<,([:space:]]"
CLASSES="MemIntrinsic|MemTransferInst|MemSetInst|MemMoveInst|MemCpyInst"
SUFFIXES="[;)>,[:space:]]"

REGEX="(${PREFIXES})ElementUnorderedAtomic(${CLASSES})(${SUFFIXES})"
REGEX2="visitElementUnorderedAtomic(${CLASSES})"

FILES=$( grep -E "(${REGEX}|${REGEX2})" -r . | tr ':' ' ' | awk '{print $1}' | sort | uniq )

SED_SCRIPT="s~${REGEX}~\1Atomic\2\3~g"
SED_SCRIPT2="s~${REGEX2}~visitAtomic\1~g"

for f in $FILES; do
    echo "Processing: $f"
    sed  -i ".bak" -E "${SED_SCRIPT};${SED_SCRIPT2};${EA_SED_SCRIPT};${EA_SED_SCRIPT2}" $f
done

Reviewers: sanjoy, deadalnix, apilipenko, anna, skatkov, mkazantsev

Reviewed By: sanjoy

Subscribers: hfinkel, jholewinski, arsenm, sdardis, nhaehnle, JDevlieghere, javed.absar, llvm-commits

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

llvm-svn: 316950

7 years ago[GVNHoist] Fix non-deterministic sort order of PHIs for identical instructions
Mandeep Singh Grang [Mon, 30 Oct 2017 19:42:41 +0000 (19:42 +0000)]
[GVNHoist] Fix non-deterministic sort order of PHIs for identical instructions

Summary: This fixes failure in Transforms/GVNHoist/hoist.ll uncovered by D39245.

Reviewers: hiraditya, spop, dberlin

Reviewed By: dberlin

Subscribers: llvm-commits

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

llvm-svn: 316949

7 years ago[analyzer] [tests] Remove empty folders in reference results, do not store diffs.txt
George Karpenkov [Mon, 30 Oct 2017 19:40:33 +0000 (19:40 +0000)]
[analyzer] [tests] Remove empty folders in reference results, do not store diffs.txt

Storing diffs.txt is now redundant, as we simply dump the CmpRuns output
to stdout (it is saved in CI and tends to be small).
Not generating those files enables us to remove empty folders, which
confuse git, as it would not add them with reference results.

llvm-svn: 316948

7 years ago[SelectionDAG] Add VSELECT demanded elts support to computeKnownBits
Simon Pilgrim [Mon, 30 Oct 2017 19:31:08 +0000 (19:31 +0000)]
[SelectionDAG] Add VSELECT demanded elts support to computeKnownBits

llvm-svn: 316947

7 years agoX86 Tests: Update the variable-index permute tests with FP types. NFC.
Zvi Rackover [Mon, 30 Oct 2017 19:29:15 +0000 (19:29 +0000)]
X86 Tests: Update the variable-index permute tests with FP types. NFC.

These cases will be addressed in a future update to D39126.

llvm-svn: 316946

7 years ago[X86][SSE] Add another computeKnownBits test showing missing VSELECT demandedelts...
Simon Pilgrim [Mon, 30 Oct 2017 19:19:58 +0000 (19:19 +0000)]
[X86][SSE] Add another computeKnownBits test showing missing VSELECT demandedelts support

llvm-svn: 316945

7 years ago[SelectionDAG] Add VSELECT support to computeKnownBits
Simon Pilgrim [Mon, 30 Oct 2017 19:08:21 +0000 (19:08 +0000)]
[SelectionDAG] Add VSELECT support to computeKnownBits

llvm-svn: 316944

7 years agoFix warning + death test + failing test on Windows (D39072).
Kostya Kortchinsky [Mon, 30 Oct 2017 19:06:59 +0000 (19:06 +0000)]
Fix warning + death test + failing test on Windows (D39072).

Summary: Fixes https://reviews.llvm.org/D39072

Reviewers: cryptoad

Reviewed By: cryptoad

Subscribers: kubamracek

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

llvm-svn: 316943

7 years agoChange unw_word_t to always have the same size as the pointer size
Martin Storsjo [Mon, 30 Oct 2017 19:06:34 +0000 (19:06 +0000)]
Change unw_word_t to always have the same size as the pointer size

This matches the original libunwind API. This also unifies the
type between ARM EHABI and the other configurations, and allows
getting rid of a number of casts in log messages.

The cursor size updates for ppc and or1k are untested, but
unw_proc_info_t shrinks by 4 uint64_t units on i386 at least.

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

llvm-svn: 316942

7 years agoImplement LWG 3013 - some filesystem members should not be noexcept.
Eric Fiselier [Mon, 30 Oct 2017 18:59:59 +0000 (18:59 +0000)]
Implement LWG 3013 - some filesystem members should not be noexcept.

LWG 3013 points out that the constructors and increment members
of the directory iterators need to allocate, and therefore cannot
be marked noexcept.

It also points out that `is_empty` and `copy` likely need to allocate
as well, and as such can also not be noexcept.

This patch speculatively implements the resolution removing noexcept,
because libc++ does indeed have the possibility of throwing on allocation
failure.

llvm-svn: 316941

7 years ago[X86][SSE] computeKnownBits tests showing missing VSELECT demandedelts support
Simon Pilgrim [Mon, 30 Oct 2017 18:48:31 +0000 (18:48 +0000)]
[X86][SSE] computeKnownBits tests showing missing VSELECT demandedelts support

llvm-svn: 316940

7 years agoFix PR35078 - recursive directory iterator's increment method throws incorrectly.
Eric Fiselier [Mon, 30 Oct 2017 18:43:21 +0000 (18:43 +0000)]
Fix PR35078 - recursive directory iterator's increment method throws incorrectly.

The guts of the increment method for recursive_directory_iterator
was failing to pass an error code object to calls to status/symlink_status,
which can throw under certain conditions.

This patch fixes the issues by correctly propagating the error codes.
However the noexcept still needs to be removed from the signature, as
mentioned in LWG 3014, but that change will be made in a separate commit.

llvm-svn: 316939

7 years ago[X86][AVX512] Cleanup scheduler tests - split GENERIC and SKX targets
Simon Pilgrim [Mon, 30 Oct 2017 18:37:27 +0000 (18:37 +0000)]
[X86][AVX512] Cleanup scheduler tests - split GENERIC and SKX targets

llvm-svn: 316938

7 years ago[sanitizer] Fixing an error introduced in D39072
Kostya Kortchinsky [Mon, 30 Oct 2017 18:16:05 +0000 (18:16 +0000)]
[sanitizer] Fixing an error introduced in D39072

Summary: This should fix the Windows bots after D39072.

Reviewers: alekseyshl, flowerhack

Reviewed By: flowerhack

Subscribers: llvm-commits, kubamracek

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

llvm-svn: 316937

7 years agoUndo accidental language mode change in this test.
Richard Smith [Mon, 30 Oct 2017 18:06:18 +0000 (18:06 +0000)]
Undo accidental language mode change in this test.

llvm-svn: 316936

7 years agoAdd a test to make sure that -Wdeprecated doesn't warn on use of 'throw()' in system...
Richard Smith [Mon, 30 Oct 2017 18:05:10 +0000 (18:05 +0000)]
Add a test to make sure that -Wdeprecated doesn't warn on use of 'throw()' in system headers (deprecated in C++17).

llvm-svn: 316935

7 years agoIntroduce ReservedAddressRange to sanitizer_common.
Kostya Kortchinsky [Mon, 30 Oct 2017 17:56:24 +0000 (17:56 +0000)]
Introduce ReservedAddressRange to sanitizer_common.

Summary:
Fixed version of https://reviews.llvm.org/D38437 (fixes Win/Fuchsia failures).

Creating a new revision, since the old one was getting a bit old/crowded.

    In Fuchsia, MmapNoAccess/MmapFixedOrDie are implemented using a global
    VMAR, which means that MmapNoAccess can only be called once. This works
    for the sanitizer allocator but *not* for the Scudo allocator.

    Hence, this changeset introduces a new ReservedAddressRange object to
    serve as the new API for these calls. In this changeset, the object
    still calls into the old Mmap implementations.

    The next changeset two changesets will convert the sanitizer and scudo
    allocators to use the new APIs, respectively. (ReservedAddressRange will
    replace the SecondaryHeader in Scudo.)

    Finally, a last changeset will update the Fuchsia implementation.

Reviewers: alekseyshl, cryptoad, phosek

Reviewed By: alekseyshl, cryptoad

Subscribers: kubamracek

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

llvm-svn: 316934

7 years ago[SelectionDAG] Add SELECT demanded elts support to ComputeNumSignBits
Simon Pilgrim [Mon, 30 Oct 2017 17:53:51 +0000 (17:53 +0000)]
[SelectionDAG] Add SELECT demanded elts support to ComputeNumSignBits

llvm-svn: 316933

7 years ago[X86][SSE] ComputeNumSignBits tests showing missing VSELECT demandedelts support
Simon Pilgrim [Mon, 30 Oct 2017 17:46:50 +0000 (17:46 +0000)]
[X86][SSE] ComputeNumSignBits tests showing missing VSELECT demandedelts support

llvm-svn: 316932

7 years agoUse 64 bits for the shared symbol size again.
Rafael Espindola [Mon, 30 Oct 2017 17:43:16 +0000 (17:43 +0000)]
Use 64 bits for the shared symbol size again.

We might want to drop support for such large symbols, but that should
be an explicit decision with a testcase.

llvm-svn: 316931

7 years agoFix clang warnings in winasan code
Reid Kleckner [Mon, 30 Oct 2017 17:26:57 +0000 (17:26 +0000)]
Fix clang warnings in winasan code

There are two instances of -Wcast-qual and one of -Wsign-compare.

llvm-svn: 316930

7 years ago[asan] Intercept heap routines in VS2010 CRT
Reid Kleckner [Mon, 30 Oct 2017 17:26:13 +0000 (17:26 +0000)]
[asan] Intercept heap routines in VS2010 CRT

Users have requested that we add it to the list:
https://github.com/google/sanitizers/issues/864

llvm-svn: 316929

7 years agoSkip abs symbols when handling copy reloc aliases.
Rafael Espindola [Mon, 30 Oct 2017 17:26:12 +0000 (17:26 +0000)]
Skip abs symbols when handling copy reloc aliases.

Since we now only check st_value, we have to consider the case where
the section index is special.

llvm-svn: 316928

7 years ago[MC] Split out register def/use idx calls to make debugging simpler. NFCI.
Simon Pilgrim [Mon, 30 Oct 2017 17:24:40 +0000 (17:24 +0000)]
[MC] Split out register def/use idx calls to make debugging simpler. NFCI.

llvm-svn: 316927

7 years ago[X86][AVX] Add missing vcvtpd2dq/vcvtps2dq scheduling tests
Simon Pilgrim [Mon, 30 Oct 2017 17:23:17 +0000 (17:23 +0000)]
[X86][AVX] Add missing vcvtpd2dq/vcvtps2dq scheduling tests

llvm-svn: 316926

7 years ago[X86][SSE] Add clflush scheduling test
Simon Pilgrim [Mon, 30 Oct 2017 17:20:50 +0000 (17:20 +0000)]
[X86][SSE] Add clflush scheduling test

llvm-svn: 316925

7 years ago[analyzer] Left shifting a negative value is undefined
Gabor Horvath [Mon, 30 Oct 2017 17:06:42 +0000 (17:06 +0000)]
[analyzer] Left shifting a negative value is undefined

The analyzer did not return an UndefVal in case a negative value was left
shifted. I also altered the UndefResultChecker to emit a clear warning in this
case.

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

llvm-svn: 316924

7 years agoTest commit: sort names in CREDITS.txt
Joachim Protze [Mon, 30 Oct 2017 16:44:00 +0000 (16:44 +0000)]
Test commit: sort names in CREDITS.txt

llvm-svn: 316922

7 years ago[X86][AVX512] Adding a pattern for broadcastm intrinsic.
Jina Nahias [Mon, 30 Oct 2017 16:37:28 +0000 (16:37 +0000)]
[X86][AVX512] Adding a pattern for broadcastm intrinsic.

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

Change-Id: I71c8605a8e4c98013ef25289694afc5cfd46bb0b
llvm-svn: 316921

7 years agoMove isDSOLocal check and add a comment.
Rafael Espindola [Mon, 30 Oct 2017 16:32:31 +0000 (16:32 +0000)]
Move isDSOLocal check and add a comment.

llvm-svn: 316920

7 years agoFix windows build broken in r316915
Pavel Labath [Mon, 30 Oct 2017 16:21:18 +0000 (16:21 +0000)]
Fix windows build broken in r316915

I accidentally left a linux-specific include in generic code.

llvm-svn: 316919

7 years agoMark test as unsupported on C++98/03, since it uses move_iterator
Marshall Clow [Mon, 30 Oct 2017 16:07:59 +0000 (16:07 +0000)]
Mark test as unsupported on C++98/03, since it uses move_iterator

llvm-svn: 316917

7 years ago[PPC CodeGen] Fix the bitreverse.i64 intrinsic.
Fangrui Song [Mon, 30 Oct 2017 16:03:44 +0000 (16:03 +0000)]
[PPC CodeGen] Fix the bitreverse.i64 intrinsic.

Summary: The two 32-bit words were swapped. Update a test omitted in reverted r316270.

Reviewers: jtony, aaron.ballman

Subscribers: nemanjai, kbarton

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

llvm-svn: 316916

7 years agoMainLoop: work around an android libc bug
Pavel Labath [Mon, 30 Oct 2017 16:00:13 +0000 (16:00 +0000)]
MainLoop: work around an android libc bug

Versions of android before kitkat implemented pselect non-atomically,
which caused flakyness, as we were relying on it atomically setting the
signal mask to implement waiting for signals.

This patch implements a direct call to the the pselect kernel syscall,
which does not suffer from this problem. The code itself is not very
pretty, but fortunately the uglyness is contained in the
android version of the MainLoop::RunImpl::Poll function.

llvm-svn: 316915

7 years agoFix PR#35119 : set_union misbehaves with move_iterators. Thanks to Denis Yaroshevskiy...
Marshall Clow [Mon, 30 Oct 2017 15:50:00 +0000 (15:50 +0000)]
Fix PR#35119 : set_union misbehaves with move_iterators. Thanks to Denis Yaroshevskiy for both the bug report and the fix.

llvm-svn: 316914

7 years ago[X86] Make sure we don't create locked inc/dec instructions when the carry flag is...
Craig Topper [Mon, 30 Oct 2017 14:51:37 +0000 (14:51 +0000)]
[X86] Make sure we don't create locked inc/dec instructions when the carry flag is being used.

Summary:
INC/DEC don't update the carry flag so we need to make sure we don't try to use it.

This patch introduces new X86ISD opcodes for locked INC/DEC. Teaches lowerAtomicArithWithLOCK to emit these nodes if INC/DEC is not slow or the function is being optimized for size. An additional flag is added that allows the INC/DEC to be disabled if the caller determines that the carry flag is being requested.

The test_sub_1_cmp_1_setcc_ugt test is currently showing this bug. The other test case changes are recovering cases that were regressed in r316860.

This should fully fix PR35068 finishing the fix started in r316860.

Reviewers: RKSimon, zvi, spatel

Reviewed By: zvi

Subscribers: llvm-commits

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

llvm-svn: 316913