- Jun 29, 2021
-
-
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
-
Kirill Bobyrev authored
This patch allows the use of --line-filter in clang-tidy.py from run-clang-tidy.py Author: [bansan (Vincent LE GARREC)](https://reviews.llvm.org/p/bansan/) Reviewed By: kbobyrev Differential Revision: https://reviews.llvm.org/D104981
-
Melanie Blower authored
[clang][PATCH][nfc] Refactor TargetInfo::adjust to pass DiagnosticsEngine to allow diagnostics on target-unsupported options Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D104729
-
Kadir Cetinkaya authored
Some tweaks might edit file types not supported by clang-format. This patch gives them a way to signal that they do not require formatting. Differential Revision: https://reviews.llvm.org/D105039
-
Sameer Sahasrabuddhe authored
-
Jez Ng authored
-
Jez Ng authored
Make sure we don't wrongly fold two sections that refer to symbols with the same value if they are not both absolute / non-absolute. Reviewed By: #lld-macho, gkm Differential Revision: https://reviews.llvm.org/D104876
-
Jez Ng authored
Literal sections can be deduplicated before running ICF. That makes it easy to compare them during ICF: we can tell if two literals are constant-equal by comparing their offsets in their OutputSection. LLD-ELF takes a similar approach. Reviewed By: #lld-macho, gkm Differential Revision: https://reviews.llvm.org/D104671
-
peter klausler authored
With derived type description tables now available to the runtime library, it is possible to implement the concept of "child" I/O statements in the runtime and use them to convert instances of derived type I/O data transfers into calls to user-defined subroutines when they have been specified for a type. (See Fortran 2018, subclauses 12.6.4.8 & 13.7.6). - Support formatted, list-directed, and NAMELIST transfers to internal parent units; support these, and unformatted transfers, for external parent units. - Support nested child defined derived type I/O. - Parse DT'foo'(v-list) FORMAT data edit descriptors and passes their strings &/or v-list values as arguments to the defined formatted I/O routines. - Fix problems with this feature encountered in semantics and FORMAT valiation during development and end-to-end testing. - Convert typeInfo::SpecialBinding from a struct to a class after adding a member function. Differential Rev...
-
Louis Dionne authored
-
Peter Steinfeld authored
There are situations where the arguments of intrinsics must be conformable, which is defined in section 3.36. This means they must have "the same shape, or one being an array and the other being scalar". But the check we were actually making was that their ranks were the same. This change fixes that and adds a test for the UNPACK intrinsic, where the FIELD argument "shall be conformable with MASK". Differential Revision: https://reviews.llvm.org/D104936
-
Nancy Wang authored
This patch is to fix 2 libcxx test cases, test cases assumed 'a' > 'A' which is not case in z/OS platform on ebcdic mode, modified test cases to compare between upper letters or lower letters, or digits so ordering will be true for all platform. Differential Revision: https://reviews.llvm.org/D104748
-
Akira Hatanaka authored
the call's return type is void Instead of trying hard to prevent global optimization passes such as deadargelim from changing the return type to void, just ignore the bundle if the return type is void. clang currently emits calls to @llvm.objc.clang.arc.noop.use, which consumes the function call result, immediately after the function call to prevent changes to the return type, but optimization passes can delete the call to @llvm.objc.clang.arc.noop.use if the function call doesn't return, which enables deadargelim to change the return type. rdar://76671438 Differential Revision: https://reviews.llvm.org/D103062
-
Florian Mayer authored
Reviewed By: eugenis Differential Revision: https://reviews.llvm.org/D104463
-
Raphael Isemann authored
When we run `xcrun` we don't have any user input in our command so relying on the user's default shell doesn't make a lot of sense. If the user has set the system shell to a something that isn't supported yet (dash, ash) then we would run into the problem that we don't know how to escape our command string. This patch just avoids using any shell at all as xcrun is always at the same path. Reviewed By: aprantl, JDevlieghere, kastiglione Differential Revision: https://reviews.llvm.org/D104653
-