- Jul 21, 2016
-
-
Sanjay Patel authored
rL245171 exposed a hole in InstSimplify that manifested in a strange way in PR28466: https://llvm.org/bugs/show_bug.cgi?id=28466 It's possible to use trunc + icmp sgt/slt in place of an and + icmp eq/ne, so we need to recognize that pattern to eliminate selects that are choosing between some value and some bitmasked version of that value. Note that there is significant room for improvement (refactoring) and enhancement (more patterns, possibly in InstCombine rather than here). Differential Revision: https://reviews.llvm.org/D22537 llvm-svn: 276341
-
Adam Nemet authored
llvm-svn: 276340
-
Matthew Simpson authored
This patch moves the update instruction for vectorized integer induction phi nodes to the end of the latch block. This ensures consistent placement of all induction updates across all the kinds of int inductions we create (scalar, splat vector, or vector phi). Differential Revision: https://reviews.llvm.org/D22416 llvm-svn: 276339
-
Reid Kleckner authored
std::numeric_limits<int64_t>::max() is not constexpr in VC 2013 headers, and Clang complains that it isn't. MSVC 2013 itself is emitting a dynamic initializer for this thing. Instead, use an enum. llvm-svn: 276334
-
George Burgess IV authored
Having the added `\brief` made doxygen interpret it as the summary for the `llvm` namespace (visible at: http://llvm.org/doxygen/namespaces.html). llvm-svn: 276331
-
Rong Xu authored
Move needsComdatForCounter() to lib/ProfileData/InstrProf.cpp from lib/Transforms/Instrumentation/InstrProfiling.cpp to make is available for other files. Differential Revision: https://reviews.llvm.org/D22643 llvm-svn: 276330
-
Sanjay Patel authored
llvm-svn: 276328
-
Renato Golin authored
Given that other proposals are making their way through, it's better if we specify what GitHub proposal this is, in case there are others that also involve GitHub, but not sub-modules. llvm-svn: 276325
-
Richard Osborne authored
llvm-svn: 276321
-
Anna Thomas authored
This reverts commit r276316. llvm-svn: 276320
-
Sanjoy Das authored
llvm-svn: 276319
-
Anna Thomas authored
Summary: The llvm.invariant.start and llvm.invariant.end intrinsics currently support specifying invariant memory objects only in the default address space. With this change, these intrinsics are overloaded for any adddress space for memory objects and we can use these llvm invariant intrinsics in non-default address spaces. Example: llvm.invariant.start.p1i8(i64 4, i8 addrspace(1)* %ptr) This overloaded intrinsic is needed for representing final or invariant memory in managed languages. Reviewers: tstellarAMD, reames, apilipenko Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D22519 llvm-svn: 276316
-
Sanjay Patel authored
Also, rename some of them for consistency and to follow current conventions. llvm-svn: 276312
-
Vedant Kumar authored
llvm-svn: 276310
-
Quentin Colombet authored
This commit adds a generic SUB opcode to global-isel. llvm-svn: 276308
-
Quentin Colombet authored
Previously LLVM_HAS_GLOBAL_ISEL would directly get the value of LLVM_BUILD_GLOBAL_ISEL. This could be any integer value and not just ON and OFF. The problem is that lit.cfg was checking for ON to define that global-isel was supported, thus if we were setting LLVM_BUILD_GLOBAL_ISEL with an integer value, say 1, this test would fail whereas we do build global-isel and want to test it. llvm-svn: 276307
-
Quentin Colombet authored
Previously LLVM_BUILD_GLOBAL_ISEL was a boolean variable and although, this is strictly identical to an option, it did not convey the information that the user may set it. Options are here for that. llvm-svn: 276306
-
Quentin Colombet authored
Group arithmetic operations, bitwise operations, and branch operations. llvm-svn: 276305
-
Sanjay Patel authored
Making smaller pieces out of some of these ~1000 line functions should make it easier to incrementally upgrade them to handle vector types. llvm-svn: 276304
-
Renato Golin authored
llvm-svn: 276302
-
Konstantin Zhuravlyov authored
Differential Revision: https://reviews.llvm.org/D22538 llvm-svn: 276298
-
Quentin Colombet authored
This commit adds a generic AND opcode to global-isel. llvm-svn: 276297
-
Konstantin Zhuravlyov authored
Differential Revision: https://reviews.llvm.org/D21646 llvm-svn: 276294
-
Geoff Berry authored
Summary: This change also changes findMatchingInsn and findMatchingUpdateInsnForward to take DBG_VALUE opcodes into account when tracking register defs and uses, which could potentially inhibit these optimizations in the presence of debug information. Reviewers: mcrosier Subscribers: aemerson, rengolin, mcrosier, llvm-commits Differential Revision: https://reviews.llvm.org/D22582 llvm-svn: 276293
-
Benjamin Kramer authored
Doesn't make a difference on x86, but avoids memory barriers on weakly-ordered archs like PowerPC and ARM. llvm-svn: 276291
-
Simon Pilgrim authored
Under normal circumstances we prefer the higher performance MOVD to extract the 0'th element of a v8i16 vector instead of PEXTRW. But as detailed on PR27265, this prevents the SSE41 implementation of PEXTRW from folding the store of the 0'th element. Additionally it prevents us from making use of the fact that the (SSE2) reg-reg version of PEXTRW implicitly zero-extends the i16 element to the i32/i64 destination register. This patch only preferentially lowers to MOVD if we will not be zero-extending the extracted i16, nor prevent a store from being folded (on SSSE41). Fix for PR27265. Differential Revision: https://reviews.llvm.org/D22509 llvm-svn: 276289
-
Simon Pilgrim authored
llvm-svn: 276287
-
Simon Pilgrim authored
As requested on D22509, I've pulled out the v8i16 extraction lowering as the SSE41 and pre-SSE41 implementations are effectively the same. llvm-svn: 276285
-
Benjamin Kramer authored
No functionality change intended. llvm-svn: 276284
-
Simon Pilgrim authored
As reported on PR26235, we don't currently make use of the VBROADCASTF128/VBROADCASTI128 instructions (or the AVX512 equivalents) to load+splat a 128-bit vector to both lanes of a 256-bit vector. This patch enables lowering from subvector insertion/concatenation patterns and auto-upgrades the llvm.x86.avx.vbroadcastf128.pd.256 / llvm.x86.avx.vbroadcastf128.ps.256 intrinsics to match. We could possibly investigate using VBROADCASTF128/VBROADCASTI128 to load repeated constants as well (similar to how we already do for scalar broadcasts). Differential Revision: https://reviews.llvm.org/D22460 llvm-svn: 276281
-
Benjamin Kramer authored
No functionality change intended. llvm-svn: 276278
-
Benjamin Kramer authored
This provides an elegant pattern to solve the "construct if not in map already" problem we have many times in LLVM. Without try_emplace we either have to rely on a sentinel value (nullptr) or do two lookups. llvm-svn: 276277
-
Benjamin Kramer authored
Coincidentally this function maps to the C++17 try_emplace. Rename it for consistentcy with C++17 std::map. NFC. llvm-svn: 276276
-
Sam Kolton authored
Reviewers: tstellarAMD, vpykhtin Subscribers: arsenm, kzhuravl Differential Revision: https://reviews.llvm.org/D22620 llvm-svn: 276274
-
Marina Yatsina authored
The clearance calculation did not take into account registers defined as outputs or clobbers in inline assembly machine instructions because these register defs are implicit. Differential Revision: http://reviews.llvm.org/D22580 llvm-svn: 276266
-
Benjamin Kramer authored
StringMap is designed to hold large values. No functionality change intended. llvm-svn: 276265
-
Renato Golin authored
llvm-svn: 276264
-
Matt Arsenault authored
llvm-svn: 276257
-
David Majnemer authored
If we have optimization hints with agree with each other along different paths, preserve them. llvm-svn: 276248
-
David Majnemer authored
We hoisted loads/stores without taking into account which can cause miscompiles. llvm-svn: 276240
-