Bill Wendling [Tue, 22 Jun 2021 00:33:53 +0000 (17:33 -0700)]
[llvm-diff] Constify APIs so that there aren't conflicts
Some APIs work with const variables while others don't. This can cause
conflicts when calling one from the other.
This is NFC.
Differential Revision: https://reviews.llvm.org/D104719
Joseph Huber [Mon, 22 Mar 2021 20:35:55 +0000 (16:35 -0400)]
[OpenMP] Replace GPU globalization calls with shared memory in the middle-end
Summary:
The changes introduced in D97680 create a simpler interface to code that needs
to be globalized. This interface is used to simplify the globalization calls in
the middle end. We can check any globalization call that is only called by a
single thread in the team and replace it with a static shared memory buffer.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D97818
Joseph Huber [Fri, 18 Jun 2021 19:48:01 +0000 (15:48 -0400)]
[Libomptarget] Improve device runtime implementation for globalized variables.
Currently the runtime implementation of `__kmpc_alloc_shared` is extremely slow because it allocated memory for each thread individually. This patch adds a small buffer for the threads to share data and will greatly improve performance for builds where all globalization could not be optimized out. If the shared buffer is full, then memory will not only be allocated per-warp rather than per-thread.
Depends on D97680
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D104666
Nikita Popov [Mon, 21 Jun 2021 20:32:56 +0000 (22:32 +0200)]
[OpaquePtr] Handle addrspacecasts in InstCombine
This adds support for addrspace casts involving opaque pointers to
InstCombine, as well as the isEliminableCastPair() helper
(otherwise the assertion failure would just move there).
Add PointerType::hasSameElementTypeAs() to hide the element type
details.
Differential Revision: https://reviews.llvm.org/D104668
Meera Nakrani [Mon, 14 Jun 2021 11:39:07 +0000 (11:39 +0000)]
[AArch64LoadStoreOptimizer] Recommit: Generate more STPs by renaming registers earlier
This is a recommit that fixes unwanted STP generation by checking that
the base register has not been modified or used elsewhere.
Our initial motivating case was memcpy's with alignments > 16. The
loads/stores, to which small memcpy's expand, are kept together in
several places so that we get a sequence like this for a 64 bit copy:
LD w0
LD w1
ST w0
ST w1
The load/store optimiser can generate a LDP/STP w0, w1 from this because
the registers read/written are consecutive. In our case however, the
sequence is optimised during ISel, resulting in:
LD w0
ST w0
LD w0
ST w0
This instruction reordering allows reuse of registers. Since the registers
are no longer consecutive (i.e. they are the same), it inhibits LDP/STP
creation. The approach here is to perform renaming:
LD w0
ST w0
LD w1
ST w1
to enable the folding of the stores into a STP. We do not yet generate
the LDP due to a limitation in the renaming implementation, but plan to
look at that in a follow-up so that we fully support this case. While
this was initially motivated by certain memcpy's, this is a general
approach and thus is beneficial for other cases too, as can be seen
in some test changes.
Differential Revision: https://reviews.llvm.org/D103597
David Spickett [Mon, 21 Jun 2021 15:10:46 +0000 (15:10 +0000)]
[lldb] Remove more redundant SetStatus(eReturnStatusFailed)
Mostly by converting uses of GetErrorStream to AppendError,
so that the call to SetStatus is implicit.
Some remain where it isn't certain that you'll have a message
to set, or you want the output to be on stdout.
One place in CommandObjectWatchpoint previously didn't set
the status to failed at all. However it's pretty obvious
that it should do so.
Reviewed By: teemperor
Differential Revision: https://reviews.llvm.org/D104697
Jingu Kang [Mon, 7 Jun 2021 11:55:30 +0000 (12:55 +0100)]
[SimpleLoopUnswich] Fixa a bug on ComputeUnswitchedCost with partial unswitch
There was a bug from cost calculation for partially invariant unswitch.
The costs of non-duplicated blocks are substracted from the total LoopCost, so
anything that is duplicated should not be counted.
Differential Revision: https://reviews.llvm.org/D103816
Florian Hahn [Tue, 22 Jun 2021 14:35:23 +0000 (15:35 +0100)]
[SCEV] Reduce code to handle predicates in applyLoopGuards (NFC).
Hoist out common recurrence check and sink updating the map, to reduce
the code required to support additional predicates.
Joseph Huber [Mon, 22 Mar 2021 20:34:11 +0000 (16:34 -0400)]
[OpenMP] Simplify GPU memory globalization
Summary:
Memory globalization is required to maintain OpenMP standard semantics for data sharing between
worker and master threads. The GPU cannot share data between its threads so must allocate global or
shared memory to store the data in. Currently this is implemented fully in the frontend using the
`__kmpc_data_sharing_push_stack` and __kmpc_data_sharing_pop_stack` functions to emulate standard
CPU stack sharing. The front-end scans the target region for variables that escape the region and
must be shared between the threads. Each variable then has a field created for it in a global record
type.
This patch replaces this functinality with a single allocation command, effectively mimicing an
alloca instruction for the variables that must be shared between the threads. This will be much
slower than the current solution, but makes it much easier to optimize as we can analyze each
variable independently and determine if it is not captured. In the future, we can replace these
calls with an `alloca` and small allocations can be pushed to shared memory.
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D97680
Raphael Isemann [Tue, 22 Jun 2021 14:45:48 +0000 (16:45 +0200)]
[lldb][NFC] Remove an outdated comment in HostInfoBase
We should *never* use static local variables in this file as this makes
unittesting the plugin code impossible (and this whole 'testing' thing has
turned out to be rather useful so far).
Rosie Sumpter [Tue, 22 Jun 2021 12:18:26 +0000 (13:18 +0100)]
[SLP][AArch64] Add SLP vectorizer tests for XOR and AND reductions. NFC
These regression tests show missed SLP vectorization opportunities,
which will be fixed in a future commit (see:
https://reviews.llvm.org/D104538).
Differential Revision: https://reviews.llvm.org/D104708
Graham Hunter [Tue, 22 Jun 2021 14:06:42 +0000 (15:06 +0100)]
[clang] Remove unused capture in closure
c6a91ee6aaaa removed uses of IsMonotonic from OpenMP SIMD codegen,
but that left a capture of the variable unused which upset buildbots
using -Werror.
Joseph Huber [Tue, 15 Jun 2021 21:09:50 +0000 (17:09 -0400)]
[Libomptarget] Introduce new globalization runtime calls
Summary:
This patch introduces the new globalization runtime to be used by D97680. These
runtime calls will replace the __kmpc_data_sharing_push_stack and
__kmpc_data_sharing_pop_stack functions.
Reviewed By: tianshilei1992
Differential Revision: https://reviews.llvm.org/D102532
Florian Hahn [Tue, 22 Jun 2021 13:48:45 +0000 (14:48 +0100)]
[BitcodeReader] Validate Strtab before accessing.
This fixes a crash with invalid bitcode files that have records
referencing names in Strtab, but Strtab is not present or the index is
out-of-bounds.
This fixes the following clusterfuzz issue:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=29895
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D95554
Nikita Popov [Tue, 22 Jun 2021 10:00:42 +0000 (12:00 +0200)]
[ConstantFold] Delay fetching pointer element type
Don't do this while stipping pointer casts, instead fetch it at
the end. This improves compatibility with opaque pointers for the
case where the base object is not opaque.
Nikita Popov [Tue, 22 Jun 2021 10:14:31 +0000 (12:14 +0200)]
[ConstantFold] Skip bitcast -> GEP transform for opaque pointers
Same as with the InstCombine transform, this is not possible for
bitcasts involving opaque pointers, as GEP preserves opaqueness.
AndreyChurbanov [Tue, 22 Jun 2021 13:29:01 +0000 (16:29 +0300)]
[OpenMP] libomp: fix dynamic loop dispatcher
Restructured dynamic loop dispatcher code.
Fixed use of dispatch buffers for nonmonotonic dynamic (static_steal) schedule:
- eliminated possibility of stealing iterations of the wrong loop when victim
thread changed its buffer to work on another loop;
- fixed race when victim thread changed its buffer to work in nested parallel;
- eliminated "static" property of the schedule, that is now a single thread can
execute whole loop.
Differential Revision: https://reviews.llvm.org/D103648
Butygin [Wed, 19 May 2021 19:04:29 +0000 (22:04 +0300)]
[mlir] Fix invalid handling of AllocOp symbolOperands by SimplifyAllocConst.
symbolOperands were completely ignored by SimplifyAllocConst. Also, slightly improved diagnostic message for verifyAllocLikeOp.
Differential Revision: https://reviews.llvm.org/D104260
Pushpinder Singh [Tue, 22 Jun 2021 06:24:19 +0000 (06:24 +0000)]
[AMDGPU][Libomptarget] Move allow_access_to_all_gpu_agents to rtl.cpp
Moving this method helps eliminate a use of g_atl_machine.
Reviewed By: JonChesterfield
Differential Revision: https://reviews.llvm.org/D104691
Raphael Isemann [Tue, 22 Jun 2021 11:40:33 +0000 (13:40 +0200)]
[lldb][NFC] Use SubsystemRAII in XcodeSDKModuleTests
Thomas Johnson [Mon, 21 Jun 2021 17:41:51 +0000 (20:41 +0300)]
Add norm sub-target feature to table gen for ARC
This adds the `norm` sub-target feature (without backing implementation for now) to table gen.
Differential Revision: https://reviews.llvm.org/D104558
Muhammad Omair Javaid [Tue, 22 Jun 2021 11:19:48 +0000 (16:19 +0500)]
[LLDB] Skip TestExitDuringExpression on aarch64/linux buildbot
TestExitDuringExpression test_exit_before_one_thread_no_unwind fails
sporadically on both Arm and AArch64 linux buildbots. This seems like
manifesting itself on a fully loaded machine. I have not found a reliable
timeout value so marking it skip for now.
Stephan Herhut [Mon, 21 Jun 2021 17:33:28 +0000 (19:33 +0200)]
[mlir][memref] Add memref.copy operation
As the name suggests, it copies from one memref to another.
Differential Revision: https://reviews.llvm.org/D104657
Florian Hahn [Mon, 21 Jun 2021 18:11:11 +0000 (19:11 +0100)]
[SCEV] Retain AddExpr flags when subtracting a foldable constant.
Currently we drop wrapping flags for expressions like (A + C1)<flags> - C2.
But we can retain flags under certain conditions:
* Adding a smaller constant is NUW if the original AddExpr was NUW.
* Adding a constant with the same sign and small magnitude is NSW, if the
original AddExpr was NSW.
This can improve results after using `SimplifyICmpOperands`, which may
subtract one in order to use stricter predicates, as is the case for
`isKnownPredicate`.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D104319
Raphael Isemann [Tue, 22 Jun 2021 10:22:14 +0000 (12:22 +0200)]
[lldb] Adjust Clang version requirements for tail_call_frames tests
Those tests are all failing for older Clang versions. This is adding the
respective test decorators for the passing Clang versions to get the recently
revived matrix bot green.
Nico Weber [Tue, 22 Jun 2021 02:29:11 +0000 (22:29 -0400)]
[lld/mac] Add explicit "no unwind info" entries for functions without unwind info
Fixes PR50529. With this, lld-linked Chromium base_unittests passes on arm macs.
Surprisingly, no measurable impact on link time.
Differential Revision: https://reviews.llvm.org/D104681
Raphael Isemann [Tue, 22 Jun 2021 09:55:36 +0000 (11:55 +0200)]
[lldb] Bumb Clang version requirement for TestBasicEntryValues.py to 11
The test only passes with Clang>=11 so adjust the decorator.
Failure output for Clang 10 is:
--- FileCheck trace (code=1) ---
FileCheck main.cpp -check-prefix=FUNC1-GNU
FileCheck input:
Address: a.out[0x0000000000401127] (a.out.PT_LOAD[1]..text + 263)
Summary: a.out`func1(int&) + 23 at main.cpp:25:1
Module: file = "functionalities/param_entry_vals/basic_entry_values/BasicEntryValues_GNU.test_dwo/a.out", arch = "x86_64"
CompileUnit: id = {0x00000000}, file = "functionalities/param_entry_vals/basic_entry_values/main.cpp", language = "c++11"
Function: id = {0x400000000000010a}, name = "func1(int&)", mangled = "_Z5func1Ri", range = [0x0000000000401110-0x0000000000401129)
FuncType: id = {0x400000000000010a}, byte-size = 0, decl = main.cpp:13, compiler_type = "void (int &)"
Blocks: id = {0x400000000000010a}, range = [0x00401110-0x00401129)
LineEntry: [0x0000000000401127-0x0000000000401130): functionalities/param_entry_vals/basic_entry_values/main.cpp:25:1
Symbol: id = {0x0000002c}, range = [0x0000000000401110-0x0000000000401129), name="func1(int&)", mangled="_Z5func1Ri"
FileCheck output:
functionalities/param_entry_vals/basic_entry_values/main.cpp:23:16: error: FUNC1-GNU: expected string not found in input
// FUNC1-GNU: name = "sink", type = "int &", location = DW_OP_GNU_entry_value
Martin Storsjö [Mon, 14 Jun 2021 11:43:46 +0000 (14:43 +0300)]
[ADT] Add StringRef consume_front_lower and consume_back_lower
These serve as a convenient combination of consume_front/back and
startswith_lower/endswith_lower, consistent with other existing
case insensitive methods named <operation>_lower.
Differential Revision: https://reviews.llvm.org/D104218
Graham Hunter [Fri, 4 Jun 2021 11:10:37 +0000 (12:10 +0100)]
[Clang][OpenMP] Monotonic does not apply to SIMD
The codegen for simd constructs was affected by the presence (or
absence) of the 'monotonic' schedule modifier for worksharing
loops. The modifier is only intended to apply to the scheduling of
chunks for a thread, not iterations of a loop inside a chunk.
In addition, the monotonic modifier was applied to worksharing loops
by default if no schedule clause was present; the referenced part of
the OpenMP 4.5 spec in the code (section 2.7.1) only applies if the
user specified a schedule clause with a static kind but no modifier.
Without a user-specified schedule clause we should default to
nonmonotonic scheduling.
Reviewed By: ABataev
Differential Revision: https://reviews.llvm.org/D103793
Nikita Popov [Tue, 22 Jun 2021 09:06:28 +0000 (11:06 +0200)]
[ConstantFolding] Separate conditions in GEP evaluation (NFC)
Handle to gep p, 0-v case separately, and not as part of the loop
that ensures all indices are constant integers. Those two things
are not really related.
Balázs Kéri [Tue, 22 Jun 2021 08:25:55 +0000 (10:25 +0200)]
[clang][Analyzer] Track null stream argument in alpha.unix.Stream .
The checker contains check for passing a NULL stream argument.
This change should make more easy to identify where the passed pointer
becomes NULL.
Reviewed By: NoQ
Differential Revision: https://reviews.llvm.org/D104640
Matthias Springer [Tue, 22 Jun 2021 07:49:08 +0000 (16:49 +0900)]
[mlir][NFC] Move SubTensorOp and SubTensorInsertOp to TensorDialect
The main goal of this commit is to remove the dependency of Standard dialect on the Tensor dialect.
* Rename SubTensorOp -> tensor.extract_slice, SubTensorInsertOp -> tensor.insert_slice.
* Some helper functions are (already) duplicated between the Tensor dialect and the MemRef dialect. To keep this commit smaller, this will be cleaned up in a separate commit.
* Additional dialect dependencies: Shape --> Tensor, Tensor --> Standard
* Remove dialect dependencies: Standard --> Tensor
* Move canonicalization test cases to correct dialect (Tensor/MemRef).
Note: This is a fixed version of https://reviews.llvm.org/D104499, which was reverted due to a missing update to two CMakeFile.txt.
Differential Revision: https://reviews.llvm.org/D104676
Fraser Cormack [Fri, 18 Jun 2021 15:30:19 +0000 (16:30 +0100)]
[Utils][vim] Add missing highlights for fast-math flags
This patch adds the `afn`, `contract`, and `reassoc` fast-math flags.
It also fixes up `fneg`'s order in the alphabetized list.
Reviewed By: MaskRay, craig.topper
Differential Revision: https://reviews.llvm.org/D104541
Sander de Smalen [Tue, 22 Jun 2021 07:05:55 +0000 (08:05 +0100)]
[GlobalISel] Add scalable property to LLT types.
This patch aims to add the scalable property to LLT. The rest of the
patch-series changes the interfaces to take/return ElementCount and
TypeSize, which both have the ability to represent the scalable property.
The changes are mostly mechanical and aim to be non-functional changes
for fixed-width vectors.
For scalable vectors some unit tests have been added, but no effort has
been put into making any of the GlobalISel algorithms work with scalable
vectors yet. That will be left as future work.
The work is split into a series of 5 patches to make reviews easier.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D104450
Bjorn Pettersson [Mon, 21 Jun 2021 09:22:14 +0000 (11:22 +0200)]
[NewPM] Print passes with params when using "opt -print-passes"
Make sure we also print passes with params when using "opt -print-passes".
Differential Revision: https://reviews.llvm.org/D104625
Fangrui Song [Tue, 22 Jun 2021 06:49:25 +0000 (23:49 -0700)]
[llvm-objcopy] Internalize some symbols
Tobias Gysi [Tue, 22 Jun 2021 06:27:28 +0000 (06:27 +0000)]
[mlir][linalg] Adapt FillOp to use a scalar operand.
Adapt the FillOp definition to use a scalar operand instead of a capture. This patch is a follow up to https://reviews.llvm.org/D104109. As the input operands are in front of the output operands the patch changes the internal operand order of the FillOp. The pretty printed version of the operation remains unchanged though. The patch also adapts the linalg to standard lowering to ensure the c signature of the FillOp remains unchanged as well.
Differential Revision: https://reviews.llvm.org/D104121
Fangrui Song [Tue, 22 Jun 2021 06:44:07 +0000 (23:44 -0700)]
[llvm-objcopy] Delete empty namespace. NFC
Max Kazantsev [Tue, 22 Jun 2021 05:21:38 +0000 (12:21 +0700)]
Re-land "[LoopDeletion] Handle Phis with similar inputs from different blocks"
Patch was reverted due to a bug that existed before it and was exposed
by it. Returning after the underlying bug has been fixed.
Differential Revision: https://reviews.llvm.org/D103959
Max Kazantsev [Tue, 22 Jun 2021 05:10:58 +0000 (12:10 +0700)]
[LoopDeletion] Require loop to have a predecessor when executing 1st iteration symbolically
Two predecessors break the further logic, and the loop may come to the
opt in non-canonicalized state.
Heejin Ahn [Fri, 18 Jun 2021 21:41:01 +0000 (14:41 -0700)]
[WebAssembly] Make tag attribute's encoding uint8
This changes the encoding of the `attribute` field, which currently only
contains the value `0` denoting this tag is for an exception, from
`varuint32` to `uint8`. This field is effectively unused at the moment
and reserved for future use, and it is not likely to need `varuint32`
even in future.
See https://github.com/WebAssembly/exception-handling/pull/162.
This does not change any encoded binaries because `0` is encoded in the
same way both in `varuint32` and `uint8`.
Reviewed By: tlively
Differential Revision: https://reviews.llvm.org/D104571
Walter Erquinigo [Fri, 30 Apr 2021 04:27:12 +0000 (21:27 -0700)]
Retry of [lldb-vscode] only report long running progress events
This time adding a check that should prevent the crash found in
https://lab.llvm.org/buildbot/#/builders/68/builds/14182/steps/6/logs/stdio
Differential Revision: https://reviews.llvm.org/D101128
Matthias Springer [Tue, 22 Jun 2021 02:37:37 +0000 (11:37 +0900)]
[mlir][linalg] Fusion of PadTensorOp
Note: This commit (and previous ones) implements the same functionality as https://reviews.llvm.org/D103243 (which is abandoned).
Differential Revision: https://reviews.llvm.org/D104683
Walter Erquinigo [Tue, 22 Jun 2021 02:42:34 +0000 (19:42 -0700)]
Revert "[lldb-vscode] only report long running progress events"
This reverts commit
610d474cfd82f11dc4702e2cf1b2485584d7c243.
lldb-vscode is crashing.
Walter Erquinigo [Tue, 22 Jun 2021 02:33:56 +0000 (19:33 -0700)]
[lldb-vscode] Add simple DAP logs dump to investigate flakiness in tests
A few times tests have been flaky, presumably by crashed of lldb-vscode
itself. They can be caught by looking at the DAP logs, so I'm dumping
them when the session ends.
Walter Erquinigo [Fri, 30 Apr 2021 04:27:12 +0000 (21:27 -0700)]
[lldb-vscode] only report long running progress events
When the number of shared libs is massive, there could be hundreds of
thousands of short lived progress events sent to the IDE, which makes it
irresponsive while it's processing all this data. As these small jobs
take less than a second to process, the user doesn't even see them,
because the IDE only display the progress of long operations. So it's
better not to send these events.
I'm fixing that by sending only the events that are taking longer than 5
seconds to process.
In a specific run, I got the number of events from ~500k to 100, because
there was only 1 big lib to parse.
I've tried this on several small and massive targets, and it seems to
work fine.
Differential Revision: https://reviews.llvm.org/D101128
Eli Friedman [Mon, 21 Jun 2021 23:34:02 +0000 (16:34 -0700)]
Rename MachineMemOperand::getOrdering -> getSuccessOrdering.
Since this method can apply to cmpxchg operations, make sure it's clear
what value we're actually retrieving. This will help ensure we don't
accidentally ignore the failure ordering of cmpxchg in the future.
We could potentially introduce a getOrdering() method on AtomicSDNode
that asserts the operation isn't cmpxchg, but not sure that's
worthwhile.
Differential Revision: https://reviews.llvm.org/D103338
Vitaly Buka [Sat, 19 Jun 2021 01:34:07 +0000 (18:34 -0700)]
[NFC] Add getUnderlyingObjects test
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D104585
Eli Friedman [Mon, 21 Jun 2021 23:24:16 +0000 (16:24 -0700)]
[ScalarEvolution] Ensure backedge-taken counts are not pointers.
A backedge-taken count doesn't refer to memory; returning a pointer type
is nonsense. So make sure we always return an integer.
The obvious way to do this would be to just convert the operands of the
icmp to integers, but that doesn't quite work out at the moment:
isLoopEntryGuardedByCond currently gets confused by ptrtoint operations.
So we perform the ptrtoint conversion late for lt/gt operations.
The test changes are mostly innocuous. The most interesting changes are
more complex SCEV expressions of the form "(-1 * (ptrtoint i8* %ptr to
i64)) + %ptr)". This is expected: we can't fold this to zero because we
need to preserve the pointer base.
The call to isLoopEntryGuardedByCond in howFarToZero is less precise
because of ptrtoint operations; this shows up in the function
pr46786_c26_char in ptrtoint.ll. Fixing it here would require more
complex refactoring. It should eventually be fixed by future
improvements to isImpliedCond.
See https://bugs.llvm.org/show_bug.cgi?id=46786 for context.
Differential Revision: https://reviews.llvm.org/D103656
Rob Suderman [Mon, 21 Jun 2021 23:09:04 +0000 (16:09 -0700)]
[mlir][tosa] Enable tosa.div for TosaMakeBroadcastable
TosaMakeBroadcastable needs to include tosa.div, which was added later in the
specification.
Reviewed By: sjarus, NatashaKnk
Differential Revision: https://reviews.llvm.org/D104157
Greg Clayton [Fri, 18 Jun 2021 23:19:04 +0000 (16:19 -0700)]
Clarify the "env" launch configuration setting.
A few users recently were trying to set environment values when using lldb-vscode and were unsure of the format of the "env" launch configuration setting. Clarify the exact format as when users add the "env" launch config setting, they can see this help string in the IDE.
Differential Revision: https://reviews.llvm.org/D104578
Nick Desaulniers [Mon, 21 Jun 2021 22:09:23 +0000 (15:09 -0700)]
[IR] convert warn-stack-size from module flag to fn attr
Otherwise, this causes issues when building with LTO for object files
that use different values.
Link: https://github.com/ClangBuiltLinux/linux/issues/1395
Reviewed By: dblaikie, MaskRay
Differential Revision: https://reviews.llvm.org/D104342
Andrew Browne [Fri, 18 Jun 2021 19:21:29 +0000 (12:21 -0700)]
[DFSan][NFC] Refactor Origin Address Alignment code.
Reviewed By: stephan.yichao.zhao
Differential Revision: https://reviews.llvm.org/D104565
Rong Xu [Mon, 21 Jun 2021 21:11:31 +0000 (14:11 -0700)]
[SampleFDO] Make FSDiscriminator flag part of function parameters
Add a parameter of IsFSDiscriminator to function
getBaseDiscriminatorFromDiscriminator().
This function currently checks the internal flag of
--enable-fs-discriminator. This is not good because we might
change the default value of the internal flag.
Note that we have a default parameter. This is just
because create_afdo_tool has a call-site to it.
I will remove the default parameter in a later patch.
Differential Revision: https://reviews.llvm.org/D104584
Eli Friedman [Mon, 21 Jun 2021 21:24:31 +0000 (14:24 -0700)]
[ARM] Make sure we don't transform unaligned store to stm on Thumb1.
This isn't likely to come up in practice; the combination of compiler
flags required to hit this issue should be rare. Found by inspection.
Fangrui Song [Mon, 21 Jun 2021 21:32:25 +0000 (14:32 -0700)]
[AArch64][X86] Allow 64-bit label differences lower to IMAGE_REL_*_REL32
`IMAGE_REL_ARM64_REL64/IMAGE_REL_AMD64_REL64` do not exist and `.quad a - .` is
currently not representable.
For instrumentation, `.quad a - .` is useful representing a cross-section
reference in a metadata section, to allow ELF medium/large code models. The COFF
limitation makes such generic instrumentations inconvenient. I plan to make a
PGO/coverage metadata section field relative in D104556.
Differential Revision: https://reviews.llvm.org/D104564
Jinsong Ji [Mon, 21 Jun 2021 19:25:40 +0000 (19:25 +0000)]
[DAGCombine] reassoc flag shouldn't enable contract
According to IR LangRef, the FMF flag:
contract
Allow floating-point contraction (e.g. fusing a multiply followed by an
addition into a fused multiply-and-add).
reassoc
Allow reassociation transformations for floating-point instructions.
This may dramatically change results in floating-point.
My understanding is that these two flags shouldn't imply each other,
as we might have a SDNode that can be reassociated with others, but
not contractble.
eg: We may want following fmul/fad/fsub to freely reassoc, but don't
want fma being generated here.
%F = fmul reassoc double %A, %B ; <double> [#uses=1]
%G = fmul reassoc double %C, %D ; <double> [#uses=1]
%H = fadd reassoc double %F, %G ; <double> [#uses=1]
%I = fsub reassoc double %H, %E ; <double> [#uses=1]
Before https://reviews.llvm.org/D45710, `reassoc` flag actually
did not imply isContratable either.
The current implementation also only check the flag in fadd node,
ignoring fmul node, this patch update that as well.
Reviewed By: spatel, qiucf
Differential Revision: https://reviews.llvm.org/D104247
Joel E. Denny [Mon, 21 Jun 2021 19:53:57 +0000 (15:53 -0400)]
[UpdateCCTestChecks] Fix --replace-value-regex across RUN lines
Without this patch, llvm/utils/update_cc_test_checks.py fails to
perform `--replace-value-regex` replacements when two RUN lines
produce the same output and use the same single FileCheck prefix. The
problem is that replacements in a RUN line's output are not performed
until after comparing against previous RUN lines' output, where
replacements have already been performed. This patch fixes that.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D104566
Roman Lebedev [Mon, 21 Jun 2021 20:56:25 +0000 (23:56 +0300)]
[NFC][SimplifyCFG] Add basic test for debuginfo preservation of `ret` tail merging
Roman Lebedev [Mon, 21 Jun 2021 20:53:34 +0000 (23:53 +0300)]
[NFC][SimplifyCFG] Fix tests to use FileCheck instead of grep
Alexey Bataev [Mon, 21 Jun 2021 20:37:12 +0000 (13:37 -0700)]
[SLP][NFC]Rename functions in the tests, NFC.
Erich Keane [Mon, 21 Jun 2021 20:23:05 +0000 (13:23 -0700)]
Revert "[SYCL][NFC] Ensure SYCL kernel for unique-stable-name is unqualified."
This reverts commit
5013131875402539a249dca47c58cca7c359baf8.
This patch didn't end up being the solution to the problem. It "fixed"
our issue but the actual correct solution is something else. Reverting
as this ends up being unnecessary/extra noise.
Louis Dionne [Mon, 21 Jun 2021 20:21:39 +0000 (16:21 -0400)]
[libc++] NFC: Fix outdated comment about secrets.env
That file (secrets.env) has now been removed, so the comment was
referencing something that didn't exist anymore.
Nikita Popov [Mon, 21 Jun 2021 18:35:30 +0000 (20:35 +0200)]
Reapply [InstCombine] Don't try converting opaque pointer bitcast to GEP
Reapplied without changes -- this was reverted together with an
underlying patch.
-----
Bitcasts having opaque pointer source or result type cannot be
converted into a zero-index GEP, GEP source and result types
always have the same opaque-ness.
Daniel Hwang [Mon, 21 Jun 2021 20:01:42 +0000 (13:01 -0700)]
Create install targets for scan-build-py.
A new revision identical to https://reviews.llvm.org/D101139
The parent revision of aforementioned revision seems to cause pre-merge checks to fail opaquely. Seeing if creating a new revision will work.
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D104138
Nikita Popov [Mon, 21 Jun 2021 18:22:06 +0000 (20:22 +0200)]
Reapply [InstCombine] Extract bitcast -> gep transform
Relative to the original patch, an InstCombine test has been
added to show a previously missed pattern, and the Coroutine
test that resulted in the revert has been regenerated.
-----
Move this into a separate function, to make sure that early
returns do not accidentally skip other transforms. This previously
happened for the isSized() check, which skipped folds like
distributing a bitcast over a select.
Nikita Popov [Mon, 21 Jun 2021 19:58:06 +0000 (21:58 +0200)]
[InstCombine] Add test for bitcast of unsized pointer (NFC)
The bitcast should get folded into the select, but currently isn't
due to an incorrect early bailout.
Ahmed S. Taei [Mon, 21 Jun 2021 19:46:27 +0000 (12:46 -0700)]
Add polynomial approximation for trigonometric sine and cosine functions
The approximation relays on range reduced version y \in [0, pi/2]. An input x will have
the property that sin(x) = sin(y), -sin(y), cos(y), -cos(y) depends on which quadrable x
is in, where sin(y) and cos(y) are approximated with 5th degree polynomial (of x^2).
As a result a single pattern can be used to compute approximation for both sine and cosine.
Reviewed By: ezhulenev
Differential Revision: https://reviews.llvm.org/D104582
thomasraoux [Mon, 14 Jun 2021 20:25:18 +0000 (13:25 -0700)]
[mlir][vector] Support distributing transfer op with permutation map
Differential Revision: https://reviews.llvm.org/D104263
Craig Topper [Mon, 21 Jun 2021 19:42:21 +0000 (12:42 -0700)]
[RISCV] Remove extra character from a comment. NFC
Erich Keane [Mon, 21 Jun 2021 19:50:02 +0000 (12:50 -0700)]
[SYCL][NFC] Ensure SYCL kernel for unique-stable-name is unqualified.
Discovered in our downstream, this function that is used to get the type
of the kernel parameter type needs to be unqualified, otherwise when our
downstream uses this function in a slightly different way, the kernel
types no longer match.
Langston Barrett [Mon, 21 Jun 2021 19:34:10 +0000 (12:34 -0700)]
[llvm-reduce] Don't delete arguments of intrinsics
The argument reduction pass shouldn't remove arguments of
intrinsics, because the resulting module is ill-formed, and so
inherently uninteresting.
Reviewed By: aeubanks
Differential Revision: https://reviews.llvm.org/D103129
zoecarver [Mon, 17 May 2021 17:30:12 +0000 (10:30 -0700)]
[libcxx][ranges] Add `indirectly_movable` and `indirectly_movable_storable`.
Differential Revision: https://reviews.llvm.org/D102639
Nikita Popov [Mon, 21 Jun 2021 19:31:42 +0000 (21:31 +0200)]
Revert "[InstCombine] Extract bitcast -> gep transform"
This reverts commit
d9f5d7b959de36085944d4a99a73f3053f953796.
This reverts commit
5780611d7e044ef56c4214df2c236ef5e15545ab.
This causes a failure in Coroutine tests.
Nikita Popov [Sat, 19 Jun 2021 08:09:12 +0000 (10:09 +0200)]
[LoopUnroll] Don't modify TripCount/TripMultiple in computeUnrollCount() (NFCI)
As these are no longer passed to UnrollLoop(), there is no need to
modify them in computeUnrollCount(). Make them non-reference parameters.
Differential Revision: https://reviews.llvm.org/D104590
Alexey Bataev [Wed, 26 May 2021 18:56:22 +0000 (11:56 -0700)]
[SLP]Improve vectorization of PHI instructions.
Perform better analysis when trying to vectorize PHIs.
1. Do not try to vectorize vector PHIs.
2. Do deeper analysis for more profitable nodes for the vectorization.
Before we just tried to vectorize the PHIs of the same type. Patch
improves this and tries to vectorize PHIs with incoming values which
come from the same basic block, have the same and/or alternative
opcodes.
It allows to save the compile time and provides better vectorization
results in general.
Part of D57059.
Differential Revision: https://reviews.llvm.org/D103638
Nikita Popov [Mon, 21 Jun 2021 18:35:30 +0000 (20:35 +0200)]
[InstCombine] Don't try converting opaque pointer bitcast to GEP
Bitcasts having opaque pointer source or result type cannot be
converted into a zero-index GEP, GEP source and result types
always have the same opaque-ness.
Nikita Popov [Mon, 21 Jun 2021 18:22:06 +0000 (20:22 +0200)]
[InstCombine] Extract bitcast -> gep transform
Move this into a separate function, to make sure that early
returns do not accidentally skip other transforms. There is
already one isSized() check that could run into this issue,
thus this change is not strictly NFC.
Fangrui Song [Mon, 21 Jun 2021 19:01:57 +0000 (12:01 -0700)]
[llvm-profdata] Allow omission of -o for --text output
This makes it more convenient to get a text format profile.
Add an error for printing non-text format output to a terminal for instrumentation profile.
(It cannot be portably tested. For sample profile, raw_fd_ostream is hidden deeply so it's inconvenient to add a diagnostic.)
Reviewed By: davidxl
Differential Revision: https://reviews.llvm.org/D104600
Jonas Paulsson [Mon, 21 Jun 2021 18:49:08 +0000 (13:49 -0500)]
[SystemZ] Fix some typos in comments.
Nick Desaulniers [Mon, 21 Jun 2021 18:34:23 +0000 (11:34 -0700)]
[Clang][Codegen] rename no_profile fn attr no_profile_instrument_function
GCC has had this function attribute since GCC 7.1 for this purpose. I
added "no_profile" last week in D104475; rename this to
"no_profile_instrument_function" to improve compatibility with GCC.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80223#c11
Reviewed By: MaskRay, aaron.ballman
Differential Revision: https://reviews.llvm.org/D104658
Craig Topper [Mon, 21 Jun 2021 17:50:28 +0000 (10:50 -0700)]
[RISCV] Add isel patterns to match vmacc/vmadd/vnmsub/vnmsac from add/sub and mul.
Reviewed By: frasercrmck
Differential Revision: https://reviews.llvm.org/D104163
Nikita Popov [Mon, 21 Jun 2021 18:11:39 +0000 (20:11 +0200)]
[InstCombine] Remove unnecessary addres space check (NFC)
It's not possible to bitcast between different address spaces,
and this is ensured by the IR verifier. As such, this bitcast to
addrspacecast canonicalization can never be hit.
Nikita Popov [Mon, 21 Jun 2021 16:33:29 +0000 (18:33 +0200)]
[OpaquePtr] Support opaque constant expression GEP
Adjust assertions to use isOpaqueOrPointeeTypeMatches() and make
it return an opaque pointer result for an opaque base pointer. We
also need to enumerate the element type, as it is no longer
implicitly enumerated through the pointer type.
Differential Revision: https://reviews.llvm.org/D104655
Philip Reames [Mon, 21 Jun 2021 18:02:17 +0000 (11:02 -0700)]
Split a test for ease of auto update
Walter Erquinigo [Mon, 21 Jun 2021 17:53:31 +0000 (10:53 -0700)]
Revert "[lldb-vscode] attempt to fix flakiness"
Revert "[lldb-vscode] only report long running progress events"
This reverts commit
f2c009dbcfd11fd1e8941513dcf49fffe43565a1.
This reverts commit
aa4685c0fb3aab5acb90be5fd3eb5ba8bf1e3211.
Raphael Isemann [Mon, 21 Jun 2021 16:21:19 +0000 (18:21 +0200)]
[lldb] Add support for escaping zsh arguments
LLDB supports having globbing regexes in the process launch arguments that will
be resolved using the user's shell. This requires that we pass the launch args
to the shell and then read back the expanded arguments using LLDB's argdumper
utility.
As the shell will not just expand the globbing regexes but all special
characters, we need to escape all non-globbing charcters such as $, &, <, >,
etc. as those otherwise are interpreted and removed in the step where we expand
the globbing characters. Also because the special characters are shell-specific,
LLDB needs to maintain a list of all the characters that need to be escaped for
each specific shell.
This patch adds the list of special characters that need to be escaped for
`zsh`. Without this patch on systems where `zsh` is the user's shell (like on
all macOS systems) having any of these special characters in your arguments or
path to the binary will cause the process launch to fail. E.g., `lldb -- ./calc
1<2` is failing without this patch. The same happens if the absolute path to
`calc` is in a directory that contains for example parentheses or other special
characters.
Reviewed By: JDevlieghere
Differential Revision: https://reviews.llvm.org/D104627
Raphael Isemann [Mon, 21 Jun 2021 17:38:01 +0000 (19:38 +0200)]
[lldb] Skip TestLimitDebugInfo for Clang<7
Without DW_CC_pass_by_* attributes that Clang 7 started to emit in this test
we don't properly read back the return value of the `get_*` functions and just
read bogus memory.
See also the TestReturnValue.py test.
Jacob Hegna [Mon, 14 Jun 2021 18:30:10 +0000 (18:30 +0000)]
Remove ML inlining model artifacts.
They are not conducive to being stored in git. Instead, we autogenerate
mock model artifacts for use in tests. Production models can be
specified with the cmake flag LLVM_INLINER_MODEL_PATH.
LLVM_INLINER_MODEL_PATH has two sentinel values:
- download, which will download the most recent compatible model.
- autogenerate, which will autogenerate a "fake" model for testing the
model uptake infrastructure.
Differential Revision: https://reviews.llvm.org/D104251
Nathan Chancellor [Mon, 21 Jun 2021 17:18:55 +0000 (10:18 -0700)]
Revert "[LoopDeletion] Handle Phis with similar inputs from different blocks"
This reverts commit
bb1dc876ebb8a2eef38d5183d00c2db1437f1c91.
This patch causes an assertion failure when building an arm64 defconfig
Linux kernel.
See https://reviews.llvm.org/D103959 for a link to the original bug
report and a reduced reproducer.
peter klausler [Fri, 18 Jun 2021 18:24:32 +0000 (11:24 -0700)]
[flang] Fold more reduction intrinsic function calls
Refactor the recently-implemented MAXVAL/MINVAL folding so
that the parts that can be used to implement other reduction
transformational intrinsic function folding are exposed.
Use them to implement folding of IALL, IANY, IPARITY,
SUM. and PRODUCT. Replace the folding of ALL & ANY to
use the new infrastructure and become able to handle DIM=
arguments.
Differential Revision: https://reviews.llvm.org/D104562
Mehdi Amini [Mon, 21 Jun 2021 16:39:24 +0000 (16:39 +0000)]
Revert "[mlir][NFC] Move SubTensorOp and SubTensorInsertOp to TensorDialect"
This reverts commit
83bf801f5f266c788f025a3efbb0c83817137c3b.
This breaks the build with -DBUILD_SHARED_LIBS=ON
Nikita Popov [Mon, 21 Jun 2021 15:43:06 +0000 (17:43 +0200)]
[OpaquePtr] Return opaque pointer from opaque pointer GEP
For a GEP on an opaque pointer, also return an opaque pointer (or
vector of opaque pointer) result.
This requires explicitly enumerating the GEP source element type,
because it is now no longer implicitly enumerated as part of either
the source or result pointer types.
Differential Revision: https://reviews.llvm.org/D104652
Alexander Mols [Mon, 21 Jun 2021 15:56:55 +0000 (17:56 +0200)]
[lldb] Enable Rust v0 symbol demangling
Rust's v0 name mangling scheme [1] is easy to disambiguate from other
name mangling schemes because symbols always start with `_R`. The llvm
Demangle library supports demangling the Rust v0 scheme. Use it to
demangle Rust symbols.
Added unit tests that check simple symbols. Ran LLDB built with this
patch to debug some Rust programs compiled with the v0 name mangling
scheme. Confirmed symbol names were demangled as expected.
Note: enabling the new name mangling scheme requires a nightly
toolchain:
```
$ cat main.rs
fn main() {
println!("Hello world!");
}
$ $(rustup which --toolchain nightly rustc) -Z symbol-mangling-version=v0 main.rs -g
$ /home/asm/hacking/llvm/build/bin/lldb ./main --one-line 'b main.rs:2'
(lldb) target create "./main"
Current executable set to '/home/asm/hacking/llvm/rust/main' (x86_64).
(lldb) b main.rs:2
Breakpoint 1: where = main`main::main + 4 at main.rs:2:5, address = 0x00000000000076a4
(lldb) r
Process 948449 launched: '/home/asm/hacking/llvm/rust/main' (x86_64)
warning: (x86_64) /lib64/libgcc_s.so.1 No LZMA support found for reading .gnu_debugdata section
Process 948449 stopped
* thread #1, name = 'main', stop reason = breakpoint 1.1
frame #0: 0x000055555555b6a4 main`main::main at main.rs:2:5
1 fn main() {
-> 2 println!("Hello world!");
3 }
(lldb) bt
error: need to add support for DW_TAG_base_type '()' encoded with DW_ATE = 0x7, bit_size = 0
* thread #1, name = 'main', stop reason = breakpoint 1.1
* frame #0: 0x000055555555b6a4 main`main::main at main.rs:2:5
frame #1: 0x000055555555b78b main`<fn() as core::ops::function::FnOnce<()>>::call_once((null)=(main`main::main at main.rs:1), (null)=<unavailable>) at function.rs:227:5
frame #2: 0x000055555555b66e main`std::sys_common::backtrace::__rust_begin_short_backtrace::<fn(), ()>(f=(main`main::main at main.rs:1)) at backtrace.rs:125:18
frame #3: 0x000055555555b851 main`std::rt::lang_start::<()>::{closure#0} at rt.rs:49:18
frame #4: 0x000055555556c9f9 main`std::rt::lang_start_internal::hc51399759a90501a [inlined] core::ops::function::impls::_$LT$impl$u20$core..ops..function..FnOnce$LT$A$GT$$u20$for$u20$$RF$F$GT$::call_once::h04259e4a34d07c2f at function.rs:259:13
frame #5: 0x000055555556c9f2 main`std::rt::lang_start_internal::hc51399759a90501a [inlined] std::panicking::try::do_call::hb8da45704d5cfbbf at panicking.rs:401:40
frame #6: 0x000055555556c9f2 main`std::rt::lang_start_internal::hc51399759a90501a [inlined] std::panicking::try::h4beadc19a78fec52 at panicking.rs:365:19
frame #7: 0x000055555556c9f2 main`std::rt::lang_start_internal::hc51399759a90501a [inlined] std::panic::catch_unwind::hc58016cd36ba81a4 at panic.rs:433:14
frame #8: 0x000055555556c9f2 main`std::rt::lang_start_internal::hc51399759a90501a at rt.rs:34:21
frame #9: 0x000055555555b830 main`std::rt::lang_start::<()>(main=(main`main::main at main.rs:1), argc=1, argv=0x00007fffffffcb18) at rt.rs:48:5
frame #10: 0x000055555555b6fc main`main + 28
frame #11: 0x00007ffff73f2493 libc.so.6`__libc_start_main + 243
frame #12: 0x000055555555b59e main`_start + 46
(lldb)
```
[1]: https://github.com/rust-lang/rust/issues/60705
Reviewed By: clayborg, teemperor
Differential Revision: https://reviews.llvm.org/D104054
Hendrik Greving [Fri, 18 Jun 2021 22:16:38 +0000 (15:16 -0700)]
RegisterCoalescer: Fix iterating through use operands.
Fixes a minor bug when trying to iterate through use operands when
updating debug use operands.
Extends a test to include above.
Differential Revision: https://reviews.llvm.org/D104576
Yaxun (Sam) Liu [Fri, 18 Jun 2021 20:39:41 +0000 (16:39 -0400)]
[HIP] Add support functions for C++ polymorphic types
Add runtime functions to detect invalid calls to pure or deleted virtual
functions.
Patch by: Siu Chi Chan
Reviewed by: Yaxun Liu
Differential Revision: https://reviews.llvm.org/D104392
Fanbo Meng [Mon, 21 Jun 2021 15:39:05 +0000 (11:39 -0400)]
[libc++] Remove unused variable
Removing `__current` as it becomes unused-but-set after
2cf78d4ead4a2ab5375bd6087724211d04119a28.
Reviewed By: ldionne, abhina.sreeskantharajan, #libc
Differential Revision: https://reviews.llvm.org/D104544
Sanjay Patel [Mon, 21 Jun 2021 15:27:52 +0000 (11:27 -0400)]
[InstCombine] move bitmanipulation-of-select folds
This is no outwardly-visible-difference-intended,
but it is obviously better to have all transforms
for an intrinsic housed together since we already
have helper functions in place.
It is also potentially more efficient to zap a
simple pattern match before trying to do expensive
computeKnownBits() calls.
Rosie Sumpter [Mon, 21 Jun 2021 13:28:35 +0000 (14:28 +0100)]
[SLP][AArch64] Add SLP vectorizer regression test. NFC
This test is for a missed SLP vectorizer opportunity, reported here
https://bugs.llvm.org/show_bug.cgi?id=44593. This is due to a cost
modelling issue with vector reduction intrinsics which will be
fixed in a future commit (see https://reviews.llvm.org/D104538).
Anton Zabaznov [Mon, 21 Jun 2021 14:45:36 +0000 (17:45 +0300)]
[OpenCL] Add support of __opencl_c_images feature macro
Reviewed By: svenvh
Differential Revision: https://reviews.llvm.org/D103911