- Feb 16, 2021
-
-
Matt Arsenault authored
Return the best covering index, and additional needed to complete the mask. This logically belongs in TargetRegisterInfo, although I ended up not needing it for why I originally split this out.
-
Nicolas Vasilache authored
Differential Revision: https://reviews.llvm.org/D96701
-
Arthur O'Dwyer authored
The namespace is unnecessary, and libc++ style is not to include it on type names. (As opposed to function names, where qualification affects ADL; and in certain function signatures where `std::` and `_VSTD::` might be mangled differently. This is none of those situations.)
-
Craig Topper authored
This is annoying because the condition code legalization belongs to LegalizeDAG, but our custom handler runs in Legalize vector ops which occurs earlier. This adds some of the mask binary operations so that we can combine multiple compares that we need for expansion. I've also fixed up RISCVISelDAGToDAG.cpp to handle copies of masks. This patch contains a subset of the integer setcc patch as well. That patch is dependent on the integer binary ops patch. I'll rebase based on what order the patches go in. Reviewed By: frasercrmck Differential Revision: https://reviews.llvm.org/D96567
-
Craig Topper authored
[RISCV][LegalizeTypes] Try to expand BITREVERSE before promoting if the promoted BITREVERSE would expand anyway. If we're going to end up expanding anyway, we should do it early so we don't create extra operations to handle the bytes added by promotion. Simlilar was done for BSWAP previously. Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D96681
-
Muhammad Omair Javaid authored
TestMultipleTargets.py fails randomly on Arm/AArch64 Linux buildbot with no reasonable clues. I am marking it skipped for avoiding LLDB buildbot failures due to this test.
-
Louis Dionne authored
-
Sanjay Patel authored
In the motivating example from https://llvm.org/PR49171 and reduced test here, we would unroll and clone assumes so much that compile-time effectively became infinite while analyzing all of those assumes.
-
Dimitry Andric authored
Always turn on LIBCXX_ENABLE_NEW_DELETE_DEFINITIONS, if libcxxrt is used as the C++ ABI library, since libcxxrt does not provide the full set ofnew and delete operators. In particular, the aligned versions of these operators are completely missing. This primarily addresses builds on FreeBSD, as this platform uses libcxxrt by default. Also, attempt to provide a FreeBSD.cmake cache file, with hopefully sane settings, partially copied from the Apple.cmake cache file. This needs more work, probably some additions to ci build scripts (although I am not aware of any 'official' FreeBSD build bots). Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D96720
-
Sam McCall authored
-
Duncan P. N. Exon Smith authored
This commit fixes how metadata is handled in CloneModule to be sound, and improves how it's handled in CloneFunctionInto (although the latter is still awkward when called within a module). Ruiling Song pointed out in PR48841 that CloneModule was changed to unsoundly use the RF_ReuseAndMutateDistinctMDs flag (renamed in fa35c1f8 for clarity). This flag papered over a crash caused by other various changes made to CloneFunctionInto over the past few years that made it unsound to use cloning between different modules. (This commit partially addresses PR48841, fixing the repro from preprocessed source but not textual IR. MDNodeMapper::mapDistinctNode became unsound in df763188 and this commit does not address that regression.) RF_ReuseAndMutateDistinctMDs is designed for the IRMover to use, avoiding unnecessary clones of all referenced metadata when linking between modules (with IRMover, the source module is discarded after linking). It never makes sense to use when you're not discarding the source. This commit drops its incorrect use in CloneModule. Sadly, the right thing to do with metadata when cloning a function is complicated, and this patch doesn't totally fix it. The first problem is that there are two different types of referenceable metadata and it's not obvious what to with one of them when remapping. - `!0 = !{!1}` is metadata's version of a constant. Programatically it's called "uniqued" (probably a better term would be "constant") because, like `ConstantArray`, it's stored in uniquing tables. Once it's constructed, it's illegal to change its arguments. - `!0 = distinct !{!1}` is a bit closer to a global variable. It's legal to change the operands after construction. What should be done with distinct metadata when cloning functions within the same module? - Should new, cloned nodes be created? - Should all references point to the same, old nodes? The answer depends on whether that metadata is effectively owned by a function. And that's the second problem. Referenceable metadata's ownership model is not clear or explicit. Technically, it's all stored on an LLVMContext. However, any metadata that is `distinct`, that transitively references a `distinct` node, or that transitively references a GlobalValue is specific to a Module and is effectively owned by it. More specifically, some metadata is effectively owned by a specific Function within a module. Effectively function-local metadata was introduced somewhere around c10d0e5c, which made it illegal for two functions to share a DISubprogram attachment. When cloning a function within a module, you need to clone the function-local debug info and suppress cloning of global debug info (the status quo suppresses cloning some global debug info but not all). When cloning a function to a new/different module, you need to clone all of the debug info. Here's what I think we should do (eventually? soon? not this patch though): - Distinguish explicitly (somehow) between pure constant metadata owned by the LLVMContext, global metadata owned by the Module, and local metadata owned by a GlobalValue (such as a function). - Update CloneFunctionInto to trigger cloning of all "local" metadata (only), perhaps by adding a bit to RemapFlag. Alternatively, split out a separate function CloneFunctionMetadataInto to prime the metadata map that callers are updated to call ahead of time as appropriate. Here's the somewhat more isolated fix in this patch: - Converted the `ModuleLevelChanges` parameter to `CloneFunctionInto` to an enum called `CloneFunctionChangeType` that is one of LocalChangesOnly, GlobalChanges, DifferentModule, and ClonedModule. - The code maintaining the "functions uniquely own subprograms" invariant is now only active in the first two cases, where a function is being cloned within a single module. That's necessary because this code inhibits cloning of (some) "global" metadata that's effectively owned by the module. - The code maintaining the "all compile units must be explicitly referenced by !llvm.dbg.cu" invariant is now only active in the DifferentModule case, where a function is being cloned into a new module in isolation. - CoroSplit.cpp's call to CloneFunctionInto in CoroCloner::create uses LocalChangeOnly, since fa635d73 only set `ModuleLevelChanges` to trigger cloning of local metadata. - CloneModule drops its unsound use of RF_ReuseAndMutateDistinctMDs and special handling of !llvm.dbg.cu. - Fixed some outdated header docs and left a couple of FIXMEs. Differential Revision: https://reviews.llvm.org/D96531
-
Benjamin Kramer authored
This restores the behavior before 964f8103, which broke 2 tests: LLVM :: tools/llvm-lto2/X86/pipeline.ll lld :: ELF/lto/ltopasses-custom.ll
-
Stanislav Mekhanoshin authored
We are using AtomicNoRet map in multiple places to determine if an instruction atomic, rtn or nortn atomic. This method does not work always since we have some instructions which only has rtn or nortn version. One such instruction is ds_wrxchg_rtn_b32 which does not have nortn version. This has caused changes in memory legalizer tests. Differential Revision: https://reviews.llvm.org/D96639
-
Fangrui Song authored
The few options are niche. They solved a problem which was traditionally solved with more shell commands (`llvm-readelf -n` fetches the Build ID. Then `ln` is used to hard link the file to a directory derived from the Build ID.) Due to limitation, they are no longer used by Fuchsia and they don't appear to be used elsewhere (checked with Google Search and Debian Code Search). So delete them without a transition period. Announcement: https://lists.llvm.org/pipermail/llvm-dev/2021-February/148446.html Differential Revision: https://reviews.llvm.org/D96310
-
Johannes Doerfert authored
Even code in target and declare target regions might not be emitted. With this patch we delay more diagnostics and use laziness and linkage to determine if a function is emitted (for the device). Note that we still eagerly emit diagnostics for target regions, unfortunately, see the TODO for the reason. This hopefully fixes PR48933. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D95928
-
Johannes Doerfert authored
Type errors in function declarations were not (always) diagnosed prior to this patch. Furthermore, certain remarks did not get associated properly which caused them to be emitted multiple times. Reviewed By: JonChesterfield Differential Revision: https://reviews.llvm.org/D95912
-
Johannes Doerfert authored
This will highlight the effective changes in subsequent commits. Reviewed By: ABataev Differential Revision: https://reviews.llvm.org/D95903
-
Adrian Prantl authored
This patch enables AsmPrinter support for complex expression with entry values. It shouldn't AsmPrinter's call whether these are safe or not but the pass who introduces the DW_OP_LLVM_entry_value. This patch on its own has no effect on clang. Differential Revision: https://reviews.llvm.org/D96559
-
Fangrui Song authored
Announcement: https://lists.llvm.org/pipermail/llvm-dev/2021-February/148446.html Differential Revision: https://reviews.llvm.org/D96360
-
Jacques Pienaar authored
Allow clients to create a new ShapedType of the same "container" type but with different element or shape. First use case is when refining shape during shape inference without needing to consider which ShapedType is being refined. Differential Revision: https://reviews.llvm.org/D96682
-
Sam McCall authored
This is NFC because the MessageHandler refused to dispatch to them until the server is initialized anyway. This is a more natural time to bind them - it's when they become callable, and it's when client capabalities are available and server ones can be set. One module-lifecycle function will be responsible for all three. Differential Revision: https://reviews.llvm.org/D96608
-
Simon Pilgrim authored
This will be necessary for the update of D25987 where we'll need to match OpLHS against other ops.
-
Mircea Trofin authored
-
Florian Hahn authored
This patch adjusts the placement of the bundle unpacking to just before code emission. In particular, this means bundle unpacking happens AFTER the machine outliner. With the previous position, the machine outliner may outline parts of a bundle, which breaks them up. This is an issue for BLR_RVMARKER handling, as illustrated by the rvmarker-pseudo-expansion-and-outlining.mir test case. The machine outliner should not break up the bundles created during pseudo expansion. This should fix PR49082. Reviewed By: SjoerdMeijer Differential Revision: https://reviews.llvm.org/D96294
-
- Feb 15, 2021
-
-
Caroline Concatto authored
-
David Green authored
This adds basic MVE costs for SMIN/SMAX/UMIN/UMAX, as well as MINNUM and MAXNUM representing fmin and fmax. It tightens up the costs, not using a ICmp+Select cost. Differential Revision: https://reviews.llvm.org/D96603
-
Tres Popp authored
This corresponds with the previous work to make shape.broadcast nary. Additionally, simplify the ConvertShapeConstraints pass. It now doesn't lower an implicit shape.is_broadcastable. This is still the same in combination with shape-to-standard when the 2 passes are used in either order. Differential Revision: https://reviews.llvm.org/D96401
-
James Henderson authored
Differential Revision: https://reviews.llvm.org/D96502 Reviewed by: aprantl
-
Caroline Concatto authored
This patch uses the function getShuffleCost with SK_Reverse to compute the cost for experimental.vector.reverse. For scalable vector type, it adds a table will the legal types on AArch64TTIImpl::getShuffleCost to not assert in BasicTTIImpl::getShuffleCost, and for fixed vector, it relies on the existing cost model in BasicTTIImpl. Depends on D94883 Differential Revision: https://reviews.llvm.org/D95603
-
James Henderson authored
Differential Revision: https://reviews.llvm.org/D96500 Reviewed by: aprantl
-
James Henderson authored
LLVM has a minimum requirement of python 3.6 now, and Python is explicitly checked for in the LLVM CMakeLists.txt, so this check is no longer needed here. Differential Revision: https://reviews.llvm.org/D96499 Reviewed by: aprantl
-
Simon Pilgrim authored
Noticed by @pengfei on D96703
-
Alex Zinenko authored
-
James Henderson authored
Some of these options have a degree of incidental coverage, or are for Mach-O only. This patch adds dedicated ELF (where applicable) coverage. Differential Revision: https://reviews.llvm.org/D96602 Reviewed by: rupprecht, Higuoxing
-
James Henderson authored
This adds colons to separate the file name from the message, removes a duplicate space, and removes a trailing full stop from some messages. These help bring the error messages into line with other tools, as well as making all llvm-nm message more self-consistent. Differential Revision: https://reviews.llvm.org/D96601 Reviewed by: Higuoxing, rupprecht, MaskRay
-
Kirill Bobyrev authored
* Use static variables instead of non-trivially destructible global ones. * Remove unused header. Differential Revision: https://reviews.llvm.org/D91600
-
Kerry McLaughlin authored
Currently, setting the `no-nans-fp-math` attribute to true will allow loops with fmin/fmax to vectorize, though we should be requiring that `no-signed-zeros-fp-math` is also set. This patch adds the check for no-signed-zeros at the function level and includes tests to make sure we don't vectorize functions with only one of the attributes associated. Reviewed By: spatel Differential Revision: https://reviews.llvm.org/D96604
-
Simon Pilgrim authored
VectorTyID was replaced with FixedVectorTyID and ScalableVectorTyID
-
Alex Zinenko authored
Port the translation of five dialects that define LLVM IR intrinsics (LLVMAVX512, LLVMArmNeon, LLVMArmSVE, NVVM, ROCDL) to the new dialect interface-based mechanism. This allows us to remove individual translations that were created for each of these dialects and just use one common MLIR-to-LLVM-IR translation that potentially supports all dialects instead, based on what is registered and including any combination of translatable dialects. This removal was one of the main goals of the refactoring. To support the addition of GPU-related metadata, the translation interface is extended with the `amendOperation` function that allows the interface implementation to post-process any translated operation with dialect attributes from the dialect for which the interface is implemented regardless of the operation's dialect. This is currently applied to "kernel" functions, but can be used to construct other metadata in dialect-specific ways without necessarily affecting operations. Depends On D96591, D96504 Reviewed By: nicolasvasilache Differential Revision: https://reviews.llvm.org/D96592
-
Caroline Concatto authored
This patch adds a new intrinsic experimental.vector.reduce that takes a single vector and returns a vector of matching type but with the original lane order reversed. For example: ``` vector.reverse(<A,B,C,D>) ==> <D,C,B,A> ``` The new intrinsic supports fixed and scalable vectors types. The fixed-width vector relies on shufflevector to maintain existing behaviour. Scalable vector uses the new ISD node - VECTOR_REVERSE. This new intrinsic is one of the named shufflevector intrinsics proposed on the mailing-list in the RFC at [1]. Patch by Paul Walker (@paulwalker-arm). [1] https://lists.llvm.org/pipermail/llvm-dev/2020-November/146864.html Differential Revision: https://reviews.llvm.org/D94883
-