]> granicus.if.org Git - llvm/log
llvm
5 years agoRecommit "MemoryBuffer: Add a missing error-check to getOpenFileImpl"
Pavel Labath [Tue, 20 Aug 2019 12:08:52 +0000 (12:08 +0000)]
Recommit "MemoryBuffer: Add a missing error-check to getOpenFileImpl"

This recommits r368977, which was reverted in r369027 due to test
failures in lldb. The cause of this was different behavior of
readNativeFileSlice on windows and unix. These have been addressed in
r369269.

The original commit message was:
In case the function was called with a desired read size *and* the file
was not an "mmap()" candidate, the function was falling back to a
"pread()", but it was failing to check the result of that system call.
This meant that the function would return "success" even though the read
operation failed, and it returned a buffer full of uninitialized memory.

Reviewers: rnk, dblaikie

Subscribers: kristina, llvm-commits

Tags: #llvm

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

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

5 years ago[CMake] Update C4324 MSVC warning comment to explain its still broken at VS2019
Simon Pilgrim [Tue, 20 Aug 2019 11:20:05 +0000 (11:20 +0000)]
[CMake] Update C4324 MSVC warning comment to explain its still broken at VS2019

As promised, I've updated the comment for the C4324 MSVC warning that was re-disabled at rL367409 / rG8f823e63e3edf87ab029ba32b68f3eb5d2f392b5 to put it in terms of currently supported VS versions

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

5 years ago[MCA][X86] Add tests for LOCK variants of standard X86 arithmetic ops
Simon Pilgrim [Tue, 20 Aug 2019 11:13:20 +0000 (11:13 +0000)]
[MCA][X86] Add tests for LOCK variants of standard X86 arithmetic ops

D66424 adds the base support for LOCK so we should be able to add special case support for all these cases in future patches

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

5 years agoFix MSVC "result of 32-bit shift implicitly converted to 64 bits" warning. NFCI.
Simon Pilgrim [Tue, 20 Aug 2019 10:25:57 +0000 (10:25 +0000)]
Fix MSVC "result of 32-bit shift implicitly converted to 64 bits" warning. NFCI.

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

5 years ago[X86][Btver2] Fix latency and throughput of CMPXCHG instructions.
Andrea Di Biagio [Tue, 20 Aug 2019 10:23:55 +0000 (10:23 +0000)]
[X86][Btver2] Fix latency and throughput of CMPXCHG instructions.

On Jaguar, CMPXCHG has a latency of 11cy, and a maximum throughput of 0.33 IPC.
Throughput is superiorly limited to 0.33 because of the implicit in/out
dependency on register EAX. In the case of repeated non-atomic CMPXCHG with the
same memory location, store-to-load forwarding occurs and values for sequent
loads are quickly forwarded from the store buffer.

Interestingly, the functionality in LLVM that computes the reciprocal throughput
doesn't seem to know about RMW instructions. That functionality only looks at
the "consumed resource cycles" for the throughput computation. It should be
fixed/improved by a future patch. In particular, for RMW instructions, that
logic should also take into account for the write latency of in/out register
operands.

An atomic CMPXCHG has a latency of ~17cy. Throughput is also limited to
~17cy/inst due to cache locking, which prevents other memory uOPs to start
executing before the "lock releasing" store uOP.

CMPXCHG8rr and CMPXCHG8rm are treated specially because they decode to one less
macro opcode. Their latency tend to be the same as the other RR/RM variants. RR
variants are relatively fast 3cy (but still microcoded - 5 macro opcodes).

CMPXCHG8B is 11cy and unfortunately doesn't seem to benefit from store-to-load
forwarding. That means, throughput is clearly limited by the in/out dependency
on GPR registers. The uOP composition is sadly unknown (due to the lack of PMCs
for the Integer pipes). I have reused the same mix of consumed resource from the
other CMPXCHG instructions for CMPXCHG8B too.
LOCK CMPXCHG8B is instead 18cycles.

CMPXCHG16B is 32cycles. Up to 38cycles when the LOCK prefix is specified. Due to
the in/out dependencies, throughput is limited to 1 instruction every 32 (or 38)
cycles dependeing on whether the LOCK prefix is specified or not.
I wouldn't be surprised if the microcode for CMPXCHG16B is similar to 2x
microcode from CMPXCHG8B. So, I have speculatively set the JALU01 consumption to
2x the resource cycles used for CMPXCHG8B.

The two new hasLockPrefix() functions are used by the btver2 scheduling model
check if a MCInst/MachineInst has a LOCK prefix. Calls to hasLockPrefix() have
been encoded in predicates of variant scheduling classes that describe lat/thr
of CMPXCHG.

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

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

5 years ago[yaml2obj/obj2yaml][MachO] Fix a test failure in big endian hosts
Seiya Nuta [Tue, 20 Aug 2019 09:58:31 +0000 (09:58 +0000)]
[yaml2obj/obj2yaml][MachO] Fix a test failure in big endian hosts

These section contents are dummy data (0xdeadbeef) and it's endianess
does not matter.

- http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/37265

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

5 years ago[DWARF] Fix DWARFUnit::getDebugInfoSize() for 64-bit DWARF.
Igor Kudrin [Tue, 20 Aug 2019 09:50:44 +0000 (09:50 +0000)]
[DWARF] Fix DWARFUnit::getDebugInfoSize() for 64-bit DWARF.

The calculation there was correct only for DWARF32.

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

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

5 years ago[yaml2obj/obj2yaml][MachO] Allow setting custom section data
Seiya Nuta [Tue, 20 Aug 2019 08:49:07 +0000 (08:49 +0000)]
[yaml2obj/obj2yaml][MachO] Allow setting custom section data

Reviewers: alexshap, jhenderson, rupprecht

Reviewed By: alexshap, jhenderson

Subscribers: abrachet, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-objcopy][MachO] Fix method names. NFC.
Seiya Nuta [Tue, 20 Aug 2019 08:36:47 +0000 (08:36 +0000)]
[llvm-objcopy][MachO] Fix method names. NFC.

Reviewers: alexshap, rupprecht, jhenderson

Reviewed By: alexshap, rupprecht

Subscribers: jakehehrlich, abrachet, llvm-commits

Tags: #llvm

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

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

5 years ago[test/Object] - Move/rewrite 2 more test cases.
George Rimar [Tue, 20 Aug 2019 08:23:57 +0000 (08:23 +0000)]
[test/Object] - Move/rewrite 2 more test cases.

This patch makes a change for test/Object tests responsible
for relocations.

* 2 tests were moved to llvm-readobj/llvm-objdump folders:
Object/elf-reloc-no-sym.test -> tools/llvm-readobj/elf-reloc-no-sym.test
Object/objdump-reloc-shared.test -> tools/llvm-objdump/relocations-in-nonreloc.test

* A prerecompiled binary was removed and these tests were refactored.

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

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

5 years ago[MC] Delete an overload of MCExpr::evaluateKnownAbsolute and its associated hack
Fangrui Song [Tue, 20 Aug 2019 07:42:04 +0000 (07:42 +0000)]
[MC] Delete an overload of MCExpr::evaluateKnownAbsolute and its associated hack

The hack dated back to 2010 (r121076) and was documented by r122144:

  // FIXME: The use if InSet = Addrs is a hack. Setting InSet causes us
  // absolutize differences across sections and that is what the MachO writer
  // uses Addrs for.

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

5 years ago[Attributor] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r369331
Fangrui Song [Tue, 20 Aug 2019 07:21:43 +0000 (07:21 +0000)]
[Attributor] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r369331

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

5 years ago[X86] Add back the -x86-experimental-vector-widening-legalization comand line flag...
Craig Topper [Tue, 20 Aug 2019 06:58:00 +0000 (06:58 +0000)]
[X86] Add back the -x86-experimental-vector-widening-legalization comand line flag and all associated code, but leave it enabled by default

Google is reporting performance issues with the new default behavior
and have asked for a way to switch back to the old behavior while we
investigate and make fixes.

I've restored all of the code that had since been removed and added
additional checks of the command flag onto code paths that are
not otherwise guarded by a check of getTypeAction.

I've also modified the cost model tables to hopefully get us back
to the previous costs.

Hopefully we won't need to support this for very long since we
have no test coverage of the old behavior so we can very easily
break it.

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

5 years ago[Attributor] Create abstract attributes on-demand
Johannes Doerfert [Tue, 20 Aug 2019 06:15:50 +0000 (06:15 +0000)]
[Attributor] Create abstract attributes on-demand

Before, we create the set of abstract attributes initially and then
dealt with the fact hat a lookup could fail, e.g., return a nullptr.
This patch will ensure we always return a valid object from a lookup,
allowing us not only to remove the nullptr checks but also to grow the
set of abstract attributes "in-flight" on-demand.

One can now start from those that have the best chance of improving
performance without the need to specify all they might depend on.

While this introduces some boilerplate, the usage of attributes is much
easier and cleaner now.

Reviewers: uenoku, sstefan1

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

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

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

5 years ago[Attributor][NFC] Cleanup statistics code
Johannes Doerfert [Tue, 20 Aug 2019 06:09:56 +0000 (06:09 +0000)]
[Attributor][NFC] Cleanup statistics code

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

5 years ago[Attributor] Use structured deduction for AADereferenceable
Johannes Doerfert [Tue, 20 Aug 2019 06:08:35 +0000 (06:08 +0000)]
[Attributor] Use structured deduction for AADereferenceable

Summary:
This is analogous to D66128 but for AADereferenceable. We have the logic
concentrated in the floating value updateImpl and we use the combiner
helper classes for arguments and return values.

The regressions will go away with "on-demand" attribute creation.
Improvements are already visible in the existing tests.

Reviewers: uenoku, sstefan1

Subscribers: hiraditya, bollu, jfb, llvm-commits

Tags: #llvm

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

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

5 years ago[Attributor] Use structured deduction for AANonNull
Johannes Doerfert [Tue, 20 Aug 2019 06:02:39 +0000 (06:02 +0000)]
[Attributor] Use structured deduction for AANonNull

Summary:
What D66126 did for AAAlign, this patch does for AANonNull. Agian, the
logic becomes more concise and localized. Again, returned poiners are
not annotated properly but that will not be an issue if this lands with
the "on-demand" generation of attributes. First improvements due to the
genericValueTraversal are already visible.

Reviewers: sstefan1, uenoku

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

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

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

5 years ago[Attributor] Fix the "clamp" operator
Johannes Doerfert [Tue, 20 Aug 2019 05:57:01 +0000 (05:57 +0000)]
[Attributor] Fix the "clamp" operator

The clamp operator should not take the known of the given state as the
known is potentially based on assumed information. This also adds TODOs
to guide improvements.

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

5 years ago[NFC] Test commit, fix some comment spelling.
Thomas Raoux [Tue, 20 Aug 2019 05:21:27 +0000 (05:21 +0000)]
[NFC] Test commit, fix some comment spelling.

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

5 years ago[AsmPrinter] Remove const qualifier from EmitBasicBlockStart.
Karl-Johan Karlsson [Tue, 20 Aug 2019 05:13:57 +0000 (05:13 +0000)]
[AsmPrinter] Remove const qualifier from EmitBasicBlockStart.

Overriders may want to modify state in it. AMDGPU wants
to, but has to make its members mutable in order to do so.

Besides, EmitBasicBlockEnd is not const, so why should
Start be?

Patch by Bevin Hansson.

Reviewed By: nickdesaulniers

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

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

5 years agoMCAsmMacro: add `#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)` to some dump...
Fangrui Song [Tue, 20 Aug 2019 04:14:43 +0000 (04:14 +0000)]
MCAsmMacro: add `#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)` to some dump() declarations

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

5 years ago[WebAssembly][MC] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after...
Fangrui Song [Tue, 20 Aug 2019 02:02:57 +0000 (02:02 +0000)]
[WebAssembly][MC] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r369317

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

5 years ago[WebAssembly][MC] Simplify WasmObjectWriter::recordRelocation. NFC.
Sam Clegg [Tue, 20 Aug 2019 00:33:50 +0000 (00:33 +0000)]
[WebAssembly][MC] Simplify WasmObjectWriter::recordRelocation. NFC.

WebAssembly doesn't support PC relative relocation or relocation
expressions that can't be reduced to single symbol.

The only support for we have for fixups involving two symbols are when
both symbols are defined and withing the same section.  In this case
evaluateFixup will already have evaluated to the expression before
calling recordRelocation.

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

5 years ago[SLP][NFC] Avoid repetitive calls to getSameOpcode()
Dinar Temirbulatov [Tue, 20 Aug 2019 00:22:04 +0000 (00:22 +0000)]
[SLP][NFC] Avoid repetitive calls to getSameOpcode()

We can avoid repetitive calls getSameOpcode() for already known tree elements by keeping MainOp and AltOp in TreeEntry.

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

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

5 years ago[cmake] Link in LLVMPasses due to dependency by LLVMOrcJIT; NFC
Hubert Tong [Mon, 19 Aug 2019 23:12:48 +0000 (23:12 +0000)]
[cmake] Link in LLVMPasses due to dependency by LLVMOrcJIT; NFC

Summary:
rL367756 (f5c40cb) increases the dependency of LLVMOrcJIT on LLVMPasses.
In particular, symbols defined in LLVMPasses that are referenced by the
destructor of `PassBuilder` are now referenced by LLVMOrcJIT through
`Speculation.cpp.o`.

We believe that referencing symbols defined in LLVMPasses in the
destructor of `PassBuilder` is valid, and that adding to the set of such
symbols is legitimate. To support such cases, this patch adds LLVMPasses
to the set of libraries being linked when linking in LLVMOrcJIT causes
such symbols from LLVMPasses to be referenced.

Reviewers: Whitney, anhtuyen, pree-jackie

Reviewed By: pree-jackie

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

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

5 years ago[lit] Check for accidental external command calls
Joel E. Denny [Mon, 19 Aug 2019 22:59:37 +0000 (22:59 +0000)]
[lit] Check for accidental external command calls

This patch extends lit's test suite to check that lit's internal shell
doesn't accidentally execute internal commands as external commands.
It does so by putting fake failing versions of those commands in
`PATH` while the entire lit test suite is running.  Without the fixes
in D65697 but with its tests, this approach catches accidental
external `env` calls.

Reviewed By: probinson

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

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

5 years ago[Support][Time profiler] Make FE codegen blocks to be inside frontend blocks
Anton Afanasyev [Mon, 19 Aug 2019 22:58:26 +0000 (22:58 +0000)]
[Support][Time profiler] Make FE codegen blocks to be inside frontend blocks

Summary:
Add `Frontend` time trace entry to `HandleTranslationUnit()` function.
Add test to check all codegen blocks are inside frontend blocks.
Also, change `--time-trace-granularity` option a bit to make sure very small
time blocks are outputed to json-file when using `--time-trace-granularity=0`.

This fixes http://llvm.org/pr41969

Reviewers: russell.gallop, lebedev.ri, thakis

Reviewed By: russell.gallop

Subscribers: vsapsai, aras-p, lebedev.ri, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

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

5 years ago[ORC] fix use-after-free detected by -Wreturn-stack-address
Matthias Gehre [Mon, 19 Aug 2019 21:59:44 +0000 (21:59 +0000)]
[ORC] fix use-after-free detected by -Wreturn-stack-address

Summary:
llvm/lib/ExecutionEngine/Orc/Layer.cpp:53:12: warning: returning address of local temporary object [-Wreturn-stack-address]

In
```
StringRef IRMaterializationUnit::getName() const {
[...]
     return TSM.withModuleDo(
        [](const Module &M) { return M.getModuleIdentifier(); });
```
`getModuleIdentifier()` returns a `const std::string &`, but the implicit return type
of the lambda is `std::string` by value, and thus the returned `StringRef` refers
to a temporary `std::string`.

Detect by annotating `llvm::StringRef` with `[[gsl::Pointer]]`.

Reviewers: lhames, sgraenitz

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[CaptureTracker] Let subclasses provide dereferenceability information
Johannes Doerfert [Mon, 19 Aug 2019 21:56:38 +0000 (21:56 +0000)]
[CaptureTracker] Let subclasses provide dereferenceability information

Summary:
CaptureTracker subclasses might have better dereferenceability
information which allows null pointer checks to be no-capturing.
The first user will be D59922.

Reviewers: sanjoy, hfinkel, aykevl, sstefan1, uenoku, xbolva00

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

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

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

5 years agoRecommit "[Attributor] Fix: Do not partially resolve returned calls."
Johannes Doerfert [Mon, 19 Aug 2019 21:35:31 +0000 (21:35 +0000)]
Recommit "[Attributor] Fix: Do not partially resolve returned calls."

This reverts commit b1752f670f3d6393306dd5d37546b6e23384d8a2.

Fixed the issue with a different commit, reapply this one as it was,
afaik, not broken.

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

5 years agoRecommit "[llvm-objcopy][MachO] Implement a layout algorithm for executables"
Seiya Nuta [Mon, 19 Aug 2019 21:12:02 +0000 (21:12 +0000)]
Recommit "[llvm-objcopy][MachO] Implement a layout algorithm for executables"

Summary: The layout algorithm for relocatable objects and for executable are somewhat different. This patch implements the latter one based on the algorithm in LLD (MachOFileLayout).

Reviewers: alexshap, rupprecht, jhenderson

Reviewed By: alexshap

Subscribers: jakehehrlich, abrachet, llvm-commits

Tags: #llvm

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

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

5 years agoRefactor isPointerOffset (NFC).
Evgeniy Stepanov [Mon, 19 Aug 2019 21:08:04 +0000 (21:08 +0000)]
Refactor isPointerOffset (NFC).

Summary:
Simplify the API using Optional<> and address comments in
         https://reviews.llvm.org/D66165

Reviewers: vitalybuka

Subscribers: hiraditya, llvm-commits, ostannard, pcc

Tags: #llvm

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

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

5 years agoFixed placement of llvm.global_dtors on Windows.
Vyacheslav Zakharin [Mon, 19 Aug 2019 21:07:03 +0000 (21:07 +0000)]
Fixed placement of llvm.global_dtors on Windows.

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

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

5 years agoRecommit "[llvm-objcopy][MachO] Support load commands used in executables/shared...
Seiya Nuta [Mon, 19 Aug 2019 21:05:31 +0000 (21:05 +0000)]
Recommit "[llvm-objcopy][MachO] Support load commands used in executables/shared libraries"

Summary:
This patch implements copying some load commands that appear in executables/shared libraries such as the indirect symbol table.

I don't add tests intentionally because this patch is incomplete: we need a layout algorithm for executables/shared libraries. I'll submit it as a separate patch with tests.

Reviewers: alexshap, rupprecht, jhenderson, compnerd

Reviewed By: alexshap

Subscribers: abrachet, mgorny, mgrang, MaskRay, mtrent, jakehehrlich, llvm-commits

Tags: #llvm

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

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

5 years agoMemTag: stack initializer merging.
Evgeniy Stepanov [Mon, 19 Aug 2019 20:47:09 +0000 (20:47 +0000)]
MemTag: stack initializer merging.

Summary:
MTE provides instructions to update memory tags and data at the same
time. This change makes use of those to generate more compact code for
stack variable tagging + initialization.

We collect memory store and memset instructions following an alloca or a
lifetime.start call, and replace them with the corresponding MTE
intrinsics. Since the intrinsics work on 16-byte aligned chunks, the
stored values are combined as necessary.

Reviewers: pcc, vitalybuka, ostannard

Subscribers: srhines, javed.absar, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[Support] Replace sys::Mutex with their standard equivalents.
Benjamin Kramer [Mon, 19 Aug 2019 19:49:57 +0000 (19:49 +0000)]
[Support] Replace sys::Mutex with their standard equivalents.

Only use a recursive mutex if it can be locked recursively.

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

5 years agoRe-apply fixed "[Attributor] Fix: Make sure we set the changed flag"
Johannes Doerfert [Mon, 19 Aug 2019 19:14:10 +0000 (19:14 +0000)]
Re-apply fixed "[Attributor] Fix: Make sure we set the changed flag"

This reverts commit cedd0d9a6e4b433e1cd6585d1d4d152eb5e60b11.

Re-apply the original commit but make sure the variables are initialized
(even if they are not used) so UBSan is not complaining.

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

5 years ago[WebAssembly][MC] Allow empty assembly functions
Sam Clegg [Mon, 19 Aug 2019 19:04:54 +0000 (19:04 +0000)]
[WebAssembly][MC] Allow empty assembly functions

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

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

5 years ago[MemorySSA] Rename uses when inserting memory uses.
Alina Sbirlea [Mon, 19 Aug 2019 18:57:40 +0000 (18:57 +0000)]
[MemorySSA] Rename uses when inserting memory uses.

Summary:
When inserting uses from outside the MemorySSA creation, we don't
normally need to rename uses, based on the assumption that there will be
no inserted Phis (if  Def existed that required a Phi, that Phi already
exists). However, when dealing with unreachable blocks, MemorySSA will
optimize away Phis whose incoming blocks are unreachable, and these Phis end
up being re-added when inserting a Use.
There are two potential solutions here:
1. Analyze the inserted Phis and clean them up if they are unneeded
(current method for cleaning up trivial phis does not cover this)
2. Leave the Phi in place and rename uses, the same way as whe inserting
defs.
This patch use approach 2.

Resolves first test in PR42940.

Reviewers: george.burgess.iv

Subscribers: Prazek, sanjoy.google, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Move scheduling tests for CMPXCHG to the corresponding resources-x86_64.s files...
Andrea Di Biagio [Mon, 19 Aug 2019 18:20:30 +0000 (18:20 +0000)]
[X86] Move scheduling tests for CMPXCHG to the corresponding resources-x86_64.s files. NFC

In D66424 it has been requested to move all the new tests added by r369278 into
resources-x86_64.s. That is because only the 8b/16 ops should be tested by
resources-cmpxchg.s. This partially reverts r369278.

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

5 years ago[X86] Teach lowerV4I32Shuffle to only use broadcasts if the mask has more than one...
Craig Topper [Mon, 19 Aug 2019 18:15:50 +0000 (18:15 +0000)]
[X86] Teach lowerV4I32Shuffle to only use broadcasts if the mask has more than one undef element. Prioritize shifts over broadcast in lowerV8I16Shuffle.

The motivating case are the changes in vector-reduce-add.ll where
we were doing extra work in the scalar domain instead of shuffling.
There may be some one use check that needs to be looked into there,
but this patch sidesteps the issue by avoiding broadcasts that
aren't really broadcasting.

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

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

5 years ago[CGP] Remove ModifiedDT from the makeBitReverse loop
Craig Topper [Mon, 19 Aug 2019 18:02:24 +0000 (18:02 +0000)]
[CGP] Remove ModifiedDT from the makeBitReverse loop

I don't think anything in this loop modifies the control flow and we don't restart any iteration after setting the flag.

This code was added in http://reviews.llvm.org/D16893 but looking at the test case added there the code that caused the dominator tree to change was merging blocks with their predecessor not the bitreverse optimization.

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

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

5 years ago[X86] Added extensive scheduling model tests for all the CMPXCHG variants. NFC
Andrea Di Biagio [Mon, 19 Aug 2019 17:07:26 +0000 (17:07 +0000)]
[X86] Added extensive scheduling model tests for all the CMPXCHG variants. NFC

Addresses a review comment in D66424

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

5 years ago[Attributor] -attributor-verify has false positives. Temporarily remove
Stefan Stipanovic [Mon, 19 Aug 2019 16:39:32 +0000 (16:39 +0000)]
[Attributor] -attributor-verify has false positives. Temporarily remove
it, until resolved.

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

5 years agoFilesystem/Windows: fix inconsistency in readNativeFileSlice API
Pavel Labath [Mon, 19 Aug 2019 15:40:49 +0000 (15:40 +0000)]
Filesystem/Windows: fix inconsistency in readNativeFileSlice API

Summary:
The windows version implementation of readNativeFileSlice, was trying to
match the POSIX behavior of not treating EOF as an error, but it was
only handling the case of reading from a pipe. Attempting to read past
the end of a regular file returns a slightly different error code, which
needs to be handled too. This patch adds ERROR_HANDLE_EOF to the list of
error codes to be treated as an end of file, and adds some unit tests
for the API.

This issue was found while attempting to land D66224, which caused a bunch of
lldb tests to start failing on windows.

Reviewers: rnk, aganea

Subscribers: kristina, llvm-commits

Tags: #llvm

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

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

5 years ago[TargetLowering] x s% C == 0 fold: vector divisor with INT_MIN handling
Roman Lebedev [Mon, 19 Aug 2019 15:01:42 +0000 (15:01 +0000)]
[TargetLowering] x s% C == 0 fold: vector divisor with INT_MIN handling

Summary:
The general fold is only valid for positive divisors.
Which effectively means, it is invalid for `INT_MIN` divisors,
and we currently bailout if we see them.

But that is too strict, we can just fix-up the results.
For that, let's do a second computation 'in parallel':
```
Name: srem -> and
Pre: isPowerOf2(C)
%o = srem i8 %X, C
%r = icmp eq %o, 0
  =>
%n = and i8 %X, C-1
%r = icmp eq %n, 0
```
https://rise4fun.com/Alive/Sup

And then just blend results: if the divisor was `INT_MIN`,
pick the value we got via bit-test,
else pick the value from general fold.

There's interesting observation - `ISD::ROTR` is set to
`LegalizeAction::Expand` before AVX512, so we should not
treat `INT_MIN` divisor as even; and as it can be seen
while `@test_srem_odd_even_one` improves on all run-lines,
`@test_srem_odd_even_INT_MIN` only improves for AVX512.

Reviewers: RKSimon, craig.topper, spatel

Reviewed By: RKSimon

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[nfc] Silent gcc warning
Serge Guelton [Mon, 19 Aug 2019 14:40:33 +0000 (14:40 +0000)]
[nfc] Silent gcc warning

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

5 years ago[llvm-objdump] - Restore lost comment.
George Rimar [Mon, 19 Aug 2019 14:35:08 +0000 (14:35 +0000)]
[llvm-objdump] - Restore lost comment.

It was removed by mistake in r369263 (D66417).

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

5 years agoAutomatically generate AVX512 test cases. NFC
Amaury Sechet [Mon, 19 Aug 2019 14:34:08 +0000 (14:34 +0000)]
Automatically generate AVX512 test cases. NFC

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

5 years ago[Object/COFF.h] - Stop returning std::error_code in a few methods. NFCI.
George Rimar [Mon, 19 Aug 2019 14:32:23 +0000 (14:32 +0000)]
[Object/COFF.h] - Stop returning std::error_code in a few methods. NFCI.

There are 4 methods that return std::error_code now,
though they do not have to because they are always succeed.
I refactored them.

This allows to simplify the code in tools a bit.

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

5 years ago[PeepholeOptimizer] Don't assume bitcast def always has input
Jinsong Ji [Mon, 19 Aug 2019 14:19:04 +0000 (14:19 +0000)]
[PeepholeOptimizer] Don't assume bitcast def always has input

Summary:
If we have a MI marked with bitcast bits, but without input operands,
PeepholeOptimizer might crash with assert.

eg:
If we apply the changes in PPCInstrVSX.td as in this patch:

[(set v4i32:$XT, (bitconvert (v16i8 immAllOnesV)))]>;

We will get assert in PeepholeOptimizer.

```
llvm-lit llvm-project/llvm/test/CodeGen/PowerPC/build-vector-tests.ll -v

llvm-project/llvm/include/llvm/CodeGen/MachineInstr.h:417: const
llvm::MachineOperand &llvm::MachineInstr::getOperand(unsigned int)
const: Assertion `i < getNumOperands() && "getOperand() out of range!"'
failed.
```

The fix is to abort if we found out of bound access.

Reviewers: qcolombet, MatzeB, hfinkel, arsenm

Reviewed By: qcolombet

Subscribers: wdng, arsenm, steven.zhang, wuzish, nemanjai, hiraditya, kbarton, MaskRay, llvm-commits

Tags: #llvm

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

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

5 years ago[RISCV] Don't force absolute FK_Data_X fixups to relocs
Alex Bradbury [Mon, 19 Aug 2019 13:23:02 +0000 (13:23 +0000)]
[RISCV] Don't force absolute FK_Data_X fixups to relocs

The current behavior of shouldForceRelocation forces relocations for the
majority of fixups when relaxation is enabled. This makes sense for
fixups which incorporate symbols but is unnecessary for simple data
fixups where the fixup target is already resolved to an absolute value.

Differential Revision: https://reviews.llvm.org/D63404
Patch by Edward Jones.

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

5 years ago[DebugInfo] Allow bundled calls in the MIR's call site info
David Stenberg [Mon, 19 Aug 2019 12:41:22 +0000 (12:41 +0000)]
[DebugInfo] Allow bundled calls in the MIR's call site info

Summary:
Extend the MIR parser and writer so that the call site information can
refer to calls that are bundled.

Reviewers: aprantl, asowda, NikolaPrica, djtodoro, ivanbaev, vsk

Reviewed By: aprantl

Subscribers: arsenm, hiraditya, llvm-commits

Tags: #debug-info, #llvm

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

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

5 years ago[SLP] add test that requires shuffle of scalars; NFC
Sanjay Patel [Mon, 19 Aug 2019 12:41:09 +0000 (12:41 +0000)]
[SLP] add test that requires shuffle of scalars; NFC

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

5 years ago[llvm-readobj] unwrapOrError: remove unnecessary llvm_unreachable after r369194
Fangrui Song [Mon, 19 Aug 2019 12:18:18 +0000 (12:18 +0000)]
[llvm-readobj] unwrapOrError: remove unnecessary llvm_unreachable after r369194

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

5 years ago[SLP] reduce duplicated code; NFC
Sanjay Patel [Mon, 19 Aug 2019 11:39:56 +0000 (11:39 +0000)]
[SLP] reduce duplicated code; NFC

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

5 years ago[MC] Simplify ELFObjectWriter::recordRelocation. NFC
Fangrui Song [Mon, 19 Aug 2019 10:05:59 +0000 (10:05 +0000)]
[MC] Simplify ELFObjectWriter::recordRelocation. NFC

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

5 years ago[DebugInfo] Make postra sinking of DBG_VALUEs subregister-safe
Jeremy Morse [Mon, 19 Aug 2019 09:53:07 +0000 (09:53 +0000)]
[DebugInfo] Make postra sinking of DBG_VALUEs subregister-safe

Currently the machine instruction sinker identifies DBG_VALUE insts that
also need to sink by comparing register numbers. Unfortunately this isn't
safe, because (after register allocation) a DBG_VALUE may read a register
that aliases what's being sunk. To fix this, identify the DBG_VALUEs that
need to sink by recording & examining their register units. Register units
gives us the following guarantee:

  "Two registers overlap if and only if they have a common register unit"
  [MCRegisterInfo.h]

Thus we can always identify aliasing DBG_VALUEs if the set of register
units read by the DBG_VALUE, and the register units of the instruction
being sunk, intersect. (MachineSink already uses classes like
"LiveRegUnits" for determining sinking validity anyway).

The test added checks for super and subregister DBG_VALUE reads of a sunk
copy being sunk as well.

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

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

5 years ago[ARM] Add support for MVE vaddv
Sam Tebbs [Mon, 19 Aug 2019 09:38:28 +0000 (09:38 +0000)]
[ARM] Add support for MVE vaddv

This patch adds vecreduce_add and the relevant instruction selection for
vaddv.

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

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

5 years ago[ARM] MVE sext costs
David Green [Mon, 19 Aug 2019 09:13:22 +0000 (09:13 +0000)]
[ARM] MVE sext costs

This adds some sext costs for MVE, taken from the length of assembly sequences
that we currently generate.

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

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

5 years ago[DebugInfo] Test for variable range un-coalescing
Jeremy Morse [Mon, 19 Aug 2019 09:02:18 +0000 (09:02 +0000)]
[DebugInfo] Test for variable range un-coalescing

LiveDebugVariables can coalesce ranges of variable locations across
multiple basic blocks. However when it recreates DBG_VALUE instructions,
it has to recreate one DBG_VALUE per block, otherwise it doesn't
represent the pre-regalloc layout and variable assignments can go missing.

This feature works -- however while mucking around with LiveDebugVariables,
I commented the relevant code it out and no tests failed. Thus, here's a
test that checks LiveDebugVariables preserves DBG_VALUEs across block
boundaries.

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

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

5 years agoRevert [Attributor] Fix: Make sure we set the changed flag
David L. Jones [Mon, 19 Aug 2019 08:00:08 +0000 (08:00 +0000)]
Revert [Attributor] Fix: Make sure we set the changed flag

This reverts r369159 (git commit cbaf1fdea2de891bdbc49cdec89ae2077e6b9ed0)

r369160 caused a test to fail under UBSAN. See thread on llvm-commits.

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

5 years ago[MC] Delete unnecessary diagnostic: "No relocation available to represent this relati...
Fangrui Song [Mon, 19 Aug 2019 07:59:35 +0000 (07:59 +0000)]
[MC] Delete unnecessary diagnostic: "No relocation available to represent this relative expression"

Replace

- error: No relocation available to represent this relative expression

with

+ error: symbol 'undef' can not be undefined in a subtraction expression

or

+ error: Cannot represent a difference across sections

Keep !IsPcRel as an assertion after the two diagnostic checks are done.

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

5 years agoRevert [Attributor] Fix: Do not partially resolve returned calls.
David L. Jones [Mon, 19 Aug 2019 07:16:24 +0000 (07:16 +0000)]
Revert [Attributor] Fix: Do not partially resolve returned calls.

This reverts r369160 (git commit f72d9b1c97b41fff48ad1eecbba59a29c171bff4)

r369160 caused some tests to fail under UBSAN. See thread on llvm-commits.

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

5 years agoRevert r369230 and r369231
Seiya Nuta [Mon, 19 Aug 2019 06:45:48 +0000 (06:45 +0000)]
Revert r369230 and r369231

Looks these commits break CI builds:

- http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-gn/builds/4159

This commit reverts r369230 and r369231 (git coommit: 4a198a7 and dee9546).

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

5 years ago[MC] Don't emit .symver redirected symbols to the symbol table
Fangrui Song [Mon, 19 Aug 2019 06:17:30 +0000 (06:17 +0000)]
[MC] Don't emit .symver redirected symbols to the symbol table

GNU as keeps the original symbol in the symbol table for defined @ and
@@, but suppresses it in other cases (@@@ or undefined). The original
symbol is usually undesired:
In a shared object, the original symbol can be localized with a version
script, but it is hard to remove/localize in an archive:

1) a post-processing step removes the undesired original symbol
2) consumers (executable) of the archive are built with the
   version script

Moreover, it can cause linker issues like binutils PR/18703 if the
original symbol name and the base name of the versioned symbol is the
same (both ld.bfd and gold have some code to work around defined @ and
@@). In lld, if it sees f and f@v1:

  --version-script =(printf 'v1 {};') => f and f@v1
  --version-script =(printf 'v1 { f; };') => f@v1 and f@@v1

It can be argued that @@@ added on 2000-11-13 corrected the @ and @@ mistake.

This patch catches some more multiple version errors (defined @ and @@),
and consistently suppress the original symbol. This addresses all the
problems listed above.

If the user wants other aliases to the versioned symbol, they can copy
the original symbol to other symbol names with .set directive, e.g.

    .symver f, f@v1  # emit f@v1 but not f into .symtab
    .set f_impl, f   # emit f_impl into .symtab

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

5 years ago[X86] Teach lower1BitShuffle to match right shifts with upper zero elements on types...
Craig Topper [Mon, 19 Aug 2019 05:45:39 +0000 (05:45 +0000)]
[X86] Teach lower1BitShuffle to match right shifts with upper zero elements on types that don't natively support KSHIFT.

We can support these by widening to a supported type,
then shifting all the way to the left and then
back to the right to ensure that we shift in zeroes.

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

5 years ago[llvm-objcopy][MachO] Implement a layout algorithm for executables
Seiya Nuta [Mon, 19 Aug 2019 05:41:33 +0000 (05:41 +0000)]
[llvm-objcopy][MachO] Implement a layout algorithm for executables

Summary: The layout algorithm for relocatable objects and for executable are somewhat different. This patch implements the latter one based on the algorithm in LLD (MachOFileLayout).

Reviewers: alexshap, rupprecht, jhenderson

Reviewed By: alexshap

Subscribers: jakehehrlich, abrachet, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-objcopy][MachO] Support load commands used in executables/shared libraries
Seiya Nuta [Mon, 19 Aug 2019 05:37:38 +0000 (05:37 +0000)]
[llvm-objcopy][MachO] Support load commands used in executables/shared libraries

Summary:
This patch implements copying some load commands that appear in executables/shared libraries such as the indirect symbol table.

I don't add tests intentionally because this patch is incomplete: we need a layout algorithm for executables/shared libraries. I'll submit it as a separate patch with tests.

Reviewers: alexshap, rupprecht, jhenderson, compnerd

Reviewed By: alexshap

Subscribers: abrachet, mgorny, mgrang, MaskRay, mtrent, jakehehrlich, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Fix the lower1BitShuffle code added in r369215 to correctly pass the widened...
Craig Topper [Mon, 19 Aug 2019 04:08:44 +0000 (04:08 +0000)]
[X86] Fix the lower1BitShuffle code added in r369215 to correctly pass the widened vector to the KSHIFT node.

Not sure how to test this as we have tests that exercise this code,
but nothing failed for the types not matching. Since all the k-registers
use equivalent register classes everything just ends up working.

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

5 years ago[X86] Teach lower1BitShuffle to match KSHIFTR that doesn't use Zeroable and only...
Craig Topper [Mon, 19 Aug 2019 04:08:40 +0000 (04:08 +0000)]
[X86] Teach lower1BitShuffle to match KSHIFTR that doesn't use Zeroable and only relies on undef.

This allows us to widen the type when the KSHIFTR instruction
doesn't exist for the type. If we need to shift in zeroes into
the upper elements we would need more work to guarantee zeroes
when widening.

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

5 years ago[X86] Teach lower1BitShuffle to recognize padding a subvector with zeros with V2...
Craig Topper [Mon, 19 Aug 2019 00:39:22 +0000 (00:39 +0000)]
[X86] Teach lower1BitShuffle to recognize padding a subvector with zeros with V2 as the source and V1 as the zero vector.

Shuffle canonicalization can swap the sources so the zero vector
might be V1 and the subvector that's being padded can be V2.

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

5 years ago[X86] Add test case for missed opportunity to recognize a vXi1 shuffle as an insert...
Craig Topper [Mon, 19 Aug 2019 00:39:18 +0000 (00:39 +0000)]
[X86] Add test case for missed opportunity to recognize a vXi1 shuffle as an insert into a zero vector.

We are currently missing this because shuffle canonicalization
puts the zero vector as V1 and the subvector as V2. Our current
code doesn't recognize this case.

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

5 years ago[X86] Add a special case to LowerCONCAT_VECTORSvXi1 to handle concatenating zero...
Craig Topper [Sun, 18 Aug 2019 23:30:11 +0000 (23:30 +0000)]
[X86] Add a special case to LowerCONCAT_VECTORSvXi1 to handle concatenating zero vectors followed by one non-zero vector followed by undef vectors.

For such a case we should only need a KSHIFTL, but we were
previously generating a KSHIFTL followed by a KSHIFTR because
we mistakenly believed we need to zero the undef elements.

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

5 years ago[X86] Add test cases for suboptimal insertion of a vXi1 vector into a larger vector...
Craig Topper [Sun, 18 Aug 2019 23:30:07 +0000 (23:30 +0000)]
[X86] Add test cases for suboptimal insertion of a vXi1 vector into a larger vector with zeros in the lower elements and undef upper elements.

Currently we generate kshifts to clear both the upper and lower
elements, but we only need one kshift.

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

5 years ago[X86] Replace uses of getZeroVector for vXi1 vectors with DAG.getConstant.
Craig Topper [Sun, 18 Aug 2019 23:30:03 +0000 (23:30 +0000)]
[X86] Replace uses of getZeroVector for vXi1 vectors with DAG.getConstant.

vXi1 vectors don't need special handling.

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

5 years ago[cmake] Move blocks out of redundant else( MSVC ); NFC
Hubert Tong [Sun, 18 Aug 2019 22:02:24 +0000 (22:02 +0000)]
[cmake] Move blocks out of redundant else( MSVC ); NFC

Address post-commit comment on D66256 regarding the `else( MSVC )` block
containing only blocks guarded with `LLVM_COMPILER_IS_GCC_COMPATIBLE`,
which would imply `NOT MSVC`.

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

5 years ago[ORC] Make sure we linker-mangle symbol names in the SpeculationLayer.
Lang Hames [Sun, 18 Aug 2019 21:29:57 +0000 (21:29 +0000)]
[ORC] Make sure we linker-mangle symbol names in the SpeculationLayer.

If mangling is not performed then speculative lookups will fail.

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

5 years ago[ORC] Remove some dead code.
Lang Hames [Sun, 18 Aug 2019 21:22:14 +0000 (21:22 +0000)]
[ORC] Remove some dead code.

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

5 years ago[Docs] Test commit
DeForest Richards [Sun, 18 Aug 2019 19:07:10 +0000 (19:07 +0000)]
[Docs] Test commit

Fixes typo - Removes extra space between last word of sentence and period.

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

5 years ago[X86] Improve lower1BitShuffle handling for KSHIFTL on narrow vectors.
Craig Topper [Sun, 18 Aug 2019 18:52:46 +0000 (18:52 +0000)]
[X86] Improve lower1BitShuffle handling for KSHIFTL on narrow vectors.

We can insert the value into a larger legal type and shift that
by the desired amount.

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

5 years agoFix signed/unsigned comparison warning. NFCI.
Simon Pilgrim [Sun, 18 Aug 2019 17:26:30 +0000 (17:26 +0000)]
Fix signed/unsigned comparison warning. NFCI.

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

5 years ago[X86] isTargetShuffleEquivalent - add BUILD_VECTOR matching
Simon Pilgrim [Sun, 18 Aug 2019 17:15:26 +0000 (17:15 +0000)]
[X86] isTargetShuffleEquivalent - add BUILD_VECTOR matching

Add similar functionality to isShuffleEquivalent - if the mask elements don't match, try matching the BUILD_VECTOR scalars instead.

As target shuffles need to handle SM_Sentinel values, this can get a bit tricky, so commit just adds actual mask element index handling - full SM_SentinelZero support will be added when the need arises.

Also, enables support in matchVectorShuffleWithPACK

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

5 years ago[X86] isTargetShuffleEquivalent - early out on illegal shuffle masks. NFCI.
Simon Pilgrim [Sun, 18 Aug 2019 16:37:58 +0000 (16:37 +0000)]
[X86] isTargetShuffleEquivalent - early out on illegal shuffle masks. NFCI.

Simplifies shuffle mask comparisons by just bailing out if the shuffle mask has any out of range values - will make an upcoming patch much simpler.

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

5 years ago[X86][SSE] Improve PACKSS shuffle tests to better match codegen from D61129
Simon Pilgrim [Sun, 18 Aug 2019 15:39:04 +0000 (15:39 +0000)]
[X86][SSE] Improve PACKSS shuffle tests to better match codegen from D61129

D61129 creates 'concat + trunc' style patterns (at the 128-bit subvector level)

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

5 years ago[MC] MCFixup - Fix cppcheck + MSVC analyzer uninitialized member variable warnings...
Simon Pilgrim [Sun, 18 Aug 2019 13:29:12 +0000 (13:29 +0000)]
[MC] MCFixup - Fix cppcheck + MSVC analyzer uninitialized member variable warnings. NFCI.

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

5 years ago[InstCombine] Cherry-pick NFC cleanups of foldShiftIntoShiftInAnotherHandOfAndInICmp...
Roman Lebedev [Sun, 18 Aug 2019 12:26:33 +0000 (12:26 +0000)]
[InstCombine] Cherry-pick NFC cleanups of foldShiftIntoShiftInAnotherHandOfAndInICmp() from D66383

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

5 years ago[TargetLowering] Teach computeRegisterProperties to only widen v3i16/v3f16 vectors...
Craig Topper [Sun, 18 Aug 2019 06:28:06 +0000 (06:28 +0000)]
[TargetLowering] Teach computeRegisterProperties to only widen v3i16/v3f16 vectors to the next power of 2 type if that's legal.

These were recently made simple types. This restores their
behavior back to something like their EVT legalization.

We might be able to fix the code in type legalization where the
assert was failing, but I didn't investigate too much as I had
already looked at the computeRegisterProperties code during the
review for v3i16/v3f16.

Most of the test changes restore the X86 codegen back to what
it looked like before the recent change. The test case in
vec_setcc.ll and is a reduced version of the reproducer from
the fuzzer.

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16490

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

5 years ago[SelectionDAG] Add a node creation debug message to getMachineNode.
Craig Topper [Sun, 18 Aug 2019 06:28:00 +0000 (06:28 +0000)]
[SelectionDAG] Add a node creation debug message to getMachineNode.

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

5 years agoAMDGPU: Fix iterator error when lowering SI_END_CF
Matt Arsenault [Sun, 18 Aug 2019 00:20:44 +0000 (00:20 +0000)]
AMDGPU: Fix iterator error when lowering SI_END_CF

If the instruction is the last in the block, there is no next
instruction but the iteration still needs to look at the new block.

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

5 years agoAMDGPU: Disambiguate v3f16 format in load/store tables
Matt Arsenault [Sun, 18 Aug 2019 00:20:43 +0000 (00:20 +0000)]
AMDGPU: Disambiguate v3f16 format in load/store tables

Currently the searchable tables report the number of dwords. These
round to the same number for 3 and 4 component d16
instructions. Change this to report the number of elements so this
isn't ambiguous.

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

5 years agoTableGen: Revert changes from r369038
Matt Arsenault [Sun, 18 Aug 2019 00:20:42 +0000 (00:20 +0000)]
TableGen: Revert changes from r369038

These aren't needed for a specific use yet, and I meant to not commit
these.

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

5 years ago[X86] Add a one use check to the combineStore code that handles v16i16->v16i8 truncat...
Craig Topper [Sat, 17 Aug 2019 22:46:15 +0000 (22:46 +0000)]
[X86] Add a one use check to the combineStore code that handles v16i16->v16i8 truncate+store by extending to v16i32 and then emitting a v16i32->v16i8 truncstore.

This prevent us from emitting a separate truncate and a truncating
store instruction.

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

5 years ago[BPF] Fix bpf llvm-objdump issues.
Yonghong Song [Sat, 17 Aug 2019 22:12:00 +0000 (22:12 +0000)]
[BPF] Fix bpf llvm-objdump issues.

Commit https://reviews.llvm.org/D57939 ("[DWARF] Refactor
RelocVisitor and fix computation of SHT_RELA-typed relocation entries)
made a change for relocation resolution when operating
on an object file.

The change unfortunately broke BPF as given SymbolValue (S) and
Addent (A), previously relocation is resolved to
    S + A
and after the change, it is resolved to
    S

This patch fixed the issue by resolving relocation correctly.

It looks not all relocation resolution reaches here and I did not
trace down exactly when. But I do find if the object file includes
codes in two different ELF sections than default ".text",
the above bug will be triggered.

This patch included a trivial two function source code to
demonstrate this issue. The relocation for .debug_loc is resolved
incorrectly due to this and llvm-objdump cannot display source
annotated assembly.

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

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

5 years ago[NFC][InstCombine] Some tests for 'shift amount reassoc in bit test - trunc-of-lshr...
Roman Lebedev [Sat, 17 Aug 2019 21:35:33 +0000 (21:35 +0000)]
[NFC][InstCombine] Some tests for 'shift amount reassoc in bit test - trunc-of-lshr' (PR42399)

Finally, the fold i was looking forward to :)

The legality check is muddy, i doubt  i've groked the full generalization,
but it handles all the cases i care about, and can come up with:
https://rise4fun.com/Alive/26j

https://bugs.llvm.org/show_bug.cgi?id=42399

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

5 years agoRecommit r369190 "[llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting...
George Rimar [Sat, 17 Aug 2019 16:07:18 +0000 (16:07 +0000)]
Recommit r369190 "[llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting API."

Fix: Add a `consumeError` call removed by mistake to 'printStackSize',
this should fix the "Expected<T> must be checked before access or destruction." reported by following bot:
http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/9743/steps/stage%201%20check/logs/stdio

Original commit message:
Currently we have the following functions for error reporting:

LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg);
void reportError(Error Err, StringRef Input);
void reportWarning(Twine Msg);
void reportWarning(StringRef Input, Error Err);
void warn(llvm::Error Err);
void error(std::error_code EC);

Problems are: naming is inconsistent, arguments order is inconsistent,
some of the functions looks excessive.

After applying this patch we have:

void reportError(Error Err, StringRef Input);
void reportError(std::error_code EC, StringRef Input);
void reportWarning(Error Err, StringRef Input);

I'd be happy to remove reportError(std::error_code EC, StringRef Input) too, but it
is used by COFF heavily.

Test cases were updated, they show an improvement introduced.

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

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

5 years agoRevert r369190, r369192 ([llvm-readobj/llvm-readelf] - Improve/cleanup the error...
George Rimar [Sat, 17 Aug 2019 15:36:06 +0000 (15:36 +0000)]
Revert r369190, r369192 ([llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting API.)

It caused multiple BB failtures:

http://lab.llvm.org:8011/builders/clang-x64-windows-msvc/builds/9743/steps/stage%201%20check/logs/stdio
http://lab.llvm.org:8011/builders/clang-cmake-x86_64-sde-avx512-linux/builds/26042/steps/ninja%20check%201/logs/FAIL%3A%20LLVM%3A%3Astack-sizes.test

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

5 years ago[llvm-readobj] - An attemp to fix BB after r369191.
George Rimar [Sat, 17 Aug 2019 15:24:16 +0000 (15:24 +0000)]
[llvm-readobj] - An attemp to fix BB after r369191.

Few BB failed with the following error:

Command Output (stderr):
--
/home/buildbots/ppc64be-clang-lnt-test/clang-ppc64be-lnt/llvm/test/tools/llvm-readobj/stack-sizes.test:263:19: error: BADSECTION-OUT: expected string not found in input
# BADSECTION-OUT: 8 ?
                  ^
<stdin>:4:1: note: scanning from here

^

It doesn't reproduce on ubuntu/windows I have. Also, seems many of the bots
are happy too.

This slightly reorders the code to make fouts().flush() call earlier,
like it was before the r369191.

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

5 years ago[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks
Kang Zhang [Sat, 17 Aug 2019 14:37:05 +0000 (14:37 +0000)]
[CodeGen] Do the Simple Early Return in block-placement pass to optimize the blocks

Summary:

Fix a bug of preducessors.

In `block-placement` pass, it will create some patterns for unconditional we can do the simple early retrun.
But the `early-ret` pass is before `block-placement`, we don't want to run it again.
This patch is to do the simple early return to optimize the blocks at the last of `block-placement`.

Reviewed By: efriedma

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

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

5 years ago[llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting API.
George Rimar [Sat, 17 Aug 2019 14:36:40 +0000 (14:36 +0000)]
[llvm-readobj/llvm-readelf] - Improve/cleanup the error reporting API.

urrently we have the following functions for error reporting:

--
LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg);
void reportError(Error Err, StringRef Input);
void reportWarning(Twine Msg);
void reportWarning(StringRef Input, Error Err);
void warn(llvm::Error Err);
void error(std::error_code EC);
---

Problems are: naming is inconsistent, arguments order is inconsistent,
some of the functions looks excessive.

After applying this patch we have:

---
LLVM_ATTRIBUTE_NORETURN void reportError(Error Err, StringRef Input);
LLVM_ATTRIBUTE_NORETURN void reportError(std::error_code EC, StringRef Input);
void reportWarning(Error Err, StringRef Input);
---

I'd be happy to remove reportError(std::error_code EC, StringRef Input) too, but it
is used by COFF heavily.

Test cases were updated, they show an improvement introduced.

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

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