summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* [CostModel][X86] Add fdiv + frem cost testsSimon Pilgrim2016-08-191-2/+32
| | | | llvm-svn: 279283
* [InstCombine] use local variables to reduce code in foldICmpShlConstant; NFCSanjay Patel2016-08-191-21/+15
| | | | llvm-svn: 279282
* [Hexagon] Fix a few omissions in HexagonInstrInfoKrzysztof Parzyszek2016-08-191-0/+3
| | | | llvm-svn: 279280
* [InstCombine] rename variables in foldICmpShlConstant(); NFCSanjay Patel2016-08-191-34/+34
| | | | llvm-svn: 279279
* GlobalISel: support overflow arithmetic intrinsics.Tim Northover2016-08-199-45/+265
| | | | | | | | | | | | Unsigned addition and subtraction can reuse the instructions created to legalize large width operations (i.e. both produce and consume a carry flag). Signed operations and multiplies get a dedicated op-with-overflow instruction. Once this is produced the two values are combined into a struct register (which will almost always be merged with a corresponding G_EXTRACT as part of legalization). llvm-svn: 279278
* Revert "[asan] Optimize store size in FunctionStackPoisoner::poisonRedZones"Vitaly Buka2016-08-194-63/+47
| | | | | | | | This reverts commit r279178. Speculative revert in hope to fix asan crash on arm. llvm-svn: 279277
* Revert "[asan] Fix size of shadow incorrectly calculated in r279178"Vitaly Buka2016-08-192-3/+4
| | | | | | | | This reverts commit r279222. Speculative revert in hope to fix asan crash on arm. llvm-svn: 279276
* [RuntimeDyld] Revert r279182 and 279201 -- they broke some ARM bots.Lang Hames2016-08-1911-26/+10
| | | | llvm-svn: 279275
* [AliasSetTracker] Degrade AliasSetTracker when may-alias sets get too large.Michael Kuperstein2016-08-193-23/+203
| | | | | | | | | | | | | | | | | | Repeated inserts into AliasSetTracker have quadratic behavior - inserting a pointer into AST is linear, since it requires walking over all "may" alias sets and running an alias check vs. every pointer in the set. We can avoid this by tracking the total number of pointers in "may" sets, and when that number exceeds a threshold, declare the tracker "saturated". This lumps all pointers into a single "may" set that aliases every other pointer. (This is a stop-gap solution until we migrate to MemorySSA) This fixes PR28832. Differential Revision: https://reviews.llvm.org/D23432 llvm-svn: 279274
* [X86][SSE] Generalised combining to VZEXT_MOVL to any vector sizeSimon Pilgrim2016-08-193-6/+85
| | | | | | This doesn't change tests codegen as we already combined to blend+zero which is what we lower VZEXT_MOVL to on SSE41+ targets, but it does put us in a better position when we improve shuffling for optsize. llvm-svn: 279273
* [Hexagon] Enforce LLSC packetization rulesKrzysztof Parzyszek2016-08-192-0/+30
| | | | | | | | | Ensure that load locked and store conditional instructions are only packetized with ALU32 instructions. Patch by Ben Craig. llvm-svn: 279272
* Fix regression in InstCombine introduced by r278944Reid Kleckner2016-08-192-3/+17
| | | | | | | | | | | The intended transform is: // Simplify icmp eq (or (ptrtoint P), (ptrtoint Q)), 0 // -> and (icmp eq P, null), (icmp eq Q, null). P and Q are both pointer types, but may have different types. We need two calls to getNullValue() to make the icmps. llvm-svn: 279271
* MachineScheduler: Make some GenericScheduler member variables protectedTom Stellard2016-08-191-12/+14
| | | | | | | | | | | | Summary: We will need these in AMDGPU's new SchedStrategy implmentation. Reviewers: MatzeB, atrick Subscribers: llvm-commits, MatzeB Differential Revision: https://reviews.llvm.org/D23679 llvm-svn: 279270
* [Hexagon] Minor updates to register definitionsKrzysztof Parzyszek2016-08-191-4/+5
| | | | llvm-svn: 279269
* [CloneFunction] Don't remove unrelated nodes from the CGSSCDavid Majnemer2016-08-192-2/+30
| | | | | | | | CGSCC use a WeakVH to track call sites. RAUW a call within a function can result in that WeakVH getting confused about whether or not the call site is still around. llvm-svn: 279268
* [Hexagon] Fix incorrect generation of S4_subi_asl_riKrzysztof Parzyszek2016-08-192-14/+99
| | | | | | Patch by Jyotsna Verma. llvm-svn: 279267
* [InstCombine] use m_APInt to allow icmp (shl 1, Y), C folds for splat ↵Sanjay Patel2016-08-192-28/+13
| | | | | | constant vectors llvm-svn: 279266
* [Hexagon] Add missing pattern for C4_cmplteKrzysztof Parzyszek2016-08-191-0/+2
| | | | llvm-svn: 279265
* [InstCombine] use m_APInt to allow icmp X, C folds for splat constant vectorsSanjay Patel2016-08-192-7/+16
| | | | | | | | | Of course, we really need to refactor and fix all of the cmp predicates, but this one is interesting because without it, we later perform an information-losing transform of icmp (shl 1, Y), C, and we can't recover the better fold. llvm-svn: 279263
* [LTO] Remove dead-code: collectUsedGlobalVariables has been moved to Thin ↵Mehdi Amini2016-08-191-3/+1
| | | | | | and LTO specifc path (NFC) llvm-svn: 279261
* [InstCombine] add tests for missing vector icmp foldsSanjay Patel2016-08-191-0/+17
| | | | llvm-svn: 279259
* [InstCombine] add missing tests for basic icmp foldsSanjay Patel2016-08-191-0/+19
| | | | | | | These are implicitly included as part of larger test cases, but they don't exist stand-alone (and don't happen for vectors...). llvm-svn: 279257
* [Hexagon] Make p0 an explicit operand in VA1_clr* subinstructions, NFCKrzysztof Parzyszek2016-08-192-10/+15
| | | | llvm-svn: 279255
* [Hexagon] Add explicit default constructor for HexagonSelectionDAGInfoKrzysztof Parzyszek2016-08-191-0/+2
| | | | llvm-svn: 279254
* Unxfail passing tests on HexagonKrzysztof Parzyszek2016-08-192-2/+0
| | | | llvm-svn: 279252
* [Hexagon] Allow tail-call optimization when mixing C and fast calling convKrzysztof Parzyszek2016-08-192-3/+31
| | | | | | Patch by Arnold Schwaighofer. llvm-svn: 279251
* [Hexagon] Check for empty live intervalKrzysztof Parzyszek2016-08-192-0/+49
| | | | | | Patch by Brendon Cahoon. llvm-svn: 279249
* [Hexagon] Consider zext/sext of a load to i32 to be freeKrzysztof Parzyszek2016-08-192-0/+27
| | | | llvm-svn: 279248
* Revert r279242 - it's failing the testsAnton Korobeynikov2016-08-192-779/+117
| | | | llvm-svn: 279247
* [Hexagon] Handle J2_jumptpt and J2_jumpfpt instructionsKrzysztof Parzyszek2016-08-193-2/+16
| | | | llvm-svn: 279246
* [Hexagon] Fix indentation, NFCKrzysztof Parzyszek2016-08-191-3/+3
| | | | llvm-svn: 279245
* [Hexagon] Remove unnecessary llvm::, NFCKrzysztof Parzyszek2016-08-191-1/+1
| | | | llvm-svn: 279244
* [Hexagon] Rename the HEXAGON_MC namespace to Hexagon_MC, NFCKrzysztof Parzyszek2016-08-193-4/+4
| | | | llvm-svn: 279243
* Fix PR27500: on MSP430 the branch destination offset is measured in words, ↵Anton Korobeynikov2016-08-192-117/+779
| | | | | | | | | | | | not bytes. In addition, the branch instructions will have proper BB destinations, not offsets, like before. Patch by Vadzim Dambrouski! Differential Revision: https://reviews.llvm.org/D20162 llvm-svn: 279242
* [Hexagon] Mark PS_jumpret as pseudo-instruction, expand it into J2_jumprKrzysztof Parzyszek2016-08-195-27/+31
| | | | llvm-svn: 279241
* [Hexagon] Improvements to handling and generation of FP instructionsKrzysztof Parzyszek2016-08-197-17/+247
| | | | | | | | | Improved handling of fma, floating point min/max, additional load/store instructions for floating point types. Patch by Jyotsna Verma. llvm-svn: 279239
* [LoopVectorize] Don't copy std::vector in for-range loop.Benjamin Kramer2016-08-191-1/+1
| | | | llvm-svn: 279233
* [PM] Revert r279227 and r279228 until I can find someone to help meChandler Carruth2016-08-195-151/+51
| | | | | | | | solve completely opaque MSVC build errors. It complains about lots of stuff with this change without givin nearly enough information to even try to fix. llvm-svn: 279231
* [X86][SSE] Add support for matching commuted insertps patternsSimon Pilgrim2016-08-192-51/+70
| | | | | | INSERTPS doesn't fit well with our shuffle mask canonicalization, so we need to attempt both the original mask and the commuted mask to more likely get a match llvm-svn: 279230
* [SimplifyCFG] Rewrite SinkThenElseCodeToEndJames Molloy2016-08-195-153/+416
| | | | | | | | | | | | | | | | | | | | | | | | | | The new version has several advantages: 1) IMSHO it's more readable and neater 2) It handles loads and stores properly 3) It can handle any number of incoming blocks rather than just two. I'll be taking advantage of this in a followup patch. With this change we can now finally sink load-modify-store idioms such as: if (a) return *b += 3; else return *b += 4; => %z = load i32, i32* %y %.sink = select i1 %a, i32 5, i32 7 %b = add i32 %z, %.sink store i32 %b, i32* %y ret i32 %b When this works for switches it'll be even more powerful. llvm-svn: 279229
* [PM] Fix a compile error with GCC. NFC.Chandler Carruth2016-08-191-2/+2
| | | | llvm-svn: 279228
* [PM] Make the the new pass manager support fully generic extra argumentsChandler Carruth2016-08-195-51/+151
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to run methods, both for transform passes and analysis passes. This also allows the analysis manager to use a different set of extra arguments from the pass manager where useful. Consider passes over analysis produced units of IR like SCCs of the call graph or loops. Passes of this nature will often want to refer to the analysis result that was used to compute their IR units (the call graph or LoopInfo). And for transformations, they may want to communicate special update information to the outer pass manager. With this change, it becomes possible to have a run method for a loop pass that looks more like: PreservedAnalyses run(Loop &L, AnalysisManager<Loop, LoopInfo> &AM, LoopInfo &LI, LoopUpdateRecord &UR); And to query the analysis manager like: AM.getResult<MyLoopAnalysis>(L, LI); This makes accessing the known-available analyses convenient and clear, and it makes passing customized data structures around easy. My initial use case is going to be in updating the pass manager layers when the analysis units of IR change. But there are more use cases here such as having a layer that lets inner passes signal whether certain additional passes should be run because of particular simplifications made. Two desires for this have come up in the past: triggering additional optimization after successfully unrolling loops, and triggering additional inlining after collapsing indirect calls to direct calls. Despite adding this layer of generic extensibility, the *only* change to existing, simple usage are for places where we forward declare the AnalysisManager template. We really shouldn't be doing this because of the fragility exposed here, but currently it makes coping with the legacy PM code easier. Differential Revision: http://reviews.llvm.org/D21462 llvm-svn: 279227
* [PM] Try to work-around what appears to be an MSVC SFINAE issue withChandler Carruth2016-08-191-1/+10
| | | | | | | | | | | | | | r279217 where it fails to select the path that other compilers select. The workaround won't be as careful to produce an error when an analysis result is incorrect, but we can rely on non-MSVC builds to catch such errors it seems and MSVC doesn't seem to support the alternative techniques. Hoping this brings the windows bots back to life. If not, will have to revert all of this. llvm-svn: 279225
* [CodeGen] Fix a trivial type conversion bug dating back to pre-2008James Molloy2016-08-192-1/+16
| | | | | | | | The heuristic above this code is incredibly suspect, but disregarding that it mutates the cast opcode so we need to check the *mutated* opcode later to see if we need to emit an AssertSext or AssertZext node. Fixes PR29041. llvm-svn: 279223
* [asan] Fix size of shadow incorrectly calculated in r279178Vitaly Buka2016-08-192-4/+3
| | | | | | | | | | | | Summary: r279178 generates 8 times more stores than necessary. Reviewers: eugenis Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23708 llvm-svn: 279222
* [PM] NFC refactoring: remove the AnalysisManagerBase class, folding itChandler Carruth2016-08-191-156/+95
| | | | | | | | | | | | | | | | | | | | | | into the AnalysisManager class template. Back when I first added this base class there were separate analysis managers and some plausible reason why it would be a useful factoring of common code between them. However, after a lot of refactoring cleaning, we now have *entirely* shared code. The base class was just an arbitrary division between code in one class template and a separate class template. It didn't add anything and forced lots of indirection through "derived_this" for no real gain. We can always factor a base CRTP class out with common code if there is ever some *other* analysis manager that wants to share a subset of logic. But for now, folding things into the primary template is a non-trivial simplification with no down sides I see. It shortens the code considerably, removes an unhelpful abstraction, and will make subsequent patches *dramatically* less complex which enhance the analysis manager infrastructure to effectively cope with invalidation. llvm-svn: 279221
* [modules] Add missing include.Vassil Vassilev2016-08-191-0/+1
| | | | llvm-svn: 279219
* [PM] Redesign how the new PM detects whether an analysis result providesChandler Carruth2016-08-193-10/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | its own invalidate method. Previously, the technique would assume that if a result didn't have an invalidate method that didn't exactly match the expected signature it didn't have one at all. This is in fact not the case. And we had analyses with incorrect signatures for the invalidate method in the tree that would be erroneously invalidated in certain cases! Yikes. Moreover a result might legitimately want to have multiple overloads for the invalidate method, and if one changes or a new one is needed we again really want a compiler error. For example in the tree we had not added the overload for a *function* IR unit to the invalidate routine for TLI. Doh. So a new techique for the SFINAE detection here: if the result has *any* member spelled "invalidate" we turn off the synthesis of a default version. We don't care if it is a member function or a member variable or how many overloads there are. Once a result has something by that name it must provide suitable overloads for the contexts in which it is used. This seems much more resilient and durable. Huge props to Richard Smith who helped me figure out how on earth we could even do this in C++. It took quite some doing. The technique is remarkably clean however, and merely requires that the analysis results are not *final* classes. I think that's a requirement we can live with even if it is a bit odd. I've fixed the two bad in-tree analysis results. And this will make my next change which changes the API for invalidate much easier to validate as correct. llvm-svn: 279217
* [PM] Rework the new PM support for building the ModuleSummaryIndex toChandler Carruth2016-08-194-91/+55
| | | | | | | | | | | | | | | | | | | | | | directly produce the index as the value type result. This requires making the index movable which is straightforward. It greatly simplifies things by allowing us to completely avoid the builder API and the layers of abstraction inherent there. Instead both pass managers can directly construct these when run by value. They still won't be constructed truly eagerly thanks to the optional in the legacy PM. The code that directly builds the index can also just share a direct function. A notable change here is that the result type of the analysis for the new PM is no longer a reference type. This was really problematic when making changes to how we handle result types to make our interface requirements *much* more strict and precise. But I think this is an overall improvement. Differential Revision: https://reviews.llvm.org/D23701 llvm-svn: 279216
* Fix tests in llvm/test/tools/gold/X86 to satisfy r279014.NAKAMURA Takumi2016-08-197-9/+9
| | | | | | They would unexpectedly pass if test/tools/gold/X86/Output had outputs of previous tests. llvm-svn: 279214
OpenPOWER on IntegriCloud