- Jul 04, 2020
-
-
Simon Pilgrim authored
Tests based on the PR37890 test cases - the vector combine pass should leave us with a reduction chain ending in extract(add(x,shuffle(x,1,-1,...))), but the higher reduction stages will be subvector extractions not shuffles.
-
Yash Jain authored
Introduce pass to convert parallel affine.for op into 1-D affine.parallel op. Run using --affine-parallelize. Removes test-detect-parallel: pass for checking parallel affine.for ops. Differential Revision: https://reviews.llvm.org/D82672
-
Simon Pilgrim authored
[X86][AVX] Fold PACK(LOSUBVECTOR(SHUFFLE(X)),HISUBVECTOR(SHUFFLE(X))) -> SHUFFLE(PACK(LOSUBVECTOR(X),HISUBVECTOR(X))) Using PACK for truncations leaves us with intermediate shuffles that can be tricky to remove while the truncation tree is being formed. This fold helps pull out the PERMQ case which is one of the most common, avoiding some costly lane-crossing shuffles. A future patch will begin adding more general shuffle folding, which we should be able to use for HADD/HSUB as well.
-
LLVM GN Syncbot authored
-
Kirstóf Umann authored
If you were around the analyzer for a while now, you must've seen a lot of patches that awkwardly puts code from one library to the other: * D75360 moves the constructors of CheckerManager, which lies in the Core library, to the Frontend library. Most the patch itself was a struggle along the library lines. * D78126 had to be reverted because dependency information would be utilized in the Core library, but the actual data lied in the frontend. D78126#inline-751477 touches on this issue as well. This stems from the often mentioned problem: the Frontend library depends on Core and Checkers, Checkers depends on Core. The checker registry functions (`registerMallocChecker`, etc) lie in the Checkers library in order to keep each checker its own module. What this implies is that checker registration cannot take place in the Core, but the Core might still want to use the data that results from it (which checker/package is enabled, dependencies, etc). D54436 was the patch that initiated this. Back in the days when CheckerRegistry was super dumb and buggy, it implemented a non-documented solution to this problem by keeping the data in the Core, and leaving the logic in the Frontend. At the time when the patch landed, the merger to the Frontend made sense, because the data hadn't been utilized anywhere, and the whole workaround without any documentation made little sense to me. So, lets put the data back where it belongs, in the Core library. This patch introduces `CheckerRegistryData`, and turns `CheckerRegistry` into a short lived wrapper around this data that implements the logic of checker registration. The data is tied to CheckerManager because it is required to parse it. Side note: I can't help but cringe at the fact how ridiculously awkward the library lines are. I feel like I'm thinking too much inside the box, but I guess this is just the price of keeping the checkers so modularized. Differential Revision: https://reviews.llvm.org/D82585
-
-
Uday Bondhugula authored
While lowering min/max pooling ops to loops, generate the right kind of load/stores (std or affine) instead of always generating std load/stores. Differential Revision: https://reviews.llvm.org/D83080
-
Paul Walker authored
AArch64ExpandPseudo::expand_DestructiveOp contains an assert to ensure the destructive operand's register is unique. However, this is only required when psuedo expansion emits a movprfx. A simple example when a movprfx is not required is Z0 = FADD_ZPZZ_UNDEF_S P0, Z0, Z0 which expands to an unprefixed FADD_ZPmZ_S instruction. This patch moves the assert to the places where a movprfx is emitted. Differential Revision: https://reviews.llvm.org/D83029
-
Sam McCall authored
Summary: ClangdServer owns the question of exactly which config to create, but TUScheduler/BackgroundIndex control threads and so decide at which point to inject it. Reviewers: kadircet Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D83095
-
Nikita Popov authored
This is picking up a loose thread from D69006: We can simplify (zext x) ule (sext x) and (zext x) sge (sext x) to true, with various permutations. Oddly, SCEV knows about this identity, but nothing on the IR level does. Differential Revision: https://reviews.llvm.org/D83081
-
Nikita Popov authored
Add vector variants, and negative tests where the operand does not match.
-
LLVM GN Syncbot authored
-
Sam McCall authored
Summary: The Provider extension point is designed to also be implemented by ClangdLSPServer (to inject config-over-lsp) and likely by embedders. Reviewers: kadircet Subscribers: mgorny, ilya-biryukov, MaskRay, jkorous, arphaman, jfb, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D82964
-
Craig Topper authored
Seems to produce better results on some rotate tests. And is neutral for other tests.
-
Kai Luo authored
This patch is part of supporting `-fstack-clash-protection`. Implemented probing when emitting prologue. Differential Revision: https://reviews.llvm.org/D81460
-
Craig Topper authored
-
peter klausler authored
Rework initial implementation of external I/O unit operations to fix problems exposed in unit tests (in a later patch). Add flushing. Reviewed By: sscalpone Differential Revision: https://reviews.llvm.org/D83147
-
Thomas Lively authored
Summary: Since the br_table instruction takes an i32, switches over i64s (and larger integers) must use the i32.wrap_i64 instruction to truncate the table index. This truncation makes numbers just over 2^32 indistinguishable from small numbers, so it was a miscompilation to omit the range check preceding these br_tables. This change fixes the problem by skipping the "fixing" of the br_table when the range check is an i64 instruction. Fixes PR46447. Reviewers: aheejin, dschuff, kripken Reviewed By: kripken Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D83017
-
Fangrui Song authored
This test strangely failed on ppc64be http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/50913
-
Fangrui Song authored
-
Francis Visoiu Mistrih authored
This emits a remark when LoopDeletion deletes a dead loop, using the source location of the loop's header. There are currently two reasons for removing the loop: invariant loop or loop that never executes. Differential Revision: https://reviews.llvm.org/D83113
-
Lei Huang authored
-
Roman Lebedev authored
-
Roman Lebedev authored
-
Sanjay Patel authored
We canonicalize patterns like: %s = lshr i32 %a0, 1 %t = trunc i32 %s to i1 to: %a = and i32 %a0, 2 %c = icmp ne i32 %a, 0 ...in IR, but the bit-shifting original sequence may be better for x86 vector codegen. I tried several variants of the transform, and it's tricky to not induce regressions. In particular, I did not find a way to cleanly handle non-splat constants, so I've left that as a TODO item here (currently negative tests for those are included). AVX512 resulted in some diffs, but didn't look meaningful, so I left that out too. Some of the 256-bit AVX1 diffs are questionable, but close enough that they are probably insignificant. Differential Revision: https://reviews.llvm.org/D83073.
-
Sanjay Patel authored
Alive2: define i32 @src(i1 %x, i1 %y) { %0: %zx = sext i1 %x to i32 %zy = sext i1 %y to i32 %r = mul i32 %zx, %zy ret i32 %r } => define i32 @tgt(i1 %x, i1 %y) { %0: %a = and i1 %x, %y %r = zext i1 %a to i32 ret i32 %r } Transformation seems to be correct! https://alive2.llvm.org/ce/z/gaPQxA -
Sanjay Patel authored
-
Vy Nguyen authored
Reviewers: jyknight, EricWF, #libc! Subscribers: arphaman, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D82490
-
Kadir Cetinkaya authored
Summary: This also changes the way we display Size and Offset to be independent. Reviewers: sammccall Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D83143
-
Biplob Mishra authored
Implements vec_insertl() and vec_inserth(). Differential Revision: https://reviews.llvm.org/D82365
-
Stephen Kelly authored
Reviewers: aaron.ballman, klimek Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D83076
-
peter klausler authored
Add a data member knownSize_ and an accessor to allow the size of an external file to be tracked when known. Also add a wrapper for ::isatty() here in the filesystem encapsulation module. These features are needed for the external I/O rework changes still to come. Reviewed By: sscalpone Differential Revision: https://reviews.llvm.org/D83141
-
peter klausler authored
Add more IOSTAT= values for errors that can arise in external I/O. Reviewed By: sscalpone Differential Revision: https://reviews.llvm.org/D83140
-
Florian Hahn authored
Narrowing an input expression of a truncate to a type larger than the result of the truncate won't allow removing the truncate, but it may enable further optimizations, e.g. allowing for larger vectorization factors. For now this is intentionally limited to integer types only, to avoid producing new vector ops that might not be suitable for the target. If we know that the only user is a trunc, we can also be allow more cases, e.g. also shortening expressions with some additional shifts. I would appreciate feedback on the best place to do such a narrowing. This fixes PR43580. Reviewers: spatel, RKSimon, lebedev.ri, xbolva00 Reviewed By: lebedev.ri Differential Revision: https://reviews.llvm.org/D82973
-
Louis Dionne authored
Instead of detecting it automatically (in libc++) and relying on _LIBCXXABI_NO_EXCEPTIONS being set explicitly (in libc++abi), always detect whether exceptions are enabled automatically. This commit also removes support for specifying -D_LIBCPP_NO_EXCEPTIONS and -D_LIBCXXABI_NO_EXCEPTIONS explicitly -- those should just be inferred from using -fno-exceptions (or an equivalent flag). Allowing both -D_FOO_NO_EXCEPTIONS to be provided explicitly and trying to detect it automatically is just confusing, especially since we did specify it explicitly when building libc++abi. We should have only one way to detect whether exceptions are enabled, but it should be robust.
-
Eric Schweitz authored
The FIR builder is a helper class that manages the creation of MLIR operations from the bridge. The focus of the builder is the creation of Operations, Types, etc. Differential revision: htps://reviews.llvm.org/D83107
-
jasonliu authored
Summary: D80831 changed part of the prefix usage for AIX. But there are other places getting prefix from DataLayout. This patch intends to make prefix usage consistent on AIX. Reviewed by: hubert.reinterpretcast, daltenty Differential Revision: https://reviews.llvm.org/D81270
-
sameerarora101 authored
Differential Revision: https://reviews.llvm.org/D82786
-
Sanjay Patel authored
The base case only works because we are relying on a poison-unsafe select transform; if that is fixed, we would regress on patterns like this. The extra use tests show that the select transform can't be applied consistently. So it may be a regression to have an extra instruction on 1 test, but that result was not created safely and does not happen reliably.
-
Sanjay Patel authored
-