summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/IR/InstructionsTest.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Rename skipDebugInfo -> skipDebugIntrinsics, NFCVedant Kumar2018-06-261-1/+1
| | | | | | | | | | | | | This addresses post-commit feedback about the name 'skipDebugInfo' being misleading. This name could be interpreted as meaning 'a function that skips instructions with debug locations'. The new name, 'skipDebugIntrinsics', makes it clear that this function only skips debug info intrinsics. Thanks to Adrian Prantl for pointing this out! llvm-svn: 335667
* [IR] Introduce helpers to skip debug instructions (NFC)Vedant Kumar2018-06-191-0/+49
| | | | | | | | | | | | | | | | | | | | | | | This patch introduces two helpers to make it easier to ignore debug intrinsics: - Instruction::getNextNonDebugInstruction() This is just like Instruction::getNextNode(), except that it skips debug info. - skipDebugInfo(BasicBlock::iterator) A free function which advances a BasicBlock iterator past any debug info. This is a no-op when the iterator already points to a non-debug instruction. Part of: llvm.org/PR37728 Related to: https://reviews.llvm.org/D47874 Differential Revision: https://reviews.llvm.org/D48305 llvm-svn: 335083
* [IR] move shuffle mask queries from TTI to ShuffleVectorInstSanjay Patel2018-06-191-0/+82
| | | | | | | | | | | | | | | | The optimizer is getting smarter (eg, D47986) about differentiating shuffles based on its mask values, so we should make queries on the mask constant operand generally available to avoid code duplication. We'll probably use this soon in the vectorizers and instcombine (D48023 and https://bugs.llvm.org/show_bug.cgi?id=37806). We might clean up TTI a bit more once all of its current 'SK_*' options are covered. Differential Revision: https://reviews.llvm.org/D48236 llvm-svn: 335067
* [IR] De-virtualize ~Value to save a vptrReid Kleckner2017-05-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Implements PR889 Removing the virtual table pointer from Value saves 1% of RSS when doing LTO of llc on Linux. The impact on time was positive, but too noisy to conclusively say that performance improved. Here is a link to the spreadsheet with the original data: https://docs.google.com/spreadsheets/d/1F4FHir0qYnV0MEp2sYYp_BuvnJgWlWPhWOwZ6LbW7W4/edit?usp=sharing This change makes it invalid to directly delete a Value, User, or Instruction pointer. Instead, such code can be rewritten to a null check and a call Value::deleteValue(). Value objects tend to have their lifetimes managed through iplist, so for the most part, this isn't a big deal. However, there are some places where LLVM deletes values, and those places had to be migrated to deleteValue. I have also created llvm::unique_value, which has a custom deleter, so it can be used in place of std::unique_ptr<Value>. I had to add the "DerivedUser" Deleter escape hatch for MemorySSA, which derives from User outside of lib/IR. Code in IR cannot include MemorySSA headers or call the MemoryAccess object destructors without introducing a circular dependency, so we need some level of indirection. Unfortunately, no class derived from User may have any virtual methods, because adding a virtual method would break User::getHungOffOperands(), which assumes that it can find the use list immediately prior to the User object. I've added a static_assert to the appropriate OperandTraits templates to help people avoid this trap. Reviewers: chandlerc, mehdi_amini, pete, dberlin, george.burgess.iv Reviewed By: chandlerc Subscribers: krytarowski, eraman, george.burgess.iv, mzolotukhin, Prazek, nlewycky, hans, inglorion, pcc, tejohnson, dberlin, llvm-commits Differential Revision: https://reviews.llvm.org/D31261 llvm-svn: 303362
* IR: Add a shufflevector mask commutation helper function. NFC.Zvi Rackover2017-05-081-0/+7
| | | | | | | | | | | | | | | | Summary: Following up on Sanjay's suggetion in D32955, move this functionality into ShuffleVectornstruction. Reviewers: spatel, RKSimon Reviewed By: RKSimon Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D32956 llvm-svn: 302420
* [IR] Redesign the case iterator in SwitchInst to actually be an iteratorChandler Carruth2017-04-121-0/+63
| | | | | | | | | | | | | | | | and to expose a handle to represent the actual case rather than having the iterator return a reference to itself. All of this allows the iterator to be used with common STL facilities, standard algorithms, etc. Doing this exposed some missing facilities in the iterator facade that I've fixed and required some work to the actual iterator to fully support the necessary API. Differential Revision: https://reviews.llvm.org/D31548 llvm-svn: 300032
* Rename AttributeSet to AttributeListReid Kleckner2017-03-211-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | Summary: This class is a list of AttributeSetNodes corresponding the function prototype of a call or function declaration. This class used to be called ParamAttrListPtr, then AttrListPtr, then AttributeSet. It is typically accessed by parameter and return value index, so "AttributeList" seems like a more intuitive name. Rename AttributeSetImpl to AttributeListImpl to follow suit. It's useful to rename this class so that we can rename AttributeSetNode to AttributeSet later. AttributeSet is the set of attributes that apply to a single function, argument, or return value. Reviewers: sanjoy, javed.absar, chandlerc, pete Reviewed By: pete Subscribers: pete, jholewinski, arsenm, dschuff, mehdi_amini, jfb, nhaehnle, sbc100, void, llvm-commits Differential Revision: https://reviews.llvm.org/D31102 llvm-svn: 298393
* [IR] Add range accessors for the indices of a GEP instruction.Chandler Carruth2017-02-281-0/+35
| | | | | | | These were noticed as missing in a code review. Add them and the boring unit test to make sure they compile and DTRT. llvm-svn: 296444
* [IR] Add a Instruction::dropPoisonGeneratingFlags helperSanjoy Das2017-02-231-0/+61
| | | | | | | | | | | | | | | | Summary: The helper will be used in a later change. This change itself is NFC since the only user of this new function is its unit test. Reviewers: majnemer, efriedma Reviewed By: efriedma Subscribers: efriedma, mcrosier, llvm-commits Differential Revision: https://reviews.llvm.org/D30184 llvm-svn: 296035
* Remove every uses of getGlobalContext() in LLVM (but the C API)Mehdi Amini2016-04-141-11/+15
| | | | | | | | | | | At the same time, fixes InstructionsTest::CastInst unittest: yes you can leave the IR in an invalid state and exit when you don't destroy the context (like the global one), no longer now. This is the first part of http://reviews.llvm.org/D19094 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266379
* [InstructionsTest] delete via unique_ptr (NFC)Joseph Tremoulet2016-01-151-10/+6
| | | | | | | | | | | | | | Summary: Simplify the memory management of mock IR in test AlterInvokeBundles. Reviewers: dblaikie Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D16211 llvm-svn: 257892
* InstructionsTest.cpp: Fix a warning. [-Wsign-compare]NAKAMURA Takumi2016-01-141-1/+1
| | | | llvm-svn: 257752
* [UnitTest] Fix warning, NFC.Joseph Tremoulet2016-01-141-1/+1
| | | | | | Use an unsigned literal to avoid signedness mismatch in the compare. llvm-svn: 257747
* [OperandBundles] Copy DebugLoc with calls/invokesJoseph Tremoulet2016-01-141-2/+61
| | | | | | | | | | | | | | | | | Summary: The overloads of CallInst::Create and InvokeInst::Create that are used to adjust operand bundles purport to create a new instruction "identical in every way except [for] the operand bundles", so copy the DebugLoc along with everything else. Reviewers: sanjoy, majnemer Subscribers: majnemer, dblaikie, llvm-commits Differential Revision: http://reviews.llvm.org/D16157 llvm-svn: 257745
* [opaque pointer type] gep API migrationDavid Blaikie2015-03-141-10/+12
| | | | | | | This concludes the GetElementPtrInst::Create migration, thus marking the beginning of the IRBuilder::CreateGEP* migration to come. llvm-svn: 232280
* DataLayout is mandatory, update the API to reflect it with references.Mehdi Amini2015-03-101-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Now that the DataLayout is a mandatory part of the module, let's start cleaning the codebase. This patch is a first attempt at doing that. This patch is not exactly NFC as for instance some places were passing a nullptr instead of the DataLayout, possibly just because there was a default value on the DataLayout argument to many functions in the API. Even though it is not purely NFC, there is no change in the validation. I turned as many pointer to DataLayout to references, this helped figuring out all the places where a nullptr could come up. I had initially a local version of this patch broken into over 30 independant, commits but some later commit were cleaning the API and touching part of the code modified in the previous commits, so it seemed cleaner without the intermediate state. Test Plan: Reviewers: echristo Subscribers: llvm-commits From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 231740
* [C++11] Use 'nullptr'.Craig Topper2014-06-081-8/+8
| | | | llvm-svn: 210442
* Copy the full TailCallKind in CallInst::clone_implReid Kleckner2014-05-061-0/+33
| | | | | | | Split from the musttail inliner change. This will be covered by an opt test when the inliner change lands. llvm-svn: 208126
* Untabify.NAKAMURA Takumi2014-03-271-3/+3
| | | | llvm-svn: 204916
* SmallVector<3> may be used here.NAKAMURA Takumi2014-03-271-1/+1
| | | | llvm-svn: 204915
* IRTests/InstructionsTest.cpp: Avoid initializer list.NAKAMURA Takumi2014-03-271-4/+4
| | | | llvm-svn: 204914
* Add a unit test for Invoke iteration, similar to the one for CallEli Bendersky2014-03-261-11/+40
| | | | | | The tests are refactored to use the same fixture. llvm-svn: 204860
* Fix bot breakage in InstructionsTest.Eli Bendersky2014-03-261-1/+1
| | | | | | Makes sure the Call dies before the Function llvm-svn: 204856
* Fix problem with r204836Eli Bendersky2014-03-261-0/+26
| | | | | | | | | | In CallInst, op_end() points at the callee, which we don't want to iterate over when just iterating over arguments. Now take this into account when returning a iterator_range from arg_operands. Similar reasoning for InvokeInst. Also adds a unit test to verify this actually works as expected. llvm-svn: 204851
* [C++11] Replace llvm::next and llvm::prior with std::next and std::prev.Benjamin Kramer2014-03-021-2/+2
| | | | | | Remove the old functions. llvm-svn: 202636
* Bug 18228 - Fix accepting bitcasts between vectors of pointers with aMatt Arsenault2014-01-221-0/+16
| | | | | | | | | | | | | different number of elements. Bitcasts were passing with vectors of pointers with different number of elements since the number of elements was checking SrcTy->getVectorNumElements() == SrcTy->getVectorNumElements() which isn't helpful. The addrspacecast was also wrong, but that case at least is caught by the verifier. Refactor bitcast and addrspacecast handling in castIsValid to be more readable and fix this problem. llvm-svn: 199821
* Use a: and s: instead of a0: and s0: in the DataLayout strings.Rafael Espindola2013-12-131-2/+2
| | | | | | They are equivalent and the size of 'a' and 's' is unused. llvm-svn: 197259
* Add addrspacecast instruction.Matt Arsenault2013-11-151-39/+14
| | | | | | Patch by Michele Scandale! llvm-svn: 194760
* Fix ptr vector inconsistency in CreatePointerCastMatt Arsenault2013-07-311-0/+11
| | | | | | | | One form would accept a vector of pointers, and the other did not. Make both accept vectors of pointers, and add an assertion for the number of elements. llvm-svn: 187464
* Respect address space sizes in isEliminableCastPair.Matt Arsenault2013-07-301-2/+79
| | | | | | | This avoids constant folding bitcast/ptrtoint/inttoptr combinations that have illegal bitcasts between differently sized address spaces. llvm-svn: 187455
* Revert "Remove isCastable since nothing uses it now"Matt Arsenault2013-07-301-0/+5
| | | | | | Apparently dragonegg uses it. llvm-svn: 187454
* Remove isCastable since nothing uses it nowMatt Arsenault2013-07-301-5/+0
| | | | llvm-svn: 187448
* Change behavior of calling bitcasted alias functions.Matt Arsenault2013-07-301-7/+70
| | | | | | | | It will now only convert the arguments / return value and call the underlying function if the types are able to be bitcasted. This avoids using fp<->int conversions that would occur before. llvm-svn: 187444
* Fix copypaste error in test.Matt Arsenault2013-06-281-1/+1
| | | | | | Thename says it's an i32*, but it was actually creating another i8* llvm-svn: 185239
* Change GetPointerBaseWithConstantOffset's DataLayout argument from aDan Gohman2013-01-311-4/+4
| | | | | | | reference to a pointer, so that it can handle the case where DataLayout is not available and behave conservatively. llvm-svn: 174024
* A test for r172535.Evgeniy Stepanov2013-01-161-0/+8
| | | | llvm-svn: 172614
* Rename the VMCore unittest tree to IR. Somehow was missed when doing theChandler Carruth2013-01-071-0/+284
library rename. llvm-svn: 171747
OpenPOWER on IntegriCloud