OSDN Git Service

android-x86/external-llvm.git
5 years agoARM: fix Thumb2 CodeGen for ldrex with folded frame-index.
Tim Northover [Fri, 7 Sep 2018 09:21:25 +0000 (09:21 +0000)]
ARM: fix Thumb2 CodeGen for ldrex with folded frame-index.

Because t2LDREX (& t2STREX) were marked as AddrModeNone, but did allow a
FrameIndex operand, rewriteT2FrameIndex asserted. This gives them a
proper addressing-mode and tells the rewriter about it so that encodable
offsets are exploited and others are rejected.

Should fix PR38828.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341642 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MSan] Add KMSAN instrumentation to MSan pass
Alexander Potapenko [Fri, 7 Sep 2018 09:10:30 +0000 (09:10 +0000)]
[MSan] Add KMSAN instrumentation to MSan pass

Introduce the -msan-kernel flag, which enables the kernel instrumentation.

The main differences between KMSAN and MSan instrumentations are:

- KMSAN implies msan-track-origins=2, msan-keep-going=true;
- there're no explicit accesses to shadow and origin memory.
  Shadow and origin values for a particular X-byte memory location are
  read and written via pointers returned by
  __msan_metadata_ptr_for_load_X(u8 *addr) and
  __msan_store_shadow_origin_X(u8 *addr, uptr shadow, uptr origin);
- TLS variables are stored in a single struct in per-task storage. A call
  to a function returning that struct is inserted into every instrumented
  function before the entry block;
- __msan_warning() takes a 32-bit origin parameter;
- local variables are poisoned with __msan_poison_alloca() upon function
  entry and unpoisoned with __msan_unpoison_alloca() before leaving the
  function;
- the pass doesn't declare any global variables or add global constructors
  to the translation unit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341637 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[AMDGPU] Preliminary patch for divergence driven instruction selection. Fold immediat...
Alexander Timofeev [Fri, 7 Sep 2018 09:05:34 +0000 (09:05 +0000)]
[AMDGPU] Preliminary patch for divergence driven instruction selection. Fold immediate SMRD offset.

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

Reviewer: rampitec

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341636 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-objcopy] Dwarf .debug section compression support (zlib, zlib-gnu).
Puyan Lotfi [Fri, 7 Sep 2018 08:10:22 +0000 (08:10 +0000)]
[llvm-objcopy] Dwarf .debug section compression support (zlib, zlib-gnu).

  Third Attempt:
    - Alignment issues resolved.
    - zlib::isAvailable() detected.
    - ArrayRef misuse fixed.

  Usage:

  llvm-objcopy --compress-debug-sections=zlib foo.o
  llvm-objcopy --compress-debug-sections=zlib-gnu foo.o

  In both cases the debug section contents is compressed with zlib. In the GNU
  style case the header is the "ZLIB" magic string followed by the uint64 big-
  endian decompressed size. In the non-GNU mode the header is the
  Elf(32|64)_Chdr.

  Decompression support is coming soon.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341635 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PowerPC] Combine ADD to ADDZE
QingShan Zhang [Fri, 7 Sep 2018 07:56:05 +0000 (07:56 +0000)]
[PowerPC] Combine ADD to ADDZE

On the ppc64le platform, if ir has the following form,

define i64 @addze1(i64 %x, i64 %z) local_unnamed_addr #0 {
entry:
  %cmp = icmp ne i64 %z, CONSTANT      (-32767 <= CONSTANT <= 32768)
  %conv1 = zext i1 %cmp to i64
  %add = add nsw i64 %conv1, %x
  ret i64 %add
}
we can optimize it to the form below.

                                when C == 0
                            --> addze X, (addic Z, -1))
                           /
add X, (zext(setne Z, C))--
                           \    when -32768 <= -C <= 32767 && C != 0
                            --> addze X, (addic (addi Z, -C), -1)

Patch By: HLJ2009 (Li Jia He)
Differential Revision: https://reviews.llvm.org/D51403
Reviewed By: Nemanjai

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341634 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[IndVars] Set Changed when we delete dead instructions. PR38855
Max Kazantsev [Fri, 7 Sep 2018 07:23:39 +0000 (07:23 +0000)]
[IndVars] Set Changed when we delete dead instructions. PR38855

IndVars does not set `Changed` flag when it eliminates dead instructions. As result,
it may make IR modifications and report that it has done nothing. It leads to inconsistent
preserved analyzes results.

Differential Revision: https://reviews.llvm.org/D51770
Reviewed By: skatkov

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341633 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "[XRay] Add a BlockVerifier visitor for FDR Records"
Dean Michael Berris [Fri, 7 Sep 2018 03:38:26 +0000 (03:38 +0000)]
Revert "[XRay] Add a BlockVerifier visitor for FDR Records"

This reverts commit r341628.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341631 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add more test cases for missed opportunities for using RMW form of ADC.
Craig Topper [Fri, 7 Sep 2018 02:39:56 +0000 (02:39 +0000)]
[X86] Add more test cases for missed opportunities for using RMW form of ADC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341630 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[XRay] Add a BlockVerifier visitor for FDR Records
Dean Michael Berris [Fri, 7 Sep 2018 02:25:06 +0000 (02:25 +0000)]
[XRay] Add a BlockVerifier visitor for FDR Records

Summary:
This patch implements a `BlockVerifier` type which enforces the
invariants of the log structure of FDR mode logs on a per-block basis.
This ensures that the data we encounter from an FDR mode log
semantically correct (i.e. that records follow the documented "grammar"
for FDR mode log records).

This is another part of the refactoring of D50441.

Reviewers: mboerger, eizan

Subscribers: mgorny, hiraditya, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341628 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Fix some incorrect comments. NFC
Craig Topper [Fri, 7 Sep 2018 01:29:42 +0000 (01:29 +0000)]
[X86] Fix some incorrect comments. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341624 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-strip] -p test fix for windows buildbots
Jordan Rupprecht [Fri, 7 Sep 2018 00:28:54 +0000 (00:28 +0000)]
[llvm-strip] -p test fix for windows buildbots

Windows ls prints dates as "1997-05-05" instead of "May 05 1997", so only check for a leading space.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341614 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert: [llvm-objcopy] Dwarf .debug section compression (Second Attempt).
Puyan Lotfi [Fri, 7 Sep 2018 00:28:25 +0000 (00:28 +0000)]
Revert: [llvm-objcopy] Dwarf .debug section compression (Second Attempt).

Various bots still fail for unknown reason.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341613 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PDB] Rename some files in the native reader.
Zachary Turner [Fri, 7 Sep 2018 00:12:56 +0000 (00:12 +0000)]
[PDB] Rename some files in the native reader.

By calling these NativeType<foo>.cpp, they will all be sorted
together, and it also distinguishes the types from the symbols.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341609 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PDB] Create a SymbolCache class.
Zachary Turner [Fri, 7 Sep 2018 00:12:34 +0000 (00:12 +0000)]
[PDB] Create a SymbolCache class.

Part of the responsibility of the native PDB reader is to cache
symbols the first time they are accessed, so they can then be
looked up by an ID.  Furthermore, we need to resolve type indices
to records that we vend to the user, and other things.  Previously
this code was all thrown together a bit haphazardly in the native
session class, but it makes sense to collect all of this into a
single class whose sole responsibility is to manage the collection
of known symbols.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341608 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-objcopy] Dwarf .debug section compression support (zlib, zlib-gnu).
Puyan Lotfi [Thu, 6 Sep 2018 23:59:50 +0000 (23:59 +0000)]
[llvm-objcopy] Dwarf .debug section compression support (zlib, zlib-gnu).

  Second Attempt. Alignment issues resolved. zlib::isAvailable() detected.

  Usage:

  llvm-objcopy --compress-debug-sections=zlib foo.o
  llvm-objcopy --compress-debug-sections=zlib-gnu foo.o

  In both cases the debug section contents is compressed with zlib. In the GNU
  style case the header is the "ZLIB" magic string followed by the uint64 big-
  endian decompressed size. In the non-GNU mode the header is the
  Elf(32|64)_Chdr.

  Decompression support is coming soon.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341607 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add RMW ADC patterns with load in operand 1.
Craig Topper [Thu, 6 Sep 2018 23:55:36 +0000 (23:55 +0000)]
[X86] Add RMW ADC patterns with load in operand 1.

ADC is commutable and the load could be in either operand, but we were only checking operand 0.

Ideally we'd mark X86adc_flag as commutable and tablegen would automatically do this, but the EFLAGS register mention is preventing it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341606 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add a test case showing failure to use the RMW form of ADC when the load is...
Craig Topper [Thu, 6 Sep 2018 23:55:34 +0000 (23:55 +0000)]
[X86] Add a test case showing failure to use the RMW form of ADC when the load is in operand 1 going into isel.

The ADC instruction is commutable, but we only have RMW isel patterns with a load on the left hand side. Nothing will canonicalize loads to the LHS on these ops. So we need two patterns.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341605 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix SampleProf code on LLP64 platforms with stoull
Reid Kleckner [Thu, 6 Sep 2018 23:35:58 +0000 (23:35 +0000)]
Fix SampleProf code on LLP64 platforms with stoull

Otherwise, stoul will throw an out of range exception if the integer
doesn't fit in a 32-bit number.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341604 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoProvide a method for generating deterministic IDs for pointers allocated in BumpPtrAl...
George Karpenkov [Thu, 6 Sep 2018 23:07:05 +0000 (23:07 +0000)]
Provide a method for generating deterministic IDs for pointers allocated in BumpPtrAllocator

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341599 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix error with SmallString implicit conversion.
Zachary Turner [Thu, 6 Sep 2018 22:47:32 +0000 (22:47 +0000)]
Fix error with SmallString implicit conversion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341597 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86] Add isel patterns for commuting X86adc_flag with a load in the LHS.
Craig Topper [Thu, 6 Sep 2018 22:41:44 +0000 (22:41 +0000)]
[X86] Add isel patterns for commuting X86adc_flag with a load in the LHS.

The peephole pass likely gets this normally, but we should be doing it during isel.

Ideally we'd just make the X86adc_flag pattern SDNPCommutable, but the tablegen doesn't handle that when one of the operands is a register reference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341596 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-strip] Fix -p test to check for explicit spaces around dates, to avoid when...
Jordan Rupprecht [Thu, 6 Sep 2018 22:34:48 +0000 (22:34 +0000)]
[llvm-strip] Fix -p test to check for explicit spaces around dates, to avoid when the filename happens to contain 1995/1997.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341595 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoThe initial .text section generated in object files was missing the
Eric Christopher [Thu, 6 Sep 2018 22:09:31 +0000 (22:09 +0000)]
The initial .text section generated in object files was missing the
SHF_ARM_PURECODE flag when being built with the -mexecute-only flag.
All code sections of an ELF must have the flag set for the final .text
section to be execute-only, otherwise the flag gets removed.

A HasData flag is added to MCSection to aid in the determination that
the section is empty. A virtual setTargetSectionFlags is added to
MCELFObjectTargetWriter to allow subclasses to set target specific
section flags to be added to sections which we then use in the ARM
backend to set SHF_ARM_PURECODE.

Patch by Ivan Lozano!

Reviewed By: echristo

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341593 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[SampleFDO] Make sample profile loader unaware of compact format change.
Wei Mi [Thu, 6 Sep 2018 22:03:37 +0000 (22:03 +0000)]
[SampleFDO] Make sample profile loader unaware of compact format change.

The patch tries to make sample profile loader independent of profile format
change. It moves compact format related code into FunctionSamples and
SampleProfileReader classes, and sample profile loader only has to interact
with those two classes and will be unaware of profile format changes.

The cleanup also contain some fixes to further remove the difference between
compactbinary format and binary format. After the cleanup using different
formats originated from the same profile will generate the same binaries,
which we verified by compiling two large server benchmarks w/wo thinlto.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341591 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix a configure issue with Visual Studio generators.
Zachary Turner [Thu, 6 Sep 2018 22:00:38 +0000 (22:00 +0000)]
Fix a configure issue with Visual Studio generators.

We can't put the unittest source dir map in the configuration
specific directory because VS doesn't have a configure-specific
directory, instead it only knows this at runtime.  So we have
to remove this from the path.  This in turn means that the path
will be slightly different in VS configurations vs non vs
configurations.  In the former, the source map will be in the
parent directory of the executable, and in the latter it will
be in the same directory as the executable.  So check both.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341590 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert r341413
Scott Linder [Thu, 6 Sep 2018 21:38:56 +0000 (21:38 +0000)]
Revert r341413

Causes a regression in expensive checks.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341589 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoOutput per-function size-info remarks
Jessica Paquette [Thu, 6 Sep 2018 21:19:54 +0000 (21:19 +0000)]
Output per-function size-info remarks

This patch adds per-function size information remarks. Previously, passing
-Rpass-analysis=size-info would only give you per-module changes. By adding
the ability to do this per-function, it's easier to see which functions
contributed the most to size changes.

https://reviews.llvm.org/D51467

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341588 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LoopPassManager] MemorySSA should be preserved when enabled.
Alina Sbirlea [Thu, 6 Sep 2018 20:54:24 +0000 (20:54 +0000)]
[LoopPassManager] MemorySSA should be preserved when enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341587 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoReland rL341509: "[llvm-dwp] Use buffer_stream if output file is not seekable (e...
Fangrui Song [Thu, 6 Sep 2018 20:26:54 +0000 (20:26 +0000)]
Reland rL341509: "[llvm-dwp] Use buffer_stream if output file is not seekable (e.g. "-")"

It caused ambiguity between llvm::cl::Optional and llvm::Optional, which
has been fixed by dropping `using namespace cl;` in favor of explicit
cl:: qualified names.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341586 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-dwp] Use cl:: instead of using namespace cl
Fangrui Song [Thu, 6 Sep 2018 20:23:34 +0000 (20:23 +0000)]
[llvm-dwp] Use cl:: instead of using namespace cl

`using namespace cl` makes llvm::cl::Optional (in Support/CommandLine.h) visible which will cause ambiguity when unqualified `Optional` is looked up (can also refer to llvm::Optional).

cl:: is used much more than `using namespace cl`, so let's not use the latter.

Also append \n to the argument of cl::ParseCommandLineOptions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341584 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAdd missing #include for Testing/Support/SupportHelpers.h
Fangrui Song [Thu, 6 Sep 2018 20:01:06 +0000 (20:01 +0000)]
Add missing #include for Testing/Support/SupportHelpers.h

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341582 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ARC] Prevent InstPrinter from crashing on unknown condition codes.
Tatyana Krasnukha [Thu, 6 Sep 2018 19:58:26 +0000 (19:58 +0000)]
[ARC] Prevent InstPrinter from crashing on unknown condition codes.

Summary:
Instruction printer shouldn't crash with assertions due to incorrect input data. llvm_unreachable is not intended for runtime error handling.

Reviewers: petecoup

Reviewed By: petecoup

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341581 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoQuick fix for -DBUILD_SHARED_LIBS=on build after rL341502
Fangrui Song [Thu, 6 Sep 2018 19:51:20 +0000 (19:51 +0000)]
Quick fix for -DBUILD_SHARED_LIBS=on build after rL341502

libLLVMTestingSupport.so references a symbol in utils/unittest/UnitTestMain/TestMain.cpp (a layering issue) and will cause a link error because of -Wl,-z,defs (cmake/modules/HandleLLVMOptions.cmake)

Waiting zturner for a better fix.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341580 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ORC] Make RuntimeDyldObjectLinkingLayer2 take memory managers by unique_ptr.
Lang Hames [Thu, 6 Sep 2018 19:39:26 +0000 (19:39 +0000)]
[ORC] Make RuntimeDyldObjectLinkingLayer2 take memory managers by unique_ptr.

The existing memory manager API can not be shared between objects when linking
concurrently (since there is no way to know which concurrent allocations were
performed on behalf of which object, and hence which allocations would be safe
to finalize when finalizeMemory is called). For now, we can work around this by
requiring a new memory manager for each object.

This change only affects the concurrent version of the ORC APIs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341579 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ORC] Remove the mapSectionAddress method from RuntimeDyldObjectLinkingLayer2.
Lang Hames [Thu, 6 Sep 2018 19:39:22 +0000 (19:39 +0000)]
[ORC] Remove the mapSectionAddress method from RuntimeDyldObjectLinkingLayer2.

Section address mappings can be applied using the RuntimeDyld instance passed to
the RuntimeDyld::MemoryManager::notifyObjectLoaded method. Proving an alternate
route via RuntimeDyldObjectLinkingLayer2 is redundant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341578 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-ar] Move a variable declaration closer to where it is needed. NFC.
Martin Storsjo [Thu, 6 Sep 2018 19:03:24 +0000 (19:03 +0000)]
[llvm-ar] Move a variable declaration closer to where it is needed. NFC.

This was from a missed review comment from D51338.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341577 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[x86] add tests for pow --> cbrt; NFC
Sanjay Patel [Thu, 6 Sep 2018 18:42:55 +0000 (18:42 +0000)]
[x86] add tests for pow --> cbrt; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341575 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoMove init code in AArch64SelectionDAGTest to SetUpTestCase (NFC)
Scott Linder [Thu, 6 Sep 2018 18:40:35 +0000 (18:40 +0000)]
Move init code in AArch64SelectionDAGTest to SetUpTestCase (NFC)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341574 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-ar] Support * as comment char in MRI scripts
Martin Storsjo [Thu, 6 Sep 2018 18:10:45 +0000 (18:10 +0000)]
[llvm-ar] Support * as comment char in MRI scripts

MRI scripts have two comment chars, * and ;, but only the latter was
supported before.

Also allow leading spaces before comment chars (and before any command
string), and allow comments after a command.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341571 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[dsymutil] Reduce peak memory usage for the single threaded execution.
Jonas Devlieghere [Thu, 6 Sep 2018 17:31:59 +0000 (17:31 +0000)]
[dsymutil] Reduce peak memory usage for the single threaded execution.

Keeping the compile units in memory is expensive. For the single
threaded case we allocate them in the analyze part and deallocate them
again once we've finished cloning. This poses a problem in the single
threaded case where we did all the analysis first followed by all the
cloning. This meant we had all the link context in memory right after
analyzing finished.

This patch changes the way we order work in the single threaded case.
Instead of doing all the analysis and cloning in serial, we now
interleave the two so we can deallocate the memory as soon as a file is
processed. The result is binary identical and peak memory usage went
down from 13.43GB to 5.73GB for a debug build of trunk clang.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341568 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAMDGPU: Remove old hack for function addresses
Matt Arsenault [Thu, 6 Sep 2018 17:23:24 +0000 (17:23 +0000)]
AMDGPU: Remove old hack for function addresses

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341567 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[NFC] - in preparation for adding nsw, nuw and exact as flags to MI
Michael Berg [Thu, 6 Sep 2018 17:07:29 +0000 (17:07 +0000)]
[NFC] - in preparation for adding nsw, nuw and exact as flags to MI

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341565 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix a warning.
Zachary Turner [Thu, 6 Sep 2018 16:34:56 +0000 (16:34 +0000)]
Fix a warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341561 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] add xor+not folds
Sanjay Patel [Thu, 6 Sep 2018 16:23:40 +0000 (16:23 +0000)]
[InstCombine] add xor+not folds

This fold is needed to avoid a regression when we try
to recommit rL300977.
We can't see the most basic win currently because
demanded bits changes the patterns:
https://rise4fun.com/Alive/plpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341559 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoARM64: improve non-zero memset isel by ~2x
JF Bastien [Thu, 6 Sep 2018 16:03:32 +0000 (16:03 +0000)]
ARM64: improve non-zero memset isel by ~2x

Summary:
I added a few ARM64 memset codegen tests in r341406 and r341493, and annotated
where the generated code was bad. This patch fixes the majority of the issues by
requesting that a 2xi64 vector be used for memset of 32 bytes and above.

The patch leaves the former request for f128 unchanged, despite f128
materialization being suboptimal: doing otherwise runs into other asserts in
isel and makes this patch too broad.

This patch hides the issue that was present in bzero_40_stack and bzero_72_stack
because the code now generates in a better order which doesn't have the store
offset issue. I'm not aware of that issue appearing elsewhere at the moment.

<rdar://problem/44157755>

Reviewers: t.p.northover, MatzeB, javed.absar

Subscribers: eraman, kristof.beyls, chrib, dexonsmith, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341558 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] add tests for xor-not; NFC
Sanjay Patel [Thu, 6 Sep 2018 15:35:01 +0000 (15:35 +0000)]
[InstCombine] add tests for xor-not; NFC

These tests demonstrate a missing fold that would
also be needed to avoid a regression when we try
to recommit rL300977.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341557 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRemove unnecessary semicolon to silence -Wpedantic warning. NFCI.
Simon Pilgrim [Thu, 6 Sep 2018 15:15:28 +0000 (15:15 +0000)]
Remove unnecessary semicolon to silence -Wpedantic warning. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341555 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MSan] store origins for variadic function parameters in __msan_va_arg_origin_tls
Alexander Potapenko [Thu, 6 Sep 2018 15:14:36 +0000 (15:14 +0000)]
[MSan] store origins for variadic function parameters in __msan_va_arg_origin_tls

Add the __msan_va_arg_origin_tls TLS array to keep the origins for variadic function parameters.
Change the instrumentation pass to store parameter origins in this array.

This is a reland of r341528.

test/msan/vararg.cc doesn't work on Mips, PPC and AArch64 (because this
patch doesn't touch them), XFAIL these arches.
Also turned out Clang crashed on i80 vararg arguments because of
incorrect origin type returned by getOriginPtrForVAArgument() - fixed it
and added a test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341554 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[RISCV][NFC] Rework test/MC/RISCV/rv{32,64}* to allow testing of symbol operands
Alex Bradbury [Thu, 6 Sep 2018 13:41:04 +0000 (13:41 +0000)]
[RISCV][NFC] Rework test/MC/RISCV/rv{32,64}* to allow testing of symbol operands

Standardise on check lines:
* CHECK-ASM
* CHECK-OBJ
* CHECK-ASM-AND-OBJ

This allows for the addition of tests involving symbol operands, which will
not result in identical instructions in both assembly and disassembled object
output.

This commit doesn't exploit this reworking to increase test coverage of symbol
operands - that will come in a future patch.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341546 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] fix formatting in SimplifyDemandedVectorElts->Select; NFCI
Sanjay Patel [Thu, 6 Sep 2018 13:19:22 +0000 (13:19 +0000)]
[InstCombine] fix formatting in SimplifyDemandedVectorElts->Select; NFCI

I'm preparing to add the same functionality both here and to the DAG
version of this code in D51696 / D51433, so try to make those cases
as similar as possible to avoid bugs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341545 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MSan] revert r341528 to unbreak the bots
Alexander Potapenko [Thu, 6 Sep 2018 12:19:27 +0000 (12:19 +0000)]
[MSan] revert r341528 to unbreak the bots

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341541 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LoopInterchange] Cleanup unused variables.
Florian Hahn [Thu, 6 Sep 2018 10:41:01 +0000 (10:41 +0000)]
[LoopInterchange] Cleanup unused variables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341537 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix argument type in MachineInstr::hasPropertyInBundle
Sven van Haastregt [Thu, 6 Sep 2018 10:25:59 +0000 (10:25 +0000)]
Fix argument type in MachineInstr::hasPropertyInBundle

The MCID::Flag enumeration now has more than 32 items, this means that
the hasPropertyBundle argument 'Mask' can overflow.

This patch changes the argument to be 64 bits instead.

Patch by Mikael Nilsson.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341536 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LoopInterchange] Move preheader creation to transform stage and simplify.
Florian Hahn [Thu, 6 Sep 2018 09:57:27 +0000 (09:57 +0000)]
[LoopInterchange] Move preheader creation to transform stage and simplify.

There is no need to create preheaders in the analysis stage, we only
need them when adjusting the branches. Also, the only cases we need to
create our own preheaders is when they have more than 1 predecessors or
PHI nodes (even with only 1 predecessor, we could have an LCSSA phi
node). I have simplified the conditions and added some assertions to be
sure. Because we know the inner and outer loop need to be tightly
nested, it is sufficient to check if the inner loop preheader is the
outer loop header to check if we need to create a new preheader.

Reviewers: efriedma, mcrosier, karthikthecool

Reviewed By: efriedma

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341533 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[NFC] Simplify inner structure of InstructionPrecedenceTracking
Max Kazantsev [Thu, 6 Sep 2018 09:29:42 +0000 (09:29 +0000)]
[NFC] Simplify inner structure of InstructionPrecedenceTracking

Currently it has a set KnownBlocks that marks blocks as having cached
answers and a map FirstSpecialInsts that maps these blocks to first
special instructions in them. The value in the map is always non-null,
and for blocks that are known to have no special instructions the map
does not have an instance.

This patch removes KnownBlocks as obsolete. Instead, for blocks that
are known to have no special instructions, we just put a nullptr value.
This makes the code much easier to read.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341531 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MSan] store origins for variadic function parameters in __msan_va_arg_origin_tls
Alexander Potapenko [Thu, 6 Sep 2018 08:50:11 +0000 (08:50 +0000)]
[MSan] store origins for variadic function parameters in __msan_va_arg_origin_tls

Add the __msan_va_arg_origin_tls TLS array to keep the origins for
variadic function parameters.
Change the instrumentation pass to store parameter origins in this array.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341528 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[SLC] Add an alignment to CreateGlobalString
David Green [Thu, 6 Sep 2018 08:42:17 +0000 (08:42 +0000)]
[SLC] Add an alignment to CreateGlobalString

Previously the alignment on the newly created global strings was not set,
meaning that DataLayout::getPreferredAlignment was free to overalign it
to 16 bytes. This caused unnecessary code bloat with the padding between
variables.

The main example of this happening was the printf->puts optimisation in
SimplifyLibCalls, but as the change here is made in
IRBuilderBase::CreateGlobalString, other globals using this will now be
aligned too.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341527 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoReturn "[NFC] Add severe validation of InstructionPrecedenceTracking"
Max Kazantsev [Thu, 6 Sep 2018 08:33:02 +0000 (08:33 +0000)]
Return "[NFC] Add severe validation of InstructionPrecedenceTracking"

This validation patch has been reverted as rL341147 because of conserns raised by
@reames. This revision returns it as is to raise a discussion and address the concerns.

Differential Revision: https://reviews.llvm.org/D51523
Reviewed By: reames

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341526 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[MSan] Make sure variadic function arguments do not overflow __msan_va_arg_tls
Alexander Potapenko [Thu, 6 Sep 2018 08:21:54 +0000 (08:21 +0000)]
[MSan] Make sure variadic function arguments do not overflow __msan_va_arg_tls

Turns out that calling a variadic function with too many (e.g. >100 i64's)
arguments overflows __msan_va_arg_tls, which leads to smashing other TLS
data with function argument shadow values.

getShadow() already checks for kParamTLSSize and returns clean shadow if
the argument does not fit, so just skip storing argument shadow for such
arguments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341525 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[XRay] Add a BlockIndexer visitor for FDR Records.
Dean Michael Berris [Thu, 6 Sep 2018 05:55:57 +0000 (05:55 +0000)]
[XRay] Add a BlockIndexer visitor for FDR Records.

Summary:
This change adds a `BlockIndexer` type which maintains pointers to
records that belong to the same process+thread pairs. The indexing
happens with order of appearance of records as they are visited.

This version of the indexer currently only supports FDR version 3 logs,
which contain `BufferExtent` records. We will add support for v2 and v1
logs in follow-up patches.

This is another part of D50441.

Reviewers: eizan, kpw, mboerger

Reviewed By: mboerger

Subscribers: mboerger, mgorny, hiraditya, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341518 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "[IndVars] Turn isValidRewrite into an assertion" because it seems wrong
Max Kazantsev [Thu, 6 Sep 2018 05:52:47 +0000 (05:52 +0000)]
Revert "[IndVars] Turn isValidRewrite into an assertion" because it seems wrong

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341517 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[IndVars] Turn isValidRewrite into an assertion
Max Kazantsev [Thu, 6 Sep 2018 05:21:25 +0000 (05:21 +0000)]
[IndVars] Turn isValidRewrite into an assertion

Function rewriteLoopExitValues contains a check on isValidRewrite which
is needed to make sure that SCEV does not convert the pattern
`gep Base, (&p[n] - &p[0])` into `gep &p[n], Base - &p[0]`. This problem
has been fixed in SCEV long ago, so this check is just obsolete.

This patch converts it into an assertion to make sure that the SCEV will
not mess up this case in the future.

Differential Revision: https://reviews.llvm.org/D51582
Reviewed By: atrick

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341516 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert rL341509 to fix massive failures on buildbots
Max Kazantsev [Thu, 6 Sep 2018 04:40:49 +0000 (04:40 +0000)]
Revert rL341509 to fix massive failures on buildbots

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341515 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DebugInfo] Do not generate label debug info if it has been processed.
Hsiangkai Wang [Thu, 6 Sep 2018 02:22:06 +0000 (02:22 +0000)]
[DebugInfo] Do not generate label debug info if it has been processed.

In DwarfDebug::collectEntityInfo(), if the label entity is processed in
DbgLabels list, it means the label is not optimized out. There is no
need to generate debug info for it with null position.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341513 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[X86][Assembler] Allow %eip as a register in 32-bit mode for .cfi directives.
Craig Topper [Thu, 6 Sep 2018 02:03:14 +0000 (02:03 +0000)]
[X86][Assembler] Allow %eip as a register in 32-bit mode for .cfi directives.

This basically reverts a change made in r336217, but improves the text of the error message for not allowing IP-relative addressing in 32-bit mode.

Fixes PR38826.

Patch by Iain Sandoe.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341512 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-dwp] Fix `UN:` lines (supposed to be `RUN:`) in X86/simple.test and adjust...
Fangrui Song [Thu, 6 Sep 2018 00:46:30 +0000 (00:46 +0000)]
[llvm-dwp] Fix `UN:` lines (supposed to be `RUN:`) in X86/simple.test and adjust check lines for TYPES:

Reviewers: dblaikie, aprantl

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341510 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-dwp] Use buffer_stream if output file is not seekable (e.g. "-")
Fangrui Song [Thu, 6 Sep 2018 00:06:25 +0000 (00:06 +0000)]
[llvm-dwp] Use buffer_stream if output file is not seekable (e.g. "-")

Reviewers: dblaikie, pcc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341509 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix some warnings.
Zachary Turner [Thu, 6 Sep 2018 00:06:20 +0000 (00:06 +0000)]
Fix some warnings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341508 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix silly error in unittest helper.
Zachary Turner [Wed, 5 Sep 2018 23:45:48 +0000 (23:45 +0000)]
Fix silly error in unittest helper.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341505 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoNFC: improve ARM64 isFPImmLegal debug print
JF Bastien [Wed, 5 Sep 2018 23:38:11 +0000 (23:38 +0000)]
NFC: improve ARM64 isFPImmLegal debug print

Forking this change from D51706. This just made it easier to understand llc
output with -debug.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341504 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[PDB] Refactor the PDB symbol classes to fix a reuse bug.
Zachary Turner [Wed, 5 Sep 2018 23:30:38 +0000 (23:30 +0000)]
[PDB] Refactor the PDB symbol classes to fix a reuse bug.

The way DIA SDK works is that when you request a symbol, it
gets assigned an internal identifier that is unique for the
life of the session.  You can then use this identifier to
get back the same symbol, with all of the same internal state
that it had before, even if you "destroyed" the original
copy of the object you had.

This didn't work properly in our native implementation, and
if you destroyed an object for a particular symbol, then
requested the same symbol again, it would get assigned a new
ID and you'd get a fresh copy of the object.  In order to fix
this some refactoring had to happen to properly reuse cached
objects.  Some unittests are added to verify that symbol
reuse is taking place, making use of the new unittest input
feature.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341503 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoAdd support for unittest inputs.
Zachary Turner [Wed, 5 Sep 2018 23:30:17 +0000 (23:30 +0000)]
Add support for unittest inputs.

Occasionally it is useful to have unittest which take inputs.
While we normally try to have this test be more of a lit test
we occasionally don't have tools that can exercise the code
in the right way to test certain things.  LLDB has been using
this style of unit test for a while, particularly with regards
to how it tests core dump and minidump file parsing.  Recently
i needed this as well for the case where we want to test that
some of the PDB reading code works correctly.  It needs to
exercise the code in a way that is not covered by any dumper
and would be impractical to implement in one of the dumpers,
but requires a valid PDB file.  Since this is now needed by
more than one project, it makes sense to have this be a
generally supported thing that unit tests can do, and we just
encourage people to use this sparingly.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341502 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRemove some unnecessary constructor arguments.
Lang Hames [Wed, 5 Sep 2018 20:57:41 +0000 (20:57 +0000)]
Remove some unnecessary constructor arguments.

ExecutionSession defaults to creating a new shared pool if none is provided,
so explicitly passing one in is unnecessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341494 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoNFC: more memset inline arm64 coverage
JF Bastien [Wed, 5 Sep 2018 20:35:06 +0000 (20:35 +0000)]
NFC: more memset inline arm64 coverage

I'm looking at some codegen optimization in this area and want to make sure I understand the current codegen and don't regress it. This patch further expands the tests (which I already expanded in r341406) to capture more of the current code generation when it comes to stack-based small non-zero memset on arm64. This patch annotates some potential fixes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341493 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoHandle zero-length debug directory entries.
Nico Weber [Wed, 5 Sep 2018 18:01:04 +0000 (18:01 +0000)]
Handle zero-length debug directory entries.

Part of https://reviews.llvm.org/D51652 (tests will be in the lld repo)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341485 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DAGCombiner] try to convert pow(x, 0.25) to sqrt(sqrt(x))
Sanjay Patel [Wed, 5 Sep 2018 17:01:56 +0000 (17:01 +0000)]
[DAGCombiner] try to convert pow(x, 0.25) to sqrt(sqrt(x))

This was proposed as an IR transform in D49306, but it was not clearly justifiable as a canonicalization.
Here, we only do the transform when the target tells us that sqrt can be lowered with inline code.

This is the basic case. Some potential enhancements are in the TODO comments:

1. Generalize the transform for other exponents (allow more than 2 sqrt calcs if that's really cheaper).
2. If we have less fast-math-flags, generate code to avoid -0.0 and/or INF.
3. Allow the transform when optimizing/minimizing size (might require a target hook to get that right).

Note that by default, x86 converts single-precision sqrt calcs into sqrt reciprocal estimate with
refinement. That codegen is controlled by CPU attributes and can be manually overridden. We have plenty
of test coverage for that already, so I didn't bother to include extra testing for that here. AArch uses
its full-precision ops in all cases (not sure if that's the intended behavior or not, but that should
also be covered by existing tests).

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341481 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[XRay] Use a function to return a constant
Dean Michael Berris [Wed, 5 Sep 2018 16:03:21 +0000 (16:03 +0000)]
[XRay] Use a function to return a constant

We do this instead of using static constexpr char arrays because MSVC
2015 cannot handle the constant initialisation of those along with the
out-of-line storage declaration.

This is a follow-up to D51672.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341479 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[Hexagon] Ignore unnamed globals in HexagonConstExtenders
Krzysztof Parzyszek [Wed, 5 Sep 2018 15:54:44 +0000 (15:54 +0000)]
[Hexagon] Ignore unnamed globals in HexagonConstExtenders

This replaces r337723. The global list in the module can be huge with LTO,
plus the module can change between different invocations of the pass, so
there is no easy way to deterministically cache the ordering (especially
in the presence of multiple threads).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341478 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[XRay] Use `const` instead of `constexpr` in storage declaration
Dean Michael Berris [Wed, 5 Sep 2018 15:19:43 +0000 (15:19 +0000)]
[XRay] Use `const` instead of `constexpr` in storage declaration

This should make MSVC happy with the storage provided for static
constexpr character arrays out-of-line.

Follow-up to D51672.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341477 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[benchmark] Fix 32-bit build failure
Kirill Bobyrev [Wed, 5 Sep 2018 14:15:39 +0000 (14:15 +0000)]
[benchmark] Fix 32-bit build failure

This patch applies upstream commit:
https://github.com/google/benchmark/commit/f0901417c89d123474e6b91365029cfe32cf89dc

Tim Northover pointed out that benchmark build might be broken on 32-bit
macOS. This commit by Roman Lebedev (lebedev.ri) resolves the issue.

Reviewed By: lebedev.ri

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341469 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ControlHeightReduction] Remove unused includes
Benjamin Kramer [Wed, 5 Sep 2018 13:51:05 +0000 (13:51 +0000)]
[ControlHeightReduction] Remove unused includes

Also clang-format them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341468 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-strip] Support stripping multiple input files
Jordan Rupprecht [Wed, 5 Sep 2018 13:10:03 +0000 (13:10 +0000)]
[llvm-strip] Support stripping multiple input files

Summary:
Allow strip to be called on multiple input files, which is interpreted as stripping N files in place. Using multiple input files is incompatible with -o.

To allow this, create a `DriverConfig` struct which just wraps a list of `CopyConfigs`. objcopy will only ever have a single `CopyConfig`, but strip will have N (where N >= 1) CopyConfigs.

Reviewers: alexshap, jakehehrlich

Reviewed By: alexshap, jakehehrlich

Subscribers: MaskRay, jakehehrlich, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341464 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[Aggressive InstCombine] Move C bindings to their own header file.
Benjamin Kramer [Wed, 5 Sep 2018 11:41:12 +0000 (11:41 +0000)]
[Aggressive InstCombine] Move C bindings to their own header file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341461 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DebugInfo] Normalize common kinds of DWARF sub-expressions.
Jonas Devlieghere [Wed, 5 Sep 2018 10:18:36 +0000 (10:18 +0000)]
[DebugInfo] Normalize common kinds of DWARF sub-expressions.

Normalize common kinds of DWARF sub-expressions to make debug info
encoding a bit more compact:

  DW_OP_constu [X < 32] -> DW_OP_litX
  DW_OP_constu [all ones] -> DW_OP_lit0, DW_OP_not (64-bit only)

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341457 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[NFC] Add test on full IV widening
Max Kazantsev [Wed, 5 Sep 2018 10:10:59 +0000 (10:10 +0000)]
[NFC] Add test on full IV widening

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341456 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRemove FrameAccess struct from hasLoadFromStackSlot
Sander de Smalen [Wed, 5 Sep 2018 08:59:50 +0000 (08:59 +0000)]
Remove FrameAccess struct from hasLoadFromStackSlot

This removes the FrameAccess struct that was added to the interface
in D51537, since the PseudoValue from the MachineMemoryOperand
can be safely casted to a FixedStackPseudoSourceValue.

Reviewers: MatzeB, thegameg, javed.absar

Reviewed By: thegameg

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341454 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[XRay] Add a RecordPrinter visitor for FDR Records
Dean Michael Berris [Wed, 5 Sep 2018 06:57:23 +0000 (06:57 +0000)]
[XRay] Add a RecordPrinter visitor for FDR Records

Summary:
This change adds a `RecordPrinter` type which does some basic text
serialization of the FDR record instances. This is one component of the
tool we're building to dump the records from an FDR mode log as-is.

This is a small part of D50441.

Reviewers: eizan, kpw

Subscribers: mgorny, hiraditya, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341447 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[DebugInfo] Fix bug in LiveDebugVariables.
Hsiangkai Wang [Wed, 5 Sep 2018 05:58:53 +0000 (05:58 +0000)]
[DebugInfo] Fix bug in LiveDebugVariables.

In lib/CodeGen/LiveDebugVariables.cpp, it uses std::prev(MBBI) to
get DebugValue's SlotIndex. However, the previous instruction may be
also a debug instruction. It could not use a debug instruction to query
SlotIndex in mi2iMap.

Scan all debug instructions and use the first debug instruction to query
SlotIndex for following debug instructions. Only handle DBG_VALUE in
handleDebugValue().

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341446 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoPrevent unsigned overflow.
Richard Trieu [Wed, 5 Sep 2018 04:19:15 +0000 (04:19 +0000)]
Prevent unsigned overflow.

The sum of the weights is caculated in an APInt, which has a width smaller than
64.  In certain cases, the sum of the widths would overflow when calculations
are done inside an APInt, but would not if done with uint64_t.  Since the
values will be passed as uint64_t in the function call anyways, do all the math
in 64 bits.  Also added an assert in case the probabilities overflow 64 bits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341444 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix -Wunused-function in release build after rL341386
Fangrui Song [Wed, 5 Sep 2018 03:10:20 +0000 (03:10 +0000)]
Fix -Wunused-function in release build after rL341386

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341443 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[WebAssembly] clang-format (NFC)
Heejin Ahn [Wed, 5 Sep 2018 01:27:38 +0000 (01:27 +0000)]
[WebAssembly] clang-format (NFC)

Summary: This patch runs clang-format on all wasm-only files.

Reviewers: aardappel, dschuff, sunfish, tlively

Subscribers: MatzeB, sbc100, jgravelle-google, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341439 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoFix -Wunused-private-variable on non-Windows
Reid Kleckner [Wed, 5 Sep 2018 00:18:05 +0000 (00:18 +0000)]
Fix -Wunused-private-variable on non-Windows

I didn't want to use ifdefs in headers, but I'll do it to pacify a
warning.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341436 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[Windows] Convert from UTF-8 to UTF-16 when writing to a Windows console
Reid Kleckner [Wed, 5 Sep 2018 00:08:56 +0000 (00:08 +0000)]
[Windows] Convert from UTF-8 to UTF-16 when writing to a Windows console

Summary:
Calling WriteConsoleW is the most reliable way to print Unicode
characters to a Windows console.

If binary data gets printed to the console, attempting to re-encode it
shouldn't be a problem, since garbage in can produce garbage out.

This breaks printing strings in the local codepage, which WriteConsoleA
knows how to handle. For example, this can happen when user source code
is encoded with the local codepage, and an LLVM tool quotes it while
emitting a caret diagnostic. This is unfortunate, but well-behaved tools
should validate that their input is UTF-8 and escape non-UTF-8
characters before sending them to raw_fd_ostream. Clang already does
this, but not all LLVM tools do this.

One drawback to the current implementation is printing a string a byte
at a time doesn't work. Consider this LLVM code:
  for (char C : MyStr) outs() << C;

Because outs() is now unbuffered, we wil try to convert each byte to
UTF-16, which will fail. However, this already didn't work, so I think
we may as well update callers that do that as we find them to print
complete portions of strings. You can see a real example of this in my
patch to SourceMgr.cpp

Fixes PR38669 and PR36267.

Reviewers: zturner, efriedma

Subscribers: llvm-commits, hiraditya

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341433 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] fix xor-or-xor fold to check uses and handle commutes
Sanjay Patel [Tue, 4 Sep 2018 23:22:13 +0000 (23:22 +0000)]
[InstCombine] fix xor-or-xor fold to check uses and handle commutes

I'm probably missing some way to use m_Deferred to remove the code
duplication, but that can be a follow-up.

The improvement in demand_shrink_nsw.ll is an example of missing
the fold because the pattern matching was deficient. I didn't try
to follow the bits in that test, but Alive says it's correct:
https://rise4fun.com/Alive/ugc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341426 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[InstCombine] update tests checks; NFC
Sanjay Patel [Tue, 4 Sep 2018 23:08:23 +0000 (23:08 +0000)]
[InstCombine] update tests checks; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341424 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[WebAssembly] Fixed stale assert message in WebAssemblyMCInstLower
Wouter van Oortmerssen [Tue, 4 Sep 2018 22:59:05 +0000 (22:59 +0000)]
[WebAssembly] Fixed stale assert message in WebAssemblyMCInstLower

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341423 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[ThinLTO] Fix memory corruption in ThinLTOCodeGenerator when CodeGenOnly was specified
Steven Wu [Tue, 4 Sep 2018 22:54:17 +0000 (22:54 +0000)]
[ThinLTO] Fix memory corruption in ThinLTOCodeGenerator when CodeGenOnly was specified

Summary:
Issue occurs when doing ThinLTO with CodeGenOnly flag.
TMBuilder.TheTriple is assigned to by multiple threads in an unsafe way resulting in double-free of std::string memory.

Pseudocode:
if (CodeGenOnly) {
  // Perform only parallel codegen and return.
  ThreadPool Pool;
  int count = 0;
  for (auto &ModuleBuffer : Modules) {
    Pool.async([&](int count) {
    ...
      /// Now call OutputBuffer = codegen(*TheModule);
      /// Which turns into initTMBuilder(moduleTMBuilder, Triple(TheModule.getTargetTriple()));
      /// Which turns into

      TMBuilder.TheTriple = std::move(TheTriple);   // std::string = "....."
      /// So, basically std::string assignment to same string on multiple threads = memory corruption

  }

  return;
}

Patch by Alex Borcan

Reviewers: llvm-commits, steven_wu

Reviewed By: steven_wu

Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341422 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[llvm-strip] Allow copying relocation sections without symbol tables.
Jordan Rupprecht [Tue, 4 Sep 2018 22:28:49 +0000 (22:28 +0000)]
[llvm-strip] Allow copying relocation sections without symbol tables.

Summary:
Fixes the error "Link field value 0 in section .rela.plt is invalid" when copying/stripping certain binaries. Minimal repro:

```
$ cat /tmp/a.c
int main() { return 0; }
$ clang -static /tmp/a.c -o /tmp/a
$ llvm-strip /tmp/a -o /tmp/b
llvm-strip: error: Link field value 0 in section .rela.plt is invalid.
```

Reviewers: jakehehrlich, alexshap

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341419 91177308-0d34-0410-b5e6-96231b3b80d8

5 years agoRevert "Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions"
Zhaoshi Zheng [Tue, 4 Sep 2018 22:17:03 +0000 (22:17 +0000)]
Revert "Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions"

Reland r341269. Use std::stable_sort when sorting constant condidates.

Reverting commit, r341365:

  Revert r341269: [Constant Hoisting] Hoisting Constant GEP Expressions

  One of the tests is failing 50% of the time when expensive checks are
  enabled. Not sure how deep the problem is so just reverting while the
  author can investigate so that the bots stop repeatedly failing and
  blaming things incorrectly. Will respond with details on the original
  commit.

Original commit, r341269:

  [Constant Hoisting] Hoisting Constant GEP Expressions

  Leverage existing logic in constant hoisting pass to transform constant GEP
  expressions sharing the same base global variable. Multi-dimensional GEPs are
  rewritten into single-dimensional GEPs.

  https://reviews.llvm.org/D51396

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341417 91177308-0d34-0410-b5e6-96231b3b80d8

5 years ago[LV] First order recurrence phis should not be treated as uniform
Anna Thomas [Tue, 4 Sep 2018 22:12:23 +0000 (22:12 +0000)]
[LV] First order recurrence phis should not be treated as uniform

This is fix for PR38786.
First order recurrence phis were incorrectly treated as uniform,
which caused them to be vectorized as uniform instructions.

Patch by Ayal Zaks and Orivej Desh!

Reviewed by: Anna

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341416 91177308-0d34-0410-b5e6-96231b3b80d8