summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* Fix PR23384 (under "-lsr-insns-cost" option)Evgeny Stupachenko2017-02-113-4/+167
| | | | | | | | | | | | | Summary: The patch adds instructions number generated by a solution to LSR cost under "-lsr-insns-cost" option. Reviewers: qcolombet, hfinkel Differential Revision: http://reviews.llvm.org/D28307 From: Evgeny Stupachenko <evstupac@gmail.com> llvm-svn: 294821
* [ARM] Make f16 interleaved accesses expensive.Ahmed Bougacha2017-02-112-1/+33
| | | | | | | | | | | | | There are no vldN/vstN f16 variants, even with +fullfp16. We could use the i16 variants, but, in practice, even with +fullfp16, the f16 sequence leading to the i16 shuffle usually gets scalarized. We'd need to improve our support for f16 codegen before getting there. Teach the cost model to consider f16 interleaved operations as expensive. Otherwise, we are all but guaranteed to end up with a large block of scalarized vector code. llvm-svn: 294819
* [ARM] Don't lower f16 interleaved accesses.Ahmed Bougacha2017-02-112-0/+35
| | | | | | | | | | | | There are no vldN/vstN f16 variants, even with +fullfp16. We could use the i16 variants, but, in practice, even with +fullfp16, the f16 sequence leading to the i16 shuffle usually gets scalarized. We'd need to improve our support for f16 codegen before getting there. Reject f16 interleaved accesses. If we try to emit the f16 intrinsics, we'll just end up with a selection failure. llvm-svn: 294818
* [ARM] Unique some redundant CHECK lines. NFC.Ahmed Bougacha2017-02-111-41/+22
| | | | llvm-svn: 294817
* [LSR] Recommit: Allow formula containing Reg for SCEVAddRecExpr related with ↵Wei Mi2017-02-114-9/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | outerloop. The recommit includes some changes of testcases. No functional change to the patch. In RateRegister of existing LSR, if a formula contains a Reg which is a SCEVAddRecExpr, and this SCEVAddRecExpr's loop is an outerloop, the formula will be marked as Loser and dropped. Suppose we have an IR that %for.body is outerloop and %for.body2 is innerloop. LSR only handle inner loop now so only %for.body2 will be handled. Using the logic above, formula like reg(%array) + reg({1,+, %size}<%for.body>) + 1*reg({0,+,1}<%for.body2>) will be dropped no matter what because reg({1,+, %size}<%for.body>) is a SCEVAddRecExpr type reg related with outerloop. Only formula like reg(%array) + 1*reg({{1,+, %size}<%for.body>,+,1}<nuw><nsw><%for.body2>) will be kept because the SCEVAddRecExpr related with outerloop is folded into the initial value of the SCEVAddRecExpr related with current loop. But in some cases, we do need to share the basic induction variable reg{0 ,+, 1}<%for.body2> among LSR Uses to reduce the final total number of induction variables used by LSR, so we don't want to drop the formula like reg(%array) + reg({1,+, %size}<%for.body>) + 1*reg({0,+,1}<%for.body2>) unconditionally. From the existing comment, it tries to avoid considering multiple level loops at the same time. However, existing LSR only handles innermost loop, so for any SCEVAddRecExpr with a loop other than current loop, it is an invariant and will be simple to handle, and the formula doesn't have to be dropped. Differential Revision: https://reviews.llvm.org/D26429 llvm-svn: 294814
* [MC] Fix some Clang-tidy modernize and Include What You Use warnings; other ↵Eugene Zelenko2017-02-1121-240/+261
| | | | | | minor fixes (NFC). llvm-svn: 294813
* config-ix.cmake: Search for CMAKE_XCRUN before using it.Matthias Braun2017-02-111-0/+3
| | | | | | | | | This was previously searched in CMakeLists.txt unconditionally but as of r294371 it is only searched in some circumstances. Repeating the search in config-ix.cmake to make this robust and hopefully fix the macOS Asan+Ubsan jenkins build. llvm-svn: 294811
* [PM] Fix a bug in how I ported LoopDeletion to the new PM.Chandler Carruth2017-02-111-21/+14
| | | | | | | | | | | | | | | This was marking the loop for deletion after the loop was deleted. This almost works, except that when we do any kind of debug logging it starts reading the name of the loop from deleted memory or otherwise blowing up. This can fail in a bunch of ways. I recently added a test that *always* does this, and it started failing on the sanitizer bots. The fix is to mark the loop as deleted in the loop PM infrastructure before we remove the loop. We can do this by passing the updater into the routine. That also lets us simplify a bunch of other interface components here for a net win. llvm-svn: 294810
* [WebAssembly] Remove old experimental disassemler code.Dan Gohman2017-02-111-84/+2
| | | | | | | Remove support for disassembling an old experimental wasm binary format, which is no longer in use anywhere. llvm-svn: 294809
* vim: add `returned` keywordSaleem Abdulrasool2017-02-101-0/+1
| | | | | | | The `returned` keyword was added in SVN r179925. Update the vim syntax rules. llvm-svn: 294808
* [LTO] Share the optimization remarks setup between Thin/Full LTO.Davide Italiano2017-02-105-42/+35
| | | | llvm-svn: 294807
* [Hexagon] Introduce Hexagon V62Krzysztof Parzyszek2017-02-1025-83/+5479
| | | | llvm-svn: 294805
* [tests] Be explicit about the files we want to remove.Davide Italiano2017-02-103-3/+3
| | | | | | Hopefully Windows will stop whining after this change. llvm-svn: 294801
* IR: Function summary extensions for whole-program devirtualization pass.Peter Collingbourne2017-02-108-35/+426
| | | | | | | | | | The summary information includes all uses of llvm.type.test and llvm.type.checked.load intrinsics that can be used to devirtualize calls, including any constant arguments for virtual constant propagation. Differential Revision: https://reviews.llvm.org/D29734 llvm-svn: 294795
* [InstCombine] Move class into anonymous namespace. NFC.Benjamin Kramer2017-02-101-0/+2
| | | | | | | | This is necessary to avoid warnings from GCC. InstCombineLoadStoreAlloca.cpp:238:7: error: 'PointerReplacer' declared with greater visibility than the type of its field 'PointerReplacer::IC' llvm-svn: 294794
* [lib/LTO] Rework optimization remarkers setup.Davide Italiano2017-02-102-17/+21
| | | | | | | | This makes this code much more similar to what ThinLTO is using (also API wise), so now we can probably use a single code path instead of copying stuff around. llvm-svn: 294792
* [PPC] Silence warning in Release builds.Benjamin Kramer2017-02-101-2/+1
| | | | llvm-svn: 294791
* [LTO] Make these tests robust across multiple iterations.Davide Italiano2017-02-102-0/+2
| | | | | | Same as r294784, but for regular LTO. llvm-svn: 294789
* [InstCombine] Silence unused variable warning in Release builds.Benjamin Kramer2017-02-101-0/+2
| | | | llvm-svn: 294788
* Revert r294532, it caused PR31935Nico Weber2017-02-102-609/+9
| | | | llvm-svn: 294787
* Fix invalid addrspacecast due to combining alloca with global varYaxun Liu2017-02-103-7/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | For function-scope variables with large initialisation list, FE usually generates a global variable to hold the initializer, then generates memcpy intrinsic to initialize the alloca. InstCombiner::visitAllocaInst identifies such allocas which are accessed only by reading and replaces them with the global variable. This is done by casting the global variable to the type of the alloca and replacing all references. However, when the global variable is in a different address space which is disjoint with addr space 0 (e.g. for IR generated from OpenCL, global variable cannot be in private addr space i.e. addr space 0), casting the global variable to addr space 0 results in invalid IR for certain targets (e.g. amdgpu). To fix this issue, when the global variable is not in addr space 0, instead of casting it to addr space 0, this patch chases down the uses of alloca until reaching the load instructions, then replaces load from alloca with load from the global variable. If during the chasing bitcast and GEP are encountered, new bitcast and GEP based on the global variable are generated and used in the load instructions. Differential Revision: https://reviews.llvm.org/D27283 llvm-svn: 294786
* [ThinLTO] Make this test more robust across multiple runs.Davide Italiano2017-02-101-0/+1
| | | | | | The yaml emitter files are left around otherwise. llvm-svn: 294784
* Fix a silly syntax error.Tim Shen2017-02-101-2/+2
| | | | llvm-svn: 294783
* Encode duplication factor from loop vectorization and loop unrolling to ↵Dehao Chen2017-02-1016-32/+236
| | | | | | | | | | | | | | | | | | | | | discriminator. Summary: This patch starts the implementation as discuss in the following RFC: http://lists.llvm.org/pipermail/llvm-dev/2016-October/106532.html When optimization duplicates code that will scale down the execution count of a basic block, we will record the duplication factor as part of discriminator so that the offline process tool can find the duplication factor and collect the accurate execution frequency of the corresponding source code. Two important optimization that fall into this category is loop vectorization and loop unroll. This patch records the duplication factor for these 2 optimizations. The recording will be guarded by a flag encode-duplication-in-discriminators, which is off by default. Reviewers: probinson, aprantl, davidxl, hfinkel, echristo Reviewed By: hfinkel Subscribers: mehdi_amini, anemet, mzolotukhin, llvm-commits Differential Revision: https://reviews.llvm.org/D26420 llvm-svn: 294782
* [XRay] Implement powerpc64le xray.Tim Shen2017-02-105-3/+104
| | | | | | | | | | | | | | | | | | Summary: powerpc64 big-endian is not supported, but I believe that most logic can be shared, except for xray_powerpc64.cc. Also add a function InvalidateInstructionCache to xray_util.h, which is copied from llvm/Support/Memory.cpp. I'm not sure if I need to add a unittest, and I don't know how. Reviewers: dberris, echristo, iteratee, kbarton, hfinkel Subscribers: mehdi_amini, nemanjai, mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D29742 llvm-svn: 294781
* [Hexagon] Remove unused .td filesKrzysztof Parzyszek2017-02-107-2572/+0
| | | | llvm-svn: 294775
* [X86] Bitcast subvector before broadcasting it.Ahmed Bougacha2017-02-105-1/+100
| | | | | | | | | | | | | Since r274013, we've been looking through bitcasts on broadcast inputs. In the scalar-folding case (from a load, build_vector, or sc2vec), the input type didn't matter, as we'd simply bitcast the resulting scalar back. However, when broadcasting a 128-bit-lane-aligned element, we create an EXTRACT_SUBVECTOR. Use proper types, by creating an extract_subvector of the original input type. llvm-svn: 294774
* Yet another fix llvm-objdump so it picks a good CPU based for Mach-O files,Kevin Enderby2017-02-104-1/+6
| | | | | | | | | | | in this case for CPU_SUBTYPE_ARM64_ALL. For this cpusubtype it should default to a cyclone CPU to give proper disassembly without a -mcpu= flag. rdar://27767188 llvm-svn: 294771
* GlobalISel: drop lifetime intrinsics during translation.Tim Northover2017-02-102-0/+19
| | | | | | We don't use them yet and they just cause problems. llvm-svn: 294770
* [libFuzzer] Use stoull instead of stol to ensure 64 bits.Marcos Pividori2017-02-101-2/+2
| | | | | | Differential revision: https://reviews.llvm.org/D29831 llvm-svn: 294769
* [X86][AVX512] Add vector rotate tests for AVX512 targetsSimon Pilgrim2017-02-102-1/+355
| | | | | | AVX512 does have vector rotate instructions, but we don't lower to them yet llvm-svn: 294766
* Autogenerate results for test/CodeGen/X86/peep-test-4.ll . NFCAmaury Sechet2017-02-101-78/+128
| | | | llvm-svn: 294765
* Autogenerate results for test/CodeGen/X86/pr14314.ll . NFCAmaury Sechet2017-02-101-6/+27
| | | | llvm-svn: 294764
* [ARM] Fix incorrect mask bits in MSR encoding for write_register intrinsicJohn Brawn2017-02-104-59/+55
| | | | | | | | | | | In the encoding of system registers in the M-class MSR instruction the mask bits should be 2 for registers that don't take a _<bits> qualifier (the instruction is unpredictable otherwise), and should also be 2 if the register takes a _<bits> qualifier but it's not present as no _<bits> is an alias for _nzcvq. Differential Revision: https://reviews.llvm.org/D29828 llvm-svn: 294762
* Use autogenerate check in CodeGen/X86/pr16031.ll . NFCAmaury Sechet2017-02-101-14/+17
| | | | llvm-svn: 294761
* Fix doc for `-opt-bisect-limit`: the LTO option prefix for lld is -mllvmMehdi Amini2017-02-101-3/+3
| | | | | | Thanks Davide to catch it in my previous patch. llvm-svn: 294759
* Add a virtual destructor for LegalizerInfo.Alexander Kornienko2017-02-101-0/+1
| | | | | | | lib/Target/X86/X86TargetMachine.cpp has a code that deletes an instance of a LegalizerInfo descendant via a pointer to base. llvm-svn: 294757
* Check full codegen in CodeGen/X86/i256-add.ll NFCAmaury Sechet2017-02-101-3/+127
| | | | llvm-svn: 294756
* [LV] Remove type restriction for vector phi creationMatthew Simpson2017-02-102-6/+13
| | | | | | | | | We previously only created a vector phi node for an induction variable if its type matched the type of the canonical induction variable. Differential Revision: https://reviews.llvm.org/D29776 llvm-svn: 294755
* [Hexagon] Replace instruction definitions with auto-generated onesKrzysztof Parzyszek2017-02-10168-14903/+50480
| | | | llvm-svn: 294753
* Move some error handling down to MCStreamer.Rafael Espindola2017-02-1016-34/+37
| | | | | | | | | This makes sure we get the same redefinition rules regardless of who is printing (asm parser, codegen) and to what (asm, obj). This fixes an unintentional regression in r293936. llvm-svn: 294752
* [X86][SSE] Added chained FDIV test cases for D26855Simon Pilgrim2017-02-101-0/+310
| | | | | | Tests to demonstrate throughput-latency decision between div and rcp on faster hardware such as Haswell llvm-svn: 294750
* [DAGCombine] Allow vector constant folding of any value type before type ↵Simon Pilgrim2017-02-106-171/+18
| | | | | | | | | | | | | | | | legalization The patch comes in 2 parts: 1 - it makes use of the SelectionDAG::NewNodesMustHaveLegalTypes flag to tell when it can safely constant fold illegal types. 2 - it correctly resets SelectionDAG::NewNodesMustHaveLegalTypes at the start of each call to SelectionDAGISel::CodeGenAndEmitDAG so all the pre-legalization stages can make use of it - not just the first basic block that gets handled. Fix for PR30760 Differential Revision: https://reviews.llvm.org/D29568 llvm-svn: 294749
* [X86][SSE] Use SDValue::getConstantOperandVal helper. NFCI.Simon Pilgrim2017-02-101-11/+6
| | | | | | Also reordered an if statement to test low cost comparisons first llvm-svn: 294748
* [X86][SSE] Add support for extracting target constants from BUILD_VECTORSimon Pilgrim2017-02-102-12/+27
| | | | | | | In some cases we call getTargetConstantBitsFromNode for nodes that haven't been lowered from BUILD_VECTOR yet Note: We're getting very close to being able to move most of the constant extraction code from getTargetShuffleMaskIndices into getTargetConstantBitsFromNode llvm-svn: 294746
* [X86][SSE] Add missing comment describing combing to SHUFPS. NFCISimon Pilgrim2017-02-101-0/+2
| | | | llvm-svn: 294745
* [PM] Relax the patterns used in the new test I added because someChandler Carruth2017-02-101-20/+20
| | | | | | compilers don't print the typedef name. llvm-svn: 294729
* [PM] Fix a bug in the new loop PM when handling functions with no loops.Chandler Carruth2017-02-104-5/+287
| | | | | | | | | | | | | | | | | | | | | | | | | Without any loops, we don't even bother to build the standard analyses used by loop passes. Without these, we can't run loop analyses or invalidate them properly. Unfortunately, we did these things in the wrong order which would allow a loop analysis manager's proxy to be built but then not have the standard analyses built. When we went to do the invalidation in the proxy thing would fall apart. In the test case provided, it would actually crash. The fix is to carefully check for loops first, and to in fact build the standard analyses before building the proxy. This allows it to correctly trigger invalidation for those standard analyses. An alternative might seem to be to look at whether there are any loops when doing invalidation, but this doesn't work when during the loop pipeline run we delete the last loop. I've even included that as a test case. It is both simpler and more robust to defer building the proxy until there are definitely the standard set of analyses and indeed loops. This bug was uncovered by enabling GlobalsAA in the pipeline. llvm-svn: 294728
* add #ifdef, fix compilation error in case LLVM_BUILD_GLOBAL_ISEL=OFFIgor Breger2017-02-101-0/+2
| | | | llvm-svn: 294726
* Fix doc for `-opt-bisect-limit`: the LTO option is linker specificMehdi Amini2017-02-101-1/+4
| | | | llvm-svn: 294725
OpenPOWER on IntegriCloud