Fangrui Song [Sun, 17 Jul 2022 07:52:30 +0000 (00:52 -0700)]
[test] Remove duplicate -sample-profile tests
When -passes=sample-profile is tested, -sample-profile is redundant.
Xi Ruoyao [Sun, 17 Jul 2022 07:45:15 +0000 (00:45 -0700)]
[sanitizer] Compare against the alignment of the latter range trying to find consecutive TLS blocks in GetStaticTlsBoundary
On a mips64el-linux-gnu system, the dynamic linker arranges TLS blocks
like:
[0] 0xfff7fe9680..0xfff7fe9684, align = 0x4
[1] 0xfff7fe9688..0xfff7fe96a8, align = 0x8
[2] 0xfff7fe96c0..0xfff7fe9e60, align = 0x40
[3] 0xfff7fe9e60..0xfff7fe9ef8, align = 0x8
Note that the dynamic linker can only put [1] at 0xfff7fe9688, not
0xfff7fe9684 or it will be misaligned. But we were comparing the
distance between two blocks with the alignment of the previous range,
causing GetStaticTlsBoundary fail to merge the consecutive blocks.
Compare against the alignment of the latter range to fix the issue.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D129112
Kazu Hirata [Sun, 17 Jul 2022 06:26:34 +0000 (23:26 -0700)]
[Analysis] Qualify auto variables in for loops (NFC)
owenca [Sun, 17 Jul 2022 03:57:44 +0000 (20:57 -0700)]
[llvm] Wrap multi-statement macro definitions with do ... while (0)
zhongyunde [Sun, 17 Jul 2022 02:47:23 +0000 (10:47 +0800)]
[IndVars] Directly use unsigned integer induction for FPToUI/FPToSI of float induction
Depend on D129358
Reviewed By: nikic
Differential Revision: https://reviews.llvm.org/D129756
Stella Laurenzo [Sun, 17 Jul 2022 01:18:43 +0000 (18:18 -0700)]
[NFC] Remove obsolete all_passes_registration from integration tests.
After https://reviews.llvm.org/D128593 this is not needed (and not available). Was missed in original landing because integration tests do not run on pre-merge.
Stella Laurenzo [Sat, 16 Jul 2022 23:09:03 +0000 (16:09 -0700)]
[mlir] Overhaul C/Python registration APIs to properly scope registration/loading activities.
Since the very first commits, the Python and C MLIR APIs have had mis-placed registration/load functionality for dialects, extensions, etc. This was done pragmatically in order to get bootstrapped and then just grew in. Downstreams largely bypass and do their own thing by providing various APIs to register things they need. Meanwhile, the C++ APIs have stabilized around this and it would make sense to follow suit.
The thing we have observed in canonical usage by downstreams is that each downstream tends to have native entry points that configure its installation to its preferences with one-stop APIs. This patch leans in to this approach with `RegisterEverything.h` and `mlir._mlir_libs._mlirRegisterEverything` being the one-stop entry points for the "upstream packages". The `_mlir_libs.__init__.py` now allows customization of the environment and Context by adding "initialization modules" to the `_mlir_libs` package. If present, `_mlirRegisterEverything` is treated as such a module. Others can be added by downstreams by adding a `_site_initialize_{i}.py` module, where '{i}' is a number starting with zero. The number will be incremented and corresponding module loaded until one is not found. Initialization modules can:
* Perform load time customization to the global environment (i.e. registering passes, hooks, etc).
* Define a `register_dialects(registry: DialectRegistry)` function that can extend the `DialectRegistry` that will be used to bootstrap the `Context`.
* Define a `context_init_hook(context: Context)` function that will be added to a list of callbacks which will be invoked after dialect registration during `Context` initialization.
Note that the `MLIRPythonExtension.RegisterEverything` is not included by default when building a downstream (its corresponding behavior was prior). For downstreams which need the default MLIR initialization to take place, they must add this back in to their Python CMake build just like they add their own components (i.e. to `add_mlir_python_common_capi_library` and `add_mlir_python_modules`). It is perfectly valid to not do this, in which case, only the things explicitly depended on and initialized by downstreams will be built/packaged. If the downstream has not been set up for this, it is recommended to simply add this back for the time being and pay the build time/package size cost.
CMake changes:
* `MLIRCAPIRegistration` -> `MLIRCAPIRegisterEverything` (renamed to signify what it does and force an evaluation: a number of places were incidentally linking this very expensive target)
* `MLIRPythonSoure.Passes` removed (without replacement: just drop)
* `MLIRPythonExtension.AllPassesRegistration` removed (without replacement: just drop)
* `MLIRPythonExtension.Conversions` removed (without replacement: just drop)
* `MLIRPythonExtension.Transforms` removed (without replacement: just drop)
Header changes:
* `mlir-c/Registration.h` is deleted. Dialect registration functionality is now in `IR.h`. Registration of upstream features are in `mlir-c/RegisterEverything.h`. When updating MLIR and a couple of downstreams, I found that proper usage was commingled so required making a choice vs just blind S&R.
Python APIs removed:
* mlir.transforms and mlir.conversions (previously only had an __init__.py which indirectly triggered `mlirRegisterTransformsPasses()` and `mlirRegisterConversionPasses()` respectively). Downstream impact: Remove these imports if present (they now happen as part of default initialization).
* mlir._mlir_libs._all_passes_registration, mlir._mlir_libs._mlirTransforms, mlir._mlir_libs._mlirConversions. Downstream impact: None expected (these were internally used).
C-APIs changed:
* mlirRegisterAllDialects(MlirContext) now takes an MlirDialectRegistry instead. It also used to trigger loading of all dialects, which was already marked with a TODO to remove -- it no longer does, and for direct use, dialects must be explicitly loaded. Downstream impact: Direct C-API users must ensure that needed dialects are loaded or call `mlirContextLoadAllAvailableDialects(MlirContext)` to emulate the prior behavior. Also see the `ir.c` test case (e.g. ` mlirContextGetOrLoadDialect(ctx, mlirStringRefCreateFromCString("func"));`).
* mlirDialectHandle* APIs were moved from Registration.h (which now is restricted to just global/upstream registration) to IR.h, arguably where it should have been. Downstream impact: include correct header (likely already doing so).
C-APIs added:
* mlirContextLoadAllAvailableDialects(MlirContext): Corresponds to C++ API with the same purpose.
Python APIs added:
* mlir.ir.DialectRegistry: Mapping for an MlirDialectRegistry.
* mlir.ir.Context.append_dialect_registry(MlirDialectRegistry)
* mlir.ir.Context.load_all_available_dialects()
* mlir._mlir_libs._mlirAllRegistration: New native extension that exposes a `register_dialects(MlirDialectRegistry)` entry point and performs all upstream pass/conversion/transforms registration on init. In this first step, we eagerly load this as part of the __init__.py and use it to monkey patch the Context to emulate prior behavior.
* Type caster and capsule support for MlirDialectRegistry
This should make it possible to build downstream Python dialects that only depend on a subset of MLIR. See: https://github.com/llvm/llvm-project/issues/56037
Here is an example PR, minimally adapting IREE to these changes: https://github.com/iree-org/iree/pull/9638/files In this situation, IREE is opting to not link everything, since it is already configuring the Context to its liking. For projects that would just like to not think about it and pull in everything, add `MLIRPythonExtension.RegisterEverything` to the list of Python sources getting built, and the old behavior will continue.
Reviewed By: mehdi_amini, ftynse
Differential Revision: https://reviews.llvm.org/D128593
Fabian Parzefall [Sun, 17 Jul 2022 00:23:21 +0000 (17:23 -0700)]
[BOLT] Add function layout class
This patch adds a dedicated class to keep track of each function's
layout. It also lays the groundwork for splitting functions into
multiple fragments (as opposed to a strict hot/cold split).
Reviewed By: maksfb
Differential Revision: https://reviews.llvm.org/D129518
Kazu Hirata [Sun, 17 Jul 2022 00:19:27 +0000 (17:19 -0700)]
Revert "[Support] Remove redundant declaration setCurrentDebugTypes (NFC)"
This reverts commit
52232abc230435d4c1e1273d4b857a11f2c7b45b.
This patch breaks builds when NDEBUG is defined.
Brad Smith [Sat, 16 Jul 2022 23:36:52 +0000 (19:36 -0400)]
[Driver] Don't passs --dynamic-linker in -r mode
No behavior change as GNU ld/gold/ld.lld ignore --dynamic-linker in -r mode.
This change makes the intention clearer as we already suppress --dynamic-linker
for -shared, -static, and -static-pie.
Reviewed by: MaskRay, phosek
Differential Revision: https://reviews.llvm.org/D129714
Vitaly Buka [Sat, 16 Jul 2022 23:37:28 +0000 (16:37 -0700)]
[test] Fix memory leak in validateTargetProfile
Unfortunatly fixing leak expose use-after-free if delete more then one
Compilation for the same Driver, so I am changing validateTargetProfile
to create own Driver each time.
The test was added by D122865.
Brad Smith [Sat, 16 Jul 2022 23:06:50 +0000 (19:06 -0400)]
[libcxx] Replace remaining _LIBCPP_INLINE_VISIBILITY in __support
Replace remaining _LIBCPP_INLINE_VISIBILITY in __support with _LIBCPP_HIDE_FROM_ABI.
Reviewed by: Mordante
Differential Revision: https://reviews.llvm.org/D129922
Kazu Hirata [Sat, 16 Jul 2022 22:50:18 +0000 (15:50 -0700)]
[Support] Remove redundant declaration setCurrentDebugTypes (NFC)
The function is declared in llvm/include/llvm/Support/Debug.h.
Identified with readability-redundant-declaration.
Kazu Hirata [Sat, 16 Jul 2022 22:43:34 +0000 (15:43 -0700)]
[CodeGen] Remove redundant declaration createGreedyRegisterAllocator (NFC)
The function is declared in llvm/include/llvm/CodeGen/Passes.h.
Identified with readability-redundant-declaration.
Kazu Hirata [Sat, 16 Jul 2022 22:43:33 +0000 (15:43 -0700)]
[CodeGen] Use RegClassFilterFunc where appropriate (NFC)
Xing Xue [Sat, 16 Jul 2022 22:11:04 +0000 (18:11 -0400)]
[libc++][AIX] Correct the definition of __regex_word for AIX
Summary:
The patch changes the definition of __regex_word to 0x8000 for AIX because the current definition 0x80 clashes with ctype_base::print (_ISPRINT is defined as 0x80 in AIX ctype.h).
Reviewed by: Mordante, hubert.reinterpretcast, libc++
Differential Revision: https://reviews.llvm.org/D129862
Vitaly Buka [Sat, 16 Jul 2022 21:03:22 +0000 (14:03 -0700)]
[test] Don't leak DerivedArgList in test
Sanjay Patel [Sat, 16 Jul 2022 19:59:49 +0000 (15:59 -0400)]
[SDAG] narrow truncated sign_extend_inreg
trunc (sign_ext_inreg X, iM) to iN --> sign_ext_inreg (trunc X to iN), iM
There are improvements on existing tests from this, and there are a pair
of large regressions in D127115 for Thumb2 caused by not folding this
pattern.
Differential Revision: https://reviews.llvm.org/D129890
Kazu Hirata [Sat, 16 Jul 2022 20:23:32 +0000 (13:23 -0700)]
[Analysis] Remove isArithmeticRecurrenceKind
The last use was removed on Jul 30, 2021 in commit
9d355949937038c32c7608ebb558bbc3984f6340.
owenca [Sat, 16 Jul 2022 06:17:42 +0000 (23:17 -0700)]
[clang-format] Never remove braces in macro definitions
Fixes #56559.
Differential Revision: https://reviews.llvm.org/D129921
Daniel Bertalan [Wed, 13 Jul 2022 23:17:48 +0000 (01:17 +0200)]
[lld-macho] Handle filename being passed in -lto_object_path
Clang passes a filename rather than a directory in -lto_object_path when
using FullLTO. Previously, it was always treated it as a directory, so
lld would crash when it attempted to create temporary files inside it.
Fixes #54805
Differential Revision: https://reviews.llvm.org/D129705
Kazu Hirata [Sat, 16 Jul 2022 19:44:35 +0000 (12:44 -0700)]
[AMDGPU] Use default member initialization (NFC)
Identified with modernize-use-default-member-init.
Vitaly Buka [Sat, 16 Jul 2022 19:40:41 +0000 (12:40 -0700)]
[test] Fix leak in test
Fangrui Song [Sat, 16 Jul 2022 18:42:35 +0000 (11:42 -0700)]
[PGO][InstrProf][test] Convert to opaque pointers and fix some stale tests
Kazu Hirata [Sat, 16 Jul 2022 17:56:20 +0000 (10:56 -0700)]
[AMDGPU] Declare TableRef in terms of ArrayRef (NFC)
Igor Zhukov [Sat, 16 Jul 2022 17:47:20 +0000 (19:47 +0200)]
Visual C++ doesn't support C99 compound literal
Fix test libcxx/test/std/containers/sequences/array/array.creation/to_array.pass.cpp
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D129923
Igor Zhukov [Sat, 16 Jul 2022 17:40:53 +0000 (19:40 +0200)]
Tests ignore the return value of sto{meow}, triggering nodiscard warnings in MS STL
Reviewed By: #libc, Mordante
Differential Revision: https://reviews.llvm.org/D129925
Simon Pilgrim [Sat, 16 Jul 2022 16:32:53 +0000 (17:32 +0100)]
Revert rG14364200821f7b2d97edf6e78160c514800d3ec6 "[ARM] Regenerate reg_sequence.ll test checks"
Breaks on some apple machines
Simon Pilgrim [Sat, 16 Jul 2022 16:31:50 +0000 (17:31 +0100)]
[SystemZ] Add funnel shift test coverage
Based off conversations on Issue #56495
Florian Hahn [Sat, 16 Jul 2022 16:24:07 +0000 (17:24 +0100)]
[LV] Avoid creating new run-time VF expression for each runtime checks.
At the moment, the cost of runtime checks for scalable vectors is
overestimated due to creating separate vscale * VF expressions for each
check. Instead re-use the first expression.
Krystian Kuzniarek [Thu, 28 Apr 2022 13:40:09 +0000 (15:40 +0200)]
[clang-format][docs] Fix incorrect 'clang-format 7' option markers
Introduced by
23a5090c6, some style option markers indicated
'clang-format 7', though their respective options were available in
different releases.
Simon Pilgrim [Sat, 16 Jul 2022 16:10:35 +0000 (17:10 +0100)]
[ARM] Regenerate reg_sequence.ll test checks
Simon Pilgrim [Sat, 16 Jul 2022 15:37:31 +0000 (16:37 +0100)]
[DAG] visitINSERT_VECTOR_ELT - refactor BUILD_VECTOR creation from INSERT_VECTOR_ELT chain.
D127595 added the ability to recurse up a (one-use) INSERT_VECTOR_ELT chain to create a BUILD_VECTOR before other combines manage to break the chain, something that is particularly bad in D127115.
The patch generalises this so it doesn't have to build the chain starting from the last element insertion, instead it can now start from any insertion and will recurse up the chain until it finds all elements or finds a UNDEF/BUILD_VECTOR/SCALAR_TO_VECTOR which represents that start of the chain.
Fixes several regressions in D127115
Simon Pilgrim [Sat, 16 Jul 2022 15:20:49 +0000 (16:20 +0100)]
[DAG] visitINSERT_VECTOR_ELT - remove duplicate VT.getVectorNumElements() call. NFC.
Tim Besard [Sat, 16 Jul 2022 14:34:42 +0000 (10:34 -0400)]
Don't sink ptrtoint/inttoptr sequences into non-noop addrspacecasts.
In https://reviews.llvm.org/D30114, support for mismatching address
spaces was introduced to CodeGenPrepare's optimizeMemoryInst, using
addrspacecast as it was argued that only no-op addrspacecasts would be
considered when constructing the address mode. However, by doing
inttoptr/ptrtoint, it's possible to get CGP to emit an addrspace
that's not actually no-op, introducing a miscompilation:
define void @kernel(i8* %julia_ptr) {
%intptr = ptrtoint i8* %julia_ptr to i64
%ptr = inttoptr i64 %intptr to i32 addrspace(3)*
br label %end
end:
store atomic i32 1, i32 addrspace(3)* %ptr unordered, align 4
ret void
}
Gets compiled to:
define void @kernel(i8* %julia_ptr) {
end:
%0 = addrspacecast i8* %julia_ptr to i32 addrspace(3)*
store atomic i32 1, i32 addrspace(3)* %0 unordered, align 4
ret void
}
In the case of NVPTX, this introduces a cvta.to.shared, whereas
leaving out the %end block and branch doesn't trigger this
optimization. This results in illegal memory accesses as seen in
https://github.com/JuliaGPU/CUDA.jl/issues/558
In this change, I introduced a check before doing the pointer cast
that verifies address spaces are the same. If not, it emits a
ptrtoint/inttoptr combination to get a no-op cast between address
spaces. I decided against disallowing ptrtoint/inttoptr with
non-default AS in matchOperationAddr, because now its still possible
to look through multiple sequences of them that ultimately do not
result in a address space mismatch (i.e. the second lit test).
Simon Pilgrim [Sat, 16 Jul 2022 14:27:41 +0000 (15:27 +0100)]
[AArch64] Regenerate arm64-vector-ldst.ll test checks
Simon Pilgrim [Sat, 16 Jul 2022 14:26:51 +0000 (15:26 +0100)]
[AArch64] Regenerate arm64-neon-simd-ldst-one.ll test checks
Simon Pilgrim [Sat, 16 Jul 2022 14:25:43 +0000 (15:25 +0100)]
[AArch64] Regenerate arm64-vmax.ll test checks
Simon Pilgrim [Sat, 16 Jul 2022 14:24:53 +0000 (15:24 +0100)]
[AArch64] Regenerate arm64-mul.ll test checks
Markus Böck [Sat, 16 Jul 2022 12:38:53 +0000 (14:38 +0200)]
[mlir][NFC] Fully qualify typenames in SymbolInterfaces.td
David Green [Sat, 16 Jul 2022 12:23:39 +0000 (13:23 +0100)]
[VectorCombine] Only consider shuffle uses with the same type.
The backend getShuffleCosts do not currently handle shuffles that change
size very well. Limit the shuffles we collect to the same type to make
sure they do not cause issues as reported in D128732.
Simon Pilgrim [Sat, 16 Jul 2022 10:48:41 +0000 (11:48 +0100)]
Fix signed/unsigned mismatch
Simon Pilgrim [Sat, 16 Jul 2022 10:38:19 +0000 (11:38 +0100)]
[DAG] Canonicalize non-inlane shuffle -> AND if all non-inlane referenced elements are known zero
As mentioned on D127115, this patch that attempts to recognise shuffle masks that could be simplified to a AND mask - we already have a similar transform that will fold AND -> 'clear mask' shuffle, but this patch handles cases where the referenced elements are not from the same lane indices but are known to be zero.
Differential Revision: https://reviews.llvm.org/D129150
Tim Besard [Sat, 16 Jul 2022 07:48:30 +0000 (10:48 +0300)]
[MC] Avoid UAF in WinCOFFObjectWriter with weak symbols.
When using weak symbols, the WinCOFFObjectWriter keeps a list (`WeakDefaults`)
that's used to make names unique. This list should be reset when the object
writer is reset, because otherwise reuse of the object writer can result in
freed symbols being accessed. With some added output, this becomes clear when
using `llc` in `--run-twice` mode:
```
$ ./llc --compile-twice -mtriple=x86_64-pc-win32 trivial.ll -filetype=obj
DefineSymbol::WeakDefaults
- .weak.foo.default
- .weak.bar.default
DefineSymbol::WeakDefaults
- .weak.foo.default
- áÑJij⌂ p§┼Ø┐☺
- .debug_macinfo.dw
- .weak.bar.default
```
This does not seem to leak into the output object file though, so I couldn't
come up with a test. I added one that just does `--run-twice` (and verified
that it does access freed memory), which should result in detecting the
invalid memory accesses when running under ASAN.
Observed in a Julia PR where we started using weak symbols:
https://github.com/JuliaLang/julia/pull/45649
Reviewed By: mstorsjo
Differential Revision: https://reviews.llvm.org/D129840
Simon Pilgrim [Sat, 16 Jul 2022 10:00:02 +0000 (11:00 +0100)]
[DAG] combineShiftAnd1ToBitTest - match "and (srl (not X), C)), 1 --> (and X, 1<<C) == 0" patterns
combineShiftAnd1ToBitTest already matches "and (not (srl X, C)), 1 --> (and X, 1<<C) == 0" patterns, but we can end up with situations where the not is before the shift.
Part of some yak shaving for D127115 to generalise the "xor (X >> ShiftC), XorC --> (not X) >> ShiftC" fold.
Markus Böck [Sat, 16 Jul 2022 08:55:49 +0000 (10:55 +0200)]
[mlir][LLVM] Add OpBuilder for opaque pointer GEPs without struct indices
An OpBuilder already exists for GEPs that does not have any struct indices for existing typed pointers, but no such builder exists for GEPs utilizing opaque pointers that has an explicit `basePtrType`.
Differential Revision: https://reviews.llvm.org/D129376
Fangrui Song [Sat, 16 Jul 2022 08:35:56 +0000 (01:35 -0700)]
[LegacyPM] Remove ControlHeightReductionLegacyPass
This pass tries to reduce the number of conditional branches in the hot path
based on profile. It's mostly a no-op after legacy PGO passes are moved.
Fangrui Song [Sat, 16 Jul 2022 08:26:40 +0000 (01:26 -0700)]
[LegacyPM] Remove createInstrProfilingLegacyPass
Follow the steps of removing non-core instrumentation passes like PGO.
Fangrui Song [Sat, 16 Jul 2022 08:21:11 +0000 (01:21 -0700)]
[test] Migrate PGO related -instrprof tests to new PM
Fangrui Song [Sat, 16 Jul 2022 08:10:39 +0000 (01:10 -0700)]
[test] Migrate FunctionImport/cg_profile.ll to new PM
Fangrui Song [Sat, 16 Jul 2022 08:10:08 +0000 (01:10 -0700)]
[test] Migrate legacy InstrProfiling tests to new PM
Kazu Hirata [Sat, 16 Jul 2022 07:51:54 +0000 (00:51 -0700)]
[flang] Use value_or (NFC)
Fangrui Song [Sat, 16 Jul 2022 07:39:55 +0000 (00:39 -0700)]
[LegacyPM] Remove CGProfileLegacyPass
It's mostly a no-op after I removed legacy PGO passes in D123834.
Itay Bookstein [Fri, 15 Jul 2022 20:30:57 +0000 (23:30 +0300)]
[SDAG] Add test for DAGCombiner multiple result commutative CSE
This commit adds a test for DAGCombiner commutative CSE on
nodes with multiple results (UMUL_LOHI). In this commit it
asserts the lack of CSE, a later commit will demonstrate
the CSE in the changed assertions.
Signed-off-by: Itay Bookstein <ibookstein@gmail.com>
Reviewed By: barannikov88
Differential Revision: https://reviews.llvm.org/D129905
Matthias Springer [Fri, 15 Jul 2022 06:17:50 +0000 (08:17 +0200)]
[mli][sparse] Remove manual dense dealloc from test case
Differential Revision: https://reviews.llvm.org/D129834
Uday Bondhugula [Sat, 16 Jul 2022 07:21:55 +0000 (12:51 +0530)]
[MLIR] Clean up checks for alloc-like ops in analysis
Clean up checks for alloc-like ops in analysis. Use the analysis
utility to properly check for the desired kind of effects. The previous
locality utility worked for all practical purposes but wasn't sound and
was locally duplicate code. Instead, use mlir::hasSingleEffect.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D129439
Kazu Hirata [Sat, 16 Jul 2022 07:24:02 +0000 (00:24 -0700)]
[flang] Use *X instead of X.getValue() (NFC)
Per Flang C++ Style Guide, this patch replaces X.getValue() with *X
where *X is protected by a presence test.
Uday Bondhugula [Sat, 16 Jul 2022 07:09:24 +0000 (12:39 +0530)]
[MLIR] NFC. Clean up logic of hasSingleEffect
Clean up conditional logic of hasSingleEffect. NFC.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D129438
Kazu Hirata [Sat, 16 Jul 2022 06:58:11 +0000 (23:58 -0700)]
Use drop_begin (NFC)
Nimish Mishra [Sat, 16 Jul 2022 07:20:19 +0000 (12:50 +0530)]
[flang][OpenMP] Fix warning due to uninitialized pointer dereference during atomic update lowering
Reviewed By: kiranchandramohan, kazu
Differential Revision: https://reviews.llvm.org/D129914
Stella Laurenzo [Sat, 16 Jul 2022 04:03:04 +0000 (21:03 -0700)]
Example:
```
// -----// IR Dump Before LowerLinalgMicrokernels (iree-vmvx-lower-linalg-microkernels) //----- //
```
I've been meaning to suggest this for a long time, and I think the only reason we don't have it is because we didn't used to have the `getArgument()` handy when printing these comments. When debugging or putting a pipeline together based on such dumps, I often find myself grepping for the argument name of the pass (which is often related but not universally).
Kazu Hirata [Sat, 16 Jul 2022 06:24:59 +0000 (23:24 -0700)]
Use drop_begin (NFC)
bzcheeseman [Sun, 10 Jul 2022 15:27:45 +0000 (08:27 -0700)]
[MLIR][Liveness] Add `currentlyLiveValues`, a way to get a set of values that are live as of a given operation.
This change allows the user of LivenessBlockInfo to specify an op within the block and get a set of all values that are live as of that op. Semantically it relies on having a dominance-based region that has ordered operations. For DFG regions, computing liveness statically this way doesn't really make sense, it likely needs to be done at runtime.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D129447
Rainer Orth [Sat, 16 Jul 2022 04:59:00 +0000 (06:59 +0200)]
[sanitizer_common] Several Solaris procmaps fixes
Since the introduction of GoogleTest sharding in D122251
<https://reviews.llvm.org/D122251>, some of the Solaris sanitizer tests
have been running extremly long (up to an hour) while they took mere
seconds before. Initial investigation suggests that massive lock
contention in Solaris procfs is involved here.
However, there's an easy way to somewhat reduce the impact: while the
current `ReadProcMaps` uses `ReadFileToBuffer` to read `/proc/self/xmap`,
that function primarily caters to Linux procfs reporting file sizes of 0
while the size on Solaris is accurate. This patch makes use of that,
reducing the number of syscalls involved and reducing the runtime of
affected tests by a factor of 4.
Besides, it handles shared mappings and doesn't call `readlink` for unnamed
map entries.
Tested on `sparcv9-sun-solaris2.11` and `amd64-pc-solaris2.11`.
Differential Revision: https://reviews.llvm.org/D129837
Jez Ng [Sat, 16 Jul 2022 03:38:48 +0000 (23:38 -0400)]
[lld-macho][nfc] Add more tests + comments around ICF + unwind info interaction
While working on {D129830}, I realized that our handling of ICF +
eh_frame combined was untested. Additionally I realized that the comment
explaining why we were safely slicing away the functionAddress reloc
from our compact unwind entries was... insufficient and slightly
misleading. I've tried to clarify it.
Reviewed By: #lld-macho, thevinster
Differential Revision: https://reviews.llvm.org/D129894
Kazu Hirata [Sat, 16 Jul 2022 04:48:17 +0000 (21:48 -0700)]
Use has_value/value instead of hasValue/getValue (NFC)
Amir Ayupov [Sat, 16 Jul 2022 03:41:03 +0000 (20:41 -0700)]
[BOLT][TEST] Add icp-inline.s test
Add a test for `-icp-inline` knob, which ensures that ICP is only performed for
functions that can be subsequently inlined.
Reviewed By: rafauler
Differential Revision: https://reviews.llvm.org/D129803
Kazu Hirata [Sat, 16 Jul 2022 03:03:13 +0000 (20:03 -0700)]
Use value instead of getValue (NFC)
Kazu Hirata [Sat, 16 Jul 2022 02:46:29 +0000 (19:46 -0700)]
Use value_or (NFC)
Fangrui Song [Sat, 16 Jul 2022 02:01:20 +0000 (19:01 -0700)]
[LegacyPM] Remove ModuleSanitizerCoverageLegacyPass
Follow the steps of various other legacy instrumentation passes removed for
15.0.0.
Ashay Rane [Sat, 16 Jul 2022 00:53:06 +0000 (17:53 -0700)]
[mlir] remove unnecessary statements in test
A previous commit (f2b94bd) added some unnecessary statements that
dereferenced operations only to get the operations back. This patch
removes the unnecessary statements.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D129913
Phoebe Wang [Sat, 16 Jul 2022 01:00:54 +0000 (09:00 +0800)]
[X86][FP16] Enable vector support for FP16 emulation
This is follow up of D107082, which enable vector support according to psABI.
Reviewed By: skan
Differential Revision: https://reviews.llvm.org/D127982
Yuanfang Chen [Sat, 16 Jul 2022 01:21:35 +0000 (18:21 -0700)]
[lit][unit] add a test for sanitizer-only test failures
Follow-up for
6b02c53936b9e77fee.
Jeff Niu [Thu, 14 Jul 2022 17:31:38 +0000 (10:31 -0700)]
[mlir][ods] Allow specifying return types of builders
This patch allows custom attribute and type builders to return
something other than the C++ type of the attribute or type.
This is useful for attributes or types that may perform extra work during
construction (e.g. canonicalization) that could result in a different
kind of attribute or type being returned.
Reviewed By: rriddle, lattner
Differential Revision: https://reviews.llvm.org/D129792
owenca [Sat, 16 Jul 2022 00:25:58 +0000 (17:25 -0700)]
[clang-format][NFC] Replace SmallVector parameter with ArrayRef
Addresses https://reviews.llvm.org/D129466#3654410.
LLVM GN Syncbot [Sat, 16 Jul 2022 00:15:08 +0000 (00:15 +0000)]
[gn build] Port
4162aefad125
Mitch Phillips [Sat, 16 Jul 2022 00:11:55 +0000 (17:11 -0700)]
Revert "Re-apply
5acd47169884, Add a shared-memory based orc::MemoryMapper, with fixes."
This reverts commit
32d8d23cd0b2d4d010eb112dfe5216f11b2681f9.
Reason: Broke the UBSan buildbots. See more details on Phabricator:
https://reviews.llvm.org/D128544
Vitaly Buka [Fri, 15 Jul 2022 23:55:13 +0000 (16:55 -0700)]
[test] Fix old memory leak in a test
Yuanfang Chen [Fri, 15 Jul 2022 23:40:43 +0000 (16:40 -0700)]
[lit][test] explicitly use utf-8 encoding to write testing json file
Related test failure:
https://lab.llvm.org/buildbot/#/builders/178/builds/2527/steps/13/logs/FAIL__lit___googletest-timeout_py
Julian Lettner [Fri, 15 Jul 2022 23:12:31 +0000 (16:12 -0700)]
[Sanitizer][Darwin][NFC] Small SANITIZER_APPLE cleanup
We introduced `SANITIZER_APPLE` here: https://reviews.llvm.org/D126263
Argyrios Kyrtzidis [Fri, 15 Jul 2022 23:08:48 +0000 (16:08 -0700)]
[unittests/Tooling/DependencyScannerTest.cpp] Use `using namespace` instead of wrapping the `.cpp` file contents in namespaces, NFC
This makes the file consistent with the coding style of the rest of LLVM.
Naje George [Mon, 11 Jul 2022 20:17:04 +0000 (13:17 -0700)]
[flang] Add semantics test for EVENT POST statement
Reviewed By: ktras
Differential Revision: https://reviews.llvm.org/D129515
Mahesh Ravishankar [Wed, 13 Jul 2022 23:22:47 +0000 (23:22 +0000)]
[mlir][Linalg] Add a pattern to decompose `linalg.generic` ops.
This patch adds a pattern to decompose a `linalg.generic` operations
that
- has only parallel iterator types
- has more than 2 statements (including the yield)
into multiple `linalg.generic` operation such that each operation has
a single statement and a yield.
The pattern added here just splits the matching `linalg.generic` into
two `linalg.generic`s, one containing the first statement, and the
other containing the remaining. The same pattern can be applied
repeatedly on the second op to ultimately fully decompose the generic
op.
Differential Revision: https://reviews.llvm.org/D129704
Jon Chesterfield [Fri, 15 Jul 2022 22:55:42 +0000 (23:55 +0100)]
[nfc][amdgpu] Remove dead variable and function
Yuanfang Chen [Fri, 15 Jul 2022 22:33:57 +0000 (15:33 -0700)]
[lit][unit] make sure to include failed shard in test summary report
For sanitizer only failures, the tests all pass but still need to
put the shard in failed test summary.
Rong Xu [Fri, 15 Jul 2022 21:51:49 +0000 (14:51 -0700)]
[PGO] Report number of counts being dropped when a hash-mismatch happens
This patch reports number of counts being dropped when a hash-mismatch
happens. This information will be helpful to the users -- if the dropped
counts are large, the user should redo the instrumentation build and
recollect the profile.
Differential Revision: https://reviews.llvm.org/D129001
Ashay Rane [Thu, 14 Jul 2022 01:20:56 +0000 (18:20 -0700)]
[mlir] check whether region and block visitors are interrupted
The visitor functions for `Region` and `Block` types did not always
check the value returned by recursive calls. This caused the top-level
visitor invocation to return `WalkResult::advance()` even if one or more
recursive invocations returned `WalkResult::interrupt()`. This patch
fixes the problem by check if any recursive call is interrupted, and if
so, return `WalkResult::interrupt()`.
Reviewed By: dcaballe
Differential Revision: https://reviews.llvm.org/D129718
Joseph Huber [Fri, 15 Jul 2022 17:52:27 +0000 (13:52 -0400)]
[CUDA] Make the new driver properly ignore non-CUDA inputs
The new driver generated offloadinga actions for each active toolchain.
However, for CUDA and HIP it is possible for the toolchain to be active
but one of the files is not a valid input. This can occur if the user
compiles both a CUDA and C source file in the same compiler invocation.
This patch adds some simple logic to quit if the input is not valid as
well.
Reviewed By: tra, MaskRay
Differential Revision: https://reviews.llvm.org/D129885
Yuanfang Chen [Fri, 15 Jul 2022 21:35:53 +0000 (14:35 -0700)]
[lit] fix a bug in
4cd1c96d375aa
Only report failure for tests that actually runs.
Leonard Grey [Fri, 15 Jul 2022 19:36:01 +0000 (15:36 -0400)]
[lsan][Darwin][nfc] Fix thread vector size
The reserve constructor was removed in
44f55509d75d8c67077810bb6d9f3bedaea05831
but this one was missed. As a result, we attempt to iterate through 1024 threads
each time, most of which are 0.
Differential Revision: https://reviews.llvm.org/D129897
Fangrui Song [Fri, 15 Jul 2022 21:27:01 +0000 (14:27 -0700)]
[bolt] Include <atomic>
Joseph Huber [Fri, 15 Jul 2022 19:34:50 +0000 (15:34 -0400)]
[Libomptarget] Fix warnings on address space attributes
The device runtime uses the address space attribute to control the
placement of important constants on the GPU. The changes made in D126061
caused these to start emitting errors as they were not applied to the
type. This patch fixes the issues to make the warnings go away.
Reviewed By: ye-luo
Differential Revision: https://reviews.llvm.org/D129896
Rong Xu [Fri, 15 Jul 2022 20:57:23 +0000 (13:57 -0700)]
[PGO] Don't cross reference CSFDO profile and non-CSFDO profile
Don't cross reference CSFDO profile and non-CSFDO profile when
checking the function hash. Only return hash_mismatch when
CS bits match, and return unknown_function otherwise.
Differential Revision: https://reviews.llvm.org/D129000
Rong Xu [Fri, 15 Jul 2022 20:44:55 +0000 (13:44 -0700)]
[PGO] Improve hash-mismatch warning message
This patch improves FDO hash-mismatch handling:
(1) filter out warnings to weak functions.
Weak functions definition will be overridden by a strong definition by linker.
The hash mismatch in profile use compilation is expected.
Make the profile hash mismatch warning under the existing option (default true).
(2) add an option to trace the hash of functions with the specific string.
Note that an empty string parameter will trace all functions.
Differential Revision: https://reviews.llvm.org/D129002
Jim Kitchen [Fri, 15 Jul 2022 20:26:41 +0000 (15:26 -0500)]
[mlir][sparse] Introduce new reduce op
A new sparse_tensor operation allows for
custom reduction code to be injected during
linalg.generic lowering for sparse tensors.
An identity value is provided to indicate
the starting value of the reduction. A single
block region is required to contain the
custom reduce computation.
Reviewed by: aartbik
Differential Revision: https://reviews.llvm.org/D128004
Philip Reames [Fri, 15 Jul 2022 20:23:10 +0000 (13:23 -0700)]
[LSR] Allow already invariant operand for ICmpZero matching [try 2]
Changes since initial commit:
* Wrapping a pointer in an SCEV unknown hides the base, and SCEV is only able to compute a subtraction when the bases are known to be equal. This results in a SCEVCouldNotCompute flowing forward and triggering asserts. Test case added in
d767b392.
* isLoopInvariant returns true for instructions outside the loop, but not necessarily *above* the loop. Since this code is allowed to visit uses of an IV outside of a loop, we have to make sure the operands of the compare are both invariant and dominating the header. Test case added in
2aed3cdb.
Original commit message follows...
The ICmpZero matching is checking to see if the expression is loop invariant per SCEV and expandable. This allows expressions inside the loop which can be made loop invariant to be seamlessly expanded, but is overly conservative for expressions which already *are* loop invariant.
As a simple justification for why this is correct, consider a loop invariant urem as RHS vs an alternate function with that same urem wrapped inside a helper call. Why would it be legal to match the later, but not the former?
Differential Revision: https://reviews.llvm.org/D129793
Yuanfang Chen [Fri, 15 Jul 2022 20:23:22 +0000 (13:23 -0700)]
[reland][lit][unit] makes sure to print stderr when no test failures are found
In some situations, like running tests with sanitizers, all test
passes but the shard could still fail due to memory issues.
Relands
65769429c0644c81d271e9d971f5b64191503
Yuanfang Chen [Fri, 15 Jul 2022 20:21:01 +0000 (13:21 -0700)]
Revert "[lit][unit] makes sure to print stderr when no test failures are found"
This reverts commit
65769429c0644c81d271e9d971f5b64191503f6e.
This patch is incomplete.
Michał Górny [Thu, 30 Jun 2022 18:24:04 +0000 (20:24 +0200)]
[lldb] [llgs] Improve stdio forwarding in multiprocess+nonstop
Enable stdio forwarding when nonstop mode is enabled, and disable it
once it is disabled. This makes it possible to cleanly handle stdio
forwarding while running multiple processes in non-stop mode.
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.llvm.org/D128932
Michał Górny [Fri, 15 Jul 2022 19:47:37 +0000 (21:47 +0200)]
[lldb] [test] Skip test_leave_nonstop on Windows