Port to Solaris' Sun Studio 8

Hi all. A company I’m working for is interested in using LLVM as a part of a larger suite of products, and I’m in charge of porting it to Sun Studio 8, one of the compilers that our product builds on. I’ve made reasonable progress, and for the most part the compiler’s co-operating, however I’m running into a problem I believe is with template resolution, and I’m looking for any input on where the problem might be.

When compiling LoadValueNumbering.cpp, I get the following errors:

“~/bin/…/src/include/llvm/Support/Casting.h”, line 51: Error: Could not find a match for llvm::AllocationInst::classof(const llvm::ilist_iteratorllvm::Instruction*).

“~/bin/…/src/include/llvm/Support/Casting.h”, line 68: Where: While instantiating “llvm::isa_impl<llvm::AllocationInst, llvm::ilist_iteratorllvm::Instruction>(const llvm::ilist_iteratorllvm::Instruction&)”.

“~/bin/…/src/include/llvm/Support/Casting.h”, line 68: Where: Instantiated from non-template code.

This seems to be linked with line 364 in LoadValueNumbering.cpp, and my best guess is that the template struct simplify_type in ilist isn’t being picked up for some reason, so classof gets an ilist_iterator as an argument rather than the object the iterator points to. It happens every time I try to dyn_cast<…>(I) where I is an ilist_iterator, but in other cases I got around it by manually retrieving the iterator’s value with dyn_cast<…>(&*I). On line 364 this technique doesn’t work.


P.S. Once I’m done with the port, I’d be happy to check in a version on your cvs if the project is interested.