[LLVMdev] set_intersect and Visual C compiler
Morten Ofstad
morten at hue.no
Tue Oct 12 10:59:43 PDT 2004
Hello,
This is my first post on this mailing list, so bear with me... My name
is Morten Ofstad and I work for Hue AS (www.hue.no), a company that
makes 3D Visualization software. We are looking into using LLVM for JIT
compiling shader programs, to replace our own (slow) VM. A requirement
for this is that we can compile LLVM in VS7.1, so I contacted Paolo
Invernizzi to find the status of his effort and to help out. I have set
up the build environment now, with help from Paolo and have started to
work on fixing some of the problems.
One thing that the compiler absolutely does not understand is the
definition of set_intersect in include/llvm/ADT/SetOperations.h, and I
am having a hard time understanding it myself.
template <template<class S1ElTy> class S1Ty, class ETy, class S2Ty>
void set_intersect(S1Ty<ETy> &S1, const S2Ty &S2) {
for (typename S1Ty<ETy>::iterator I = S1.begin(); I != S1.end();) {
const ETy &E = *I;
++I;
if (!S2.count(E)) S1.erase(E); // Erase element if not in S2
}
}
it's only used in two places:
lib\Transforms\Scalar\LoopSimplify.cpp
lib\Analysis\PostDominators.cpp
both of which compile correctly if I replace it with the less generic
template<class STy>
void set_intersect(STy &S1, const STy &S2)
{
for(STy::iterator I = S1.begin(); I != S1.end(); ++I) {
if (S2.count(*I) > 0) {
S1.erase(*I);
}
}
}
Since I'm not very familiar with template programming, can someone
explain to me the difference between these two implementations? I would
like to keep the implementation as general as possible while still
compiling under VS7.1, but I'm not that familiar with C++ template
programming so I need a little help to understand better what is going
on here...
m.
More information about the llvm-dev
mailing list