- Aug 27, 2020
-
-
Anatoly Trosinenko authored
The existing implementations are almost identical except for width of the integer type. Factor them out to int_mulo_impl.inc for better maintainability. This patch is almost identical to D86277. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D86289
-
Anatoly Trosinenko authored
The existing implementations are almost identical except for width of the integer type. Factor them out to int_mulv_impl.inc for better maintainability. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D86277
-
Andrew Ng authored
Differential Revision: https://reviews.llvm.org/D86639
-
OCHyams authored
This reverts commit b9d977b0. This cutoff is no longer required. The commit 34ffa7fc501 (D86153) introduces a performance improvement which was tested against the motivating case for this patch. Discussed in differential revision: https://reviews.llvm.org/D86153
-
OCHyams authored
Almost NFC (see end). The backwards scan in validThroughout significantly contributed to compile time for a pathological case, causing the 'X86 Assembly Printer' pass to account for roughly 70% of the run time. This patch guards the loop against running unnecessarily, bringing the pass contribution down to 4%. Almost NFC: There is a hack in validThroughout which promotes single constant value DBG_VALUEs in the prologue to be live throughout the function. We're more likely to hit this code path with this patch applied. Similarly to the parent patches there is a small coverage change reported in the order of 10s of bytes. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D86153
-
OCHyams authored
With the changes introduced in D86151 we can now check for single locations which span multiple blocks for inlined scopes and blocks. D86151 introduced the InstructionOrdering parameter, replacing a scan through MBB instructions. The functionality to compare instruction positions across blocks was add there, and this patch just removes the exit checks that were previously (but no longer) required. CTMark shows a geomean binary size reduction of 2.2% for RelWithDebInfo builds. llvm-locstats (using D85636) shows a very small variable location coverage change in 5 of 10 binaries, but just like in D86151 it is only in the order of 10s of bytes. Reviewed By: djtodoro Differential Revision: https://reviews.llvm.org/D86152
-
OCHyams authored
With this patch we're now accounting for two more cases which should be considered 'valid throughout': First, where RangeEnd is ScopeEnd. Second, where RangeEnd comes before ScopeEnd when including meta instructions, but are both preceded by the same non-meta instruction. CTMark shows a geomean binary size reduction of 1.5% for RelWithDebInfo builds. `llvm-locstats` (using D85636) shows a very small variable location coverage change in 2 of 10 binaries, but it is in the order of 10s of bytes which lines up with my expectations. I've added a test which checks both of these new cases. The first check in the test isn't strictly necessary for this patch. But I'm not sure that it is explicitly tested anywhere else, and is useful for the final patch in the series. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D86151
-
OCHyams authored
Group the map and methods used to query instruction ordering for trimVarLocs (D82129) into a class. This will make it easier to reuse the functionality upcoming patches. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D86150
-
Cullen Rhodes authored
This patch implements the semantics for the 'arm_sve_vector_bits' type attribute, defined by the Arm C Language Extensions (ACLE) for SVE [1]. The purpose of this attribute is to define vector-length-specific (VLS) versions of existing vector-length-agnostic (VLA) types. The semantics were already implemented by D83551, although the implementation approach has since changed to represent VLSTs as VectorType in the AST and fixed-length vectors in the IR everywhere except in function args/returns. This is described in the prototype patch D85128 demonstrating the new approach. The semantic changes added in D83551 are changed since the AttributedType is replaced by VectorType in the AST. Minimal changes were necessary in the previous patch as the canonical type for both VLA and VLS was the same (i.e. sizeless), except in constructs such as globals and structs where sizeless types are unsupported. This patch reverts the changes that permitted VLS types that were represented as sizeless types in such circumstances, and adds support for implicit casting between VLA <-> VLS types as described in section 3.7.3.2 of the ACLE. Since the SVE builtin types for bool and uint8 are both represented as BuiltinType::UChar in VLSTs, two new vector kinds are implemented to distinguish predicate and data vectors. [1] https://developer.arm.com/documentation/100987/latest Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D85736
-
Florian Hahn authored
-
Vitaly Buka authored
-
Mikhail Maltsev authored
This patch adds code to recognize vector shuffles which can be represented as VDUP (splat) of a vector lane with of a different (wider) type than the original vector lane type. For example: shufflevector <4 x i16> %v, <4 x i16> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1> is essentially: shufflevector <2 x i32> %v, <2 x i32> undef, <2 x i32> <i32 0, i32 0> Such patterns are generated by the SelectionDAG machinery in some cases (see DAGCombiner::visitBITCAST in DAGCombiner.cpp, the "Remove double bitcasts from shuffles" part). Reviewed By: dmgreen Differential Revision: https://reviews.llvm.org/D86225 -
Vitaly Buka authored
-
Paul Walker authored
Differential Revision: https://reviews.llvm.org/D86394
-
Sander de Smalen authored
This patch adds type information for SVE ACLE vector types, by describing them as vectors, with a lower bound of 0, and an upper bound described by a DWARF expression using the AArch64 Vector Granule register (VG), which contains the runtime multiple of 64bit granules in an SVE vector. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D86101
-
Sjoerd Meijer authored
-
James Henderson authored
Whilst reviewing some internal testing, I noticed a couple of holes in coverage of mergeable sections containing symbols. This patch addresses these holes: 1) Show that mid-piece symbols have their values updated properly when pieces are merged. 2) Show the behaviour of symbols in mergeable pieces when --gc-sections is enabled. Reviewed by: grimar, MaskRay Differential Revision: https://reviews.llvm.org/D86543
-
Alex Richardson authored
Since the canonical floatig-point move is fsgnj rd, rs, rs, we should handle this case in RISCVInstrInfo::isAsCheapAsAMove(). Reviewed By: lenary Differential Revision: https://reviews.llvm.org/D86518
-
Alex Richardson authored
Reviewed By: luismarques Differential Revision: https://reviews.llvm.org/D86517
-
Alex Richardson authored
The isTriviallyRematerializable hook is only called for instructions that are tagged as isAsCheapAsAMove. Since ADDI 0 is used for "mv" it should definitely be marked with "isAsCheapAsAMove". This change avoids one stack spill in most of the atomic-rmw.ll tests functions. It also avoids stack spills in two of our out-of-tree CHERI tests. ORI/XORI with zero may or may not be the same as a move micro-architecturally, but since we are already doing it for register == x0, we might as well do the same if the immediate is zero. Reviewed By: luismarques Differential Revision: https://reviews.llvm.org/D86480
-
David Spickett authored
Specify type when constructing PromotionKeys, this fixes error: "chosen constructor is explicit in copy-initialization" when compiling lldb with GCC 5.4.0. This is due to std::tuple having an explicit default constructor, see: http://cplusplus.github.io/LWG/lwg-defects.html#2193 Reviewed By: labath Differential Revision: https://reviews.llvm.org/D86690
-
Vitaly Buka authored
-
Georgii Rymar authored
This refactors/rewrites the code to remove duplication. Differential revision: https://reviews.llvm.org/D86623
-
Florian Hahn authored
For DSE with MemorySSA it is beneficial to manually traverse the defining access, instead of using a MemorySSA walker, so we can better control the number of steps together with other limits and also weed out invalid/unprofitable paths early on. This patch requires a follow-up patch to be most effective, which I will share soon after putting this patch up. This temporarily XFAIL's the limit tests, because we now explore more MemoryDefs that may not alias/clobber the killing def. This will be improved/fixed by the follow-up patch. This patch also renames some `Dom*` variables to `Earlier*`, because the dominance relation is not really used/important here and potentially confusing. This patch allows us to aggressively cut down compile time, geomean -O3 -0.64%, ReleaseThinLTO -1.65%, at the expense of fewer stores removed. Subsequent patches will increase the number of removed stores again, while keeping compile-time in check. http://llvm-compile-time-tracker.com/compare.php?from=d8e3294118a8c5f3f97688a704d5a05b67646012&to=0a929b6978a068af8ddb02d0d4714a2843dd8ba9&stat=instructions Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D86486
-
Rainer Orth authored
A build on `sparcv9-sun-solaris2.11` with `-DLLVM_ENABLE_PIC=Off` failed linking `LLVMPolly.so`: [2277/2297] Linking CXX shared module lib/LLVMPolly.so FAILED: lib/LLVMPolly.so [...] ld: fatal: relocation error: R_SPARC_H44: file tools/polly/lib/CMakeFiles/obj.Polly.dir/Analysis/DependenceInfo.cpp.o: symbol .data._ZL16__gthread_active (section): invalid shared object relocation type: ABS44 code model unsupported [...] As on many other targets, one cannot link non-PIC objects into a shared object on Solaris/sparcv9. The following patch avoids this by not building the library without PIC. It allowed the build to finish. Differential Revision: https://reviews.llvm.org/D85627
-
Vitaly Buka authored
-
Sjoerd Meijer authored
This reverts commit 8d5f64c4. Thanks to Eli Friedma for pointing out that this check is not appropiate here, this check will be moved to the Lint pass.
-
Piotr Sobczak authored
There is no justification for changing vcc_lo to vcc when shrinking V_CNDMASK, and such a change could later confuse live variable analysis. Make sure the original register is preserved. Differential Revision: https://reviews.llvm.org/D86541
-
Frederik Gossen authored
Differential Revision: https://reviews.llvm.org/D86606
-
Sjoerd Meijer authored
We had already specified that second argument `n` of this intrinsic is `n > 0`, but now add to this that the result is a poison value if this is not the case. Differential Revision: https://reviews.llvm.org/D86637
-
Shinji Okumura authored
Currently, an undef value is reduced to 0 when it is added to a set of potential values. This patch introduces a flag for under values. By this, for example, we can merge two states `{undef}`, `{1}` to `{1}` (because we can reduce the undef to 1). Reviewed By: jdoerfert Differential Revision: https://reviews.llvm.org/D85592 -
Sam Parker authored
Enable default outlining when the function has the minsize attribute and we're targeting an m-class core. Differential Revision: https://reviews.llvm.org/D82951
-
Martin Storsjö authored
This reverts commit 99364552. That commit caused failed assertions e.g. like this: $ cat alloca.c a; b() { float c; d(); a = __builtin_alloca(d); c = e(); f(a); return c; } $ clang -target aarch64-linux-gnu -c alloca.c -O2 clang: ../lib/Target/AArch64/AArch64InstrInfo.cpp:3446: void llvm::emitFrameOffset(llvm::MachineBasicBlock&, llvm::MachineBasicBlock::iterator, const llvm::DebugLoc&, unsigned int, unsigned int, llvm::StackOffset, const llvm::TargetInstrInfo*, llvm::MachineInstr::MIFlag, bool, bool, bool*): Assertion `(DestReg != AArch64::SP || Bytes % 16 == 0) && "SP increment/decrement not 16-byte aligned"' failed.
-
Kazuaki Ishizaki authored
Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D86648
-
George Mitenkov authored
This patch allows to pass the gpu module name to SPIR-V module during conversion. This has many benefits as we can lookup converted to SPIR-V kernel in the symbol table. In order to avoid symbol conflicts, `"__spv__"` is added to the gpu module name to form the new one. Reviewed By: mravishankar Differential Revision: https://reviews.llvm.org/D86384
-
luxufan authored
Implements the assemble and disassemble support of RISCV Vector extension zvamo instructions, base on the 0.9 spec version. Reviewed by HsiangKai Differential Revision: https://reviews.llvm.org/D85069
-
Sam Parker authored
Fix the ARM backend's analyzeBranch so it doesn't ignore predicated return instructions, and make the MachineVerifier rule more strict. Differential Revision: https://reviews.llvm.org/D40061
-
LLVM GN Syncbot authored
-
LLVM GN Syncbot authored
-
Jez Ng authored
Summary: It was passing on my local machine due to previously-written files cached in the test output folder.
-