Dear John,
First thing, the 3 loops in Densemap are all " Loop at depth 1 containing:
%1<header><exiting>,%3,%5<latch> " in the 3 functions.
The dense map is in a ImmutablePass. I got it in FunctionPass and tried insert
the information in this FunctionPass. So to turn the FunctionPass to ModulePass
may be a better idea?
Another interesting thing: if just before the insertion, I used "L ->
print(errs());" to print the Loop, there were 6 items in ls. BUT when I
tried to read it in a ModulePass, I can't get the correct result.
"
for (Module::iterator FI = M.begin(), E = M.end(); FI != E; ) {
F = FI++;
if (!F->hasName() && !F->isDeclaration()){}
else{
LoopInfo *LI = &getAnalysis<LoopInfo>(*F);
WCETInfo *WI = &getAnalysis<WCETInfo>(); //WI is the ImmutablePass
which contains the dense map
for(LoopInfo::iterator i=LI->begin(); i!=LI->end(); ++i) {
Loop *L = *i;
int lb=0;
lb=WI->outls(L); // the method: return ls.find(L)->second;
}
}
} "
Thank you
Sincerely,
Hanbing
----- Mail original -----
> De: "John Criswell" <jtcriswel at gmail.com>
> À: "Hanbing Li" <hanbing.li at inria.fr>, llvmdev at
cs.uiuc.edu
> Envoyé: Jeudi 28 Août 2014 18:59:52
> Objet: Re: [LLVMdev] The problem of densemap and loop
> Dear Hanbing,
> You haven't provided enough information to help diagnose the problem.
It
> would help if you specified which 3 loops actually end up in the DenseMap.
> One thing to check for is if your code is in a FunctionPass. A FunctionPass
> computes its results anew each time it is run on a function, and so
it's
> possible that this is the cause of the problem. Similarly, the Loop objects
> for each function might be deleted and re-allocated for new Loop objects
> every time you run the LoopAnalysis on a new function. That would make it
> look like you only have three elements when, in fact, you've added six
> elements but three were deallocated.
> Alternatively, you might have some something silly like making ls a local
> variable, so it gets destroyed each time you enter the function/method in
> which it appears.
> However, these are just guesses. I'm not certain it can be diagnosed
even if
> you do provide more information.
> Regards,
> John Criswell
> On 8/28/14, 12:49 PM, Hanbing Li wrote:
> > Hello, everyone,
>
> > I created a dense map like this: DenseMap<Loop *, int> ls;
>
> > And I have a module which contains 3 functions:
>
> > function F and it has a loop which is " Loop at depth 1
containing:
> > %1<header><exiting>,%3,%5<latch> "
>
> > function G and it has two loops which are "
>
> > Loop at depth 1 containing:
%8<header><exiting>,%10,%14<latch>
>
> > Loop at depth 1 containing:
%1<header><exiting>,%3,%5<latch> "
>
> > function main and it has 3 loops which are "
>
> > Loop at depth 1 containing:
%17<header><exiting>,%19,%23<latch>
>
> > Loop at depth 1 containing:
%8<header><exiting>,%10,%14<latch
>
> > Loop at depth 1 containing:
%1<header><exiting>,%3,%5<latch> "
>
> > Then I tried to insert these loops into ls and the expected result is
that
> > there are 6 items in ls after the insertion.
>
> > But I got only 3.
>
> > So my question is why this happened?
>
> > The dense map uses the name of the loop to check if the element is in
it?
>
> > Is there anything wrong during my code?
>
> > Looking forward to your answer.
>
> > Thank you
>
> > Sincerely,
>
> > Hanbing
>
> > _______________________________________________
>
> > LLVM Developers mailing list LLVMdev at cs.uiuc.edu
http://llvm.cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20140829/faa98a57/attachment.html>