Hi Xiaozhu,
Is the first entry in the vector e the loop head?
BPatch_Vector<BPatch_basicBlock*> entries;
loop->getLoopEntries(entries);
BPatch_basicBlock* head = entries[0];
if (head == NULL)
{
continue;
}
LoopInfo info(Address(head->getStartAddress()) -
module_base);
BPatch_Vector<BPatch_basicBlock*> blocks;
loop->getLoopBasicBlocks(blocks);
for (unsigned int i = 0; i < blocks.size(); ++i)
{
BPatch_basicBlock* block = blocks[i];
Or is it more complicated than that?
Thanks,
Jim G
Thanks,
Jim G
On 07/28/2015 10:37 AM, Xiaozhu Meng wrote:
Hi Jim,
The old getLoopHead() method has been replaced by the following new
interface to appropriately represent irreducible loops:
int BPatch_basicBlockLoop::getLoopEntries(BPatch_Vector<BPatch_basicBlock*> &e);
The new interface returns the number of entry blocks of this loop and
the entries blocks are returned as the output parameter.
On Tue, Jul 28, 2015 at 8:42 AM, Jim Galarowicz <jeg@xxxxxxxxxxxxx> wrote:
Hi all,
I've downloaded the git source version of dyninst and built it on NASA's pfe
machine and my laptop in an attempt to run it on Intel MIC binaries. The
8.2.1 asserts in switches related to the architecture type.
However, I ran into a compile error with our loop code:
[ 16%] Building CXX object
libopenss-framework/CMakeFiles/openss-framework-symtabapi.dir/DyninstSymbols.cxx.o
cd /u/jgalarow/OpenSpeedShop/build_mic_offline_fe/libopenss-framework &&
/nasa/pkgsrc/2014Q3/gcc49/bin/g++ -DHAVE_DYNINST -DHAVE_STDINT_H=1
-DHAVE_SYS_STAT_H=1 -DOPENSS_USE_SYMTABAPI=1
-DOpenSpeedShop_LIBRARY_FILE_DIR=\"/nobackupp8/jgalarow/maia/pfe_ossoffline/lib64\"
-DPACKAGE=1 -DPACKAGE_VERSION=1 -DVERSION=\"2.1\" -D_GNU_SOURCE
-Dopenss_framework_symtabapi_EXPORTS -g -fPIC
-I/u/jgalarow/OpenSpeedShop/libopenss-framework
-I/u/jgalarow/OpenSpeedShop/build_mic_offline_fe/libopenss-framework
-I/u/jgalarow/OpenSpeedShop/build_mic_offline_fe/libopenss-framework/offline
-I/nasa/boost/1.50.0/include
-I/nobackup/jgalarow/dyninst-9.0.0/include/dyninst
-I/nobackup/jgalarow/dyninst-9.0.0/include
-I/u/jgalarow/krellroot_v2.1u8/include
-I/u/jgalarow/OpenSpeedShop/build_mic_offline_fe/libopenss-framework/../libopenss-framework
-o CMakeFiles/openss-framework-symtabapi.dir/DyninstSymbols.cxx.o -c
/u/jgalarow/OpenSpeedShop/libopenss-framework/DyninstSymbols.cxx
/u/jgalarow/OpenSpeedShop/libopenss-framework/DyninstSymbols.cxx: In
function 'std::vector<LoopInfo> getLoopsAt(const
OpenSpeedShop::Framework::Address&, BPatch_image&)':
/u/jgalarow/OpenSpeedShop/libopenss-framework/DyninstSymbols.cxx:140:49:
error: 'class BPatch_basicBlockLoop' has no member named 'getLoopHead'
BPatch_basicBlock* head = loop->getLoopHead();
^
make[2]: ***
[libopenss-framework/CMakeFiles/openss-framework-symtabapi.dir/DyninstSymbols.cxx.o]
Error 1
make[2]: Leaving directory
`/home4/jgalarow/OpenSpeedShop/build_mic_offline_fe'
make[1]: ***
[libopenss-framework/CMakeFiles/openss-framework-symtabapi.dir/all] Error 2
make[1]: Leaving directory
`/home4/jgalarow/OpenSpeedShop/build_mic_offline_fe'
I found this in my emails about dyninst:
Hi,
We are planing to improve our current loop detection algorithm to be able to
handle irreducible loops. Such loops can have multiple entry blocks. For
this matter, the original interface to get the loop head needs to be changed
to return a vector of heads of a loop.
The involved interface is:
BPatch_basicBlock* BPatch_basicBlockLoop::getLoopHead();
We plan to change it to:
bool BPatch_basicBlockLoop::getLoopHead(std::vector<BPatch_basicBlock*>&
entries);
Let us know if you are using the interface and if the interface change will
cause significant inconvenience to you.
Thanks
--Xiaozhu
However, I can't find any examples of the new getLoopHead code in the latest
Dyninst source. Can someone point me to it?
pfe21-101>pwd
/nobackupp8/jgalarow/OpenSpeedShop_ROOT/BUILD/pfe20/dyninst-9.0.0
pfe21-94>grep basicBlockLoop::getLoopHead *
pfe21-95>!!/*
grep basicBlockLoop::getLoopHead */*
pfe21-96>!!/*
grep basicBlockLoop::getLoopHead */*/*
pfe21-97>!!/*
grep basicBlockLoop::getLoopHead */*/*/*
pfe21-98>!!/*
grep basicBlockLoop::getLoopHead */*/*/*/*
pfe21-99>!!/*
grep basicBlockLoop::getLoopHead */*/*/*/*/*
pfe21-100>!!/*
grep basicBlockLoop::getLoopHead */*/*/*/*/*/*
pfe21-101>pwd
/nobackupp8/jgalarow/OpenSpeedShop_ROOT/BUILD/pfe20/dyninst-9.0.0
pfe21-104>grep getLoopHead *
pfe21-105>!!/*
grep getLoopHead */*
pfe21-106>!!/*
grep getLoopHead */*/*
!!/*
LOOKS LIKE THE OLD INTERFACE:
dyninstAPI/src/hybridOverwrites.C://
(*lIter)->getLoopHead()->getStartAddress(),
dyninstAPI/src/hybridOverwrites.C://
writeLoop->getLoopHead()->getStartAddress(),
pfe21-107>!!/*
grep getLoopHead */*/*/*
pfe21-108>!!/*
grep getLoopHead */*/*/*/*
pfe21-109>!!/*
grep getLoopHead */*/*/*/*/*
pfe21-110>
I need to change this to work with the new API:
cat -n /u/jgalarow/OpenSpeedShop/libopenss-framework/DyninstSymbols.cxx
...
...
122 BPatch_Vector<BPatch_basicBlockLoop*> loops;
123 cfg->getLoops(loops);
124
125 for (unsigned int l = 0; l < loops.size(); ++l)
126 {
127 BPatch_basicBlockLoop* loop = loops[l];
128
129 if ((loop == NULL) ||
!loop->containsAddressInclusive(
130 (module_base + address).getValue()
131 ))
132 {
133 continue;
134 }
135
136 // A loop containing this address has been found!
Rejoice!
137 // And, of course, obtain the loop's head address
and basic
138 // block address ranges...
139
140 BPatch_basicBlock* head = loop->getLoopHead();
141
142 if (head == NULL)
143 {
144 continue;
145 }
146
147 LoopInfo info(Address(head->getStartAddress()) -
module_base);
148
149 BPatch_Vector<BPatch_basicBlock*> blocks;
150 loop->getLoopBasicBlocks(blocks);
151
152 for (unsigned int i = 0; i < blocks.size(); ++i)
153 {
...
...
Thanks,
Jim G
On 09/23/2014 04:57 PM, Xiaozhu Meng wrote:
Hi,
We are planing to improve our current loop detection algorithm to be able to
handle irreducible loops. Such loops can have multiple entry blocks. For
this matter, the original interface to get the loop head needs to be changed
to return a vector of heads of a loop.
The involved interface is:
BPatch_basicBlock* BPatch_basicBlockLoop::getLoopHead();
We plan to change it to:
bool BPatch_basicBlockLoop::getLoopHead(std::vector<BPatch_basicBlock*>&
entries);
Let us know if you are using the interface and if the interface change will
cause significant inconvenience to you.
Thanks
--Xiaozhu
_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
|