<div dir="ltr"><div><div><div><div>Thank you Benjamin. I did what you suggested and got the code working.<br></div>But this I did mechanically, by looking at some example code.<br><br></div>Could you explain the functions - getEmptyKey, getTombstoneKey, getHashValue, and isEqual?<br>

</div>Also, the need for redefining them.<br><br></div>Regards,<br>Rekha<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Nov 4, 2013 at 5:16 PM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@gmail.com" target="_blank">benny.kra@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Nov 4, 2013 at 10:35 AM, Rekha R <<a href="mailto:rekharamapai@nitc.ac.in">rekharamapai@nitc.ac.in</a>> wrote:<br>


> Hi,<br>
><br>
> I am trying to implement Available Expressions data flow analysis. I created<br>
> the following class (I am giving here code snippet.):<br>
><br>
> namespace {<br>
>   typedef DenseMap<Expression, uint32_t> DMTy;  //Expression is a class I<br>
> defined.<br>
>   struct DataFlowValue {<br>
>     DMTy ExprMap;<br>
>     llvm::BitVector* DFV;<br>
><br>
>   // Functions operating on the data //<br>
>     bool operator==(const DataFlowValue V) const;<br>
>     void top();  /* set all elements */<br>
>     void bot();  /* reset all elements */<br>
>     void set(DMTy emap);<br>
>     void merge(DataFlowValue V);  /* confluence operation  */<br>
>   };<br>
> }<br>
><br>
> with the following function definition:<br>
><br>
> void DataFlowValue::set(DMTy emap) {<br>
>   ExprMap = *emap;    //Line153:<br>
> }<br>
><br>
> When I compile, I get the following error:<br>
><br>
> /home/zeus/masterLLVM/llvm/include/llvm/ADT/DenseMap.h: In member function<br>
> ‘void llvm::DenseMapBase<DerivedT, KeyT, ValueT, KeyInfoT>::destroyAll()<br>
> [with DerivedT = llvm::DenseMap<{anonymous}::Expression, unsigned int>, KeyT<br>
> = {anonymous}::Expression, ValueT = unsigned int, KeyInfoT =<br>
> llvm::DenseMapInfo<{anonymous}::Expression>]’:<br>
> /home/zeus/masterLLVM/llvm/include/llvm/ADT/DenseMap.h:600:5:   instantiated<br>
> from ‘void llvm::DenseMap<KeyT, ValueT, KeyInfoT>::copyFrom(const<br>
> llvm::DenseMap<KeyT, ValueT, KeyInfoT>&) [with KeyT =<br>
> {anonymous}::Expression, ValueT = unsigned int, KeyInfoT =<br>
> llvm::DenseMapInfo<{anonymous}::Expression>, llvm::DenseMap<KeyT, ValueT,<br>
> KeyInfoT> = llvm::DenseMap<{anonymous}::Expression, unsigned int>]’<br>
> /home/zeus/masterLLVM/llvm/include/llvm/ADT/DenseMap.h:585:5:   instantiated<br>
> from ‘llvm::DenseMap<KeyT, ValueT, KeyInfoT>& llvm::DenseMap<KeyT, ValueT,<br>
> KeyInfoT>::operator=(const llvm::DenseMap<KeyT, ValueT, KeyInfoT>&) [with<br>
> KeyT = {anonymous}::Expression, ValueT = unsigned int, KeyInfoT =<br>
> llvm::DenseMapInfo<{anonymous}::Expression>, llvm::DenseMap<KeyT, ValueT,<br>
> KeyInfoT> = llvm::DenseMap<{anonymous}::Expression, unsigned int>]’<br>
> /home/zeus/masterLLVM/llvm/lib/Analysis/AVEAnalysis.cpp:153:13:<br>
> instantiated from here<br>
> /home/zeus/masterLLVM/llvm/include/llvm/ADT/DenseMap.h:256:7: error:<br>
> ‘isEqual’ is not a member of ‘llvm::DenseMapInfo<{anonymous}::Expression>’<br>
> /home/zeus/masterLLVM/llvm/include/llvm/ADT/DenseMap.h:256:7: error:<br>
> ‘isEqual’ is not a member of ‘llvm::DenseMapInfo<{anonymous}::Expression>’<br>
><br>
> Can someone help me solve the error?<br>
<br>
</div></div>To use DenseMap with your own class as a key you have to specialize<br>
DenseMapInfo first, DenseMapInfo.h has some examples.<br>
<br>
In particular you have to set aside two special values as "empty" and<br>
"tombstone" (deleted) keys that can not occur in normal Expressions.<br>
Then you have to define a hash function for Expression and implement<br>
isEqual, which will likely just call operator== on your objects.<br>
<br>
See also <a href="http://llvm.org/docs/ProgrammersManual.html#llvm-adt-densemap-h" target="_blank">http://llvm.org/docs/ProgrammersManual.html#llvm-adt-densemap-h</a><br>
<br>
- Ben<br>
</blockquote></div><br><br clear="all"><br>-- <br>Rekha
</div>