- Jun 29, 2021
-
-
Xiang1 Zhang authored
Reviewed By: WangPengfei Differential Revision: https://reviews.llvm.org/D104766
-
Ben Shi authored
According to AVR ABI (https://gcc.gnu.org/wiki/avr-gcc), returned struct value within size 1-8 bytes should be returned directly (via register r18-r25), while larger ones should be returned via an implicit struct pointer argument. Reviewed By: dylanmckay Differential Revision: https://reviews.llvm.org/D99237
-
Kai Luo authored
Install libatomic.a in top level library directory so that compiler can find it in search directories. Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D104908
-
https://reviews.llvm.org/D104488Greg Clayton authored
Synthetic names no longer have the shared library name appended to the end.
-
Michael Liao authored
-
Michael Liao authored
- Add standalone metadata parsing support so that machine metadata nodes could be populated before and accessed during MIR is parsed. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D103282
-
Xun Li authored
CoroElide pass works only when a post-split coroutine is inlined into another post-split coroutine. In O0, there is no inlining after CoroSplit, and hence no CoroElide can happen. It's useless to put CoroElide pass in the O0 pipeline and it will never be triggered (unless I miss anything). Differential Revision: https://reviews.llvm.org/D105066
-
Leonard Grey authored
Fixes PR50637. Downstream bug: https://crbug.com/1218958 Currently, we split __cstring along symbol boundaries with .subsections_via_symbols when not deduplicating, and along null bytes when deduplicating. This change splits along null bytes unconditionally, and preserves original alignment in the non- deduplicated case. Removing subsections-section-relocs.s because with this change, __cstring is never reordered based on the order file. Differential Revision: https://reviews.llvm.org/D104919
-
harsh-nod authored
The current code does not preserve the order of the parallel dimensions when doing multi-reductions and thus we can end up in scenarios where the result shape does not match the desired shape after reduction. This patch fixes that by ensuring that the parallel indices are in order and then concatenates them to the reduction dimensions so that the reduction dimensions are innermost. Differential Revision: https://reviews.llvm.org/D104884
-
Greg Clayton authored
Symbol tables can have symbols with no size in mach-o files that were failing to get combined into a single entry. This resulted in many duplicate entries for the same address and made gsym files larger. Differential Revision: https://reviews.llvm.org/D105068
-
-
Greg Clayton authored
This fix was created after profiling the target creation of a large C/C++/ObjC application that contained almost 4,000,000 redacted symbol names. The symbol table parsing code was creating names for each of these synthetic symbols and adding them to the name indexes. The code was also adding the object file basename to the end of the symbol name which doesn't allow symbols from different shared libraries to share the names in the constant string pool. Prior to this fix this was creating 180MB of "___lldb_unnamed_symbol" symbol names and was taking a long time to generate each name, add them to the string pool and then add each of these names to the name index. This patch fixes the issue by: - not adding a name to synthetic symbols at creation time, and allows name to be dynamically generated when accessed - doesn't add synthetic symbol names to the name indexes, but catches this special case as name lookup time. Users won't typically set breakpoints or lookup these synthetic names, but support was added to do the lookup in case it does happen - removes the object file baseanme from the generated names to allow the names to be shared in the constant string pool Prior to this fix the startup times for a large application was: 12.5 seconds (cold file caches) 8.5 seconds (warm file caches) After this fix: 9.7 seconds (cold file caches) 5.7 seconds (warm file caches) The names of the symbols are auto generated by appending the symbol's UserID to the end of the "___lldb_unnamed_symbol" string and is only done when the name is requested from a synthetic symbol if it has no name. Differential Revision: https://reviews.llvm.org/D104488
-
River Riddle authored
This revision adds detection for changes to either the mlir-lsp-server binary or the setting, and prompts the user to restart the server. Whether the user gets prompted or not is a configurable setting in the extension, and this setting may updated based on the user response to the prompt. Differential Revision: https://reviews.llvm.org/D104501
-
Lang Hames authored
Move architecture independent ELF parsing/graph-building code from ELFLinkGraphBuilder_x86_64 to the ELFLinkGraphBuilder base class template.
-
Philip Reames authored
-
Stanislav Mekhanoshin authored
There can be a use after free in the Value::replaceUsesWithIf() if two uses point to the same constant. Patch defers handling of the constants past the iterator scan. Another potential issue is that handleOperandChange updates all the uses in a given Constant, not just the one passed to ShouldReplace. Added a FIXME comment. Both issues are not currently exploitable as the only use of this call with constants avoids it. Differential Revision: https://reviews.llvm.org/D105061
-
Joseph Huber authored
Now that the OpenMPOpt module pass include important optimizations for removing globalization from offloading regions it should be run at a lower optimization level. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D105056
-
Nico Weber authored
The two different thread_local_regular sections (__thread_data and more_thread_data) had nondeterminstic ordering for two reasons: 1. https://reviews.llvm.org/D102972 changed concatOutputSections from MapVector to DenseMap, so when we iterate it to make output segments, we would add the two sections to the __DATA output segment in nondeterministic order. 2. The same change also moved the two stable_sort()s for segments and sections to sort(). Since sections with assigned priority (such as TLV data) have the same priority for all sections, this is incorrect -- we must use stable_sort() so that the initial (input-order-based) order remains. As a side effect, we now (deterministically) put the __common section in front of __bss (while previously we happened to put it after it). (__common and __bss are both zerofill so both have order INT_MAX, but common symbols are added to inputSections before normal sections are collected.) Makes lld/test/MachO/tlv.s and lld/test/MachO/tlv-dylib.s pass with LLVM_ENABLE_EXPENSIVE_CHECKS=ON. Differential Revision: https://reviews.llvm.org/D105054
-
Hongtao Yu authored
C++ constructors/destructors need to go through a different constructor to construct a GlobalDecl object in order to retrieve their linkage type. This causes an assert failure in the default constructor of GlobalDecl. I'm chaning it to using the exsiting GlobalDecl object. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D102356
-
Muhammad Omair Javaid authored
This patch fixes a bug in dotest.py where lldb.selected_platform was being set to host platform even after a successful connection to a remote platform via platform url. This patch fixes this behavior and sets selected_platform to remote_platform after a successful connection. This patch also removes target_platform variable from run_suite. Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D105060
-
Scott Linder authored
Add UNIQUED and DISTINCT properties in Metadata.def and use them to implement restrictions on the `distinct` property of MDNodes: * DIExpression can currently be parsed from IR or read from bitcode as `distinct`, but this property is silently dropped when printing to IR. This causes accepted IR to fail to round-trip. As DIExpression appears inline at each use in the canonical form of IR, it cannot actually be `distinct` anyway, as there is no syntax to describe it. * Similarly, DIArgList is conceptually always uniqued. It is currently restricted to only appearing in contexts where there is no syntax for `distinct`, but for consistency it is treated equivalently to DIExpression in this patch. * DICompileUnit is already restricted to always being `distinct`, but along with adding general support for the inverse restriction I went ahead and described this in Metadata.def and updated the parser to be general. Future nodes which have this restriction can share this support. The new UNIQUED property applies to DIExpression and DIArgList, and forbids them to be `distinct`. It also implies they are canonically printed inline at each use, rather than via MDNode ID. The new DISTINCT property applies to DICompileUnit, and requires it to be `distinct`. A potential alternative change is to forbid the non-inline syntax for DIExpression entirely, as is done with DIArgList implicitly by requiring it appear in the context of a function. For example, we would forbid: !named = !{!0} !0 = !DIExpression() Instead we would only accept the equivalent inlined version: !named = !{!DIExpression()} This essentially removes the ability to create a `distinct` DIExpression by construction, as there is no syntax for `distinct` inline. If this patch is accepted as-is, the result would be that the non-canonical version is accepted, but the following would be an error and produce a diagnostic: !named = !{!0} ; error: 'distinct' not allowed for !DIExpression() !0 = distinct !DIExpression() Also update some documentation to consistently use the inline syntax for DIExpression, and to describe the restrictions on `distinct` for nodes where applicable. Reviewed By: StephenTozer, t-tye Differential Revision: https://reviews.llvm.org/D104827 -
Nikita Popov authored
Currently, AsmWriter will stick uselistorder directives for global values inside individual functions. This doesn't make a lot of sense, and interacts badly with D104950, as use list order adjustments will be performed while still working on a forward reference. This patch instead always prints uselistorder directives for globals at the module level. This isn't really compatible with the previously used implementation approach. Rather than walking through all values again, use the OrderMap (after stabilizing its order) to go through all values and compute the use list shuffles for them. Classify them per-function, or nullptr for globals. Even independently of D104950, this seems to fix a few verify-uselistorder failures. Conveniently, there is even a pre-existing failing test that this fixes. Differential Revision: https://reviews.llvm.org/D104976
-
Joseph Huber authored
This patch adds documentation for using the CMake find module for OpenMP target offloading provided by LLVM. It also removes the requirement for AMD's architecture to be set as this isn't necessary for upstream LLVM. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D105051
-
Joseph Huber authored
Add some information about the optimizations currently provided by OpenMPOpt. Every optimization performed should eventually be listed here. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D105050
-
Alexander Belyaev authored
We are interested only in tensors/memrefs when creating a TiledLoopOp. Differential Revision: https://reviews.llvm.org/D105059
-
Sanjay Patel authored
We could use a bigger hammer and bail out on any constant expression, but there's a regression test that appears to validly do the transform (although it may not have been intending to check that optimization).
-
Sanjay Patel authored
-
Nick Desaulniers authored
I added an assertion in D91816 (documenting behavior added in D93422) that callers and callees with mismatched fn attr's related to stack protectors should not occur unless the callee was attributed always_inline. This falls apart when a call, invoke, or callbr (any instruction inheriting from CallBase) itself has an always_inline attribute. Clang will emit such attributes on Instructions when __attribute__((flatten)) is used to recursively force inlining from a caller. Since these assertions only had the caller and callee Functions, and not the call site (CallBase derived classes), we would have to search the caller for such instructions to reconstruct the call site information. But at that point, inlining has already occurred; the call site has already been removed from the caller. Remove the assertions, add a unit test for always_inline call sites, and update the LangRef. Another curiosity is that the always_inline Attribute on Instructions is only expanded by the inline pass, not the always_inline pass. Thanks to @pcc on this report when building Android's RunTime (ART) interpreter. Reviewed By: pcc, MaskRay Differential Revision: https://reviews.llvm.org/D104944
-
Nick Desaulniers authored
While adding remark based tests in D104944, I noticed that the tests that we were passing were passing for the wrong reason. They were passing because the dynamic allocas were preventing inlining, not the code I added in D91816. Rewrite and simplify the test. Add remark based checks to validate we're preventing inline substitutions for the right reasons. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D104958
-
Joseph Huber authored
Currently OpenMPOpt will only check if a function is a kernel before deciding not to internalize it. Any uncalled function that gets internalized will be trivially dead in the module so this is unnnecessary. Depends on D102423 Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D104890
-
Jacques Pienaar authored
This enables creating a replacement rule where range of positional replacements need not be spelled out, or are not known (e.g., enable having a rewrite that forward all operands to a call generically). Differential Revision: https://reviews.llvm.org/D104955
-
Eugene Zhulenev authored
Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D105057
-
Nikita Popov authored
Pass element type rather than pointer type to some functions, so we know which type to use for the global variables.
-
Scott Linder authored
Relands patch reverted by 61242c0a The original patch mistakenly included unrelated tests. Adds a utility to combine multiple Callables into a single Callable. This is useful to make constructing a visitor for `std::visit`-like functions more natural; functions like this will be added in future patches. Intended to supercede https://reviews.llvm.org/D99560 by perfectly-forwarding the combined Callables. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D100670
-
Duncan P. N. Exon Smith authored
Fix the use-list-order for br instructions by setting the operands in order of their index to match the use-list-order prediction. The case where this matters is when there is a condition but the if-true and if-false branches are identical. Bug was found when reviewing failures pointed at by https://reviews.llvm.org/D104950. Fix is similar to 3cf415c6. Differential Revision: https://reviews.llvm.org/D104959
-
Scott Linder authored
This reverts commit 14a8aa61. Mistakenly landed this before a patch it should depend on was accepted.
-
Melanie Blower authored
Revert "[clang][PATCH][nfc] Refactor TargetInfo::adjust to pass DiagnosticsEngine to allow diagnostics on target-unsupported options" This reverts commit 2dbe1c67. More buildbot failures
-
Nikita Popov authored
Adjust the assertion to allow opaque pointers.
-
Scott Linder authored
Adds a utility to combine multiple Callables into a single Callable. This is useful to make constructing a visitor for `std::visit`-like functions more natural; functions like this will be added in future patches. Intended to supercede https://reviews.llvm.org/D99560 by perfectly-forwarding the combined Callables. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D100670
-
peter klausler authored
Non-advancing I/O was failing; ExternalFileUnit was losing track of what writes had been committed to the file. Fixed. Also, support the common extension of $ and \ in a FORMAT as being equivalent to ADVANCE=NO. Differential Revision: https://reviews.llvm.org/D105046
-