- Jul 01, 2021
-
-
Xun Li authored
[Coroutines] Add the newly generated SCCs back to the CGSCC work queue after CoroSplit actually happened Relevant discussion can be found at: https://lists.llvm.org/pipermail/llvm-dev/2021-January/148197.html In the existing design, An SCC that contains a coroutine will go through the folloing passes: Inliner -> CoroSplitPass (fake) -> FunctionSimplificationPipeline -> Inliner -> CoroSplitPass (real) -> FunctionSimplificationPipeline The first CoroSplitPass doesn't do anything other than putting the SCC back to the queue so that the entire pipeline can repeat. As you can see, we run Inliner twice on the SCC consecutively without doing any real split, which is unnecessary and likely unintended. What we really wanted is this: Inliner -> FunctionSimplificationPipeline -> CoroSplitPass -> FunctionSimplificationPipeline (note that we don't really need to run Inliner again on the ramp function after split). Hence the way we do it here is to move CoroSplitPass to the end of the CGSCC pipeline, make it once for real, insert the newly generated SCCs (the clones) back to the pipeline so that they can be optimized, and also add a function simplification pipeline after CoroSplit to optimize the post-split ramp function. This approach also conforms to how the new pass manager works instead of relying on an adhoc post split cleanup, making it ready for full switch to new pass manager eventually. By looking at some of the changes to the tests, we can already observe that this changes allows for more optimizations applied to coroutines. Reviewed By: aeubanks, ChuanqiXu Differential Revision: https://reviews.llvm.org/D95807
-
Ahmed Taei authored
Similarly to batch_mat vec outer most dim is a batching dim and this op does |b| matrix-vector-products : C[b, i] = sum_k(A[b, i, k] * B[b, k]) Reviewed By: rsuderman Differential Revision: https://reviews.llvm.org/D104739 -
Fangrui Song authored
For ``` SECTIONS { text.0 : {} text.1 : {} text.2 : {} } INSERT AFTER .data; ``` the current order is `.data text.2 text.1 text.0`. It makes more sense to preserve the specified order and thus improve compatibility with GNU ld. For ``` SECTIONS { text.0 : {} } INSERT AFTER .data; SECTIONS { text.3 : {} } INSERT AFTER .data; ``` GNU ld somehow collects sections with `INSERT AFTER .data` together (IMO inconsistent) but I think it makes more sense to execute the commands in order and get `.data text.3 text.0` instead. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D105158 -
Leonard Chan authored
As of D102374, relative vtables is enabled on Fuchsia by default, so we don't need any of the RV multilibs. Differential revision: https://reviews.llvm.org/D105145
-
David Green authored
This prevents constant gep operands from being hoisted by the Constant Hoisting pass, leaving them to CodegenPrepare which can usually do a better job at splitting large offsets. This can, in general, improve performance and decrease codesize, especially for v6m where many constants have a high cost. Differential Revision: https://reviews.llvm.org/D104877
-
Michael Liao authored
-
zhijian authored
Summary: in the patch https://reviews.llvm.org/D103651 [AIX][XCOFF] generate eh_info when vector registers are saved according to the traceback table. when generate eh_info, it switch to other section, when it done, it need to switch back to text section again. Reviewers: Jason Liu Differential Revision: https://reviews.llvm.org/105195
-
Simon Pilgrim authored
[X86] Canonicalize SGT/UGT compares with constants to use SGE/UGE to reduce the number of EFLAGs reads. (PR48760) This demonstrates a possible fix for PR48760 - for compares with constants, canonicalize the SGT/UGT condition code to use SGE/UGE which should reduce the number of EFLAGs bits we need to read. As discussed on PR48760, some EFLAG bits are treated independently which can require additional uops to merge together for certain CMOVcc/SETcc/etc. modes. I've limited this to cases where the constant increment doesn't result in a larger encoding or additional i64 constant materializations. Differential Revision: https://reviews.llvm.org/D101074
-
Sanjay Patel authored
There must be a better way to describe this pattern in words? (X + C2) >u C --> X <s -C2 (if C == C2 + SMAX) This could be extended to handle the more general (non-constant) pattern too: https://alive2.llvm.org/ce/z/rdfNFP define i1 @src(i8 %a, i8 %c1) { %t = add i8 %a, %c1 %c2 = add i8 %c1, 127 ; SMAX %ov = icmp ugt i8 %t, %c2 ret i1 %ov } define i1 @tgt(i8 %a, i8 %c1) { %neg_c1 = sub i8 0, %c1 %ov = icmp slt i8 %a, %neg_c1 ret i1 %ov } The pattern was noticed as a by-product of D104932.
-
Sanjay Patel authored
-
Siva Chandra Reddy authored
Some libcs define __FE_DENORM on x86_64. This change allows reading the bits corresponding to that non-standard exception. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D105004
-
Siva Chandra Reddy authored
Previously, exceptions from the flag were being added. This patch changes it such that only the exceptions in the flag will be set. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D105085
-
Philip Reames authored
-
Siva Chandra Reddy authored
Previously, feclearexcept cleared all exceptions irrespective of the argument. This change brings it in line with the aarch64 flavors wherein only those exceptions listed in the argument will be cleared. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D105081
-
Philip Reames authored
We already implemented this for the select form, but the intrinsic form was missing. Note that this doesn't change poison behavior as 1 is non-poison, and the optimized form is still poison exactly when x is.
-
Tomas Matheson authored
Dynamically loaded plugins for the new pass manager are initialised by calling llvmGetPassPluginInfo. This is defined as a weak symbol so that it is continually redefined by each plugin that is loaded. When loading a plugin from a shared library, the intention is that llvmGetPassPluginInfo will be resolved to the definition in the most recent plugin. However, using a global search for this resolution can fail in situations where multiple plugins are loaded. Currently: * If a plugin does not define llvmGetPassPluginInfo, then it will be silently resolved to the previous plugin's definition. * If loading the same plugin twice with another in between, e.g. plugin A/plugin B/plugin A, then the second load of plugin A will resolve to llvmGetPassPluginInfo in plugin B. * The previous case can also occur when a dynamic library defines both NPM and legacy plugins; the legacy plugins are loaded first and then with `-fplugin=A -fpass-plugin=B -fpass-plugin=A`: A will be loaded as a legacy plugin and define llvmGetPassPluginInfo; B will be loaded and redefine it; and finally when A is loaded as an NPM plugin it will be resolved to the definition from B. Instead of searching globally, restrict the symbol lookup to the library that is currently being loaded. Differential Revision: https://reviews.llvm.org/D104916
-
Yaxun (Sam) Liu authored
Reviewed by: Stanislav Mekhanoshin, Matt Arsenault Differential Revision: https://reviews.llvm.org/D104946
-
Nico Weber authored
-
Nico Weber authored
That commit removed the include of Features.inc from ClangdLSPServer.h, but ClangdMain.cpp relied on this include to pull in Features.inc for the #if at the bottom of Transport.h. Since the include is needed in Transport.h, just add it to there directly.
-
Fangrui Song authored
See the comment for my understanding of -no-pie and -shared expectation. -no-pie has freedom on choices. We choose dynamic relocations to be consistent with the handling of GOT-generating relocations. Note: GNU ld has arch-varying behaviors and its x86 -pie has a very complex rule: if there is at least one GOT-generating or PLT-generating relocation and -z dynamic-undefined-weak (enabled by default) is in effect, generate a dynamic relocation. We don't emulate its rule. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D105164
-
David Goldman authored
Objective-C lets you use the `self.prop` syntax as sugar for both `[self prop]` and `[self setProp:]`, but clangd previously did not provide a semantic token for `prop`. Now, we provide a semantic token, treating it like a normal property except it's backed by a `ObjCMethodDecl` instead of a `ObjCPropertyDecl`. Differential Revision: https://reviews.llvm.org/D104117
-
Caroline Tice authored
[lldb] Replace SVE_PT* macros in NativeRegisterContextLinux_arm64.{cpp,h} with their equivalent defintions in LinuxPTraceDefines_arm64sve.h Commit 090306fc (August 2020) changed most of the arm64 SVE_PT* macros, but apparently did not make the changes in the NativeRegisterContextLinux_arm64.* files (or those files were pulled over from someplace else after that commit). This change replaces the macros NativeRegisterContextLinux_arm64.cpp with the replacement definitions in LinuxPTraceDefines_arm64sve.h. It also includes LinuxPTraceDefines_arm64sve.h in NativeRegisterContextLinux_arm64.h. Differential Revision: https://reviews.llvm.org/D104826 -
thomasraoux authored
InsertElement takes a scalar integer attribute not an array of integer. Differential Revision: https://reviews.llvm.org/D105174
-
thomasraoux authored
Differential Revision: https://reviews.llvm.org/D105175
-
- Jun 30, 2021
-
-
LLVM GN Syncbot authored
-
Jeremy Morse authored
In various circumstances, when we clobber a register there may be alternative locations that the value is live in. The classic example would be a value loaded from the stack, and then clobbered: the value is still available on the stack. InstrRefBasedLDV was coping with this at block starts where it's forced to pick a location, however it wasn't searching for alternative locations when values were clobbered. This patch notifies the "Transfer Tracker" object when clobbers occur, and it's able to find alternatives and issue DBG_VALUEs for that location. See: the added test. Differential Revision: https://reviews.llvm.org/D88405
-
Joseph Huber authored
The remarks will trigger on some functions that are marked cold, such as the `__muldc3` intrinsic functions. Change the remarks to avoid these functions. Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D105196
-
Sam McCall authored
This displays as: `Size: 4 bytes (+4 padding)` Also stop showing (byte) offset/size for bitfields. They're not meaningful and using them to calculate padding is dangerous! Differential Revision: https://reviews.llvm.org/D98377
-
Sam McCall authored
Included in logs, --version, remote index queries, and LSP serverInfo. Differential Revision: https://reviews.llvm.org/D100553
-
Sam McCall authored
struct A { struct { int b; }; }; A().^b; This should be considered a reference to b, but currently it's considered a reference to the anonymous struct field. Fixes https://github.com/clangd/clangd/issues/798 Differential Revision: https://reviews.llvm.org/D104376 -
Philip Reames authored
We have analogous rules in instsimplify, etc.., but were missing the same in SCEV. The fold is near trivial, but came up in the context of a larger change.
-
Philip Reames authored
-
Louis Dionne authored
The various design docs have been moved to RST, and the linked blog post does not apply anymore since libc++ is the default library used by Clang on Apple platforms.
-
Craig Topper authored
I believe this Changed flag should be initialized to false, otherwise the if (!Changed) is always dead. This doesn't manifest in a functional issue because the PHINode checks will fail if nothing changed. They are identical to the earlier checks that must have already failed to get into this else block. While there remove an else after return to reduce indentation. Differential Revision: https://reviews.llvm.org/D105159
-
Louis Dionne authored
This patch augments Lit with the ability to parse regular expressions in boolean expressions. This includes REQUIRES:, XFAIL:, UNSUPPORTED:, and all other special Lit markup that evaluates to a boolean expression. Regular expressions can be specified by enclosing them in {{...}}, similarly to how FileCheck handles such regular expressions. The regular expression can either be on its own, or it can be part of an identifier. For example, a match expression like {{.+}}-apple-darwin{{.+}} would match the following variables: x86_64-apple-darwin20.0 arm64-apple-darwin20.0 arm64-apple-darwin22.0 etc... In the long term, this could be used to remove the need to handle the target triple specially when parsing boolean expressions. Differential Revision: https://reviews.llvm.org/D104572 -
Florian Mayer authored
Reviewed By: glider Differential Revision: https://reviews.llvm.org/D105190
-
Simon Pilgrim authored
Based off the worse case numbers generated by D103695, the AVX1/2/512 sitofp/uitofp/fptosi/fptoui costs were higher than necessary (based off instruction counts instead of actual throughput). The SSE costs still need further fixes, but I hit an issue with the order in which SSE costs are checked - we need to check CUSTOM costs (with non-legal types) first, and then fallback to LEGALIZED types. I'm looking at this now, and this should let us start thinning out a lot of the duplicates in the costs tables. Then we can finally start work on vXi64 / vXi16 / vXi8 / vXi1 integers, which should let us look at sub-128-bit vectorization (D103925).
-
Nico Weber authored
This reverts commit 1d9539cf. Test fails in LLVM_ENABLE_ASSERTIONS=OFF builds (such as regular release builds).
-
William S. Moses authored
See https://reviews.llvm.org/D104865
-
William S. Moses authored
The executeregionop is used to allow multiple blocks within SCF constructs. If the container allows multiple blocks, inline the region Differential Revision: https://reviews.llvm.org/D104960
-