summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
...
* MC: Pack MCSymbol::Index in with the bitfield in MCSymbolDuncan P. N. Exon Smith2015-05-221-3/+5
| | | | | | | | | | Save a pointer for each `MCSymbol`, bringing `llc` memory usage down from 920 MB to 914 MB, around ~0.6%. (I'm looking at `llc` memory usage on `verify-uselistorder.lto.opt.bc`; see r236629 for details.) llvm-svn: 238003
* MC: Lift MCSymbolData::Index up to MCSymbol::Index, NFCDuncan P. N. Exon Smith2015-05-224-21/+27
| | | | | | | Lift `MCSymbolData::Index` up a level to `MCSymbol`, as preparation for packing it into the bitfield in `MCSymbol`. llvm-svn: 238001
* Revert part of r237975, "Fix Clang -Wmissing-override warning" in ↵NAKAMURA Takumi2015-05-221-1/+2
| | | | | | | | | | DIContext.h, to appease g++-4.7. llvm/include/llvm/DebugInfo/DIContext.h:144:11: error: overriding ‘virtual llvm::LoadedObjectInfo::~LoadedObjectInfo() noexcept (true)’ It seems the destructor in the base class may not be "default". llvm-svn: 238000
* SDAG: Give SDDbgValues their own allocator (and reset it)Duncan P. N. Exon Smith2015-05-222-3/+8
| | | | | | | | | | | | Previously `SDDbgValue`s used the general allocator that lives for all of `SelectionDAG`. Instead, give them their own allocator, and reset it whenever `SDDbgInfo::clear()` is called, plugging a spiritual leak. This drops `SelectionDAGBuilder::visitIntrinsicCall()` off of my heap profile (was at around 2% of `llc` for codegen of `-flto -g`). Thanks to Pete Cooper for spotting the problem and suggesting the fix. llvm-svn: 237998
* SDAG: Cleanup initialization of SDDbgValue, NFCDuncan P. N. Exon Smith2015-05-221-9/+7
| | | | | | | | Cleanup how `SDDbgValue` is initialized, and rearrange the fields to save two pointers in the struct layout. No real functionality change though (and I doubt the memory savings would show up in a profile). llvm-svn: 237997
* Revert "unique_ptrify LoadedObjectInfo::clone"Tobias Grosser2015-05-222-5/+7
| | | | | | This reverts commit r237976, which seems to break existing gcc 4.7 buildbots. llvm-svn: 237996
* [InstSimplify] Handle some overflow intrinsics in InstSimplifyDavid Majnemer2015-05-225-19/+75
| | | | | | | | | This change does a few things: - Move some InstCombine transforms to InstSimplify - Run SimplifyCall from within InstCombine::visitCallInst - Teach InstSimplify to fold [us]mul_with_overflow(X, undef) to 0. llvm-svn: 237995
* [Unroll] Replace a hand-wavy FIXME with a FIXME that explains the actualChandler Carruth2015-05-221-1/+6
| | | | | | | problem instead of suggesting doing something that is trivial to do but incorrect given the current design of the libraries. llvm-svn: 237994
* [Unroll] Extract the logic for caching SCEV-modeled GEPs with theirChandler Carruth2015-05-221-67/+81
| | | | | | | | | | | | | | | | | | | simplified model for use simulating each iteration into a separate helper function that just returns the cache. Building this cache had nothing to do with the rest of the unroll analysis and so this removes an unnecessary coupling, etc. It should also make it easier to think about the concept of providing fast cached access to basic SCEV models as an orthogonal concept to the overall unroll simulation. I'd really like to see this kind of caching logic folded into SCEV itself, it seems weird for us to provide it at this layer rather than making repeated queries into SCEV fast all on their own. No functionality changed. llvm-svn: 237993
* [Unroll] Refactor the accumulation of optimized instruction costs intoChandler Carruth2015-05-221-9/+10
| | | | | | | | | | | | a single location. This reduces code duplication a bit and will also pave the way for a better separation between the visitation algorithm and the unroll analysis. No functionality changed. llvm-svn: 237990
* [LICM] Sinking doesn't involve the preheaderPhilip Reames2015-05-222-5/+61
| | | | | | PR23608 pointed out that using the preheader to gain a context instruction isn't always legal because a loop might not have a preheader. When looking into that, I realized that using the preheader to determine legality for sinking is questionable at best. Given no test covers that case and the original commit didn't seem to intend it, I restructured the code to only ask context sensative queries for hoising of loads and stores. This is effectively a partial revert of 237593. llvm-svn: 237985
* Revert r236894 "[BasicAA] Fix zext & sext handling"Hans Wennborg2015-05-222-379/+60
| | | | | | This seems to have caused PR23626: Clang miscompiles webkit's base64 decoder llvm-svn: 237984
* [X86] Fix a variable name for r237977 so that it works with every compilers.Quentin Colombet2015-05-221-3/+3
| | | | llvm-svn: 237980
* MergedLoadStoreMotion preserves MemoryDependenceAnalysis, it does not ↵Daniel Berlin2015-05-221-2/+2
| | | | | | | | require it. (It already was coded assuming it can sometimes be null, so no other changes are necessary) llvm-svn: 237978
* [X86] Refactor the prologue emission to prepare for shrink-wrapping.Quentin Colombet2015-05-227-111/+250
| | | | | | | | | | | | - Add a late pass to expand pseudo instructions (tail call and EH returns). Instead of doing it in the prologue emission. - Factor some static methods in X86FrameLowering to ease code sharing. NFC. Related to <rdar://problem/20821487> llvm-svn: 237977
* unique_ptrify LoadedObjectInfo::cloneDavid Blaikie2015-05-222-7/+5
| | | | | | | | As noted in the original review, this is unused in tree & is used by Julia... that's problematic. This API coudl easily be deleted/modified by accident without any validation that it remains correct. llvm-svn: 237976
* Fix Clang -Wmissing-override warningDavid Blaikie2015-05-225-15/+20
| | | | | | | & remove the duplication by introducing a CRTP base to implement the clone behavior. llvm-svn: 237975
* [PPC] Correct iterator bug in PPCTLSDynamicCallHal Finkel2015-05-211-2/+4
| | | | | | | | | | | | Unfortunately, I can't reduce a small test case for this (although compiling mpfr-3.1.2 with -O2 -mcpu=a2 would fairly reliably trigger a crash), but the problem is fairly clear (at least once you know you're looking for one). If the TLS instruction being replaced was at the end of the block, we'd increment the iterator past it (so it would then point to MBB.end()), and then we'd increment it again as part of the for statement, thus overrunning the end of the list. Don't do that. llvm-svn: 237974
* Revert r237590, "ARM: allow jump tables to be placed as constant islands."Peter Collingbourne2015-05-2111-366/+174
| | | | | | | Caused a miscompile of the Android port of Chromium, details forthcoming. llvm-svn: 237972
* [NaryReassoc] reassociate GEP for CSEJingyue Wu2015-05-212-21/+322
| | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: x = &a[i]; y = &a[i + j]; => y = x + j; along with some refactoring work such as extracting method findClosestMatchingDominator. Depends on D9786 which provides the ScalarEvolution::getGEPExpr interface. Test Plan: nary-gep.ll Reviewers: meheff, broune Reviewed By: broune Subscribers: jholewinski, llvm-commits Differential Revision: http://reviews.llvm.org/D9802 llvm-svn: 237971
* [Support] Fix ErrorOr equality operator.Michael J. Spencer2015-05-212-2/+7
| | | | llvm-svn: 237970
* fix typos, remove function names from comments, NFCSanjay Patel2015-05-211-169/+144
| | | | llvm-svn: 237969
* [InstCombine] X - 0 is equal to X, not undefDavid Majnemer2015-05-212-27/+29
| | | | | | | | | A refactoring made @llvm.ssub.with.overflow.i32(i32 %X, i32 0) transform into undef instead of %X. This fixes PR23624. llvm-svn: 237968
* Use Op<0> accessor instead of OperandList for Instructions. NFCPete Cooper2015-05-212-6/+6
| | | | | | This is consistent with other uses of the operand list. I'm planning a future commit where this will actually matter. llvm-svn: 237967
* Use new MachineInstr mayLoadOrStore() API.Chad Rosier2015-05-212-5/+3
| | | | llvm-svn: 237965
* [InlineSpiller] Fix rematerialization for bundles.Quentin Colombet2015-05-211-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this patch, we could update the operand of another MI in the same bundle. Longer version: Before InlineSpiller rematerializes a vreg, it iterates over operands of each MI in a bundle, collecting all (MI, OpNo) pairs that reference that vreg. Then if it does rematerialize, it goes through the pair list and replaces the operands with the new (rematerialized) vreg. The problem is, it tries to replace all of these operands in the main MI ! This works fine for single MIs. However, if we are processing a bundle of MIs and the list contains multiple pairs - the rematerialization will either crash trying to access a non-existing operand of the main MI, or silently corrupt one of the existing ones. It will also ignore other MIs in the bundle. The obvious fix is to use the MI pointers saved in collected (MI, OpNo) pairs. This must have been the original intent of the pair list but somehow these pointers got lost. Patch by Dmitri Shtilman <dshtilman@icloud.com>! Differential revision: http://reviews.llvm.org/D9904 <rdar://problem/21002163> llvm-svn: 237964
* [AArch64] Enhance the load/store optimizer with target-specific alias analysis.Chad Rosier2015-05-213-20/+222
| | | | | Phabricator: http://reviews.llvm.org/D9863 llvm-svn: 237963
* fix typo in comment; NFCSanjay Patel2015-05-211-1/+1
| | | | llvm-svn: 237962
* Make it easier to use DwarfContext with MCJITKeno Fischer2015-05-2117-32/+199
| | | | | | | | | | | | | | | | | | | | | | | | | Summary: This supersedes http://reviews.llvm.org/D4010, hopefully properly dealing with the JIT case and also adds an actual test case. DwarfContext was basically already usable for the JIT (and back when we were overwriting ELF files it actually worked out of the box by accident), but in order to resolve relocations correctly it needs to know the load address of the section. Rather than trying to get this out of the ObjectFile or requiring the user to create a new ObjectFile just to get some debug info, this adds the capability to pass in that info directly. As part of this I separated out part of the LoadedObjectInfo struct from RuntimeDyld, since it is now required at a higher layer. Reviewers: lhames, echristo Reviewed By: echristo Subscribers: vtjnash, friss, rafael, llvm-commits Differential Revision: http://reviews.llvm.org/D6961 llvm-svn: 237961
* Put GEPOperator member function definition in the appropriate .cpp fileDavid Blaikie2015-05-212-30/+31
| | | | | | Last commit put it in Constants.cpp instead of Operator.cpp llvm-svn: 237960
* [opaque pointer type] Allow gep_type_iterator to work with the pointee type ↵David Blaikie2015-05-215-43/+71
| | | | | | | | | | | from the GEP instruction The raw non-instruction/constant form of this is still relying on being able to access the pointee type from a pointer type - those will be cleaned up later. For now, just focus on the cases where the pointee type is easily accessible. llvm-svn: 237958
* Stop forwarding (get|set)Aligment from MCSectionData to MCSection.Rafael Espindola2015-05-2111-47/+39
| | | | llvm-svn: 237956
* [MachineInstr] Add mayLoadOrStore API. NFC.Chad Rosier2015-05-211-1/+5
| | | | llvm-svn: 237955
* Resubmit r237708 (MIR Serialization: print and parse LLVM IR using MIR format).Alex Lorenz2015-05-2121-11/+414
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit is a 2nd attempt at committing the initial MIR serialization patch. The first commit (r237708) made the incremental buildbots unstable and was reverted in r237730. The original commit didn't add a terminating null character to the LLVM IR source which was passed to LLParser, and this sometimes caused the test 'llvmIR.mir' to fail with a parsing error because the LLVM IR source didn't have a null character immediately after the end and thus LLLexer encountered some garbage characters that ultimately caused the error. This commit also includes the other test fixes I committed in r237712 (llc path fix) and r237723 (remove target triple) which also got reverted in r237730. --Original Commit Message-- MIR Serialization: print and parse LLVM IR using MIR format. This commit is the initial commit for the MIR serialization project. It creates a new library under CodeGen called 'MIR'. This new library adds a new machine function pass that prints out the LLVM IR using the MIR format. This pass is then added as a last pass when a 'stop-after' option is used in llc. The new library adds the initial functionality for parsing of MIR files as well. This commit also extends the llc tool so that it can recognize and parse MIR input files. Reviewers: Duncan P. N. Exon Smith, Matthias Braun, Philip Reames Differential Revision: http://reviews.llvm.org/D9616 llvm-svn: 237954
* [PPC64] Handle vpkudum mask pattern correctly when vpkudum isn't availableBill Schmidt2015-05-212-1/+19
| | | | | | | | | | | | | | | | | | | | My recent patch to add support for ISA 2.07 vector pack/unpack instructions didn't properly check for availability of the vpkudum instruction when recognizing it as a special vector shuffle case. This causes us to leave the vector shuffle in place (rather than converting it to a vector permute) so that it can be recognized later as a vpkudum, but that pattern is invalid for processors prior to POWER8. Thus LLVM crashes with an "unable to select" message. We observed this since one of our buildbots is configured to generate code for a POWER7. This patch fixes the problem by checking for availability of the vpkudum instruction during custom lowering of vector shuffles. I've added a test case variant for the vpkudum pattern when the instruction isn't available. llvm-svn: 237952
* Stop creating MCSectionData is the ELF writer.Rafael Espindola2015-05-211-35/+45
| | | | | | | Now is is just its use of MCSymbolData that requires it to take a non const MCAssembler. llvm-svn: 237951
* [lib/Fuzzer] ignore flags that start with --; use git pull --rebase instead ↵Kostya Serebryany2015-05-212-2/+12
| | | | | | of just git pull llvm-svn: 237950
* IR / debug info: Add a DWOId field to DICompileUnit,Adrian Prantl2015-05-2113-78/+109
| | | | | | | | | | | | | | | | | | | | | | so DWARF skeleton CUs can be expression in IR. A skeleton CU is a (typically empty) DW_TAG_compile_unit that has a DW_AT_(GNU)_dwo_name and a DW_AT_(GNU)_dwo_id attribute. It is used to refer to external debug info. This is a prerequisite for clang module debugging as discussed in http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-November/040076.html. In order to refer to external types stored in split DWARF (dwo) objects, such as clang modules, we need to emit skeleton CUs, which identify the dwarf object (i.e., the clang module) by filename (the SplitDebugFilename) and a hash value, the dwo_id. This patch only contains the IR changes. The idea is that a CUs with a non-zero dwo_id field will be emitted together with a DW_AT_GNU_dwo_name and DW_AT_GNU_dwo_id attribute. http://reviews.llvm.org/D9488 rdar://problem/20091852 llvm-svn: 237949
* [PPC/LoopUnrollRuntime] Don't avoid high-cost trip count computation on the ↵Hal Finkel2015-05-212-0/+31
| | | | | | | | | | | | | PPC/A2 On X86 (and similar OOO cores) unrolling is very limited, and even if the runtime unrolling is otherwise profitable, the expense of a division to compute the trip count could greatly outweigh the benefits. On the A2, we unroll a lot, and the benefits of unrolling are more significant (seeing a 5x or 6x speedup is not uncommon), so we're more able to tolerate the expense, on average, of a division to compute the trip count. llvm-svn: 237947
* writeSymbolTable now only needs a MCContext.Rafael Espindola2015-05-211-12/+7
| | | | | | It used to use an MCAssembler just to record the alignment of the sections. llvm-svn: 237944
* Pass a const MCAssembler to writeSectionHeader.Rafael Espindola2015-05-211-5/+9
| | | | | | | It never creates sections, so it can use Asm.getSectionData instead of Asm.getOrCreateSectionData. llvm-svn: 237943
* YAML: Null terminate block scalar's value.Alex Lorenz2015-05-212-1/+14
| | | | | | | | | | | | | The commit null terminates the string value in the `yaml::BlockScalarNode` class. This change is motivated by the initial MIR serialization commit (r237708) that I reverted in r237730 because the LLVM IR source from the block scalar node wasn't terminated by a null character and thus the buildbots failed on one testcase sometimes. This change enables me to recommit the reverted commit. llvm-svn: 237942
* Revert r237766, "Support: Introduce LLVM_FALLTHROUGH macro."Peter Collingbourne2015-05-211-12/+0
| | | | | | | | The value of this macro seems to be very low unless we actually start using it everywhere, and I don't have immediate plans to make that happen. llvm-svn: 237941
* Remove unused argument. NFC.Rafael Espindola2015-05-211-8/+5
| | | | llvm-svn: 237940
* Fix StreamingMemoryObject to respect known object size.Derek Schuff2015-05-213-16/+33
| | | | | | | | | | | | | The existing code for method StreamingMemoryObject.fetchToPos does not respect the corresonding call to setKnownObjectSize(). As a result, it allows the StreamingMemoryObject to read bytes past the object size. This patch provides a test case, and code to fix the problem. Patch by Karl Schimpf Differential Revision: http://reviews.llvm.org/D8931 llvm-svn: 237939
* Fetch alignment directly out of MCSection. NFC.Rafael Espindola2015-05-211-7/+5
| | | | llvm-svn: 237938
* Add support for VSX scalar single-precision arithmetic in the PPC targetNemanja Ivanovic2015-05-215-46/+306
| | | | | | | | | | | | | | | | | http://reviews.llvm.org/D9891 Following up on the VSX single precision loads and stores added earlier, this adds support for elementary arithmetic operations on single precision values in VSX registers. These instructions utilize the new VSSRC register class. Instructions added: xsaddsp xsdivsp xsmulsp xsresp xsrsqrtesp xssqrtsp xssubsp llvm-svn: 237937
* Move alignment from MCSectionData to MCSection.Rafael Espindola2015-05-2185-688/+621
| | | | | | | | | | | | | | | | | | | | | | | | This starts merging MCSection and MCSectionData. There are a few issues with the current split between MCSection and MCSectionData. * It optimizes the the not as important case. We want the production of .o files to be really fast, but the split puts the information used for .o emission in a separate data structure. * The ELF/COFF/MachO hierarchy is not represented in MCSectionData, leading to some ad-hoc ways to represent the various flags. * It makes it harder to remember where each item is. The attached patch starts merging the two by moving the alignment from MCSectionData to MCSection. Most of the patch is actually just dropping 'const', since MCSectionData is mutable, but MCSection was not. llvm-svn: 237936
* [LoopDistribute] Remove a layer of pointer indirection.Benjamin Kramer2015-05-211-41/+32
| | | | | | | Just store InstPartitions directly into the std::list. No functional change intended. llvm-svn: 237930
* use range-based for-loops; NFCISanjay Patel2015-05-211-4/+2
| | | | llvm-svn: 237918
OpenPOWER on IntegriCloud