platform/upstream/llvm.git
7 years ago[APInt] In sext single word case, use SignExtend64 and let the APInt constructor...
Craig Topper [Sun, 23 Apr 2017 17:16:24 +0000 (17:16 +0000)]
[APInt] In sext single word case, use SignExtend64 and let the APInt constructor mask off any excess bits.

The current code is trying to be clever with shifts to avoid needing to clear unused bits. But it looks like the compiler is unable to optimize out the unused bit handling in the APInt constructor. Given this its better to just use SignExtend64 and have more readable code.

llvm-svn: 301133

7 years agoAdd missing acquire_load to call_once overload.
Justin Lebar [Sun, 23 Apr 2017 16:58:48 +0000 (16:58 +0000)]
Add missing acquire_load to call_once overload.

Summary: Seemed to have been overlooked in D24028.

This bug was found and brought to my attention by Paul Wankadia.

Reviewers: kubamracek, EricWF, dvyukov

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

llvm-svn: 301132

7 years ago[InstCombine] add tests for or-to-xor; NFC
Sanjay Patel [Sun, 23 Apr 2017 16:37:36 +0000 (16:37 +0000)]
[InstCombine] add tests for or-to-xor; NFC

llvm-svn: 301131

7 years agoclang-rename: fix formatting
Miklos Vajna [Sun, 23 Apr 2017 16:07:06 +0000 (16:07 +0000)]
clang-rename: fix formatting

As detected by clang-format.

llvm-svn: 301130

7 years ago[InstCombine] add pattern matches for commuted variants of xor-to-xor
Sanjay Patel [Sun, 23 Apr 2017 16:03:00 +0000 (16:03 +0000)]
[InstCombine] add pattern matches for commuted variants of xor-to-xor

There's probably some better way to write this that eliminates the
code duplication without hurting readability, but at least this
eliminates the logic holes and is hopefully slightly more efficient
than creating new instructions.

llvm-svn: 301129

7 years ago[InstCombine] add tests for xor-to-xor; NFC
Sanjay Patel [Sun, 23 Apr 2017 14:51:03 +0000 (14:51 +0000)]
[InstCombine] add tests for xor-to-xor; NFC

Besides missing 2 commuted patterns, the way we handle these folds is inefficient.

llvm-svn: 301128

7 years ago[X86][SSE] Add scheduling latency/throughput tests for SSSE3 instructions
Simon Pilgrim [Sun, 23 Apr 2017 14:01:55 +0000 (14:01 +0000)]
[X86][SSE] Add scheduling latency/throughput tests for SSSE3 instructions

llvm-svn: 301127

7 years ago[X86][SSE] Add scheduling latency/throughput tests for SSE3 instructions
Simon Pilgrim [Sun, 23 Apr 2017 13:59:29 +0000 (13:59 +0000)]
[X86][SSE] Add scheduling latency/throughput tests for SSE3 instructions

llvm-svn: 301126

7 years ago[InstCombine] add tests for add-to-xor commuted variants; NFC
Sanjay Patel [Sun, 23 Apr 2017 13:37:05 +0000 (13:37 +0000)]
[InstCombine] add tests for add-to-xor commuted variants; NFC

1 out of the 4 tests commuted the operands, so there's an asymmetry
somewhere under this in how we handle these transforms.

llvm-svn: 301125

7 years agoRevert "[APInt] Fix a few places that use APInt::getRawData to operate within the...
Renato Golin [Sun, 23 Apr 2017 12:15:30 +0000 (12:15 +0000)]
Revert "[APInt] Fix a few places that use APInt::getRawData to operate within the normal API."

This reverts commit r301105, 4, 3 and 1, as a follow up of the previous
revert, which broke even more bots.

For reference:
Revert "[APInt] Use operator<<= where possible. NFC"
Revert "[APInt] Use operator<<= instead of shl where possible. NFC"
Revert "[APInt] Use ashInPlace where possible."

PR32754.

llvm-svn: 301111

7 years agoRevert "[APInt] Add ashrInPlace method and implement ashr using it. Also fix a bug...
Renato Golin [Sun, 23 Apr 2017 12:02:07 +0000 (12:02 +0000)]
Revert "[APInt] Add ashrInPlace method and implement ashr using it. Also fix a bug in the shift by BitWidth handling."

This reverts commit r301094, as it broke all ARM self-hosting bots.

PR32754.

llvm-svn: 301110

7 years ago[X86][MPX] Add load & store instructions of bnd values to getLoadStoreRegOpcode function.
Ayman Musa [Sun, 23 Apr 2017 08:28:42 +0000 (08:28 +0000)]
[X86][MPX] Add load & store instructions of bnd values to getLoadStoreRegOpcode function.

This is needed for a follow up patch that generates the memory folding tables.

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

llvm-svn: 301109

7 years ago[isl C++ bindings] Add explicit const casts for *foreach* bindings
Tobias Grosser [Sun, 23 Apr 2017 07:54:12 +0000 (07:54 +0000)]
[isl C++ bindings] Add explicit const casts for *foreach* bindings

This avoids a compiler warning about lost 'const' attributes.

Suggested-by: Michael Kruse <llvm@meinersbur.de>
llvm-svn: 301108

7 years ago[X86] Convert test checks to generated checks of update_llc_test_checks.py. NFC
Ayman Musa [Sun, 23 Apr 2017 07:41:40 +0000 (07:41 +0000)]
[X86] Convert test checks to generated checks of update_llc_test_checks.py. NFC

llvm-svn: 301107

7 years ago[ARM] ScheduleDAGRRList::DelayForLiveRegsBottomUp must consider OptionalDefs
Artyom Skrobov [Sun, 23 Apr 2017 06:58:08 +0000 (06:58 +0000)]
[ARM] ScheduleDAGRRList::DelayForLiveRegsBottomUp must consider OptionalDefs

Summary:
D30400 has enabled tADC and tSBC instructions to be unglued, thereby allowing CPSR to remain live between Thumb1 scheduling units.

Most Thumb1 instructions have an OptionalDef for CPSR; but the scheduler ignored the OptionalDefs, and could unwittingly insert a flag-setting instruction in between an ADDS and the corresponding ADC.

Reviewers: javed.absar, atrick, MatzeB, t.p.northover, jmolloy, rengolin

Reviewed By: javed.absar

Subscribers: rogfer01, efriedma, aemerson, rengolin, llvm-commits, MatzeB

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

llvm-svn: 301106

7 years ago[APInt] Fix a few places that use APInt::getRawData to operate within the normal...
Craig Topper [Sun, 23 Apr 2017 06:41:11 +0000 (06:41 +0000)]
[APInt] Fix a few places that use APInt::getRawData to operate within the normal API.

getRawData exposes the internal type of the APInt class directly to its users. Ideally we wouldn't expose such an implementation detail.

This patch fixes a few of the easy cases by using truncate, extract, or a rotate.

llvm-svn: 301105

7 years ago[APInt] Use operator<<= where possible. NFC
Craig Topper [Sun, 23 Apr 2017 05:43:02 +0000 (05:43 +0000)]
[APInt] Use operator<<= where possible. NFC

llvm-svn: 301104

7 years ago[APInt] Use operator<<= instead of shl where possible. NFC
Craig Topper [Sun, 23 Apr 2017 05:18:31 +0000 (05:18 +0000)]
[APInt] Use operator<<= instead of shl where possible. NFC

llvm-svn: 301103

7 years ago[ThinLTO/Summary] Rename anonymous globals as last action ...
Davide Italiano [Sun, 23 Apr 2017 04:49:34 +0000 (04:49 +0000)]
[ThinLTO/Summary] Rename anonymous globals as last action ...

... in the per-TU -O0 pipeline.
The problem is that there could be passes registered using
`addExtensionsToPM()` introducing unnamed globals.
Asan is an example, but there may be others. Building cppcheck
with `-flto=thin` and `-fsanitize=address` triggers an assertion
while we're reading bitcode (in lib/LTO), as the BitcodeReader
assumes there are no unnamed globals (because the namer has run).
Unfortunately I wasn't able to find an easy way to test this.
I added a comment in the hope nobody moves this again.

llvm-svn: 301102

7 years ago[APInt] Use ashInPlace where possible.
Craig Topper [Sun, 23 Apr 2017 03:45:59 +0000 (03:45 +0000)]
[APInt] Use ashInPlace where possible.

llvm-svn: 301101

7 years agoSimplify FreeBSD Host.cpp with early returns
Ed Maste [Sun, 23 Apr 2017 02:28:28 +0000 (02:28 +0000)]
Simplify FreeBSD Host.cpp with early returns

Based on NetBSD's Host.cpp. Also tidy up comments to match NetBSD.

llvm-svn: 301100

7 years agoRevert "Use DW_OP_stack_value when reconstructing variable values with arithmetic."
Adrian Prantl [Sun, 23 Apr 2017 00:44:40 +0000 (00:44 +0000)]
Revert "Use DW_OP_stack_value when reconstructing variable values with arithmetic."

This reverts commit r301093 while investigating stage2 bot breakage.

llvm-svn: 301099

7 years agoFix testcase: s/CHECKNEXT/CHECK-NEXT/
Jonathan Roelofs [Sat, 22 Apr 2017 23:43:44 +0000 (23:43 +0000)]
Fix testcase: s/CHECKNEXT/CHECK-NEXT/

llvm-svn: 301098

7 years ago[InstCombine] clean up tests and regenerate checks; NFC
Sanjay Patel [Sat, 22 Apr 2017 23:36:47 +0000 (23:36 +0000)]
[InstCombine] clean up tests and regenerate checks; NFC

llvm-svn: 301097

7 years ago[CMake] Fix polly-isl-test execution in out-of-LLVM-tree builds.
Michael Kruse [Sat, 22 Apr 2017 23:02:53 +0000 (23:02 +0000)]
[CMake] Fix polly-isl-test execution in out-of-LLVM-tree builds.

The isl unittest modified its PATH variable to point to the LLVM bin dir.
When building out-of-LLVM-tree, it does not contain the
polly-isl-test executable, hence the test fails.

Ensure that the polly-isl-test is written to a bin directory in the
build root, just like it would happen in an inside-LLVM build.
Then, change PATH to include that dir such that the executable in it
is prioritized before any other location.

llvm-svn: 301096

7 years ago[CMake] Fix unittests in out-of-LLVM-tree builds.
Michael Kruse [Sat, 22 Apr 2017 23:02:46 +0000 (23:02 +0000)]
[CMake] Fix unittests in out-of-LLVM-tree builds.

Unittests are linked against a subset of LLVM libraries and its
transitive dependencies resolved by CMake. The information about indirect
library dependency is not available when building separately from
LLVM, which result in missing symbol errors while linking.

Resolve this issue by querying llvm-config about the available
LLVM libraries and link against all of them, since dependence
information is still not available.

llvm-svn: 301095

7 years ago[APInt] Add ashrInPlace method and implement ashr using it. Also fix a bug in the...
Craig Topper [Sat, 22 Apr 2017 22:00:03 +0000 (22:00 +0000)]
[APInt] Add ashrInPlace method and implement ashr using it. Also fix a bug in the shift by BitWidth handling.

For single word, shift by BitWidth was always returning 0, but for multiword it was based on original sign. Now single word matches multi word.

llvm-svn: 301094

7 years agoUse DW_OP_stack_value when reconstructing variable values with arithmetic.
Adrian Prantl [Sat, 22 Apr 2017 20:54:06 +0000 (20:54 +0000)]
Use DW_OP_stack_value when reconstructing variable values with arithmetic.

When the location description of a source variable involves arithmetic
on the value itself, it needs to be marked with DW_OP_stack_value since it
is not describing the variable's location, but rather its value.

This is a follow-up to r297971 and fixes the source testcase quoted in
the comment in debuginfo-dce.ll.

rdar://problem/30725338

llvm-svn: 301093

7 years ago[X86] Regenerate TLS tests
Simon Pilgrim [Sat, 22 Apr 2017 20:13:58 +0000 (20:13 +0000)]
[X86] Regenerate TLS tests

Use the correct check prefix for X86/X32/X64 target types.

llvm-svn: 301092

7 years ago[APInt] Remove unnecessary min with BitWidth from countTrailingOnesSlowCase.
Craig Topper [Sat, 22 Apr 2017 19:59:11 +0000 (19:59 +0000)]
[APInt] Remove unnecessary min with BitWidth from countTrailingOnesSlowCase.

The unused upper bits are guaranteed to be 0 so we don't need to worry about accidentally counting them.

llvm-svn: 301091

7 years ago[PartialInlining] Using existing hasAddressTaken interface to legality check/NFC
Xinliang David Li [Sat, 22 Apr 2017 19:24:19 +0000 (19:24 +0000)]
[PartialInlining] Using existing hasAddressTaken interface to legality check/NFC

llvm-svn: 301090

7 years ago[builtins] Implement emulated TLS on Windows.
Frederich Munch [Sat, 22 Apr 2017 18:45:17 +0000 (18:45 +0000)]
[builtins] Implement emulated TLS on Windows.

Summary:
LLVM JIT needs to be able to use emulated TLS on all platforms, and this provides a reference one can compile to enable emutls for Linux/Mac/Windows.

Reviewers: chh, howard.hinnant

Reviewed By: chh

Subscribers: mgorny, llvm-commits

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

llvm-svn: 301089

7 years ago[InstCombine] use 'match' to reduce code; NFCI
Sanjay Patel [Sat, 22 Apr 2017 18:05:35 +0000 (18:05 +0000)]
[InstCombine] use 'match' to reduce code; NFCI

The later uses of dyn_castNotVal in this block are either
incomplete (doesn't handle vector constants) or overstepping
(shouldn't handle constants at all), but this first use is
just unnecessary. 'I' is obviously not a constant, and it
can't be a not-of-a-not because that would already be
instsimplified.

llvm-svn: 301088

7 years agoUpdate documentation for the NetBSD target
Kamil Rytarowski [Sat, 22 Apr 2017 16:11:23 +0000 (16:11 +0000)]
Update documentation for the NetBSD target

LLVM is known to work on NetBSD x86 32-bit and 64-bit.

llvm-svn: 301081

7 years ago[globalisel][tablegen] Add support for RegisterOperand.
Daniel Sanders [Sat, 22 Apr 2017 15:53:21 +0000 (15:53 +0000)]
[globalisel][tablegen] Add support for RegisterOperand.

Summary:
It functions just like RegisterClass except that the class is obtained
from a field.

Depends on D31761.

Reviewers: ab, qcolombet, t.p.northover, rovka, kristof.beyls, aditya_nandakumar

Reviewed By: ab

Subscribers: dberris, llvm-commits, igorb

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

llvm-svn: 301080

7 years ago[globalisel][tablegen] Revise API for ComplexPattern operands to improve flexibility.
Daniel Sanders [Sat, 22 Apr 2017 15:11:04 +0000 (15:11 +0000)]
[globalisel][tablegen] Revise API for ComplexPattern operands to improve flexibility.

Summary:
Some targets need to be able to do more complex rendering than just adding an
operand or two to an instruction. For example, it may need to insert an
instruction to extract a subreg first, or it may need to perform an operation
on the operand.

In SelectionDAG, targets would create SDNode's to achieve the desired effect
during the complex pattern predicate. This worked because SelectionDAG had a
form of garbage collection that would take care of SDNode's that were created
but not used due to a later predicate rejecting a match. This doesn't translate
well to GlobalISel and the churn was wasteful.

The API changes in this patch enable GlobalISel to accomplish the same thing
without the waste. The API is now:
InstructionSelector::OptionalComplexRendererFn selectArithImmed(MachineOperand &Root) const;
where Root is the root of the match. The return value can be omitted to
indicate that the predicate failed to match, or a function with the signature
ComplexRendererFn can be returned. For example:
return OptionalComplexRendererFn(
       [=](MachineInstrBuilder &MIB) { MIB.addImm(Immed).addImm(ShVal); });
adds two immediate operands to the rendered instruction. Immed and ShVal are
captured from the predicate function.

As an added bonus, this also reduces the amount of information we need to
provide to GIComplexOperandMatcher.

Depends on D31418

Reviewers: aditya_nandakumar, t.p.northover, qcolombet, rovka, ab, javed.absar

Reviewed By: ab

Subscribers: dberris, kristof.beyls, igorb, llvm-commits

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

llvm-svn: 301079

7 years ago[globalisel][tablegen] Fix PR32733 by checking which instruction operands belong to.
Daniel Sanders [Sat, 22 Apr 2017 14:31:28 +0000 (14:31 +0000)]
[globalisel][tablegen] Fix PR32733 by checking which instruction operands belong to.

canMutate() was returning true when the operands were all in the same order as
the matched instruction. However, it wasn't checking the operands were actually
on that instruction. This worked when we could only match a single instruction
but the addition of nested instruction matching led to cases where the operands
could be split across multiple instructions. canMutate() now returns false if
operands belong to instructions other than the root of the match.

llvm-svn: 301077

7 years ago[OpenMP] libomptarget: Set ref count for global objects to positive infinity
George Rokos [Sat, 22 Apr 2017 11:45:03 +0000 (11:45 +0000)]
[OpenMP] libomptarget: Set ref count for global objects to positive infinity

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

llvm-svn: 301076

7 years ago[OpenMP] libomptarget: Remove obsolete negative device IDs -2/-3
George Rokos [Sat, 22 Apr 2017 11:21:54 +0000 (11:21 +0000)]
[OpenMP] libomptarget: Remove obsolete negative device IDs -2/-3

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

llvm-svn: 301075

7 years ago[OpenMP] Run libomptarget regression tests using all available system threads.
George Rokos [Sat, 22 Apr 2017 11:20:20 +0000 (11:20 +0000)]
[OpenMP] Run libomptarget regression tests using all available system threads.

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

llvm-svn: 301074

7 years agoFix test to handle .rel and .rela sections (& to actually specify the target architec...
David Blaikie [Sat, 22 Apr 2017 08:17:39 +0000 (08:17 +0000)]
Fix test to handle .rel and .rela sections (& to actually specify the target architecture as X86)

llvm-svn: 301073

7 years agoAvoid using relocations for ref_addr in .dwo files
David Blaikie [Sat, 22 Apr 2017 07:53:44 +0000 (07:53 +0000)]
Avoid using relocations for ref_addr in .dwo files

In dwo files the fixed offset can be used - if the dwos are linked into
a dwp, the dwo consumer must use the dwp tables to find out where the
original range of the debug_info was and resolve the "section relative"
value relative to that original range - effectively
avoiding/reimplementing the relocation handling.

llvm-svn: 301072

7 years agoFix test from polluting the source tree
David Blaikie [Sat, 22 Apr 2017 07:53:40 +0000 (07:53 +0000)]
Fix test from polluting the source tree

(though this seems like a "does this not crash" test - which isn't very
good. Should be fixed)

llvm-svn: 301071

7 years agoFix for PR32740 - Invalid floating type, unreachable between r300969 and r301029
Artur Pilipenko [Sat, 22 Apr 2017 07:24:52 +0000 (07:24 +0000)]
Fix for PR32740 - Invalid floating type, unreachable between r300969 and r301029

The bug was introduced by r301018 "[InstCombine] fadd double (sitofp x), y check that the promotion is valid". The patch didn't expect that fadd can be on vectors not necessarily scalars. Add vector support along with the test.

llvm-svn: 301070

7 years ago[APInt] Add WORD_MAX constant and use it instead of UINT64_MAX. NFC
Craig Topper [Sat, 22 Apr 2017 06:31:36 +0000 (06:31 +0000)]
[APInt] Add WORD_MAX constant and use it instead of UINT64_MAX. NFC

llvm-svn: 301069

7 years agoRemove the unnecessary virtual dtor from the DIEUnit hierarchy (in favor of protected...
David Blaikie [Sat, 22 Apr 2017 02:18:00 +0000 (02:18 +0000)]
Remove the unnecessary virtual dtor from the DIEUnit hierarchy (in favor of protected dtor in the base, final derived classes with public non-virtual dtors)

These objects are never polymorphically owned/destroyed, so the virtual
dtor was unnecessary.

llvm-svn: 301068

7 years agoThreadSanitizer plugin: match for loop variable with expected type
Ed Maste [Sat, 22 Apr 2017 01:38:54 +0000 (01:38 +0000)]
ThreadSanitizer plugin: match for loop variable with expected type

Removes Clang warning ThreadSanitizerRuntime.cpp:591:21: warning:
comparison of integers of different signs: 'int' and 'size_t' (aka
'unsigned long') [-Wsign-compare]

llvm-svn: 301067

7 years agoRearrange some Modules TS testcases into test/CXX/modules-ts.
Richard Smith [Sat, 22 Apr 2017 00:47:53 +0000 (00:47 +0000)]
Rearrange some Modules TS testcases into test/CXX/modules-ts.

llvm-svn: 301066

7 years ago[cfi] Disable thinlto tests on Darwin.
Ahmed Bougacha [Sat, 22 Apr 2017 00:07:47 +0000 (00:07 +0000)]
[cfi] Disable thinlto tests on Darwin.

These were added in r301016, but they're failing, because
-fsanitize=cfi seemingly causes -flto=thin to emit raw bitcode objects,
rather than the mach-o-wrapped bitcode we emit with -flto=thin alone.

That causes all tests to fail with ld64 errors.

Filed PR32741.

llvm-svn: 301065

7 years agoLowerSwitch: Fix producing invalid IR on unreachable code
Matt Arsenault [Fri, 21 Apr 2017 23:54:12 +0000 (23:54 +0000)]
LowerSwitch: Fix producing invalid IR on unreachable code

If a switch was in an unreachable block that branched
to a block with a phi, it would leave phis with missing
predecessors.

llvm-svn: 301064

7 years agoMove Split DWARF handling to an MC option/command line argument rather than using...
David Blaikie [Fri, 21 Apr 2017 23:35:36 +0000 (23:35 +0000)]
Move Split DWARF handling to an MC option/command line argument rather than using metadata

Since Split DWARF needs to name the actual .dwo file that is generated,
it can't be known at the time the llvm::Module is produced as it may be
merged with other Modules before the object is generated and that object
may be generated with any name.

By passing the Split DWARF file name when LLVM is producing object code
the .dwo file name in the object file can match correctly.

The support for Split DWARF for implicit modules remains the same -
using metadata to store the dwo name and dwo id so that potentially
multiple skeleton CUs referring to different dwo files can be generated
from one llvm::Module.

llvm-svn: 301063

7 years agoMove Split DWARF handling to an MC option/command line argument rather than using...
David Blaikie [Fri, 21 Apr 2017 23:35:26 +0000 (23:35 +0000)]
Move Split DWARF handling to an MC option/command line argument rather than using metadata

Since Split DWARF needs to name the actual .dwo file that is generated,
it can't be known at the time the llvm::Module is produced as it may be
merged with other Modules before the object is generated and that object
may be generated with any name.

By passing the Split DWARF file name when LLVM is producing object code
the .dwo file name in the object file can match correctly.

The support for Split DWARF for implicit modules remains the same -
using metadata to store the dwo name and dwo id so that potentially
multiple skeleton CUs referring to different dwo files can be generated
from one llvm::Module.

llvm-svn: 301062

7 years agoFixup for r301054: Use an explicit constructor.
Kuba Mracek [Fri, 21 Apr 2017 23:28:01 +0000 (23:28 +0000)]
Fixup for r301054: Use an explicit constructor.

llvm-svn: 301061

7 years agocmath: Skip Libc for integral types in isinf, etc.
Duncan P. N. Exon Smith [Fri, 21 Apr 2017 23:14:55 +0000 (23:14 +0000)]
cmath: Skip Libc for integral types in isinf, etc.

For std::isinf, the standard requires effectively calling isinf as
double from Libc for integral types. But integral types are never
infinite; we don't need to call Libc to return false.

Also short-circuit other functions where Libc won't have interesting
answers: signbit, fpclassify, isfinite, isnan, and isnormal.

I added correctness tests for integral types since we're no longer
deferring to Libc.

In review it was pointed out that in future revisions of the C++
standard we may add more types to std::is_arithmetic (e.g.,
std::is_fixed_point).  I'll leave it to a future commit to hack this to
allow using math functions on those.  We'll need to change things like
__libcpp_fpclassify anyway, so I'm not sure anything here would really
be future-proof.

https://reviews.llvm.org/D31561
rdar://problem/31361223

llvm-svn: 301060

7 years agoRemove a repeated comment line. NFC.
Easwaran Raman [Fri, 21 Apr 2017 23:12:16 +0000 (23:12 +0000)]
Remove a repeated comment line. NFC.

llvm-svn: 301059

7 years agoFixup for r301054: Only use __attribute__((no_sanitize("memory"))) when it's available.
Kuba Mracek [Fri, 21 Apr 2017 22:58:55 +0000 (22:58 +0000)]
Fixup for r301054: Only use __attribute__((no_sanitize("memory"))) when it's available.

llvm-svn: 301058

7 years agoAArch64FrameLowering: Check if the ExtraCSSpill register is actually unused
Matthias Braun [Fri, 21 Apr 2017 22:42:08 +0000 (22:42 +0000)]
AArch64FrameLowering: Check if the ExtraCSSpill register is actually unused

The code assumed that when saving an additional CSR register
(ExtraCSSpill==true) we would have a free register throughout the
function. This was not true if this CSR register is also used to pass
values as in the swiftself case.

rdar://31451816

llvm-svn: 301057

7 years agoP0629R0: Switch to latest proposal for distinguishing module interface from implement...
Richard Smith [Fri, 21 Apr 2017 22:39:18 +0000 (22:39 +0000)]
P0629R0: Switch to latest proposal for distinguishing module interface from implementation.

This switches from the prototype syntax in P0273R0 ('module' and 'module
implementation') to the consensus syntax 'export module' and 'module'.

In passing, drop the "module declaration must be first" enforcement, since EWG
seems to have changed its mind on that.

llvm-svn: 301056

7 years agoExpand test coverage for LWG2857
Casey Carter [Fri, 21 Apr 2017 22:38:59 +0000 (22:38 +0000)]
Expand test coverage for LWG2857

* Cover optional's emplace-from-initializer_list overload

* Verify that any::emplace and optional::emplace return a reference to the correct type even for throwing cases.

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

llvm-svn: 301055

7 years ago[libFuzzer] Always build libFuzzer
Kuba Mracek [Fri, 21 Apr 2017 22:38:24 +0000 (22:38 +0000)]
[libFuzzer] Always build libFuzzer

There are two reasons why users might want to build libfuzzer:
- To fuzz LLVM itself
- To get the libFuzzer.a archive file, so that they can attach it to their code
This change always builds libfuzzer, and supports the second use case if the specified flag is set.

The point of this patch is to have something that can potentially be shipped with the compiler, and this also ensures that the version of libFuzzer is correct to use with that compiler.

Patch by George Karpenkov.

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

llvm-svn: 301054

7 years ago[APSInt] Use APInt::compare and APInt::compareSigned to implement APSInt::compareValue
Craig Topper [Fri, 21 Apr 2017 22:32:27 +0000 (22:32 +0000)]
[APSInt] Use APInt::compare and APInt::compareSigned to implement APSInt::compareValue

APInt just got compare methods that return -1, 0, or 1 instead of just having ult/slt and eq.

This patch uses these methods to implement APSInt::compareValues so that we don't have to call do an equal comparison and then possibly a second less than comparison.

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

llvm-svn: 301053

7 years ago[APSInt] Make use of APInt's recently acquired in place lshr and shl capabilities...
Craig Topper [Fri, 21 Apr 2017 22:30:06 +0000 (22:30 +0000)]
[APSInt] Make use of APInt's recently acquired in place lshr and shl capabilities in APSInt's >>= and <<= operators.

APInt hasn't acquired an in place ashr yet, but hopefully soon.

llvm-svn: 301052

7 years ago[index] Take into account the category's external_symbol attr for namespacing its...
Argyrios Kyrtzidis [Fri, 21 Apr 2017 22:27:06 +0000 (22:27 +0000)]
[index] Take into account the category's external_symbol attr for namespacing its methods

llvm-svn: 301051

7 years agoAdd test coverage for mem2reg dbg.declare lowering.
Adrian Prantl [Fri, 21 Apr 2017 22:13:55 +0000 (22:13 +0000)]
Add test coverage for mem2reg dbg.declare lowering.

llvm-svn: 301050

7 years ago[Object] Fix some Clang-tidy modernize and Include What You Use warnings; other minor...
Eugene Zelenko [Fri, 21 Apr 2017 22:03:05 +0000 (22:03 +0000)]
[Object] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).

llvm-svn: 301049

7 years ago[lsan] Enable LSan on PowerPC64.
Alex Shlyapnikov [Fri, 21 Apr 2017 21:59:53 +0000 (21:59 +0000)]
[lsan] Enable LSan on PowerPC64.

Summary: Re-landing reverted D31995 with suppressions defined in D32303 and D32377.

Reviewers: eugenis

Subscribers: nemanjai, llvm-commits

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

llvm-svn: 301048

7 years agoRe-commit r301040 "X86: Don't emit zero-byte functions on Windows"
Hans Wennborg [Fri, 21 Apr 2017 21:48:41 +0000 (21:48 +0000)]
Re-commit r301040 "X86: Don't emit zero-byte functions on Windows"

In addition to the original commit, tighten the condition for when to
pad empty functions to COFF Windows.  This avoids running into problems
when targeting e.g. Win32 AMDGPU, which caused test failures when this
was committed initially.

llvm-svn: 301047

7 years ago[Test commit] Remove extra newline.
Frederich Munch [Fri, 21 Apr 2017 21:39:50 +0000 (21:39 +0000)]
[Test commit] Remove extra newline.

llvm-svn: 301046

7 years ago[coff] for /msvclto, pass archive members with prevailing symbols first
Bob Haarman [Fri, 21 Apr 2017 21:38:01 +0000 (21:38 +0000)]
[coff] for /msvclto, pass archive members with prevailing symbols first

Summary: When using /msvclto, lld and MSVC's linker both do their own symbol resolution. This can cause them to select different archive members, which can result in undefined references. This change avoids that situation by extracting archive members that are selected by lld and passing those to link.exe before any archives, so that MSVC's uses those objects for symbol resolution instead of different archive members.

Reviewers: pcc, rnk, ruiu

Reviewed By: pcc

Subscribers: llvm-commits, mehdi_amini

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

llvm-svn: 301045

7 years agoInferAddressSpaces: Infer for just GEPs
Matt Arsenault [Fri, 21 Apr 2017 21:35:04 +0000 (21:35 +0000)]
InferAddressSpaces: Infer for just GEPs

Fixes leaving intermediate flat addressing computations
where a GEP instruction's source is a constant expression.

Still leaves behind a trivial addrspacecast + gep pair that
instcombine is able to handle, which ideally could be folded
here directly.

llvm-svn: 301044

7 years agoSuppress DTLS leak happening in some glibc versions.
Alex Shlyapnikov [Fri, 21 Apr 2017 21:34:37 +0000 (21:34 +0000)]
Suppress DTLS leak happening in some glibc versions.

Summary: Refer to https://sourceware.org/bugzilla/show_bug.cgi?id=12650 for the context.

Reviewers: eugenis

Subscribers: llvm-commits

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

llvm-svn: 301043

7 years ago[PartialInliner] Partial inliner needs to check use kind before transformation
Xinliang David Li [Fri, 21 Apr 2017 21:20:56 +0000 (21:20 +0000)]
[PartialInliner] Partial inliner needs to check use kind before transformation

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

llvm-svn: 301042

7 years agoRevert r301040 "X86: Don't emit zero-byte functions on Windows"
Hans Wennborg [Fri, 21 Apr 2017 21:10:37 +0000 (21:10 +0000)]
Revert r301040 "X86: Don't emit zero-byte functions on Windows"

This broke almost all bots. Reverting while fixing.

llvm-svn: 301041

7 years agoX86: Don't emit zero-byte functions on Windows
Hans Wennborg [Fri, 21 Apr 2017 20:58:12 +0000 (20:58 +0000)]
X86: Don't emit zero-byte functions on Windows

Empty functions can lead to duplicate entries in the Guard CF Function
Table of a binary due to multiple functions sharing the same RVA,
causing the kernel to refuse to load that binary.

We had a terrific bug due to this in Chromium.

It turns out we were already doing this for Mach-O in certain
situations. This patch expands the code for that in
AsmPrinter::EmitFunctionBody() and renames
TargetInstrInfo::getNoopForMachoTarget() to simply getNoop() since it
seems it was used for not just Mach-O anyway.

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

llvm-svn: 301040

7 years agoAdd comments to the diagnostic kinds in Diagnostic.td.
Nico Weber [Fri, 21 Apr 2017 20:55:00 +0000 (20:55 +0000)]
Add comments to the diagnostic kinds in Diagnostic.td.

https://reviews.llvm.org/D32371

llvm-svn: 301039

7 years agoAdd a dependency from llvm/test to llvm-cvtres.
Zachary Turner [Fri, 21 Apr 2017 20:45:11 +0000 (20:45 +0000)]
Add a dependency from llvm/test to llvm-cvtres.

llvm-svn: 301038

7 years agoAArch64: add test for "fence singlethread"
Tim Northover [Fri, 21 Apr 2017 20:36:08 +0000 (20:36 +0000)]
AArch64: add test for "fence singlethread"

Forgot a git add yesterday.

llvm-svn: 301037

7 years agoARM: make sure we use all entries in a vector before forming a vpaddl.
Tim Northover [Fri, 21 Apr 2017 20:35:52 +0000 (20:35 +0000)]
ARM: make sure we use all entries in a vector before forming a vpaddl.

Otherwise there's some mismatch, and we'll either form an illegal type or an
illegal node.

Thanks to Eli Friedman for pointing out the problem with my original solution.

llvm-svn: 301036

7 years ago[InstCombine] revert r300977 and r301021
Sanjay Patel [Fri, 21 Apr 2017 20:29:17 +0000 (20:29 +0000)]
[InstCombine] revert r300977 and r301021

This can cause an inf-loop. Investigating...

llvm-svn: 301035

7 years agoCorrect the names of some target conditional defines in debugserver.
Jason Molenda [Fri, 21 Apr 2017 20:19:28 +0000 (20:19 +0000)]
Correct the names of some target conditional defines in debugserver.

llvm-svn: 301034

7 years agoFixed a type conversion error in BitVector.
Zachary Turner [Fri, 21 Apr 2017 20:18:43 +0000 (20:18 +0000)]
Fixed a type conversion error in BitVector.

llvm-svn: 301033

7 years ago[ms] Give -Wmicrosoft-enum-forward-reference a chance to fire in clang-cl, PR32736
Nico Weber [Fri, 21 Apr 2017 20:12:26 +0000 (20:12 +0000)]
[ms] Give -Wmicrosoft-enum-forward-reference a chance to fire in clang-cl, PR32736

clang-cl sets MicrosoftCompat. In that mode, we always give enums a fixed
underlying type, and for enums with fixed underlying type we never enter the
block that tries to emit ext_ms_forward_ref_enum. Fix this by requiring an
explicit underlying type when we're skipping this diagnostic.

We had a test for this warning, but it only ran in C++98 mode. clang-cl always
enables -std=c++14, so MicrosoftCompatibiliy-cxx98.cpp is a fairly useless
test. Fold it into MicrosoftCompatibility.cpp -- that way, the test checks if
-Wmicrosoft-enum-forward-reference can fire in clang-cl builds.

https://reviews.llvm.org/D32369

llvm-svn: 301032

7 years ago[BitVector] Make BitVector store an ArrayRef.
Zachary Turner [Fri, 21 Apr 2017 20:12:08 +0000 (20:12 +0000)]
[BitVector] Make BitVector store an ArrayRef.

This makes certain operations on the underlying storage
easier since we have access to ArrayRef methods such as
drop_front, drop_back, slice, range-based for loops, etc.

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

llvm-svn: 301031

7 years agotypo
Adrian Prantl [Fri, 21 Apr 2017 20:06:41 +0000 (20:06 +0000)]
typo

llvm-svn: 301030

7 years agoAMDGPU/GFX9: Enable FastFMAF32
Konstantin Zhuravlyov [Fri, 21 Apr 2017 19:57:53 +0000 (19:57 +0000)]
AMDGPU/GFX9: Enable FastFMAF32

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

llvm-svn: 301029

7 years agoAMDGPU: Temporarily disable packed inlinable literals (v2f16, v2i16)
Konstantin Zhuravlyov [Fri, 21 Apr 2017 19:45:22 +0000 (19:45 +0000)]
AMDGPU: Temporarily disable packed inlinable literals (v2f16, v2i16)

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

llvm-svn: 301028

7 years ago[asan] Optimize strchr for strict_string_checks=false
Vitaly Buka [Fri, 21 Apr 2017 19:39:46 +0000 (19:39 +0000)]
[asan] Optimize strchr for strict_string_checks=false

Summary:
strchr interceptor does not need to call strlen if strict_string_checks is not
enabled. Unnecessary strlen calls affect python parser performance.

Reviewers: eugenis, kcc

Subscribers: llvm-commits, kubamracek

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

llvm-svn: 301027

7 years agoAMDGPU: Fix S_PACK_HH_B32_B16
Konstantin Zhuravlyov [Fri, 21 Apr 2017 19:35:05 +0000 (19:35 +0000)]
AMDGPU: Fix S_PACK_HH_B32_B16
  - We really ought to zero out lower 16 bits

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

llvm-svn: 301026

7 years ago[AMDGPU] Handle SI_MASKED_UNREACHABLE in instruction emitter
Yaxun Liu [Fri, 21 Apr 2017 19:32:02 +0000 (19:32 +0000)]
[AMDGPU] Handle SI_MASKED_UNREACHABLE in instruction emitter

SI_MASKED_UNREACHABLE does not have machine instruction encoding.
It needs special handling in AMDGPUAsmPrinter::EmitInstruction like some
other pseudo instructions.

This patch fixes compilation failure of RadeonRays.

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

llvm-svn: 301025

7 years agoRevert "X86RegisterInfo: eliminateFrameIndex: Avoid code duplication; NFC"
Matthias Braun [Fri, 21 Apr 2017 19:26:45 +0000 (19:26 +0000)]
Revert "X86RegisterInfo: eliminateFrameIndex: Avoid code duplication; NFC"

It seems we have on situation in a sanitizer enable bootstrap build
where the return instruction has a frame index operand that does not
point to a fixed object and fails the assert added here.

This reverts commit r300923.
This reverts commit r300922.

llvm-svn: 301024

7 years agoAMDGPU: Do not lower fast unsafe div for safe, f32, with fp32 denormals
Konstantin Zhuravlyov [Fri, 21 Apr 2017 19:25:33 +0000 (19:25 +0000)]
AMDGPU: Do not lower fast unsafe div for safe, f32, with fp32 denormals

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

llvm-svn: 301023

7 years ago[cfi] Replace elif with elseif in cmake.
Evgeniy Stepanov [Fri, 21 Apr 2017 19:22:15 +0000 (19:22 +0000)]
[cfi] Replace elif with elseif in cmake.

Apparently, elif() is deprecated.

llvm-svn: 301022

7 years ago[InstCombine] use isSubsetOf() for efficiency
Sanjay Patel [Fri, 21 Apr 2017 19:16:52 +0000 (19:16 +0000)]
[InstCombine] use isSubsetOf() for efficiency

C | ~D == -1
~(C | ~D) == 0
~C & D == 0
D & ~C == 0
D.isSubsetOf(C)

llvm-svn: 301021

7 years ago[CMake] Link unittests only against libLLVM.so, if available.
Michael Kruse [Fri, 21 Apr 2017 19:03:51 +0000 (19:03 +0000)]
[CMake] Link unittests only against libLLVM.so, if available.

We can only link against libLLVM.so or the individual libLLVM*.so
components, but not both of them. Doing so results in these components
exist twice in the programs address space, since it is already contained
in libLLVM.so. The observable effect of this is that command line
switches are registered multiple times (once for each instance),
which is an error.

This fixes llvm.org/PR32735.

Reported-by: Singapuram Sanjay Srivallabh <singapuram.sanjay@gmail.com>
llvm-svn: 301020

7 years ago[AArch64] Improve code generation for logical instructions taking
Akira Hatanaka [Fri, 21 Apr 2017 18:53:12 +0000 (18:53 +0000)]
[AArch64] Improve code generation for logical instructions taking
immediate operands.

This commit adds an AArch64 dag-combine that optimizes code generation
for logical instructions taking immediate operands. The optimization
uses demanded bits to change a logical instruction's immediate operand
so that the immediate can be folded into the immediate field of the
instruction.

This recommits r300932 and r300930, which was causing dag-combine to
loop forever. The problem was that optimizeLogicalImm was returning
true even when there was no change to the immediate node (which happened
when the immediate was all zeros or ones), which caused dag-combine to
push and pop the same node to the work list over and over again without
making any progress.

This commit fixes the bug by returning false early in optimizeLogicalImm
if the immediate is all zeros or ones. Also, it changes the code to
compare the immediate with 0 or Mask rather than calling
countPopulation.

rdar://problem/18231627

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

llvm-svn: 301019

7 years ago[InstCombine] fadd double (sitofp x), y check that the promotion is valid
Artur Pilipenko [Fri, 21 Apr 2017 18:45:25 +0000 (18:45 +0000)]
[InstCombine] fadd double (sitofp x), y check that the promotion is valid

Doing these transformations check that the result of integer addition is representable in the FP type.

(fadd double (sitofp x), fpcst) --> (sitofp (add int x, intcst))
(fadd double (sitofp x), (sitofp y)) --> (sitofp (add int x, y))

This is a fix for https://bugs.llvm.org//show_bug.cgi?id=27036

Reviewed By: andrew.w.kaylor, scanon, spatel

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

llvm-svn: 301018

7 years agoFixup for r301007: Restrict the -D hack to Darwin.
Kuba Mracek [Fri, 21 Apr 2017 18:19:56 +0000 (18:19 +0000)]
Fixup for r301007: Restrict the -D hack to Darwin.

llvm-svn: 301017

7 years ago[cfi] Run tests with and without lld and thinlto.
Evgeniy Stepanov [Fri, 21 Apr 2017 18:11:23 +0000 (18:11 +0000)]
[cfi] Run tests with and without lld and thinlto.

Run tests in all configurations:
(standalone, with devirtualization) * (gold, lld) * (lto, thinlto)

llvm-svn: 301016

7 years ago[scudo] Bypass Quarantine if its size is set to 0
Kostya Kortchinsky [Fri, 21 Apr 2017 18:10:53 +0000 (18:10 +0000)]
[scudo] Bypass Quarantine if its size is set to 0

Summary:
In the current state of things, the deallocation path puts a chunk in the
Quarantine whether it's enabled or not (size of 0). When the Quarantine is
disabled, this results in the header being loaded (and checked) twice, and
stored (and checksummed) once, in `deallocate` and `Recycle`.

This change introduces a `quarantineOrDeallocateChunk` function that has a
fast path to deallocation if the Quarantine is disabled. Even though this is
not the preferred configuration security-wise, this change saves a sizeable
amount of processing for that particular situation (which could be adopted by
low memory devices). Additionally this simplifies a bit `deallocate` and
`reallocate`.

Reviewers: dvyukov, kcc, alekseyshl

Reviewed By: dvyukov

Subscribers: llvm-commits

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

llvm-svn: 301015

7 years ago[BitVector] Add find_last() and find_last_unset().
Zachary Turner [Fri, 21 Apr 2017 18:07:46 +0000 (18:07 +0000)]
[BitVector] Add find_last() and find_last_unset().

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

llvm-svn: 301014