Nikita Popov [Mon, 19 Dec 2022 11:52:45 +0000 (12:52 +0100)]
[Hexagon] Convert some tests to opaque pointers (NFC)
Nikita Popov [Mon, 19 Dec 2022 11:48:20 +0000 (12:48 +0100)]
[CodeGen] Convert some tests to opaque pointers (NFC)
Balazs Benics [Mon, 19 Dec 2022 11:49:43 +0000 (12:49 +0100)]
[analyzer] Fix crash inside RangeConstraintManager.cpp introduced by D112621
It seems like `LHS` and `RHS` could be empty range sets.
This caused an assertion failure inside RangeConstraintManager.
I'm hoisting out the check from the function into the call-site.
This way we could assert that we only want to deal with non-empty range
sets.
The relevant part of the trace:
```
#6 0x00007fe6ff5f81a6 __assert_fail_base (/lib64/libc.so.6+0x2f1a6)
#7 0x00007fe6ff5f8252 (/lib64/libc.so.6+0x2f252)
#8 0x00000000049caed2 (anonymous namespace)::SymbolicRangeInferrer::VisitBinaryOperator(clang::ento::RangeSet, clang::BinaryOperatorKind, clang::ento::RangeSet, clang::QualType) RangeConstraintManager.cpp:0:0
#9 0x00000000049c9867 (anonymous namespace)::SymbolicRangeInferrer::infer(clang::ento::SymExpr const*) RangeConstraintManager.cpp:0:0
#10 0x00000000049bebf5 (anonymous namespace)::RangeConstraintManager::assumeSymNE(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymExpr const*, llvm::APSInt const&, llvm::APSInt const&) RangeConstraintManager.cpp:0:0
#11 0x00000000049d368c clang::ento::RangedConstraintManager::assumeSymUnsupported(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::SymExpr const*, bool) (../../main-github/llvm/build-all/bin/clang+0x49d368c)
#12 0x00000000049f0b09 clang::ento::SimpleConstraintManager::assumeAux(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::NonLoc, bool) (../../main-github/llvm/build-all/bin/clang+0x49f0b09)
#13 0x00000000049f096a clang::ento::SimpleConstraintManager::assume(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::NonLoc, bool) (../../main-github/llvm/build-all/bin/clang+0x49f096a)
#14 0x00000000049f086d clang::ento::SimpleConstraintManager::assumeInternal(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::DefinedSVal, bool) (../../main-github/llvm/build-all/bin/clang+0x49f086d)
#15 0x000000000492d3e3 clang::ento::ConstraintManager::assumeDual(llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>, clang::ento::DefinedSVal) (../../main-github/llvm/build-all/bin/clang+0x492d3e3)
#16 0x0000000004955b6d clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation(clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet&, clang::Expr const*) (../../main-github/llvm/build-all/bin/clang+0x4955b6d)
#17 0x00000000049514b6 clang::ento::ExprEngine::Visit(clang::Stmt const*, clang::ento::ExplodedNode*, clang::ento::ExplodedNodeSet&) (../../main-github/llvm/build-all/bin/clang+0x49514b6)
#18 0x000000000494c73e clang::ento::ExprEngine::ProcessStmt(clang::Stmt const*, clang::ento::ExplodedNode*) (../../main-github/llvm/build-all/bin/clang+0x494c73e)
#19 0x000000000494c459 clang::ento::ExprEngine::processCFGElement(clang::CFGElement, clang::ento::ExplodedNode*, unsigned int, clang::ento::NodeBuilderContext*) (../../main-github/llvm/build-all/bin/clang+0x494c459)
#20 0x000000000492f3d0 clang::ento::CoreEngine::HandlePostStmt(clang::CFGBlock const*, unsigned int, clang::ento::ExplodedNode*) (../../main-github/llvm/build-all/bin/clang+0x492f3d0)
#21 0x000000000492e1f6 clang::ento::CoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned int, llvm::IntrusiveRefCntPtr<clang::ento::ProgramState const>) (../../main-github/llvm/build-all/bin/clang+0x492e1f6)
```
Differential Revision: https://reviews.llvm.org/D112621
Florian Hahn [Mon, 19 Dec 2022 11:47:51 +0000 (11:47 +0000)]
[ValueTracking] Consider single poison operands in propgatesPoison.
This patch updates propgatesPoison to take a Use as argument and
propagatesPoison now returns true if the passed in operand causes the
user to yield poison if the operand is poison
This allows propagating poison if the condition of a select is poison.
This helps improve results for programUndefinedIfUndefOrPoison.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D111643
Nikita Popov [Mon, 19 Dec 2022 11:46:13 +0000 (12:46 +0100)]
[BPF] Convert some tests to opaque pointers (NFC)
Nikita Popov [Mon, 19 Dec 2022 11:44:09 +0000 (12:44 +0100)]
[ARM] Convert some tests to opaque pointers (NFC)
Nikita Popov [Mon, 19 Dec 2022 11:39:01 +0000 (12:39 +0100)]
[AMDGPU] Convert some tests to opaque pointers (NFC)
Ivan Kosarev [Mon, 19 Dec 2022 11:07:41 +0000 (11:07 +0000)]
[AMDGPU][CodeGen] Support raw format TFE buffer loads other than byte, short and d16 ones.
Reviewed By: arsenm
Differential Revision: https://reviews.llvm.org/D138215
Nikita Popov [Mon, 19 Dec 2022 11:13:38 +0000 (12:13 +0100)]
[AArch64] Convert some tests to opaque pointers (NFC)
Adrian Kuegel [Mon, 19 Dec 2022 11:04:47 +0000 (12:04 +0100)]
[mlir][Bazel] Add ModuleImport sources to FromLLVMIRTranslation target.
Simon Pilgrim [Mon, 19 Dec 2022 11:03:41 +0000 (11:03 +0000)]
[X86] Fix SLM uops counts for AES instructions
Based off llvm-exegesis captures, confirmed with uops.info
Simon Pilgrim [Sat, 17 Dec 2022 22:21:45 +0000 (22:21 +0000)]
[X86] Add default LoadUOps argument to Intel models WriteResPair macro
This will make it easier to override the folded uop count on a class-by-class basis
Jean Perier [Mon, 19 Dec 2022 10:40:25 +0000 (02:40 -0800)]
[flang] Fix llvm::Optional warning caused by D140220
Using llvm::Optional::value() was just deprecated in LLVM.
Remove the usage that was added by D140220 and replace it by an assert.
https://lab.llvm.org/buildbot/#/builders/160/builds/14222
Luke Lau [Fri, 16 Dec 2022 12:20:26 +0000 (12:20 +0000)]
[WebAssembly] Fix crash when selecting 64 bit lane extract operand
The tablegen patterns on vector_extract only match i32 constants, but
on wasm64 these come in as i64 constants. In certain situations this
would cause crashes whenever it couldn't select an extract_vector_elt
instruction.
Rather than add duplicate patterns for every instruction, this just
canonicalizes the constant to be i32 when lowering.
Fixes https://github.com/llvm/llvm-project/issues/57577
Differential Revision: https://reviews.llvm.org/D140205
Nikita Popov [Mon, 19 Dec 2022 10:13:37 +0000 (11:13 +0100)]
[Bitcode] Convert tests to opaque pointers (NFC)
Tobias Gysi [Mon, 19 Dec 2022 10:10:49 +0000 (11:10 +0100)]
[mlir][llvm] Move LLVM IR import into separate file (NFC).
The revision renames the Importer to ModuleImport and moves the class
out of the ConvertFromLLVMIR.cpp file into ModuleImport.h and
ModuleImport.cpp. Additionally, it introduces two helper methods
on the ModuleImport class that convert functions and globals, and it
merges the translateLLVMIRToModule function into the
registerFromLLVMIRTranslation function to match the design of
the MLIR to LLVM IR export.
This restructuring is a step towards the file structure of the export
and a preparation for an extensible import
https://discourse.llvm.org/t/rfc-extensible-llvm-ir-import/67256/6 that
uses a dialect interface to import intrinsics and metadata.
Reviewed By: ftynse
Differential Revision: https://reviews.llvm.org/D140285
Jean Perier [Mon, 19 Dec 2022 10:11:23 +0000 (11:11 +0100)]
[flang] Lower statement function references in HLFIR
Enable lowering of statement function references in HLFIR. This follows
the same principle as statement function lowering with the current
lowering:
- Actual arguments are lowered and mapped to the statement function
dummy symbols.
- "HostAssociated" symbols are mapped to their host values (these are
the symbols referred to inside the statement function expressions that
are not statement function dummies. e.g: `x` in `stmt_func(i) =
x(i)`).
- The statement function expression is evaluated.
evaluate::SetLength has to be lowered to deal with statement functions
returning characters since the front-end is generating one to ensure the
statement function expression value is trimmed/padded to match the statement
function declared type.
Differential Revision: https://reviews.llvm.org/D140220
Pavel Labath [Mon, 19 Dec 2022 09:47:53 +0000 (10:47 +0100)]
[lldb] Modernize sprintf in FormatEntity.cpp
Avoid buffer overflows with large indexes, and spurious nul characters
with small ones.
Adrian Kuegel [Mon, 19 Dec 2022 09:42:47 +0000 (10:42 +0100)]
[MLIR][Bufferization] Remove extra trailing spaces (NFC)
Matthias Springer [Mon, 19 Dec 2022 09:24:46 +0000 (10:24 +0100)]
[mlir][vector] Add scalar vector xfer to memref patterns
These patterns devectorize scalar transfers such as vector<f32> or vector<1xf32>.
Differential Revision: https://reviews.llvm.org/D140215
Matthias Springer [Mon, 19 Dec 2022 08:59:21 +0000 (09:59 +0100)]
[mlir][vector] Fix error handling in VectorizationState::initState
This function used to create new ops even if the vectorization failed. Those ops were then folded away. This caused a failure of the GreedyPatternRewriter, which no longer terminated (each time the IR is modified => one more iteration).
Differential Revision: https://reviews.llvm.org/D140286
Adrian Kuegel [Mon, 19 Dec 2022 09:03:44 +0000 (10:03 +0100)]
[mlir][Bazel] Add missing dependency to TensorDialect.
Muhammad Omair Javaid [Mon, 19 Dec 2022 09:00:10 +0000 (14:00 +0500)]
[CLANG] XFAIL c-strings.c & volatile-1.c AArch64/Windows
c-strings.c was marked XFAIL for msvc ABI on AArch64/Windows platform.
But it is failing due to alignment issue on WoA for both msvc and gnu
gnu ABIs. I am going to mark them as XFAIL for both.
Alex Zinenko [Thu, 15 Dec 2022 18:48:09 +0000 (18:48 +0000)]
[mlir] optionally allow repeated handles in transform dialect
Some operations may be able to deal with handles pointing to the same
operation when the handle is consumed. For example, merge handles with
deduplication doesn't actually destroy payload operations and is
specifically intended to remove the situation with duplicates. Add a
method to the transform interface to allow ops to declare they can
support repeated handles.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D140124
Muhammad Omair Javaid [Mon, 19 Dec 2022 08:50:31 +0000 (13:50 +0500)]
Revert "[lldb] Remove redundant .c_str() and .get() calls"
This reverts commit
fbaf48be0ff6fb24b9aa8fe9c2284fe88a8798dd.
This has broken all LLDB buildbots:
https://lab.llvm.org/buildbot/#/builders/68/builds/44990
https://lab.llvm.org/buildbot/#/builders/96/builds/33160
Adrian Kuegel [Mon, 19 Dec 2022 08:50:43 +0000 (09:50 +0100)]
[mlir] Apply ClangTidy readability finding.
Use empty() instead of checking for size 0.
Jean Perier [Mon, 19 Dec 2022 08:50:13 +0000 (09:50 +0100)]
[flang] Add hlfir.set_length operation
This will implement evaluate::SetLength where the length of
a character entity is changed (with trimming and padding).
Differential Revision: https://reviews.llvm.org/D140219
Jean Perier [Mon, 19 Dec 2022 08:49:06 +0000 (09:49 +0100)]
[flang][NFC] move getIntIfConstant into FIROpsSupport.h
The motivation is to have it accessible in HLFIROps.cpp to
use it in hlfir.set_length builder to build the result length
type as best as possible.
Differential Revision: https://reviews.llvm.org/D140214
Nikita Popov [Mon, 19 Dec 2022 08:38:44 +0000 (09:38 +0100)]
[Examples] Fix build (NFC)
Can't use VLA at file scope.
Haojian Wu [Mon, 19 Dec 2022 08:12:35 +0000 (09:12 +0100)]
[include-cleaner] Fix a missing review comment.
I forgot to add the change to the commit when committing.
Lorenzo Chelini [Wed, 14 Dec 2022 13:47:01 +0000 (14:47 +0100)]
[MLIR][Bufferization] Introduce `EmptyTensorToAllocTensorOp`
Introduce a new transform operation to replace `tensor.empty` with
`alloc_tensor` operations. The operation is a pass-through if the target
operation is already a `alloc_tensor`; otherwise, it expects a
`tensor.empty` as a target. Currently, it does not return any results.
The operation is expected to run before `one_shot_bufferize` as
`one_shot_bufferize` rejects `tensor.empty`.
Reviewed By: springerm
Differential Revision: https://reviews.llvm.org/D140026
Adrian Kuegel [Mon, 19 Dec 2022 08:05:43 +0000 (09:05 +0100)]
[Bazel] Remove define HAVE_LSEEK64 to match cmake config.
Haojian Wu [Thu, 15 Dec 2022 13:16:54 +0000 (14:16 +0100)]
[include-cleaner] Fix the member-expr-access usage for sugar type.
Fixes https://github.com/llvm/llvm-project/issues/59533
Differential Revision: https://reviews.llvm.org/D140095
Qiu Chaofan [Mon, 19 Dec 2022 07:29:40 +0000 (15:29 +0800)]
Fix 'underline too short' failure
Qiu Chaofan [Mon, 19 Dec 2022 07:20:45 +0000 (15:20 +0800)]
[Intrinsic] Rename flt.rounds intrinsic to get.rounding
Address the inconsistency between FLT_ROUNDS_ and SET_ROUNDING SDAG
node. Rename FLT_ROUNDS_ to GET_ROUNDING and add llvm.get.rounding
intrinsic to replace flt.rounds.
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D139507
Matthias Springer [Mon, 19 Dec 2022 06:57:46 +0000 (07:57 +0100)]
[mlir][transform] Add PackedOrDynamicIndexList helper
This customer parser/printer is similar to DynamicIndexList, but has special syntax for the case where one handle represents the entire list.
Example:
```
// Regular index list
[10, 20, %val]
// Packed handle (no square parentheses)
%val
```
Differential Revision: https://reviews.llvm.org/D138825
Kai Luo [Mon, 19 Dec 2022 05:01:55 +0000 (13:01 +0800)]
[AIX][BigArchive] Treat the archive is empty if the first child member offset is zero
If the archive contains free list and contains no member file, the buffer length doesn't equal to length of the header.
Reviewed By: Esme, DiggerLin, #powerpc
Differential Revision: https://reviews.llvm.org/D138986
Fangrui Song [Mon, 19 Dec 2022 04:28:55 +0000 (04:28 +0000)]
[mlir][python] llvm::Optional::value => operator*
And convert it to std::optional while updating.
Matt Arsenault [Sat, 29 Oct 2022 19:17:23 +0000 (12:17 -0700)]
PPC: Implement null target streamer
Roman Lebedev [Mon, 19 Dec 2022 02:17:03 +0000 (05:17 +0300)]
[InstCombine] `sinkNotIntoOtherHandOfLogicalOp()`: don't forget to re-set insert position
Several bots are unhappy, and this appears to be the reason:
we might be inserting into wrong basic block,
one that does not dominate the I.
Roman Lebedev [Mon, 19 Dec 2022 01:21:51 +0000 (04:21 +0300)]
[InstCombine] `sinkNotIntoOtherHandOfLogicalOp()`: allow extra invertible uses of hand-to-invert
Roman Lebedev [Mon, 19 Dec 2022 01:21:46 +0000 (04:21 +0300)]
[NFC][InstCombine] Improve test coverage for invertible extra uses of hands of logical op
While there, reduce bitwidth, we really don't care about testing i32 specifically.
Roman Lebedev [Sun, 18 Dec 2022 23:50:49 +0000 (02:50 +0300)]
[InstCombine] Support sinking `not` into logical operand with invertible hands
The important bit here is that we gracefully handle other uses,
iff they can be adapted to inversion.
I'll note, the previous logic was actively bad,
it increased instruction count since it didn't actually ensure
that the inversions happened.
Roman Lebedev [Sun, 18 Dec 2022 23:28:30 +0000 (02:28 +0300)]
[NFC][InstCombine] Add tests for sinking `not` into logical ops with hands with extra (but invertible) uses
Kazu Hirata [Sun, 18 Dec 2022 23:35:29 +0000 (15:35 -0800)]
[CodeGen] Include llvm/CodeGen/DFAPacketizer.h
This patch teaches MachinePipeliner.h to include
DFAPacketizer.h so that the header file is self contained.
Without this patch, a C++ source file that only includes
MachinePipeliner.h does not compile because the forward declaration of
DFAPacketizer is not enough for:
llvm::SmallVector<std::unique_ptr<DFAPacketizer>> DFAResources;
Kazu Hirata [Sun, 18 Dec 2022 23:12:30 +0000 (15:12 -0800)]
[CodeGen] Include MachineInstr.h
This patch teaches DbgEntityHistoryCalculator.h to include
MachineInstr.h so that the header file is self contained.
Without this patch, a C++ source file that only includes
DbgEntityHistoryCalculator.h does not compile because:
PointerIntPair<const MachineInstr *, 1, EntryKind> Instr;
wants to know the alignment of llvm::MachineInstr:
llvm/include/llvm/Support/PointerLikeTypeTraits.h:61:28: error:
invalid application of 'alignof' to an incomplete type
'llvm::MachineInstr'
detail::ConstantLog2<alignof(T)>::value;
^~~~~~~~~~
Roman Lebedev [Sun, 18 Dec 2022 21:44:26 +0000 (00:44 +0300)]
[InstCombine] Try to sink `not` of one operand of logical operation into another hand
Matches what we do for binary operations, but a special care needs
is needed to preserve operand order, as the logical operations
are not strictly commutative!
Roman Lebedev [Sun, 18 Dec 2022 20:06:21 +0000 (23:06 +0300)]
[NFC][InstCombine] Add tests with invertible hands of logical operators
Peter Rong [Sun, 18 Dec 2022 22:01:08 +0000 (14:01 -0800)]
Revert "[APSInt] Fix bug in APSInt mentioned in https://github.com/llvm/llvm-project/issues/59515"
This reverts commit
7859d6e79ca90df2f3f206192a1dfa89e3cb10f1.
Signed-off-by: Peter Rong <PeterRong96@gmail.com>
Nico Weber [Sun, 18 Dec 2022 21:57:20 +0000 (16:57 -0500)]
[gn] try porting
07af0e2d3e84 even more
Possibly fixes tests on Linux. This corresponds to
`export_executable_symbols_for_plugins` calls in CMake.
Peter Rong [Wed, 14 Dec 2022 22:42:38 +0000 (14:42 -0800)]
[APSInt] Fix bug in APSInt mentioned in https://github.com/llvm/llvm-project/issues/59515
Also provide a `tryExtValue()` API like APInt did in D139683
Reviewed By: RKSimon
Differential Revision: https://reviews.llvm.org/D140059
Roman Lebedev [Sun, 18 Dec 2022 21:10:47 +0000 (00:10 +0300)]
[InstCombine] Try to fold `not` into `cmp` iff other users of `cmp` are freely invertible
There is still some such patterns that require collaboration
of folds to handle,that we don't currently do.
Roman Lebedev [Sun, 18 Dec 2022 19:53:59 +0000 (22:53 +0300)]
[NFC][PatternMatching] Promote `m_LogicalOp` matchers into `PatternMatch.h`
Sergei Barannikov [Sun, 18 Dec 2022 20:12:05 +0000 (12:12 -0800)]
[MC] Use `MCRegister` instead of `unsigned` in `MCTargetAsmParser`
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D140273
Fangrui Song [Sun, 18 Dec 2022 20:07:43 +0000 (12:07 -0800)]
[CMake] Fix LoongArchTests -DBUILD_SHARED_LIBS=on builds
Similar to
1b9cd51d55b33cfaf68e21fa5396539ca54e5324
Krzysztof Parzyszek [Sun, 18 Dec 2022 19:19:40 +0000 (11:19 -0800)]
Revert "[clang] Convert OptionalFileEntryRefDegradesToFileEntryPtr to std::optional"
This reverts commit
8f0df9f3bbc6d7f3d5cbfd955c5ee4404c53a75d.
The Optional*RefDegradesTo*EntryPtr types want to keep the same size as
the underlying type, which std::optional doesn't guarantee. For use with
llvm::Optional, they define their own storage class, and there is no way
to do that in std::optional.
On top of that, that commit broke builds with older GCCs, where
std::optional was not trivially copyable (static_assert in the clang
sources was failing).
Mark de Wever [Sun, 18 Dec 2022 17:58:28 +0000 (18:58 +0100)]
[libc++][CI] Fixes build failures.
Some clang diagnostics have changed causing build failures.
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D140272
Florian Hahn [Sun, 18 Dec 2022 18:51:15 +0000 (18:51 +0000)]
[PoisonChecking] Add tests with selects.
This adds test coverage for a suggestion in D111643.
Matt Arsenault [Sun, 18 Dec 2022 18:00:24 +0000 (13:00 -0500)]
AMDGPU/GlobalISel: Use ptrtoint to legalize constant 32-bit addrspacecast
This was trying to merge 2 32-bit pointers into a 64-bit pointer. The
artifact combiner was assuming merges to pointers use scalar sources,
and ended up inserting invalid bitcast from a pointer to a scalar. It
should probably be a verifier error to have pointer merge sources with
a pointer result.
Fixes verifier errors with EXPENSIVE_CHECKS.
David Blaikie [Sun, 18 Dec 2022 17:46:01 +0000 (17:46 +0000)]
llvm-profgen: Fix use of stats to be under LLVM_ENABLE_STATS
This caused a -Wunused-variable warning in a without-assert+with-stats
build (because the stats were included but their use was not).
Stat use is meant to be gated by LLVM_ENABLE_STATS which can be set
independently of assertions.
Roman Lebedev [Sun, 18 Dec 2022 16:43:31 +0000 (19:43 +0300)]
[llvm-exegesis][X86] Explicitly not support `WRFSBASE` opcode.
We can't serialize if for latency measurements, and when measuring uops,
it crashes so hard even `CrashRecoveryContext` doesn't stop it.
Looks like *this* was the last crasher, now `--opcode-index=-1`
succeeds for all three benchmark modes here.
At least with Duplication repetitor.
Roman Lebedev [Sun, 18 Dec 2022 16:54:42 +0000 (19:54 +0300)]
[NFC][llvm-exegesis] Improve `getOpcodesOrDie()`
We already have opcode name -> opcode index map, use it.
Reserve memory where appropriate.
Roman Lebedev [Sun, 18 Dec 2022 16:39:45 +0000 (19:39 +0300)]
[llvm-exegesis] Benchmark: gracefully handle lack of configurations to run
Otherwise the progress meter would assert.
Guillaume Chatelet [Tue, 13 Dec 2022 15:47:26 +0000 (15:47 +0000)]
[libc] Make string functions buildable with GCC
Differential Revision: https://reviews.llvm.org/D139939
Guillaume Chatelet [Sun, 18 Dec 2022 14:54:21 +0000 (15:54 +0100)]
Use -Wstrict-prototypes with clang only
Roman Lebedev [Sun, 18 Dec 2022 14:49:34 +0000 (17:49 +0300)]
[llvm-exegesis] Fix 'min' repetition mode in presence of missing measurements
This was a regression from
17e202424c021fd903950fec7a8b6cca2d83abce.
Previously we'd gracefully handle missing measurements,
but that handling got accidentally lost during the code move,
and we'd assert.
What we want to do, is to discard all measurements (from all repetitors
in a given config) if any of them failed, but do append the snippet,
and do emit the empty measurement.
Roman Lebedev [Sun, 18 Dec 2022 14:36:32 +0000 (17:36 +0300)]
[NFC][llvm-exegesis] Benchmark: move DumpObjectToDisk handling into `runConfiguration()`
`getRunnableConfiguration()` may be executed in parallel,
and then this the output would become even less useful.
Nico Weber [Sun, 18 Dec 2022 14:07:53 +0000 (09:07 -0500)]
[gn] port
7d2c1150d31b better
Nicolas Vasilache [Sun, 18 Dec 2022 13:10:53 +0000 (05:10 -0800)]
[mlir][Linalg] NFC - Add C++ builder to TileOp
Sanjay Patel [Sun, 18 Dec 2022 13:13:21 +0000 (08:13 -0500)]
[InstCombine] fold flooring sdiv by power-of-2 to ashr
It's a bigger match than usual, but I have not found any
sub-patterns that reduce:
(X / DivC) + sext ((X & (SMin | (DivC - 1)) >u SMin) --> X >>s log2(DivC)
https://alive2.llvm.org/ce/z/MJzlhl
Fixes issue #55741
Sanjay Patel [Sun, 18 Dec 2022 13:04:15 +0000 (08:04 -0500)]
[InstCombine] add/adjust tests for flooring div; NFC
Matt Arsenault [Sat, 17 Dec 2022 21:49:04 +0000 (16:49 -0500)]
AMDGPU/R600: Special case addrspacecast lowering for null
Due to poor support for non-0 null pointers, clang always emits
addrspacecast from a null flat constant for private/local null. We can
trivially handle this case for old hardware.
Should fix issue 55679.
Matt Arsenault [Sat, 17 Dec 2022 21:24:38 +0000 (16:24 -0500)]
AMDGPU: Lower addrspacecast on gfx6
Fixes inconsistent handling of constant-32bit case. Turns out we can
lower all the casts just fine, it's just accessing the flat results
that's a problem.
Nico Weber [Sun, 18 Dec 2022 12:39:49 +0000 (07:39 -0500)]
Nico Weber [Sun, 18 Dec 2022 12:36:24 +0000 (07:36 -0500)]
[gn build] Port rest of
07af0e2d3e84
Test now passes, at least on macOS.
Kristina Bessonova [Sun, 18 Dec 2022 12:21:52 +0000 (14:21 +0200)]
[llvm-objdump][AArch64] Fix ADRP target label calculation
This patch makes ADRP target label address calculations the same as
label address calculations (see AArch64InstPrinter::printAdrpLabel()).
Otherwise the target label looks misleading as ADRP's immediate offset is,
actually, not an offset to this PC, but an offset to the current PC's
page address in pages.
See for example, `llvm-objdump/ELF/AArch64/pcrel-address.yaml`.
Before this patch the target label `<_start+0x80>` represents the
address `0x200100 + 0x80` while `0x220000` is expected.
Note that with this patch llvm-objdump output matches GNU objdump.
Reviewed By: simon_tatham
Differential Revision: https://reviews.llvm.org/D139407
Nico Weber [Sun, 18 Dec 2022 12:15:02 +0000 (07:15 -0500)]
[gn build] Port some of
07af0e2d3e84
Enough to get the build fixed, but doesn't add the plugin yet, so the test
fails for now.
Nico Weber [Sun, 18 Dec 2022 12:14:16 +0000 (07:14 -0500)]
Sanjay Patel [Sun, 18 Dec 2022 11:55:37 +0000 (06:55 -0500)]
[InstCombine] canonicalize insertelement order based on index
This puts lower insert indexes before higher. This is independent
of endian, so it requires an adjustment to a fold added with
4446f71ce392, but it makes that fold more robust.
That's also where this patch was suggested - D139668.
This matches what we already do in DAGCombiner, but there is one
more constraint because there's an existing canonicalization for
insert-of-scalar-constant. I'm not sure if that is still needed,
so it may be adjusted/removed as a follow-up.
Sanjay Patel [Sun, 18 Dec 2022 11:48:09 +0000 (06:48 -0500)]
[InstCombine] add tests for flooring division; NFC
issue #57741
Sanjay Patel [Thu, 15 Dec 2022 21:32:52 +0000 (16:32 -0500)]
[InstCombine] avoid IR values named 'tmp' in tests; NFC
The auto-generation CHECK script warns of possible conflict on these files.
ibricchi [Sun, 18 Dec 2022 09:20:24 +0000 (01:20 -0800)]
[InlineAdvisor] Fix dependencies for InlineAdvisorPlugin
Reviewed By: akyrtzi
Differential Revision: https://reviews.llvm.org/D140266
Iain Sandoe [Sat, 24 Sep 2022 15:01:44 +0000 (16:01 +0100)]
[C++20][Modules] Elide unused guard variables in Itanium ABI module initializers.
For the Itanium ABI, we emit an initializer for each module. This is responsible
for handling initialization of global vars. Relates to P1874R1.
The initializer has a known mangling and is automatically called from any TU that
imports a module. Since, at present, the importer has no way to determine that an
imported module does not require an initializer, we generate the initializer for
all cases (even when it is empty).
Initializers must be run once, with the ordering guaranteed by the import graph
and this is ensured in the current code by addition of a guard variable.
In the case that a module has no requirement for global initializers, and also does
not import any other modules, we can elide the guard variable.
Differential Revision: https://reviews.llvm.org/D134589
Kazu Hirata [Sun, 18 Dec 2022 08:28:54 +0000 (00:28 -0800)]
Include <optional> instead of "llvm/ADT/Optional.h"
This is part of an effort to migrate from llvm::Optional to
std::optional:
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
Sameer Sahasrabuddhe [Sun, 18 Dec 2022 05:21:20 +0000 (10:51 +0530)]
[AAPointerInfo] handle multiple offsets in PHI
Previously reverted in
8b446ea2ba39e406bcf940ea35d6efb4bb9afe95
Reapplying because this commit is NOT DEPENDENT on the reverted commit
fc21f2d7bae2e0be630470cc7ca9323ed5859892, which broke the ASAN buildbot.
See https://reviews.llvm.org/rGfc21f2d7bae2e0be630470cc7ca9323ed5859892 for
more information.
The arguments to a PHI may represent a recurrence by eventually using the output
of the PHI itself. This is now handled by checking for cycles in the control
flow. If a PHI is not in a recurrence, it is now able to report multiple offsets
instead of conservatively reporting unknown.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D138991
Vy Nguyen [Sun, 18 Dec 2022 03:53:44 +0000 (22:53 -0500)]
Reland 3nd attempt: [lld-macho] Fix bug in reading cpuSubType field.
This reverts commit
09c5aab7f88178c1af92de0b00417416da9db6c1.
New changes:
Temporarily skip checking the output bundle's cpu/cpu-subtype
Suspected there's a bug in selecting targets which caused the produced bundle
to be arm64 bundle (even though it was specifically linked with -arch x86_64).
The current test that link succeeded should be sufficient, because
it would have failed with "unable to find matching tagets" prior to this patch.
Differential Revision: https://reviews.llvm.org/D139572
River Riddle [Sun, 18 Dec 2022 03:54:11 +0000 (19:54 -0800)]
[mlir] Add an overload of parseOptionalAttribute for SymbolRefAttr
Avoids parsing other types of attributes when checking if there is
a SymbolRefAttr.
Johannes Doerfert [Sun, 18 Dec 2022 00:22:22 +0000 (16:22 -0800)]
[Attributor][FIX] Ensure to delete all AAs
Before we might have missed calling the destructor on an abstract
attribute if it was created outside the seeding or update phase.
All AAs are now in the AAMap and we can use it to delete them all.
Dinar Temirbulatov [Sun, 18 Dec 2022 01:27:03 +0000 (01:27 +0000)]
[AArch64][SVE] Allow to lower WHILEop with constant operands to PTRUE
This allows it to fold WHILEop with constant operand to PTRUE instruction in
the case given range is fitted to predicate format. Also, this change
fixes the unsigned overflow error introduced in D137547 for WHILELO lowering.
Differential Revision: https://reviews.llvm.org/D139068
Peter Klausler [Sat, 17 Dec 2022 23:25:45 +0000 (15:25 -0800)]
[flang] Fix crash in name resolution
In an error recovery situation, the name resolution code for a
SELECT TYPE statement must check the presence of an optional
expression before calling GetType() upon it.
Differential Revision: https://reviews.llvm.org/D140153
Roman Lebedev [Sat, 17 Dec 2022 21:28:52 +0000 (00:28 +0300)]
[NFC][llvm-exegesis] Extract `runBenchmarkConfigurations()` out of `benchmarkMain()`
`benchmarkMain()` is already bigger than it should be,
let's extract the important chunk before making it even larger.
Roman Lebedev [Sun, 18 Dec 2022 01:15:04 +0000 (04:15 +0300)]
[NFC][llvm-exegesis] `BenchmarkRunner`: split `runConfiguration()` into `getRunnableConfiguration()` + `runConfiguration()`
We can run as many `getRunnableConfiguration()` in parallel as we want,
but `runConfiguration()` must be run *completely* standalone from everything.
This is a step towards enabling threading.
Roman Lebedev [Sat, 17 Dec 2022 20:48:57 +0000 (23:48 +0300)]
[NFC][llvm-exegesis] `InstructionBenchmark`: only allow move constructor
We don't ever legitimately need to copy it, so let's make that explicit
Fangrui Song [Sun, 18 Dec 2022 01:15:25 +0000 (01:15 +0000)]
[lldb] Remove redundant .c_str() and .get() calls
Removing .c_str() has a semantics difference, but the use scenarios
likely do not matter as we don't have NUL in the strings.
Roman Lebedev [Sun, 18 Dec 2022 00:44:13 +0000 (03:44 +0300)]
[llvm-exegesis] Unbreak `--benchmarks-file=<f>`
I'm absolutely flabbergasted by this.
I was absolutely sure this worked.
But apparently not.
When outputting to the file, we'd write a single `InstructionBenchmark`
to it, and then close the file. And for the next `InstructionBenchmark`,
we'd reopen the file, truncating it in process,
and thus the first `InstructionBenchmark` would be gone...
Gregory Alfonso [Sun, 18 Dec 2022 00:33:53 +0000 (00:33 +0000)]
Remove redundant .c_str() and .get() calls
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D139485
Khem Raj [Sun, 18 Dec 2022 00:13:29 +0000 (00:13 +0000)]
cmake: Enable 64bit off_t on 32bit glibc systems
Pass -D_FILE_OFFSET_BITS=64 to compiler flags on 32bit glibc based
systems. This will make sure that 64bit versions of LFS functions are
used e.g. seek will behave same as lseek64. Also revert [1] partially
because this added a cmake test to detect lseek64 but then forgot to
pass the needed macro to actual compile, this test was incomplete too
since libc implementations like musl has 64bit off_t by default on 32bit
systems and does not bundle[2] -D_LARGEFILE64_SOURCE under -D_GNU_SOURCE
like glibc, which means the compile now fails on musl because the cmake
check passes but we do not have _LARGEFILE64_SOURCE defined. Using the
*64 function was transitional anyways so use -D_FILE_OFFSET_BITS=64
instead
[1] https://github.com/llvm/llvm-project/commit/
8db7e5e4eed4c4e697dc3164f2c9351d8c3e942b
[2] https://git.musl-libc.org/cgit/musl/commit/?id=
25e6fee27f4a293728dd15b659170e7b9c7db9bc
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D139752
Peter Klausler [Sat, 17 Dec 2022 18:48:27 +0000 (10:48 -0800)]
[flang] Check constant arguments to bit manipulation intrinsics even if not foldable
When some arguments that specify bit positions, shift counts, and field sizes are
constant at compilation time, but other arguments are not constant, the compiler
should still validate the constant ones. In the current sources, validation is
only performed for intrinsic references that can be folded to constants.
Differential Revision: https://reviews.llvm.org/D140152
Krzysztof Parzyszek [Sat, 17 Dec 2022 21:57:30 +0000 (13:57 -0800)]
[clang] Convert OptionalFileEntryRefDegradesToFileEntryPtr to std::optional
Markus Böck [Sat, 17 Dec 2022 21:42:30 +0000 (22:42 +0100)]
[llvm][ADT] Allow returning `std::nullopt` in TypeSwitch
Returning `std::nullopt` from the case of a `TypeSwitch` yields broken results, by either falling through to another case, or falling of the switch entirely and hitting an assertion. This is simply due to the use of `operator=` of what is now `std::optional`, which has an overload specifically for `std::nullopt`, causing the internal optional, used for the `TypeSwitch` result to be reset, instead of a value being constructed from the `std::nullopt`.
The fix is to simply use the `emplace` method of `std::optional`, causing a value to always be constructed from the value returned by the case function.
Differential Revision: https://reviews.llvm.org/D140265