- Aug 05, 2020
-
-
Diego Caballero authored
Always define a remapping for the memref replacement (`indexRemap`) with the proper number of inputs, including all the `outerIVs`, so that the number of inputs and the operands provided for the map don't mismatch. Reviewed By: bondhugula, andydavis1 Differential Revision: https://reviews.llvm.org/D85177
-
Fangrui Song authored
This is a Windows only test which requires HAVE_DIA_SDK, so I failed to notice it.
-
Matt Arsenault authored
This one is pretty easy and shrinks the list of unhandled intrinsics. I'm not sure how relevant the insert point is. Using the insert position of EntryBuilder will place this after constants. SelectionDAG seems to end up emitting these after argument copies and before anything else, but I don't think it really matters. This also ends up emitting these in the opposite order from SelectionDAG, but I don't think that matters either. This also needs a fix to stop the later passes dropping this as a dead instruction. DeadMachineInstructionElim's version of isDead special cases LOCAL_ESCAPE for some reason, and I'm not sure why it's excluded from MachineInstr::isLabel (or why isDead doesn't check it). I also noticed DeadMachineInstructionElim never considers inline asm as dead, but GlobalISel will drop asm with no constraints.
-
cgyurgyik authored
Reviewed By: sivachandra Differential Revision: https://reviews.llvm.org/D85059
-
Matt Arsenault authored
-
Matt Arsenault authored
-
Louis Dionne authored
-
aartbik authored
Introduces the expand and compress operations to the Vector dialect (important memory operations for sparse computations), together with a first reference implementation that lowers to the LLVM IR dialect to enable running on CPU (and other targets that support the corresponding LLVM IR intrinsics). Reviewed By: reidtatge Differential Revision: https://reviews.llvm.org/D84888
-
Bardia Mahjour authored
This patch tries to improve readability and maintenance of createVectorizedLoopSkeleton by reorganizing some lines, updating some of the comments and breaking it up into smaller logical units. Reviewed By: pjeeva01 Differential Revision: https://reviews.llvm.org/D83824
-
Xavier Denis authored
This revision adds the following peephole optimization and it's negation: %a = urem i64 %x, %y %b = icmp ule i64 %a, %x ====> %b = true With John Regehr's help this optimization was checked with Alive2 which suggests it should be valid. This pattern occurs in the bound checks of Rust code, the program const N: usize = 3; const T = u8; pub fn split_mutiple(slice: &[T]) -> (&[T], &[T]) { let len = slice.len() / N; slice.split_at(len * N) } the method call slice.split_at will check that len * N is within the bounds of slice, this bounds check is after some transformations turned into the urem seen above and then LLVM fails to optimize it any further. Adding this optimization would cause this bounds check to be fully optimized away. ref: https://github.com/rust-lang/rust/issues/74938 Differential Revision: https://reviews.llvm.org/D85092 -
Xavier Denis authored
-
Fangrui Song authored
D83530 removed --inlining={true,false} which were used by old asan_symbolize.py script. Add compatibility aliases so that old asan_symbolize.py and sanitizer binaries can work with new llvm-symbolizer. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D85228 -
Nikita Popov authored
Teach SCCP to create notconstant lattice values from inequality assumes and nonnull metadata, and update getConstant() to make use of them. Additionally isOverdefined() needs to be changed to consider notconstant an overdefined value. Handling inequality branches is delayed until our branch on undef story in other passes has been improved. Differential Revision: https://reviews.llvm.org/D83643
-
Thorsten Schuett authored
"Listing the alignment and access size (== expected alignment) in the warning seems like a good idea." solves PR 46947 struct Foo { struct Bar { void * a; void * b; }; Bar bar; }; struct ThirtyTwo { struct Large { void * a; void * b; void * c; void * d; }; Large bar; }; void braz(Foo *foo, ThirtyTwo *braz) { Foo::Bar bar; __atomic_load(&foo->bar, &bar, __ATOMIC_RELAXED); ThirtyTwo::Large foobar; __atomic_load(&braz->bar, &foobar, __ATOMIC_RELAXED); } repro.cpp:21:3: warning: misaligned atomic operation may incur significant performance penalty; the expected (16 bytes) exceeds the actual alignment (8 bytes) [-Watomic-alignment] __atomic_load(&foo->bar, &bar, __ATOMIC_RELAXED); ^ repro.cpp:24:3: warning: misaligned atomic operation may incur significant performance penalty; the expected (32 bytes) exceeds the actual alignment (8 bytes) [-Watomic-alignment] __atomic_load(&braz->bar, &foobar, __ATOMIC_RELAXED); ^ repro.cpp:24:3: warning: large atomic operation may incur significant performance penalty; the access size (32 bytes) exceeds the max lock-free size (16 bytes) [-Watomic-alignment] 3 warnings generated. Differential Revision: https://reviews.llvm.org/D85102 -
Jordan Rupprecht authored
This is a followup to 817b3a6f: in `builder_base` we should use abspath, not realpath, because the name is significant. This is used by test cases that use `@skipIf(compiler="clang", compiler_version=['<', <version>])`
-
Sanjay Patel authored
The test are adapted from the existing tests for cmp/select idioms.
-
George Mitenkov authored
Second patch with test fixes. Redundant `%{{.*}} = ` removed, label checks added, tabs converted to spaces and some namings are changed to match the convention. Fixed tests: - constant-op-to-llvm - func-ops-to-llvm (renamed) - memory-ops-to-llvm - misc-ops-to-llvm - module-ops-to-llvm - shift-ops-to-llvm (renamed) - spirv-types-to-llvm-invalid (renamed) Reviewed By: ftynse, rriddle Differential Revision: https://reviews.llvm.org/D85206 -
David Blaikie authored
Introduced by fd6584a2 Following similar use of casts in AsmParser.cpp, for instance - ideally this type would use unsigned chars as they're more representative of raw data and don't get confused around implementation defined choices of char's signedness, but this is what it is & the signed/unsigned conversions are (so far as I understand) safe/bit preserving in this usage and what's intended, given the API design here.
-
Fangrui Song authored
sanitizer_symbolizer_libcdep.cpp: Change --inlining=true to --inlines and --inlining=false to --no-inlines
-
Nico Weber authored
-
Simon Pilgrim authored
-
Yash Jain authored
Simplify semi-affine expression for the operations like ceildiv, floordiv and modulo by any given symbol by checking divisibilty by that symbol. Some properties used in simplification are: 1) Commutative property of the floordiv and ceildiv: ((expr1 floordiv expr2) floordiv expr3 ) = ((expr1 floordiv expr3) floordiv expr2) ((expr1 ceildiv expr2) ceildiv expr3 ) = ((expr1 ceildiv expr3) ceildiv expr2) While simplification if operations are different no simplification is possible as there is no property that simplify expressions like these: ((expr1 ceildiv expr2) floordiv expr3) or ((expr1 floordiv expr2) ceildiv expr3). 2) If both expr1 and expr2 are divisible by the expr3 then: (expr1 % expr2) / expr3 = ((expr1 / expr3) % (expr2 / expr3)) where / is divide symbol. 3) If expr1 is divisible by expr2 then expr1 % expr2 = 0. Signed-off-by:
Yash Jain <yash.jain@polymagelabs.com> Differential Revision: https://reviews.llvm.org/D84920
-
Cameron McInally authored
These tests were made redundant by D85139.
-
Xing GUO authored
This patch fixes the undefined behavior that reported by ubsan. http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/44524/
-
Matt Arsenault authored
Fixes verifier error with SGPR unmerges with 96-bit result types.
-
Cameron McInally authored
This patch stops unconditionally transforming FSUB(-0, X) into an FNEG(X) while building the MIR. This corresponds with the SelectionDAGISel change in D84056. Differential Revision: https://reviews.llvm.org/D85139
-
Jonas Devlieghere authored
Upstream the code for dealing with TCC introduced in macOS Mojave. This will make the debuggee instead of the debugger responsible for the privileges it needs. Differential revision: https://reviews.llvm.org/D85217
-
Sanjay Patel authored
-
- Aug 04, 2020
-
-
Florian Hahn authored
-
Matt Arsenault authored
There seems to be an unrelated CSEMIRBuilder bug that was causing expensive checks failures in this case. Hack the test to avoid this problem for now until that's fixed.
-
Fangrui Song authored
for the advantage outlined by D83639 ([OptTable] Support grouped short options) Some behavior changes: * -i={0,false} is removed. Use --no-inlines instead. * --demangle={0,false} is removed. Use --no-demangle instead * -untag-addresses={0,false} is removed. Use --no-untag-addresses instead Added a higher level API OptTable::parseArgs which handles optional initial options populated from an environment variable, expands response files recursively, and parses options. Reviewed By: jhenderson Differential Revision: https://reviews.llvm.org/D83530 -
AndreyChurbanov authored
Patch by mati865@gmail.com Differential Revision: https://reviews.llvm.org/D85210
-
Yonghong Song authored
This patch added the following additional compile-once run-everywhere (CO-RE) relocations: - existence/size of typedef, struct/union or enum type - enum value and enum value existence These additional relocations will make CO-RE bpf programs more adaptive for potential kernel internal data structure changes. For existence/size relocations, the following two code patterns are supported: 1. uint32_t __builtin_preserve_type_info(*(<type> *)0, flag); 2. <type> var; uint32_t __builtin_preserve_field_info(var, flag); flag = 0 for existence relocation and flag = 1 for size relocation. For enum value existence and enum value relocations, the following code pattern is supported: uint64_t __builtin_preserve_enum_value(*(<enum_type> *)<enum_value>, flag); flag = 0 means existence relocation and flag = 1 for enum value. relocation. In the above <enum_type> can be an enum type or a typedef to enum type. The <enum_value> needs to be an enumerator value from the same enum type. The return type is uint64_t to permit potential 64bit enumerator values. Differential Revision: https://reviews.llvm.org/D83242 -
Nemanja Ivanovic authored
The swap removal pass looks to remove swaps when a loaded value is swapped, some number of lane-insensitive operations are performed and then the value is swapped again and stored. However, in a situation where we load the value, swap it and then store it without swapping again, the pass erroneously removes the single swap. The reason is that both checks in the same equivalence class: - load feeds a swap - swap feeds a store pass. However, there is no check that the two swaps are actually a single swap. This patch just fixes that. Differential revision: https://reviews.llvm.org/D84785
-
Simon Pilgrim authored
-
Simon Pilgrim authored
-
Jay Foad authored
The custom lowering saves an instruction over the generic expansion, by taking advantage of the fact that PowerPC shift instructions are well defined in the shift-by-bitwidth case. Differential Revision: https://reviews.llvm.org/D83948
-
Jordan Rupprecht authored
In these two cases, use of `os.path.realpath` is problematic: - The name of the compiler is significant [1] . For testing purposes, we might provide a compiler called "clang" which is actually a symlink to some build script (which does some flag processing before invoking the real clang). The destination the symlink may not be called "clang", but we still want it to be treated as such. - When using a build system that puts build artifacts in an arbitrary build location, and later creates a symlink for it (e.g. creates a "<lldb root>/lldbsuite/test/dotest.py" symlinks that points to "/build/artifact/<hash>/dotest.py"), looking at the realpath will not match the "test" convention required here. [1] See `Makefile.rules` in the lldb tree, e.g. we use different flags if the compiler is named "clang" Reviewed By: JDevlieghere Differential Revision: https://reviews.llvm.org/D85175
-
Jay Foad authored
This gives shorter f64 code and perhaps better accuracy. Differential Revision: https://reviews.llvm.org/D84516
-