search for: getnonlocalpointerdependency

Displaying 18 results from an estimated 18 matches for "getnonlocalpointerdependency".

2009 Apr 13
5
[LLVMdev] MemoryDependenceAnalysis
...[#uses=1] store i32 %11, i32* %j, align 4 %12 = add i32 %0, 8 ; <i32> [#uses=1] store i32 %12, i32* %n, align 4 call void (...)* @IMPORTANT_F_([10 x float]* %b, i32* %n, i32* %i, i32* %j) nounwind ret void My problem is that if I use getNonLocalPointerDependency() I get the instruction "N=N+1" as a Def for the second parameter, "N", and no Def for the fourth, "j", (only the call to "bar()" as clobber). If I use getDependency() on the call, I get the instruction "N=N+7" as a clobber. How can I use Me...
2009 Apr 13
2
[LLVMdev] MemoryDependenceAnalysis
...gt;> %12 = add i32 %0, 8 ; <i32> [#uses=1] >> store i32 %12, i32* %n, align 4 >> call void (...)* @IMPORTANT_F_([10 x float]* %b, i32* %n, >> i32* %i, i32* %j) nounwind >> ret void >> >> My problem is that if I use getNonLocalPointerDependency() I get the >> instruction "N=N+1" as a Def for the second parameter, "N", and no >> Def for the fourth, "j", (only the call to "bar()" as clobber). >> If I use getDependency() on the call, I get the instruction "N=N+7" >>...
2009 Apr 25
0
[LLVMdev] MemoryDependenceAnalysis
...Note that my analysis pass is invoked > after "-O1" and that's why the IR I included in the original email > is optimized. Hi Anthony, Sorry for the delay, things have been crazy lately. The MemDep API assumes that you will call getDependency() first, and then only call getNonLocalPointerDependency() if it returns non- local. This will return the first instruction that the instruction is dependent on. As Eli mentioned, MemDep does have some more rich APIs that are private. We could look the export those so that you can query each argument at a time. The problem is that (without mor...
2017 Jan 13
4
Wrong code bug after GVN/PRE?
...differ in these two cases? The input to gvn looks the same when running all passes and just gvn, but I see a difference in how GVN::processNonLocalLoad(LoadInst *LI) behaves: I get different results from // Step 1: Find the non-local dependencies of the load. LoadDepVect Deps; MD->getNonLocalPointerDependency(LI, Deps); So we get different results from MemoryDependenceResults when invoking gvn alone or after a bunch of other passes. Is this expected or not? I tried to dig into MemoryDependenceResults::getNonLocalPointerDependency but I have to say I'm quite lost. I ran some git bisect and as...
2009 Apr 13
0
[LLVMdev] MemoryDependenceAnalysis
...instructions > j = N/2  (store i32 %11, i32* %j, align 4) > and > N = N+7  (store i32 %12, i32* %n, align 4) > are the ones that define the parameters "j" and "N" respectively? Try calling MemoryDependenceAnalysis::getDependency? It sounds like you're misusing getNonLocalPointerDependency. -Eli
2009 Apr 13
1
[LLVMdev] MemoryDependenceAnalysis
...(store i32 %11, i32* %j, align 4) >> and >> N = N+7 (store i32 %12, i32* %n, align 4) >> are the ones that define the parameters "j" and "N" respectively? > > Try calling MemoryDependenceAnalysis::getDependency? It sounds like > you're misusing getNonLocalPointerDependency. But I'm not interested in the dependencies of the alloca instruction, I'm interested in the definition(s) of the particular use of the pointer. Anthony
2010 Nov 09
0
[LLVMdev] Interesting test-suite results
In the MemoryDependenceAnalysis::getNonLocalPointerDependency overload that takes a pointer value, it is currently creating an AliasAnalysis::Location from just the pointer, which pessimistically assumes unknown size. I added code to use AliasAnalysis::getTypeStoreSize to create an AliasAnalysis::Location with a more accurate size (when target data is availa...
2013 Jan 16
1
[LLVMdev] llvm print-memdeps segfault
...:AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&, llvm::DenseMap<llvm::BasicBlock*, llvm::Value*, llvm::DenseMapInfo<llvm::BasicBlock*> >&, bool) + 3673 4 opt 0x08c019aa llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(llvm::AliasAnalysis::Location const&, bool, llvm::BasicBlock*, llvm::SmallVectorImpl<llvm::NonLocalDepResult>&) + 266 5 opt 0x08bf1bed 6 opt 0x08e3415c llvm::FPPassManager::runOnFunction(llvm::Function&) + 636 7 opt 0x08e341c8 llvm::FPPassManager::...
2009 Apr 13
0
[LLVMdev] MemoryDependenceAnalysis
...%11, i32* %j, align 4 > %12 = add i32 %0, 8 ; <i32> [#uses=1] > store i32 %12, i32* %n, align 4 > call void (...)* @IMPORTANT_F_([10 x float]* %b, i32* %n, > i32* %i, i32* %j) nounwind > ret void > > My problem is that if I use getNonLocalPointerDependency() I get the > instruction "N=N+1" as a Def for the second parameter, "N", and no > Def for the fourth, "j", (only the call to "bar()" as clobber). > If I use getDependency() on the call, I get the instruction "N=N+7" as > a clobber. &gt...
2017 Jan 13
2
Wrong code bug after GVN/PRE?
...same when running all passes and just gvn, but >> I see a difference in how GVN::processNonLocalLoad(LoadInst *LI) behaves: >> >> I get different results from >> >> // Step 1: Find the non-local dependencies of the load. >> LoadDepVect Deps; >> MD->getNonLocalPointerDependency(LI, Deps); >> >> So we get different results from MemoryDependenceResults when invoking >> gvn alone or after a bunch of other passes. >> >> Is this expected or not? >> >> >> I tried to dig into MemoryDependenceResults::getNonLocalPointerDependency &g...
2009 Apr 25
1
[LLVMdev] MemoryDependenceAnalysis
...ked >> after "-O1" and that's why the IR I included in the original email >> is optimized. > > Hi Anthony, > > Sorry for the delay, things have been crazy lately. > > The MemDep API assumes that you will call getDependency() first, and > then only call getNonLocalPointerDependency() if it returns non- > local. This will return the first instruction that the instruction is > dependent on. > > As Eli mentioned, MemDep does have some more rich APIs that are > private. We could look the export those so that you can query each > argument at a time. Actually t...
2011 Dec 13
1
[LLVMdev] Memory Dependence Analysis
...n --debug-pass=Structure < test.bc > /dev/null in an effort to simplify things a bit. This gives me pretty straightforward code with 3 basic blocks. When I look at the loads using MDA->getDependency(), we find that they are both NonLocal, which makes sense. Chasing further, with MDA->getNonLocalPointerDependency(), I get a vector of basic blocks (the 1st and 2nd, as expected), along with indications that the query isUnknown. That surprised me; I had expected that it would suggest isClobber for both loads and both blocks. Am I doing something wrong? Or perhaps not chasing far enough? Or perhaps MemoryDep...
2012 May 22
0
[LLVMdev] Some small changes to the memory dependence analysis API
...blocks in between the "thing we are checking against", and "the next dependency it thinks is real", you can get into hunting for a lot of dependencies we don't care about. Besides being faster, short circuiting like this eliminates more things. A similar issue occurs with getNonLocalPointerDependency (though there the issue is slightly different, we have a set of loads we want to know if this load is equivalent to, and if we walk past those loads without it seeing a def/clobber, we know the answer is "no", and we don't need to know the closest deps) [1] As a side note, whether yo...
2013 Jan 21
2
[LLVMdev] llvm alloca dependencies
...from DependenceAnalysis and MemoryDependenceAnalysis, but the results were not correct. For instance, `MemoryDependenceAnalysis::getDependency` should be good with option "Def", but works only for stores, not for loads. Also I have a segfault when trying to use `MemoryDependenceAnalysis::getNonLocalPointerDependency` or `MemoryDependenceAnalysis::getPointerDependencyFrom` . When I try to check my result using MemDepResult::getDef(), the result for Load instructions is the same instruction ! So its depending on itself, that being weird since it is using a variable that is previously defined in the code. I also...
2010 Sep 23
2
[LLVMdev] Finding all values derived from a function argument
...s that depend on our stores, TODO: this seems fishy! for(std::list<llvm::LoadInst *>::iterator I = loads.begin(), E = loads.end(); I != E; ) { bool pick = false; #if 1 llvm::SmallVector<llvm::NonLocalDepResult, 16> results; mda->getNonLocalPointerDependency((*I)->getPointerOperand(), true, (*I)->getParent(), results); for(llvm::SmallVector<llvm::NonLocalDepResult, 16>::iterator II = results.begin(), EE = results.end(); !pick && II != EE; ++II) { const llvm::MemDepResult &result = II->get...
2018 Apr 18
1
[RFC] Making GVN able to visit the same block more than once
...st.addr.1, %for.body ] %incdec.ptr = getelementptr inbounds float, float* %p, i64 1 %cmp = icmp eq float* %incdec.ptr, %last br i1 %cmp, label %exit, label %for.body exit: %ret = load float, float* %first.addr.2, align 4 ret float %ret } GVN calls MemoryDependenceAnalysis::getNonLocalPointerDependency to find the non-local dependencies of the load %ret. What it then does is: * Starts looking for an available value of *%first.addr.2 starting in exit. * Doesn't find anything in exit, goes to for.inc. * Doesn't find anything in for.inc, phi translates to be looking for a value of *%p...
2015 Jul 21
6
[LLVMdev] GlobalsModRef (and thus LTO) is completely broken
...f5fbf62a8, > Loc=0x00007fff5fbf6268, isLoad=true, StartBB=0x000000010a19ffa0, > Result=0x00007fff5fbf6bf0, Visited=0x00007fff5fbf6208, SkipFirstBlock=false) > + 5897 at MemoryDependenceAnalysis.cpp:1200 > frame #6: 0x0000000103a0cb3b > libLTO.dylib`llvm::MemoryDependenceAnalysis::getNonLocalPointerDependency(this=0x000000010e6cf0c0, > QueryInst=0x000000010a1a20c8, Result=0x00007fff5fbf6bf0) + 635 at > MemoryDependenceAnalysis.cpp:911 > frame #7: 0x000000010340c5b5 libLTO.dylib`(anonymous > namespace)::GVN::processNonLocalLoad(this=0x000000010e6ce680, > LI=0x000000010a1a20c8) + 101 at...
2015 Jul 17
2
[LLVMdev] GlobalsModRef (and thus LTO) is completely broken
On Fri, Jul 17, 2015 at 9:13 AM Evgeny Astigeevich < evgeny.astigeevich at arm.com> wrote: > It’s Dhrystone. > Dhrystone has historically not been a good indicator of real-world performance fluctuations, especially at this small of a shift. I'd like to see if we see any fluctuation on larger and more realistic application benchmarks. One advantage of the flag being set is that we