- Aug 09, 2020
-
-
Simon Pilgrim authored
Use scaleShuffleMask helper for the shuffle(hadd,hadd) canonicalization.
-
Craig Topper authored
Previously this function searched 4 instructions forwards or backwards to determine if it was ok to clobber eflags. This is called in 3 places: rematerialization, turning 2 operand leas into adds or splitting 3 ops leas into an lea and add on some CPU targets. This patch increases the search limit to 10 instructions for rematerialization and 2 operand lea to add. I've left the old treshold for 3 ops lea spliting as that increases code size. Fixes PR47024 and PR43014
-
Simon Pilgrim authored
This was introduced at rGe2022367, and the CreateVectorSplat(unsigned NumElements) variant calls it internally
-
Simon Pilgrim authored
-
Brad Smith authored
-
Dávid Bolvanský authored
-
Dávid Bolvanský authored
-
Dávid Bolvanský authored
Motivation (from PR37674): const char *ss[] = { "foo", "bar", "baz", "qux" // <-- Missing comma! "abc", "xyz" }; This kind of bug was recently also found in LLVM codebase (see PR47030). Solves PR47038, PR37674 Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D85545 -
Roman Lebedev authored
SimplifyCFG has two main folds for resumes - one when resume is directly using the landingpad, and the other one where resume is using a PHI node. While for the first case, we were already correctly ignoring all the PHI nodes, and both the debug info intrinsics and lifetime intrinsics, in the PHI-based-one, we weren't ignoring PHI's in the resume block, and weren't ignoring lifetime intrinsics. That is clearly a bug. On RawSpeed library, this results in +9.34% (+81) more invoke->call folds, -0.19% (-39) landing pads, -0.24% (-81) invoke instructions but +51 call instructions and -132 basic blocks. Though, the run-time performance impact appears to be within the noise.
-
Roman Lebedev authored
-
Roman Lebedev authored
-
Roman Lebedev authored
-
Fangrui Song authored
Fixes PR47017 (a regression when fixing PR46169): if __wrap_ is shared, it is not exported.
-
- Aug 08, 2020
-
-
Sanjay Patel authored
Follow-up to D82716 / rGea71ba11 We do not have the fabs removal fold in IR yet for the case where the sqrt operand is repeated, so that's another potential improvement.
-
Sanjay Patel authored
-
Benjamin Kramer authored
-
Rainer Orth authored
Two DebugInfo tests currently `FAIL` on Sparc: LLVM :: DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll LLVM :: DebugInfo/Generic/array.ll both in a similar way. E.g. : 'RUN: at line 1'; /var/llvm/local-sparcv9-A/bin/llc -O2 /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll -o - | /var/llvm/local-sparcv9-A/bin/FileCheck /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll /vol/llvm/src/llvm-project/local/llvm/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll:4:10: error: CHECK: expected string not found in input ; CHECK: debug_info, ^ On `amd64-pc-solaris2.11`, the corresponding line is .section .debug_info,"",@progbits while on `sparcv9-sun-solaris2.11` we have only .section .debug_info This happens because Sparc currently emits `.section` directives using the style of the Solaris/SPARC assembler (controlled by `SunStyleELFSectionSwitchSyntax`). This patch takes the easy way out and allows both forms while tightening the check to only match the `.section` directive. Tested on `sparcv9-sun-solaris2.11`, `amd64-pc-solaris2.11`, `x86_64-pc-linux-gnu`, and `x86_64-apple-darwin20.0.0`. Differential Revision: https://reviews.llvm.org/D85414 -
Siva Chandra Reddy authored
Will be reenabled after investigating and fixing the problem.
-
Siva Chandra Reddy authored
This eliminates UnitTest's dependency on FPUtil and hence prevents non-math tests from depending indirectly on FPUtil. The patch essentially moves some of the existing pieces into a library of its own. Along the way, renamed add_math_unittest to add_fp_unittest. Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D85486
-
Feng Liu authored
This patch also fixes a minor issue that shape.rank should allow returning !shape.size. The dialect doc has such an example for shape.rank. Differential Revision: https://reviews.llvm.org/D85556
-
Juneyoung Lee authored
This patch adds an optimization that folds select(freeze(icmp eq/ne x, y), x, y) to x or y. This was needed to resolve slowdown after D84940 is applied. I tried to bake this logic into foldSelectInstWithICmp, but it wasn't clear. This patch conservatively writes the pattern in a separate function, foldSelectWithFrozenICmp. The output does not need freeze; https://alive2.llvm.org/ce/z/X49hNE (from @nikic) Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D85533
-
Siva Chandra Reddy authored
The new code added is still very x86_64 specific. AArch64 support will be added very soon and refactoring of the loader code will be done as part of the patches adding it. Reviewed By: asteinhauser Differential Revision: https://reviews.llvm.org/D82700
-
Juneyoung Lee authored
-
Craig Topper authored
Previously the transform was doing these two canonicalizations (x > y) ? x : y -> (x >= y) ? x : y (x < y) ? x : y -> (x <= y) ? x : y But those don't seem to be useful generally. And they actively pessimize the cases in PR47049. This patch limits it to (x > 0) ? x : 0 -> (x >= 0) ? x : 0 (x < -1) ? x : -1 -> (x <= -1) ? x : -1 These are the cases mentioned in the comments as the motivation for the canonicalization. These allow the CMOV to use the S flag from the compare thus improving opportunities to use a TEST or the flags from an arithmetic instruction.
-
Mehdi Amini authored
-
Mehdi Amini authored
Fix include/mlir/Reducer/ReductionNode.h:79:18: warning: private field 'parent' is not used [-Wunused-private-field]
-
Mehdi Amini authored
This reverts commit 9f24640b. We hit some dead-locks on thread exit in some configurations: TLS exit handler is taking a lock. Temporarily reverting this change as we're debugging what is going on.
-
Fangrui Song authored
glibc/sysdeps/unix/sysv/linux/x86_64/sigaction.c libc.a(sigaction.o) has a CIE with the augmentation string "zRS". Support 'S' to allow --icf={safe,all}. -
Vincent Zhao authored
This revision aims to provide a new API, `checkTilingLegality`, to verify that the loop tiling result still satisifes the dependence constraints of the original loop nest. Previously, there was no check for the validity of tiling. For instance: ``` func @diagonal_dependence() { %A = alloc() : memref<64x64xf32> affine.for %i = 0 to 64 { affine.for %j = 0 to 64 { %0 = affine.load %A[%j, %i] : memref<64x64xf32> %1 = affine.load %A[%i, %j - 1] : memref<64x64xf32> %2 = addf %0, %1 : f32 affine.store %2, %A[%i, %j] : memref<64x64xf32> } } return } ``` You can find more information about this example from the Section 3.11 of [1]. In general, there are three types of dependences here: two flow dependences, one in direction `(i, j) = (0, 1)` (notation that depicts a vector in the 2D iteration space), one in `(i, j) = (1, -1)`; and one anti dependence in the direction `(-1, 1)`. Since two of them are along the diagon... -
Richard Smith authored
declarations and requires-expressions.
-
Keno Fischer authored
In D85499, I attempted to fix this same issue by canonicalizing andnp for i1 vectors, but since there was some opposition to such a change, this commit just fixes the bug by using two different forms depending on which kind of vector type is in use. We can then always decide to switch the canonical forms later. Description of the original bug: We have a DAG combine that tries to fold (vselect cond, 0000..., X) -> (andnp cond, x). However, it does so by attempting to create an i64 vector with the number of elements obtained by truncating division by 64 from the bitwidth. This is bad for mask vectors like v8i1, since that division is just zero. Besides, we don't want i64 vectors anyway. For i1 vectors, switch the pattern to (andnp (not cond), x), which is the canonical form for `kandn` on mask registers. Fixes https://github.com/JuliaLang/julia/issues/36955. Differential Revision: https://reviews.llvm.org/D85553
-
LLVM GN Syncbot authored
-
Yuanfang Chen authored
This relands commit 320eab2d. The test failed because it was looking for x86-linux target unconditionally. Now it gets the default target.
-
peter klausler authored
Objects that are storage associated by EQUIVALENCE and initialized with DATA are initialized by creating a compiler temporary data object in the same scope, assigning it an offset, type, and size that covers the transitive closure of the associated initialized original symbols, and combining their initializers into one common initializer for the temporary. Some problems with offset assignment of EQUIVALENCE'd objects in COMMON were exposed and corrected, and some more error cases are checked. Remove obsolete function. Small bugfix (nested implied dos). Add a test. Fix struct/class warning. Differential Revision: https://reviews.llvm.org/D85560
-
Matt Arsenault authored
-
Vitaly Buka authored
-
Teresa Johnson authored
As pointed out in D85387, part of the comment for MapDynamicShadow refactored to sanitizer_common in D83247 was incorrect for non-Linux versions. Update the comment to reflect that.
-
Mauricio Sifontes authored
Implement the Reduction Tree Pass framework as part of the MLIR Reduce tool. This is a parametarizable pass that allows for the implementation of custom reductions passes in the tool. Implement the FunctionReducer class as an example of a Reducer class parameter for the instantiation of a Reduction Tree Pass. Create a pass pipeline with a Reduction Tree Pass with the FunctionReducer class specified as parameter. Reviewed By: jpienaar Differential Revision: https://reviews.llvm.org/D83969
-
Nick Desaulniers authored
This reverts commit e486921f. Breaks windows builds and osx builds.
-
Nick Desaulniers authored
This reverts commit cbd8ec93.
-