platform/upstream/llvm.git
4 years ago[InstCombine] Update SimplifyCFG test
Nikita Popov [Thu, 30 Jan 2020 09:11:00 +0000 (10:11 +0100)]
[InstCombine] Update SimplifyCFG test

This test also runs -instcombine. Here the operands in an or chain
have been reassociated.

4 years ago[InstCombine] Add SetVector.h include
Nikita Popov [Thu, 30 Jan 2020 08:56:24 +0000 (09:56 +0100)]
[InstCombine] Add SetVector.h include

Hopefully fixes the build for examples.

4 years ago[InstCombine] Process newly inserted instructions in the correct order
Nikita Popov [Wed, 1 Jan 2020 16:56:37 +0000 (17:56 +0100)]
[InstCombine] Process newly inserted instructions in the correct order

InstCombine operates on the basic premise that the operands of the
currently processed instruction have already been simplified. It
achieves this by pushing instructions to the worklist in reverse
program order, so that instructions are popped off in program order.
The worklist management in the main combining loop also makes sure
to uphold this invariant.

However, the same is not true for all the code that is performing
manual worklist management. The largest problem (addressed in this
patch) are instructions inserted by InstCombine's IRBuilder. These
will be pushed onto the worklist in order of insertion (generally
matching program order), which means that a) the users of the
original instruction will be visited first, as they are pushed later
in the main loop and b) the newly inserted instructions will be
visited in reverse program order.

This causes a number of problems: First, folds operate on instructions
that have not had their operands simplified, which may result in
optimizations being missed (ran into this in
https://reviews.llvm.org/D72048#1800424, which was the original
motivation for this patch). Additionally, this increases the amount
of folds InstCombine has to perform, both within one iteration, and
by increasing the number of total iterations.

This patch addresses the issue by adding a Worklist.AddDeferred()
method, which is used for instructions inserted by IRBuilder. These
will only be added to the real worklist after the combine finished,
and in reverse order, so they will end up processed in program order.
I should note that the same should also be done to nearly all other
uses of Worklist.Add(), but I'm starting with just this occurrence,
which has by far the largest test fallout.

Most of the test changes are due to
https://bugs.llvm.org/show_bug.cgi?id=44521 or other cases where
we don't canonicalize something. These are neutral. One regression
has been addressed in D73575 and D73647. The remaining regression
in an shl+sdiv fold can't really be fixed without dropping another
transform, but does not seem particularly problematic in the first
place.

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

4 years agoAdd GDB pretty printers for llvm::ilist, llvm::simple_ilist, and llvm::ilist_node.
Christian Sigg [Tue, 28 Jan 2020 21:02:17 +0000 (22:02 +0100)]
Add GDB pretty printers for llvm::ilist, llvm::simple_ilist, and llvm::ilist_node.

Reviewers: dblaikie

Reviewed By: dblaikie

Subscribers: merge_guards_bot, llvm-commits

Tags: #llvm

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

4 years ago[mlir][NFC] Explicitly initialize dynamic legality when setting op
River Riddle [Thu, 30 Jan 2020 08:21:32 +0000 (00:21 -0800)]
[mlir][NFC] Explicitly initialize dynamic legality when setting op
action.

4 years ago[AArch64][GlobalISel] During ISel try to convert G_PTR_ADD to G_ADD.
Amara Emerson [Wed, 29 Jan 2020 21:42:48 +0000 (13:42 -0800)]
[AArch64][GlobalISel] During ISel try to convert G_PTR_ADD to G_ADD.

This lowering tries to look for G_PTR_ADD instructions and then converts
them to a standard G_ADD with a COPY on the source, and G_INTTOPTR on the
result. This is ok for address space 0 on AArch64 as p0 can be treated as
s64.

The motivation behind this is to expose the add semantics to the imported
tablegen patterns. We shouldn't need to check for uses being loads/stores,
because the selector works bottom up, uses before defs. By the time we
end up trying to select a G_PTR_ADD, we should have already attempted to
fold this into addressing modes and were therefore unsuccessful.

This gives some performance and code size improvements across the board.

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

4 years agoDefine _LIBCPP_HAS_TIMESPEC_GET for FreeBSD when appropriate
Dimitry Andric [Thu, 30 Jan 2020 07:00:28 +0000 (08:00 +0100)]
Define _LIBCPP_HAS_TIMESPEC_GET for FreeBSD when appropriate

Summary:
FreeBSD got `timespec_get` support somewhere in the 12.x timeframe, but
the C++ version check in its system headers was written incorrectly.
This has now been fixed for both FreeBSD 13 and 12.

Add checks for the corresponding `__FreeBSD_version` values, to define
`_LIBCPP_HAS_TIMESPEC_GET` when the function is supported.

Reviewers: emaste, EricWF, ldionne, mclow.lists

Reviewed By: ldionne

Subscribers: arichardson, krytarowski, christof, dexonsmith, libcxx-commits

Tags: #libc

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

4 years agoRevert "[X86] Don't exit from foldOffsetIntoAddress if the Offset is 0, but AM.Disp...
Craig Topper [Thu, 30 Jan 2020 06:59:05 +0000 (22:59 -0800)]
Revert "[X86] Don't exit from foldOffsetIntoAddress if the Offset is 0, but AM.Disp is non-zero."

Possibly causing build bot failures.

4 years agoEven more fixes of implicit std::string conversions
Mikael Holmén [Thu, 30 Jan 2020 06:32:53 +0000 (07:32 +0100)]
Even more fixes of implicit std::string conversions

4 years ago[X86] Add function isPrefix()
Shengchen Kan [Sun, 19 Jan 2020 06:28:21 +0000 (14:28 +0800)]
[X86] Add function isPrefix()

Currently some prefixes are emitted as instructions, to distinguish them
from real instruction, fuction isPrefix() is added. The kinds of prefix
are consistent with X86GenInstrInfo.inc.

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

4 years agoRevert "[lldb/Reproducers] Assert when trying to get object for invalid index."
Jonas Devlieghere [Thu, 30 Jan 2020 06:01:38 +0000 (22:01 -0800)]
Revert "[lldb/Reproducers] Assert when trying to get object for invalid index."

Apparently this is not doing what I thought it was doing...

4 years ago[llvm][VectorUtils] Tweak VFShape for scalable vector functions.
Francesco Petrogalli [Wed, 22 Jan 2020 22:34:27 +0000 (22:34 +0000)]
[llvm][VectorUtils] Tweak VFShape for scalable vector functions.

Summary:
This patch makes sure that the field VFShape.VF is greater than zero
when demangling the vector function name of scalable vector functions
encoded in the "vector-function-abi-variant" attribute.

This change is required to be able to provide instances of VFShape
that can be used to query the VFDatabase for the vectorization passes,
as such passes always require a positive value for the Vectorization Factor (VF)
needed by the vectorization process.

It is not possible to extract the value of VFShape.VF from the mangled
name of scalable vector functions, because it is encoded as
`x`. Therefore, the VFABI demangling function has been modified to
extract such information from the IR declaration of the vector
function, under the assumption that _all_ vectors in the signature of
the vector function have the same number of lanes. Such assumption is
valid because it is also assumed by the Vector Function ABI
specifications supported by the demangling function (x86, AArch64, and
LLVM internal one).

The unit tests that demangle scalable names have been modified by
adding the IR module that carries the declaration of the vector
function name being demangled.

In particular, the demangling function fails in the following cases:

1. When the declaration of the scalable vector function is not
    present in the module.

2. When the value of VFSHape.VF is not greater than 0.

Reviewers: jdoerfert, sdesmalen, andwar

Reviewed By: jdoerfert

Subscribers: mgorny, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[lldb/Reproducers] Fix reproducer instrumentation formatting (NFC)
Jonas Devlieghere [Thu, 30 Jan 2020 05:21:02 +0000 (21:21 -0800)]
[lldb/Reproducers] Fix reproducer instrumentation formatting (NFC)

4 years ago[lldb/Reproducers] Assert when trying to get object for invalid index.
Jonas Devlieghere [Thu, 30 Jan 2020 05:19:58 +0000 (21:19 -0800)]
[lldb/Reproducers] Assert when trying to get object for invalid index.

Assert when trying to get an object for an index we haven't seen before.
This will crash anyway, the assertion is just a bit more informative.

4 years ago[lldb] Replace SmallStr.str().str() with std::string conversion operator.
Jonas Devlieghere [Thu, 30 Jan 2020 05:33:37 +0000 (21:33 -0800)]
[lldb] Replace SmallStr.str().str() with std::string conversion operator.

Use the std::string conversion operator introduced in
d7049213d0fcda691c9e79f9b41e357198d99738. The SmallString in the log
statement doesn't require conversion at all when using the variadic log
macro.

4 years ago[X86] Don't exit from foldOffsetIntoAddress if the Offset is 0, but AM.Disp is non...
Craig Topper [Thu, 30 Jan 2020 04:33:35 +0000 (20:33 -0800)]
[X86] Don't exit from foldOffsetIntoAddress if the Offset is 0, but AM.Disp is non-zero.

This is an alternate fix for the issue D73606 was trying to
solve.

The main issue here is that we bailed out of
foldOffsetIntoAddress if Offset is 0. But if we just found a
symbolic displacement and AM.Disp became non-zero
earlier, we still need to validate that AM.Disp with the symbolic
displacement.

This passes fold-add-pcrel.ll.

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

4 years ago[lld] Replace SmallStr.str().str() with std::string conversion operator.
Jonas Devlieghere [Thu, 30 Jan 2020 05:30:21 +0000 (21:30 -0800)]
[lld] Replace SmallStr.str().str() with std::string conversion operator.

Use the std::string conversion operator introduced in
d7049213d0fcda691c9e79f9b41e357198d99738.

4 years ago[clang] Replace SmallStr.str().str() with std::string conversion operator.
Jonas Devlieghere [Thu, 30 Jan 2020 05:27:46 +0000 (21:27 -0800)]
[clang] Replace SmallStr.str().str() with std::string conversion operator.

Use the std::string conversion operator introduced in
d7049213d0fcda691c9e79f9b41e357198d99738.

4 years ago[llvm] Replace SmallStr.str().str() with std::string conversion operator.
Jonas Devlieghere [Thu, 30 Jan 2020 05:14:15 +0000 (21:14 -0800)]
[llvm] Replace SmallStr.str().str() with std::string conversion operator.

Use the std::string conversion operator introduced in
d7049213d0fcda691c9e79f9b41e357198d99738.

4 years ago[llvm][NFC] Rename CallAnalyzer::onCommonInstructionSimplification
Mircea Trofin [Thu, 30 Jan 2020 05:07:15 +0000 (21:07 -0800)]
[llvm][NFC] Rename CallAnalyzer::onCommonInstructionSimplification

Summary:
It is called when instructions aren't simplified, and the implementation
is expected to account for a penalty. Renamed to
onCommonInstructionMissedSimplification.

Reviewers: davidxl, eraman

Reviewed By: davidxl

Subscribers: hiraditya, baloghadamsoftware, haicheng, a.sidorin, Szelethus, donat.nagy, dkrupp, llvm-commits

Tags: #llvm

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

4 years ago[llvm][docs] Fix formatting in LangRef. [NFC]
Francesco Petrogalli [Thu, 30 Jan 2020 04:27:55 +0000 (22:27 -0600)]
[llvm][docs] Fix formatting in LangRef. [NFC]

The syntax of the call site attribute "vector-function-abi-variant"
is rendered with fixed size fonts (verbatim text).

4 years ago[CMake][libcxx] Don't wrap __config_site path in quotes on Windows
Petr Hosek [Tue, 28 Jan 2020 03:28:59 +0000 (19:28 -0800)]
[CMake][libcxx] Don't wrap __config_site path in quotes on Windows

This is failing to compile on Windows because clang-cl is trying to
use the path with quotes, dropping them resolves the issue.

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

4 years ago[Attributor] Pointer privatization attribute (argument promotion)
Johannes Doerfert [Wed, 30 Oct 2019 22:20:20 +0000 (17:20 -0500)]
[Attributor] Pointer privatization attribute (argument promotion)

A pointer is privatizeable if it can be replaced by a new, private one.
Privatizing pointer reduces the use count, interaction between unrelated
code parts. This is a first step towards replacing argument promotion.
While we can already handle recursion (unlike argument promotion!) we
are restricted to stack allocations for now because we do not analyze
the uses in the callee.

Reviewed By: uenoku

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

4 years ago[gn build] Port f2af0607000
LLVM GN Syncbot [Thu, 30 Jan 2020 01:35:57 +0000 (01:35 +0000)]
[gn build] Port f2af0607000

4 years ago[llvm-objcopy] Initial support for wasm in llvm-objcopy
Derek Schuff [Thu, 30 Jan 2020 01:30:57 +0000 (17:30 -0800)]
[llvm-objcopy] Initial support for wasm in llvm-objcopy

Currently only supports simple copying, other operations to follow.

Reviewers: sbc100, alexshap, jhenderson

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

This is a reland of a928d127a with a one-line fix to ensure that
the wasm version number is written as little-endian (it's the only
field in all of the binary format that's not a single byte or an
LEB, but we may have to watch out more when we start handling the
linking section).

4 years ago[libc++] Explicitly specify LIBCXX_ENABLE_SHARED to try and fix CI
Louis Dionne [Thu, 30 Jan 2020 01:28:34 +0000 (17:28 -0800)]
[libc++] Explicitly specify LIBCXX_ENABLE_SHARED to try and fix CI

Configuring libc++abi with LIBCXX_ENABLE_STATIC=OFF is broken since
https://reviews.llvm.org/D71894, so this patch fixes the issue for
Apple platforms to unblock our CI.

4 years ago[Attributor] Fix TODO to avoid recomputation of results
Johannes Doerfert [Thu, 30 Jan 2020 00:02:42 +0000 (18:02 -0600)]
[Attributor] Fix TODO to avoid recomputation of results

The helpers AAReturnedFromReturnedValues and
AACallSiteReturnedFromReturned are useful not only to avoid code
duplication but also to avoid recomputation of results. If we have N
call sites we should not recompute the function return information N
times but once. These are mostly straightforward usages with some minor
improvements on the helpers and addition of a new one
(IRPosition::getAssociatedType) that knows about function return types.

4 years ago[lldb/Reproducers] Add unittest for char** (de)serializer
Jonas Devlieghere [Thu, 30 Jan 2020 01:16:31 +0000 (17:16 -0800)]
[lldb/Reproducers] Add unittest for char** (de)serializer

4 years ago[lldb/Reproducers] Account for char** being a nullptr
Jonas Devlieghere [Thu, 30 Jan 2020 00:32:41 +0000 (16:32 -0800)]
[lldb/Reproducers] Account for char** being a nullptr

4 years ago[gn build] add a FIXME about using /Gw on win
Nico Weber [Thu, 30 Jan 2020 00:12:08 +0000 (19:12 -0500)]
[gn build] add a FIXME about using /Gw on win

4 years ago[LTO] Add optimization remarks for removed functions
Gabor Horvath [Wed, 29 Jan 2020 01:13:12 +0000 (17:13 -0800)]
[LTO] Add optimization remarks for removed functions

This only works with regular LTO for now.

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

4 years ago[X86] Improve X86 cmpps/cmppd/cmpss/cmpsd intrinsics with strictfp
Craig Topper [Wed, 29 Jan 2020 23:48:09 +0000 (15:48 -0800)]
[X86] Improve X86 cmpps/cmppd/cmpss/cmpsd intrinsics with strictfp

The constrained fcmp intrinsics don't allow the TRUE/FALSE predicates.
Using them will assert. To workaround this I'm emitting the old X86 specific intrinsics that were never removed from the backend when we switched to using fcmp in IR. We have no way to mark them as being strict, but that's true of all target specific intrinsics so doesn't seem like we need to solve that here.

I've also added support for selecting between signaling and quiet.

Still need to support SAE which will require using a target specific
intrinsic. Also need to fix masking to not use an AND instruction
after the compare.

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

4 years ago[X86] Fix the cost model for v16i16->v16i32 zero_extend/sign_extend with AVX2
Craig Topper [Wed, 29 Jan 2020 19:40:52 +0000 (11:40 -0800)]
[X86] Fix the cost model for v16i16->v16i32 zero_extend/sign_extend with AVX2

We seem to be inheriting the cost from sse4.1. But if we have 256-bit registers we should be able to do this with just one extract to split the 16i16 and two v8i16->v8i32 operations so our cost should be 3 not 4.

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

4 years ago[mlir] [VectorOps] consolidate all vector utilities to one header/cc file
aartbik [Wed, 29 Jan 2020 23:21:30 +0000 (15:21 -0800)]
[mlir] [VectorOps] consolidate all vector utilities to one header/cc file

Reviewers: nicolasvasilache, andydavis1, dcaballe

Reviewed By: andydavis1, dcaballe

Subscribers: dcaballe, merge_guards_bot, mgorny, mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, arpith-jacob, mgester, lucyrfox, liufengdb, llvm-commits

Tags: #llvm

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

4 years agoGlobalISel: Add observer argument to legalizeIntrinsic
Matt Arsenault [Mon, 27 Jan 2020 20:50:55 +0000 (15:50 -0500)]
GlobalISel: Add observer argument to legalizeIntrinsic

This is passed to legalizeCustom, but not intrinsic. Also remove the
MRI argument, since you can get that from the MachineIRBuilder.

I'm not sure why MachineIRBuilder has a private observer member, and
this is passed separately.

4 years ago[compiler-rt][profile] fix test/instrprof-set-filename.c on windows
Yuanfang Chen [Wed, 29 Jan 2020 22:59:14 +0000 (14:59 -0800)]
[compiler-rt][profile] fix test/instrprof-set-filename.c on windows

Summary: `.cmd` is interpreted as script in windows console.

Reviewers: davidxl, rnk

Reviewed By: davidxl

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

4 years agoAMDGPU/GlobalISel: Select permlane16/permlanex16
Matt Arsenault [Thu, 16 Jan 2020 02:23:07 +0000 (21:23 -0500)]
AMDGPU/GlobalISel: Select permlane16/permlanex16

4 years ago[opt viewer] Python compat - decode/encode string
Yuanfang Chen [Mon, 20 Jan 2020 01:52:08 +0000 (17:52 -0800)]
[opt viewer] Python compat - decode/encode string

Summary:
Use io.open instead of codecs.open according to here
https://stackoverflow.com/questions/10971033/backporting-python-3-openencoding-utf-8-to-python-2

Add `u` prefix to string literal to make them utf-8 in python2.

Reviewers: anemet, serge-sans-paille

Reviewed by: serge-sans-paille

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

4 years ago[lldb/Reproducers] Add (de)serialization overload for char**
Jonas Devlieghere [Wed, 29 Jan 2020 22:06:20 +0000 (14:06 -0800)]
[lldb/Reproducers] Add (de)serialization overload for char**

This patch adds an overload to serialize and deserialize char** types.
This is necessary for things like the SBLaunchInfo ctor. We serialize
the array length followed by each individual item.

4 years ago[scudo][standalone] Revert some perf-degrading changes
Kostya Kortchinsky [Wed, 29 Jan 2020 20:35:44 +0000 (12:35 -0800)]
[scudo][standalone] Revert some perf-degrading changes

Summary:
A couple of seemingly innocuous changes ended up having a large impact
on the 32-bit performance. I still have to make those configurable at
some point, but right now it will have to do.

Subscribers: #sanitizers, llvm-commits

Tags: #sanitizers, #llvm

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

4 years ago[SmallString] Remove StringRef indirection for std::string conversion.
Jonas Devlieghere [Wed, 29 Jan 2020 21:48:39 +0000 (13:48 -0800)]
[SmallString] Remove StringRef indirection for std::string conversion.

There's no need to go through StringRef to convert a SmallString to a
std::string, the conversion operator can create a std::string directly.

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

4 years ago[libc] Add a library of standalone C++ utilities.
Siva Chandra Reddy [Mon, 27 Jan 2020 05:50:27 +0000 (21:50 -0800)]
[libc] Add a library of standalone C++ utilities.

Some of the existing utils in utils/UnitTest/Test.h have been moved to
this new library.

Reviewers: abrachet, gchatelet

Tags: #libc-project

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

4 years ago[NFC][AArch64][SVE] Rename Destructive enumerator from DestructiveInstType
Cameron McInally [Wed, 29 Jan 2020 21:22:14 +0000 (15:22 -0600)]
[NFC][AArch64][SVE] Rename Destructive enumerator from DestructiveInstType

Rename Destructive enumerator in preparation for a larger set of patches to
support prefixing destructive oeprations with MOVPRFX.

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

4 years ago[build] Fix LLVM_ENABLE_RUNTIMES override condition
Shoaib Meenai [Wed, 29 Jan 2020 21:40:36 +0000 (13:40 -0800)]
[build] Fix LLVM_ENABLE_RUNTIMES override condition

I forgot to add parentheses in fa44d72b9e43, though I prefer the
expanded form anyway.

4 years ago[GlobalISel] Add new combine to convert scalar G_MUL to G_SHL.
Amara Emerson [Wed, 29 Jan 2020 17:42:26 +0000 (09:42 -0800)]
[GlobalISel] Add new combine to convert scalar G_MUL to G_SHL.

For pow2 constants we should use G_SHL for pattern matching (and perf)
purposes later.

Vector support not yet implemented.

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

4 years ago[libc] Fix build after 777180a32b61070a10dd330b4f038bf24e916af1.
Siva Chandra Reddy [Wed, 29 Jan 2020 21:29:52 +0000 (13:29 -0800)]
[libc] Fix build after 777180a32b61070a10dd330b4f038bf24e916af1.

Implicit conversion from llvm::StringRef to std::string was made
explicit in the above commit.

4 years ago[gn build] Port 5ea83eef4d6
LLVM GN Syncbot [Wed, 29 Jan 2020 21:19:26 +0000 (21:19 +0000)]
[gn build] Port 5ea83eef4d6

4 years ago[lldb] Fix build break in ProcessDebugger due to StringRef usage changes
Stella Stamenova [Wed, 29 Jan 2020 21:19:04 +0000 (13:19 -0800)]
[lldb] Fix build break in ProcessDebugger due to StringRef usage changes

4 years agoRevert "[llvm-objcopy] Initial support for wasm in llvm-objcopy"
Derek Schuff [Wed, 29 Jan 2020 21:12:56 +0000 (13:12 -0800)]
Revert "[llvm-objcopy] Initial support for wasm in llvm-objcopy"

This reverts commit a928d127a52a061733d2e42c4c9159a267f7dbd4.

It seems to cause issues with big-endian architectures.

4 years ago[AArch64][GlobalISel] Fix TBNZ/TBZ opcode selection
Jessica Paquette [Wed, 29 Jan 2020 20:50:48 +0000 (12:50 -0800)]
[AArch64][GlobalISel] Fix TBNZ/TBZ opcode selection

When the bit is <= 32, we have to use the W register variant for TB(N)Z.

This is because of the way the instruction is encoded.

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

4 years ago[gn build] Port 24962ced814
LLVM GN Syncbot [Wed, 29 Jan 2020 21:06:15 +0000 (21:06 +0000)]
[gn build] Port 24962ced814

4 years ago[Loads] Handle simple cases with same base pointer with constant offsets in FindAvail...
Hiroshi Yamauchi [Tue, 10 Dec 2019 22:41:30 +0000 (14:41 -0800)]
[Loads] Handle simple cases with same base pointer with constant offsets in FindAvailableLoadedValue when AA is null.

Summary:
This will help with devirtualization (store forwarding with vtable pointers in
the presence of other stores into members in the constructor.) During inlining,
we don't have AA.

Reviewers: davidxl

Subscribers: mgorny, Prazek, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[NFCI][AArch64][SVE] Set default DestructiveInstType in AArch64Inst class
Cameron McInally [Wed, 29 Jan 2020 20:44:04 +0000 (14:44 -0600)]
[NFCI][AArch64][SVE] Set default DestructiveInstType in AArch64Inst class

Some housekeeping for the DestructiveInstType enum before a larger set of patches to support prefixing destructive oeprations with MOVPRFX.

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

4 years ago[PowerPC][Future] Add prefixed loads and stores for future CPU
Victor Huang [Wed, 29 Jan 2020 20:32:13 +0000 (14:32 -0600)]
[PowerPC][Future] Add prefixed loads and stores for future CPU

A previous patch should have added pld and pstd and any support code in
the backend that is required for prefixed load and store type operations.
This patch adds a number of additional prefixed load and store type
instructions for the future CPU.

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

4 years agoRewrite test not to rely on StrEq with StringRef
Benjamin Kramer [Wed, 29 Jan 2020 20:40:19 +0000 (21:40 +0100)]
Rewrite test not to rely on StrEq with StringRef

StrEq has some magic inside that should do the explicit conversion from
StringRef to std::string, but apparently this doesn't work with GCC 5.

Just use EXPECT_EQ, it does the same thing with less magic.

4 years ago[InstCombine] add splat binop tests; NFC
Sanjay Patel [Wed, 29 Jan 2020 20:00:11 +0000 (15:00 -0500)]
[InstCombine] add splat binop tests; NFC

4 years ago[libcxx] [Windows] Store the lconv struct returned from localeconv in locale_t
Martin Storsjö [Mon, 28 Oct 2019 08:39:44 +0000 (10:39 +0200)]
[libcxx] [Windows] Store the lconv struct returned from localeconv in locale_t

This fixes using non-default locales, which currently can crash when
e.g. formatting numbers.

Within the localeconv_l function, the per-thread locale is temporarily
changed with __libcpp_locale_guard, then localeconv() is called,
returning an lconv * struct pointer.

When localeconv_l returns, the __libcpp_locale_guard dtor restores
the per-thread locale back to the original. This invalidates the
contents of the earlier returned lconv struct, and all C strings
that are pointed to within it are also invalidated.

Thus, to have an actually working localeconv_l function, the
function needs to allocate some sort of storage for the returned
contents, that stays valid for as long as the caller needs to use
the returned struct.

Extend the libcxx/win32 specific locale_t class with storage for
a deep copy of a lconv struct, and change localeconv_l to take
a reference to the locale_t, to allow it to store the returned
lconv struct there.

This works fine for libcxx itself, but wouldn't necessarily be right
for a caller that uses libcxx's localeconv_l function.

This fixes around 11 of libcxx's currently failing tests on windows.

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

4 years agoAMDGPU/GlobalISel: Fix tests in release build
Matt Arsenault [Wed, 29 Jan 2020 20:26:13 +0000 (12:26 -0800)]
AMDGPU/GlobalISel: Fix tests in release build

Irritatingly the failure output is different in release vs. debug
because of the legality check is removed without asserts, so a register
ends up constrained only in release builds.

4 years agoAdd IntegerAttr::verifyConstructionInvariants.
Sean Silva [Wed, 29 Jan 2020 00:58:34 +0000 (16:58 -0800)]
Add IntegerAttr::verifyConstructionInvariants.

Summary:
This will help catch improper use of the MLIR API's. In particular, this
catches an error that was manifesting as nondeterministic assertion
failures (the nondeterminism was due to the failure happening only when the
StorageUniquer's DenseMap's probing happened to compare two specific
keys).

No test. The fact that all the existing tests pass with this additional
invariant gives confidence that it is correct/useful.

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

4 years agoPrint discriminators when printing .debug_line in GNU style.
Sterling Augustine [Fri, 24 Jan 2020 01:51:33 +0000 (17:51 -0800)]
Print discriminators when printing .debug_line in GNU style.

Summary:
gnu addr2line prints DWARF line table discriminators like so:

<file>:<line> (discriminator <Number>)

This matches that behavior.

Document how and when --output-style=GNU prints discriminators

Add test for new GNU-style discriminator printing.

Reviewers: rupprecht, labath, jhenderson

Subscribers: aprantl, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[build] Fix runtimes build after 2e745ba6b0ba
Shoaib Meenai [Wed, 29 Jan 2020 20:16:40 +0000 (12:16 -0800)]
[build] Fix runtimes build after 2e745ba6b0ba

I missed the NOT in the condition; this part is actually responsible for
passing LLVM_ENABLE_RUNTIMES to the per-target runtime configures, which
in turn makes them actually build.

I'll put up a more general solution for review, but restore this in the
meantime to fix the runtimes build.

4 years ago[InstCombine] Support non-splat vectors in icmp eq + add/sub fold
Nikita Popov [Wed, 29 Jan 2020 17:58:48 +0000 (18:58 +0100)]
[InstCombine] Support non-splat vectors in icmp eq + add/sub fold

For the

    icmp eq (add X, C1), C2 => icmp eq X, C2-C1
    icmp eq (sub C1, X), C2 => icmp eq X, C1-C2

folds, this allows C1 to be non-splat and contain undefs.
C2 is still splat, due to the structure of the code.

This is to address the remaining part of the regression in D73411,
where demanded element analysis replaces some elements with undef.

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

4 years ago[InstCombine] Add undef/non-splat tests for add/sub + icmp eq; NFC
Nikita Popov [Wed, 29 Jan 2020 17:57:56 +0000 (18:57 +0100)]
[InstCombine] Add undef/non-splat tests for add/sub + icmp eq; NFC

4 years ago[GlobalISel][IRTranslator] Follow convention and put constant offset of getelementptr...
Amara Emerson [Wed, 29 Jan 2020 17:34:33 +0000 (09:34 -0800)]
[GlobalISel][IRTranslator] Follow convention and put constant offset of getelementptr arithmetic on RHS.

We were needlessly putting known constant values on the LHS of a G_MUL, which
is suboptimal.

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

4 years agoattempt to fix symbolize-paths.s everywhere after cd68f4
Nico Weber [Wed, 29 Jan 2020 19:26:50 +0000 (14:26 -0500)]
attempt to fix symbolize-paths.s everywhere after cd68f4

4 years agoattempt to fix symbolize-paths.s on windows
Nico Weber [Wed, 29 Jan 2020 19:23:00 +0000 (14:23 -0500)]
attempt to fix symbolize-paths.s on windows

4 years agoRevert "[AArch64] Fix data race on RegisterBank initialization."
Huihui Zhang [Wed, 29 Jan 2020 19:17:19 +0000 (11:17 -0800)]
Revert "[AArch64] Fix data race on RegisterBank initialization."

Buildbot failure, revert first while looking at the issue.

This reverts commit a5a4a47d691459afffc552bd3be7abfc86a49793.

4 years agoRevert "[AMDGPU] Fix data race on RegisterBank initialization."
Huihui Zhang [Wed, 29 Jan 2020 19:16:27 +0000 (11:16 -0800)]
Revert "[AMDGPU] Fix data race on RegisterBank initialization."

There looks to be buildbot failure related.

This reverts commit 8bb6c8a22af845618cfd6c27853dca1b48d30ce0.

4 years agoRevert "[ARM] Fix data race on RegisterBank initialization."
Huihui Zhang [Wed, 29 Jan 2020 19:15:07 +0000 (11:15 -0800)]
Revert "[ARM] Fix data race on RegisterBank initialization."

There looks to be buildbot failure related.

This reverts commit 91618d940ea3009d7e1489df4c8ca12017a0f612.

4 years ago[AsmPrinter][ELF] Define local aliases (.Lfoo$local) for GlobalObjects
Fangrui Song [Wed, 22 Jan 2020 20:26:04 +0000 (12:26 -0800)]
[AsmPrinter][ELF] Define local aliases (.Lfoo$local) for GlobalObjects

For `MC_GlobalAddress` operands referencing **certain** GlobalObjects,
we can lower them to STB_LOCAL aliases to avoid costs brought by
assembler/linker's conservative decisions about symbol interposition:

* An assembler conservatively assumes a global default visibility symbol interposable (ELF
  semantics). So relocations in object files are needed even if the code generator assumed
  the definition exact and non-interposable.
* The relocations can cause the creation of PLT entries on some targets for -shared links.
  A linker conservatively assumes a global default visibility symbol interposable (if not
  otherwise constrained by -Bsymbolic/--dynamic-list/VER_NDX_LOCAL/etc).

"certain" refers to GlobalObjects in the intersection of
`hasExactDefinition() and !isInterposable()`: `external`, `appending`, `internal`, `private`.
Local linkages (`internal` and `private`) cannot be interposed. `appending` is for very
few objects LLVM interpret specially.  So the set just includes `external`.

This patch emits STB_LOCAL aliases (.Lfoo$local) for such GlobalObjects, so that targets can lower
MC_GlobalAddress operands to STB_LOCAL aliases if applicable.
We may extend the scope and include GlobalAlias in the future.

LLVM's existing -fno-semantic-interposition behaviors give us license to do such optimizations:

* Various optimizations (ipconstprop, inliner, sccp, sroa, etc) treat normal ExternalLinkage
  GlobalObjects as non-interposable.
* Before D72197, MC resolved a PC-relative VK_None fixup to a non-local symbol at assembly time (no
  outstanding relocation), if the target is defined in the same section. Put it simply, even if IR
  optimizations failed to optimize and allowed interposition for the function call in
  `void foo() {} void bar() { foo(); }`, the assembler would disallow it.

This patch sets up AsmPrinter infrastructure to make -fno-semantic-interposition more so.
With and without the patch, the object file output should be identical:
`.Lfoo$local` does not take a symbol table entry.

Reviewed By: sfertile

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

4 years agoHandle non-absolute include dirs properly for both dwarf4 and dwarf5.
Sterling Augustine [Tue, 28 Jan 2020 22:17:20 +0000 (14:17 -0800)]
Handle non-absolute include dirs properly for both dwarf4 and dwarf5.

Summary:
Add test case for the same. This test case will also serve as a
starting point for later symbolizer tests.

Reviewers: dblaikie, jdoerfert

Subscribers: hiraditya, llvm-commits, jhenderson

Tags: #llvm

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

4 years ago[DAGCombiner] ISD::SHL/SRA/SRL - use general SelectionDAG::FoldConstantArithmetic
Simon Pilgrim [Wed, 29 Jan 2020 18:48:55 +0000 (18:48 +0000)]
[DAGCombiner] ISD::SHL/SRA/SRL - use general SelectionDAG::FoldConstantArithmetic

This handles all the constant splat / opaque testing for us.

4 years ago[ConstantFold][SVE] Fix constant folding for scalable vector binary operations.
Huihui Zhang [Wed, 29 Jan 2020 18:48:57 +0000 (10:48 -0800)]
[ConstantFold][SVE] Fix constant folding for scalable vector binary operations.

Summary:
Scalable vector should not be evaluated element by element.
Add support to handle scalable vector UndefValue.

Reviewers: sdesmalen, huntergr, spatel, lebedev.ri, apazos, efriedma, willlovett

Reviewed By: efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years ago[clangd] Don't mmap source files on all platforms --> don't crash on git checkout
Sam McCall [Wed, 29 Jan 2020 11:22:03 +0000 (12:22 +0100)]
[clangd] Don't mmap source files on all platforms --> don't crash on git checkout

Summary:
Previously we mmapped on unix and not on windows: on windows mmap takes
an exclusive lock on the file and prevents the user saving changes!

The failure mode on linux is a bit more subtle: if the file is changed on disk
but the SourceManager sticks around, then subsequent operations on the
SourceManager will fail as invariants are violated (e.g. null-termination).

This commonly manifests as crashes after switching git branches with many files
open in clangd.

Nominally mmap is for performance here, and we should be willing to give some
up to stop crashing. Measurements on my system (linux+desktop+SSD) at least
show no measurable regression on an a fairly IO-heavy workload: drop disk caches,
open SemaOverload.cpp, wait for first diagnostics.

for i in `seq 100`; do
  for variant in mmap volatile; do
    echo 3 | sudo tee /proc/sys/vm/drop_caches
    /usr/bin/time --append --quiet -o ~/timings -f "%C %E" \
    bin/clangd.$variant -sync -background-index=0 < /tmp/mirror > /dev/null
  done
done

bin/clangd.mmap -sync -background-index=0 0:07.60
bin/clangd.volatile -sync -background-index=0 0:07.89
bin/clangd.mmap -sync -background-index=0 0:07.44
bin/clangd.volatile -sync -background-index=0 0:07.89
bin/clangd.mmap -sync -background-index=0 0:07.42
bin/clangd.volatile -sync -background-index=0 0:07.50
bin/clangd.mmap -sync -background-index=0 0:07.90
bin/clangd.volatile -sync -background-index=0 0:07.53
bin/clangd.mmap -sync -background-index=0 0:07.64
bin/clangd.volatile -sync -background-index=0 0:07.55
bin/clangd.mmap -sync -background-index=0 0:07.75
bin/clangd.volatile -sync -background-index=0 0:07.47
bin/clangd.mmap -sync -background-index=0 0:07.90
bin/clangd.volatile -sync -background-index=0 0:07.50
bin/clangd.mmap -sync -background-index=0 0:07.81
bin/clangd.volatile -sync -background-index=0 0:07.95
bin/clangd.mmap -sync -background-index=0 0:07.55
bin/clangd.volatile -sync -background-index=0 0:07.65
bin/clangd.mmap -sync -background-index=0 0:08.15
bin/clangd.volatile -sync -background-index=0 0:07.54
bin/clangd.mmap -sync -background-index=0 0:07.78
bin/clangd.volatile -sync -background-index=0 0:07.61
bin/clangd.mmap -sync -background-index=0 0:07.78
bin/clangd.volatile -sync -background-index=0 0:07.55
bin/clangd.mmap -sync -background-index=0 0:07.41
bin/clangd.volatile -sync -background-index=0 0:07.40
bin/clangd.mmap -sync -background-index=0 0:07.54
bin/clangd.volatile -sync -background-index=0 0:07.42
bin/clangd.mmap -sync -background-index=0 0:07.45
bin/clangd.volatile -sync -background-index=0 0:07.49
bin/clangd.mmap -sync -background-index=0 0:07.95
bin/clangd.volatile -sync -background-index=0 0:07.66
bin/clangd.mmap -sync -background-index=0 0:08.04

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[AMDGPU][GlobalISel] Select 8-byte LDS Ops with 4-byte alignment
Austin Kerbow [Tue, 7 Jan 2020 21:13:05 +0000 (13:13 -0800)]
[AMDGPU][GlobalISel] Select 8-byte LDS Ops with 4-byte alignment

Reviewers: arsenm

Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, rovka, dstuttard, tpr, t-tye, hiraditya, Petar.Avramovic, llvm-commits

Tags: #llvm

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

4 years ago[lldb/Host] Fix implicit StringRef to std::string conversion
Jonas Devlieghere [Wed, 29 Jan 2020 18:35:34 +0000 (10:35 -0800)]
[lldb/Host] Fix implicit StringRef to std::string conversion

lldb\source\Host\windows\Host.cpp(228): error C2440: 'initializing':
cannot convert from 'llvm::StringRef' to
'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'

4 years agoRun clang-format on DwarfExpression (NFC)
Adrian Prantl [Wed, 29 Jan 2020 18:22:15 +0000 (10:22 -0800)]
Run clang-format on DwarfExpression (NFC)

4 years agoDwarfExpression: Factor out getOrCreateBaseType() (NFC)
Adrian Prantl [Wed, 29 Jan 2020 18:08:57 +0000 (10:08 -0800)]
DwarfExpression: Factor out getOrCreateBaseType() (NFC)

4 years ago[SmallString] Add explicit conversion to std::string
Jonas Devlieghere [Wed, 29 Jan 2020 17:39:46 +0000 (09:39 -0800)]
[SmallString] Add explicit conversion to std::string

With the conversion between StringRef and std::string now being
explicit, converting SmallStrings becomes more tedious. This patch adds
an explicit operator so you can write std::string(Str) instead of
Str.str().str().

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

4 years ago[ARM] Fix data race on RegisterBank initialization.
Huihui Zhang [Wed, 29 Jan 2020 18:15:26 +0000 (10:15 -0800)]
[ARM] Fix data race on RegisterBank initialization.

Summary:
The initialization of RegisterBank needs to be done only once. The
logic of AlreadyInit has data race, use llvm::call_once instead.

This is continuing work of D73587.

Reviewers: arsenm, rovka, dsanders, t.p.northover, efriedma, apazos

Reviewed By: arsenm

Subscribers: wdng, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[AMDGPU] Fix data race on RegisterBank initialization.
Huihui Zhang [Wed, 29 Jan 2020 18:14:30 +0000 (10:14 -0800)]
[AMDGPU] Fix data race on RegisterBank initialization.

Summary:
The initialization of RegisterBank needs to be done only once. The
logic of AlreadyInit has data race, use llvm::call_once instead.

This is continuing work of D73587.

Reviewers: arsenm, tstellar, ronlieb, efriedma, apazos, nhaehnle

Reviewed By: nhaehnle

Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, hiraditya, kerbowa, llvm-commits

Tags: #llvm

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

4 years ago[AArch64] Fix data race on RegisterBank initialization.
Huihui Zhang [Wed, 29 Jan 2020 18:12:21 +0000 (10:12 -0800)]
[AArch64] Fix data race on RegisterBank initialization.

Summary:
The initialization of RegisterBank needs to be done only once. The
logic of AlreadyInit has a data race, use llvm::call_once instead.

This issue was identified through thread sanitizer.

Reviewers: efriedma, apazos, qcolombet, dsanders

Reviewed By: efriedma

Subscribers: arsenm, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[libcxx] Add a std::string_view pretty printer for libcxx.
Eric Fiselier [Wed, 29 Jan 2020 17:51:31 +0000 (12:51 -0500)]
[libcxx] Add a std::string_view pretty printer for libcxx.

This adds a std::string_view pretty printer for libcxx and updates the gdb
pretty printer test.

Patch by Ali Tamur (tamur@google.com)
Reviewed as https://reviews.llvm.org/D73514

4 years agoAdd dwarfdump support for DW_OP_regval_type.
Adrian Prantl [Wed, 29 Jan 2020 01:25:15 +0000 (17:25 -0800)]
Add dwarfdump support for DW_OP_regval_type.

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

4 years ago[ELF] Mention symbol name in reportRangeError()
Fangrui Song [Tue, 28 Jan 2020 01:35:06 +0000 (17:35 -0800)]
[ELF] Mention symbol name in reportRangeError()

For an out-of-range relocation referencing a non-local symbol, report the symbol name and the object file that defines the symbol. As an example:
```
t.o:(function func: .text.func+0x3): relocation R_X86_64_32S out of range: -281474974609120 is not in [-21474836482147483647]
```
=>
```
t.o:(function func: .text.func+0x3): relocation R_X86_64_32S out of range: -281474974609120 is not in [-21474836482147483647]; references func
>>> defined in t1.o
```

Reviewed By: grimar

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

4 years ago[DAGCombiner] ISD::MUL - use general SelectionDAG::FoldConstantArithmetic
Simon Pilgrim [Wed, 29 Jan 2020 17:25:44 +0000 (17:25 +0000)]
[DAGCombiner] ISD::MUL - use general SelectionDAG::FoldConstantArithmetic

This handles all the constant splat / opaque testing for us.

4 years agoFix switch covers all cases static analyzer warning. NFCI.
Simon Pilgrim [Wed, 29 Jan 2020 17:12:41 +0000 (17:12 +0000)]
Fix switch covers all cases static analyzer warning. NFCI.

4 years ago[InstCombine] Regenerate test checks; NFC
Nikita Popov [Sat, 25 Jan 2020 10:05:59 +0000 (11:05 +0100)]
[InstCombine] Regenerate test checks; NFC

4 years ago[scudo] Skip building scudo standalone if sys/auxv.h can't be found
Bjorn Pettersson [Wed, 29 Jan 2020 16:19:26 +0000 (17:19 +0100)]
[scudo] Skip building scudo standalone if sys/auxv.h can't be found

Summary:
Since commit c299d1981deaf822dfaa06c791f3158bd6801e20 scudo
standalone can't be built without including sys/auxv.h.
I do not have that file on my system, and my builds have failed
when trying to simply build "all" runtimes. Assuming that "all"
means "all possible given the current environment" we need to
guard the setting of COMPILER_RT_HAS_SCUDO_STANDALONE=TRUE by
first checking if sys/auxv.h can be found.

Reviewers: pcc, cryptoad

Reviewed By: pcc

Subscribers: mgorny, #sanitizers, llvm-commits

Tags: #sanitizers, #llvm

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

4 years ago[lldb/Reproducers] Add logging to the string template specialization
Jonas Devlieghere [Wed, 29 Jan 2020 17:15:13 +0000 (09:15 -0800)]
[lldb/Reproducers] Add logging to the string template specialization

Only the templated function had logging for deserialization. The string
deserializer is implemented as a specialization and now prints to the
log as well.

4 years ago[X86] Custom lower ISD::FROUND with SSE4.1 to avoid a libcall.
Craig Topper [Wed, 29 Jan 2020 17:00:33 +0000 (09:00 -0800)]
[X86] Custom lower ISD::FROUND with SSE4.1 to avoid a libcall.

ISD::FROUND is defined to round to nearest with ties rounding
away from 0. This mode isn't supported in hardware on X86.

But as long as we aren't compiling with trapping math, we can
emulate this with floor(X + copysign(nextafter(0.5, 0.0), X)).

We have to use nextafter to avoid some corner cases that adding
0.5 would have. For example, if X is nextafter(0.5, 0.0) it should
round to 0.0, but adding 0.5 would need one extra bit of mantissa
than can be stored so it rounds to 1.0. Adding nextafter(0.5, 0.0)
instead will just increase the exponent by 1 and leave the mantissa
as all 1s. This would be nextafter(1.0, 0.0) which will floor to 0.0.

Techically this requires -fno-trapping-math which isn't our default.
But if we care about exceptions we should be using constrained
intrinsics. Constrained intrinsics would use STRICT_FROUND which
won't go through this code.

Fixes PR42195.

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

4 years ago[llvm][docs] LangRef for IR attribute `vector-function-abi-variant`.
Francesco Petrogalli [Wed, 15 Jan 2020 19:50:44 +0000 (19:50 +0000)]
[llvm][docs] LangRef for IR attribute `vector-function-abi-variant`.

Reviewers: jdoerfert, andwar, simoll, rengolin, hfinkel, xtian

Reviewed By: jdoerfert

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[AMDGPU] Cluster FLAT instructions with both vaddr and saddr
Jay Foad [Mon, 6 Jan 2020 15:33:15 +0000 (15:33 +0000)]
[AMDGPU] Cluster FLAT instructions with both vaddr and saddr

Reviewers: rampitec, arsenm

Subscribers: kzhuravl, jvesely, wdng, nhaehnle, yaxunl, dstuttard, tpr, t-tye, hiraditya, kerbowa, llvm-commits

Tags: #llvm

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

4 years ago[Clang][Bundler] Add 'exclude' flag to target objects sections
Sergey Dmitriev [Wed, 29 Jan 2020 16:35:15 +0000 (08:35 -0800)]
[Clang][Bundler] Add 'exclude' flag to target objects sections

Summary: This flag tells link editor to exclude section from linker inputs when linking executable or shared library.

Reviewers: ABataev, alexshap, jdoerfert

Reviewed By: ABataev

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[DAGCombiner] Sub/SUBSAT - use general SelectionDAG::FoldConstantArithmetic
Simon Pilgrim [Wed, 29 Jan 2020 16:56:27 +0000 (16:56 +0000)]
[DAGCombiner] Sub/SUBSAT - use general SelectionDAG::FoldConstantArithmetic

This handles all the constant splat / opaque testing for us.

4 years ago[DAGCombiner] visitIMINMAX - use general SelectionDAG::FoldConstantArithmetic
Simon Pilgrim [Wed, 29 Jan 2020 16:36:03 +0000 (16:36 +0000)]
[DAGCombiner] visitIMINMAX - use general SelectionDAG::FoldConstantArithmetic

This handles all the constant splat / opaque testing for us instead of the ConstantSDNode variant where we have to do it ourselves.

4 years ago[X86] Use a shorter sequence to implement FLT_ROUNDS
Craig Topper [Wed, 29 Jan 2020 16:14:29 +0000 (08:14 -0800)]
[X86] Use a shorter sequence to implement FLT_ROUNDS

This code needs to map from the FPCW 2-bit encoding for rounding mode to the 2-bit encoding defined for FLT_ROUNDS. The previous implementation did some clever swapping of bits and adding 1 modulo 4 to do the mapping.

This patch instead uses an 8-bit immediate as a lookup table of four 2-bit values. Then we use the 2-bit FPCW encoding to index the lookup table by using a right shift and an AND. This requires extracting the 2-bit value from FPCW and multipying it by 2 to make it usable as a shift amount. But still results in less code.

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

4 years agoAMDGPU/GlobalISel: Fix tablegen selection for scalar bin ops
Matt Arsenault [Fri, 24 Jan 2020 19:01:09 +0000 (14:01 -0500)]
AMDGPU/GlobalISel: Fix tablegen selection for scalar bin ops

Fixes selection for scalar G_SMULH/G_UMULH. Also switches to using
tablegen selected add/sub, which switch to the signed version of the
opcode. This matches the current DAG behavior. We can't drop the
manual selection for add/sub yet, because it's still both for VALU
add/sub and for G_PTR_ADD.

4 years agoAdd a test extracted from D69557 "AsmParser: Allow FMF on varargs call"
Jay Foad [Wed, 29 Jan 2020 16:46:45 +0000 (16:46 +0000)]
Add a test extracted from D69557 "AsmParser: Allow FMF on varargs call"

4 years ago[VE] (conditional) branch modification & isel patterns
Kazushi (Jam) Marukawa [Wed, 29 Jan 2020 16:40:46 +0000 (17:40 +0100)]
[VE] (conditional) branch modification & isel patterns

Summary:
InstInfo for branch modification, (conditional) branch isel patterns and tests.

Reviewed By: arsenm

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