search for: loopaccessanalysis

Displaying 20 results from an estimated 75 matches for "loopaccessanalysis".

2020 Jul 26
2
[LAA] RtCheck on pointers of different address spaces.
...de as their effective type differs for these pointers (One with 32-bit and the other with 64-bit) Question: Is this intended to try for the RtCheck on pointers from different address spaces? The comments given in the code snippet (below) hints they aren't. Code snippet from LoopAccessAnalysis.cpp: ----------------------------------------------------------------------------------------------------------------------- bool AccessAnalysis::canCheckPtrAtRT(...) { ---------- // If the pointers that we would use for the bounds comparison have different // address spaces...
2020 Jul 06
2
How to get information about data dependencies?
Michael Kruse via llvm-dev <llvm-dev at lists.llvm.org> writes: > LLVM has multiple dependence analyses, each with its up- and downsides: > > * llvm::DependenceAnalysis > * llvm::LoopAccessAnalysis Can someone explain the differences between these? As far as I can tell they essentially do the same thing (though perhaps one is more precise?). LAA seems to be used by vectorization (what else?) while DA seems to be used by loop transformations (what else?). I am not a loop opt guy so while I...
2020 Jul 26
2
[LAA] RtCheck on pointers of different address spaces.
...V node as their effective type differs for these pointers (One with 32-bit and the other with 64-bit) Question: Is this intended to try for the RtCheck on pointers from different address spaces? The comments given in the code snippet (below) hints they aren’t. Code snippet from LoopAccessAnalysis.cpp: ----------------------------------------------------------------------------------------------------------------------- bool AccessAnalysis::canCheckPtrAtRT(...) { ---------- // If the pointers that we would use for the bounds comparison have different // address spaces...
2015 Jun 12
4
[LLVMdev] Loop Vectorization and Store-Load Forwarding issue
...cket of y[16:17] (iteration j=16) partially overlaps with load packets of y[15:16] (iteration j=30) and y[17:18] (iteration j=32). As conflicts introduce additional delays in the store->load forwarding pipes, this fact is modeled in the method MemoryDepChecker::couldPreventStoreLoadForward() in LoopAccessAnalysis.cpp. The function may turn off vectorization in the presence of such conflicts. Looking through the code gives me the feeling that it may be more conservative than desired. The reason being, if the dependence distance is high, the conflicting store may flush out of the store pipe by the time the lo...
2020 May 22
2
Creating a copy Pass of DependenceAnalysis
Hi, I want to create a copy of DependenceAnalysis downstream. At first I tried the HelloWorld tutorial. But then I figured, maybe I should move on to create my pass by mimicking some other pass in LLVM. So, I tried copying DependenceAnalysis itself [1] Although after a lot of time of trying it compiled, I'm pretty sure I have done it completely in the wrong way. What is more, I can't
2015 Mar 11
2
[LLVMdev] RFC: Loop versioning for LICM
...necessary checks that could unnecessarily slow things down. > > > I just wanted to keep a flexibility open. > We can give a try to LoopVersioning by keeping point 1 & 3 checks. but I’m not sure about point 2. > Will give a try to your upcoming patch. > > > > LoopAccessAnalysis::analyzeLoop > Here again its very specific to LoopVectorizer. > The way it handles stores & loads may not be appreciated by other optimization > expecting other treatment. I suggest we should think on flexibility for user to > override load & store handling. We can provide vir...
2020 Jul 01
2
How to get information about data dependencies?
Hello, I had a question similar to this one in the link below. http://lists.llvm.org/pipermail/llvm-dev/2015-January/080589.html In addition, if we can't get RAW dependencies information using the provided llvm tools, how would I write a pass for it? Are there any helpful resources? Thanks, Jiho -------------- next part -------------- An HTML attachment was scrubbed... URL:
2015 Mar 04
2
[LLVMdev] RFC: Loop versioning for LICM
> On Mar 3, 2015, at 1:29 AM, Nema, Ashutosh <Ashutosh.Nema at amd.com <mailto:Ashutosh.Nema at amd.com>> wrote: > > Hi Adam, > > Thanks for looking into LoopVersioning work. > > I have gone through recent LoopAccessAnalysis changes and found some of the stuff > overlaps (i.e. runtime memory check, loop access analysis etc.). LoopVersioning can > use some of the things from LAA. > > LoopVersioning is a memory check based multi versioning optimization, it simply creates > aggressive alias version of lo...
2016 Apr 23
2
[IndVarSimplify] Narrow IV's are not eliminated resulting in inefficient code
...! Yes, your patch does fix my larger test case too. My algorithm gets double performance improvement with the patch, as the loop now has a smaller instruction set and succeeds to unroll w/o any extra #pragma's. I also ran the LLVM tests against the patch. There are 6 new failures: Analysis/LoopAccessAnalysis/number-of-memchecks.ll Analysis/LoopAccessAnalysis/reverse-memcheck-bounds.ll Analysis/ScalarEvolution/flags-from-poison.ll Analysis/ScalarEvolution/nsw-offset-assume.ll Analysis/ScalarEvolution/nsw-offset.ll Analysis/ScalarEvolution/nsw.ll I haven't inspected these failure...
2020 Jul 07
3
How to get information about data dependencies?
Michael Kruse via llvm-dev <llvm-dev at lists.llvm.org> writes: > AFAIK they are independent developments. LoopAccessAnalysis was > extracted out of the LoopVectorizer in 2015, and first developed in > 2013 (https://github.com/llvm/llvm-project/commit/d517976758c8674bdcd4c74457f7a83f20e432c5) > > DependenceAnalysis was a from-scratch implementation from 2012 > (https://github.com/llvm/llvm-project/commit/59...
2015 Jan 12
8
[LLVMdev] RFC: Loop distribution/Partial vectorization
...g/D6930>). Here is the list of design choices: - Loop Distribution is implemented as a separate pass to be run before the Loop Vectorizer. - The pass reuses the Memory Dependence Checker framework from the Loop Vectorizer. This along with the AccessAnalysis class is split out into a new LoopAccessAnalysis class. We may want to turn this into an analysis pass on its own. - It also reuses the Run-time Memory Check code from the Loop Vectorizer. The hmmer loop requires memchecks. This is again captured by the same LoopAccessAnalysis class. - The actual loop distribution is implemented as follo...
2016 Feb 19
3
Implement Loop Fusion Pass
...ong that path and then the dependence legality is > checked on the fused loop keeping the instructions from original loops in > context. Fusion is illegal if there is a backward dependence between memory > accesses whose source was in first loop and sink was in second loop. > Currently, LoopAccessAnalysis is used to check dependence legality. > > > Thanks for writing up the design here. > > I think we have a pretty strong policy against creating temporary > instructions and here you actually create an entire loop just to check > legality. > I didn't understand the consequ...
2018 May 09
2
ScalarEvolution questions
Hi, I'm new to ScalarEvolution and wanted to explore its capabilities. I have following few questions: 1) How to compare SCEV expressions. I have a situation to compare two SCEV to find the min among them. Found an existing function(getMinFromExprs) in LoopAccessAnalysis which compares two SCEVs. getMinFromExprs function finds the diff between two SCEV's and then checks for the negative value to find the minimum. While checking the negative value it specifically look for SCEVConstant. Do we have anything to find the min in case of NON-SCEVConstant (with some a...
2016 Feb 18
2
Implement Loop Fusion Pass
...nditionally fused along that path and then the dependence legality is checked on the fused loop keeping the instructions from original loops in context. Fusion is illegal if there is a backward dependence between memory accesses whose source was in first loop and sink was in second loop. Currently, LoopAccessAnalysis is used to check dependence legality. A basic diagram below tries to explain the approach taken to test dependence legality on two adjacent loops (L1 and L2). L1PH (PH: Preheader) | L1 | CB (L1Exit/L2PH: ConnectingBlock (CB) ) | L2 | L2Exit is versioned...
2016 Feb 24
2
Implement Loop Fusion Pass
...ly fused along that path and then the dependence legality is checked on the fused loop keeping the instructions from original loops in context. Fusion is illegal if there is a backward dependence between memory accesses whose source was in first loop and sink was in second loop. >> Currently, LoopAccessAnalysis is used to check dependence legality. > > Thanks for writing up the design here. > > I think we have a pretty strong policy against creating temporary instructions and here you actually create an entire loop just to check legality. > I didn't understand the consequences here. A...
2017 Jan 17
2
Loop Invariants Detection questions
...s method considers a Value invariant if: - it's an Instruction not presents in the current loop (what does it mean? There is no dependence analysis on In and Out "variables" of all instructions in the loop?) - this Value is not an Instruction (then a Constant I guess…). I've seen LoopAccessAnalysis using it too. What does this analysis do exactly on loop invariant address? Also DependenceAnalysis seems to give dependence information on memory refs. But it seems to not be used by LICM… Also MemoryDependenceAnalysis "determines, for a given memory operation, what preceding memory operati...
2017 Oct 14
3
[RFC] Polly Status and Integration
On Fri, Oct 13, 2017 at 5:13 PM, Michael Kruse via llvm-dev < llvm-dev at lists.llvm.org> wrote: > 2017-10-14 1:29 GMT+02:00 Saito, Hideki via llvm-dev < > llvm-dev at lists.llvm.org>: > > I'm also sorry that I'm not commenting on the main part of your RFC in > this reply. I just want to focus on > > one thing here. > > > >
2018 Feb 06
2
6 separate instances of static getPointerOperand(). Time to consolidate?
...) { if (LoadInst *LI = dyn_cast<LoadInst>(I)) return LI->getPointerOperand(); if (StoreInst *SI = dyn_cast<StoreInst>(I)) return SI->getPointerOperand(); llvm_unreachable("Value is not load or store instruction"); return nullptr; } ------------- Analysis/LoopAccessAnalysis.cpp /// Take the pointer operand from the Load/Store instruction. /// Returns NULL if this is not a valid Load/Store instruction. static Value *getPointerOperand(Value *I) { if (auto *LI = dyn_cast<LoadInst>(I)) return LI->getPointerOperand(); if (auto *SI = dyn_cast<StoreInst&...
2016 Mar 23
2
[GSoC'16] Need details on New Transformations and Analyses
...he recent past to determine what useful work might be left of appropriate scope. \ We actually have two DA frameworks at the moment. The file you mention is only used currently by the LoopInterchange pass that is off by default. There is also the other framework that I’ve been working on called LoopAccessAnalysis that’s currently used by the LoopVectorizer, LoopLoadElimination, LoopDistribution and LICMLoopVersioning (the latter two are off by default). >> >> Value range propagation pass. There was a discussion about this topic (https://groups.google.com/forum/#!topic/llvm-dev/XXqfemtDX74/dis...
2018 May 10
0
ScalarEvolution questions
...rote: > I’m new to ScalarEvolution and wanted to explore its capabilities. > > I have following few questions: > > 1) How to compare SCEV expressions. > > I have a situation to compare two SCEV to find the min among them. > > Found an existing function(getMinFromExprs) in LoopAccessAnalysis which > compares two SCEVs. > > getMinFromExprs function finds the diff between two SCEV’s and then checks > for the negative value to find the minimum. > > While checking the negative value it specifically look for SCEVConstant. > > Do we have anything to find the min in ca...