[LLVMdev] Patch: MSIL backend global pointers initialization

Anton Korobeynikov anton at korobeynikov.info
Thu Apr 16 12:49:02 PDT 2009

Hi, Artur

> // CallSites have equal signatures
> bool MSILWriter::cmpCallSite(CallSite A, CallSite B) {
>   return (getCallSiteFType(A)==getCallSiteFType(B) &&
>     A.getAttributes()==B.getAttributes());
> }
As it is impossible to honour argument attributes in MSIL I don't see
why you should compare attributes. You seems to have the same MSIL
call signature for calls with different param attrs.

> // Comparision for std::lower_bound used in MSILWriter::printExternals()
> bool MSILWriter::compareCallSite(CallSite A, CallSite B) {
>   return getCallSiteFType(A)<getCallSiteFType(B);
> }
Hrm... You're building type for each comparison, which seems to be
quite inefficient. Why don't iterate over all variadic call sites of
the function and build a single map CS => FunctionType? Also, here it
seems you're trying to rely on (instable) numeric representation of
pointers which can be quite unstable and in general bad for tests,

> // Constructs function type from given CallSite
At least - from arguments of the call :)

> FunctionType* MSILWriter::getCallSiteFType(CallSite CS) {
>   std::vector<const Type *> params;
>   CallSite::arg_iterator AI=CS.arg_begin(), AE = CS.arg_end();
Why don't shorten life of AI, AE and not define them in the for() loop header?
>   for ( ; AI!=AE; ++AI )
>     params.push_back((*AI)->getType());

With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University

More information about the llvm-dev mailing list