Return void* from _d_allocclass so LLVM doesn't do weird things with it...

This allows `-instcombine` followed by `-gvn` to do devirtualization, so add
`-gvn` in strategic places in the default pass order.
This commit is contained in:
Frits van Bommel
2009-06-20 11:39:13 +02:00
parent 34fbdb6271
commit 465f15eda0
3 changed files with 10 additions and 6 deletions

View File

@@ -329,7 +329,7 @@ static void LLVM_D_BuildRuntimeModule()
std::string fname("_d_allocclass");
std::vector<const LLType*> types;
types.push_back(classInfoTy);
const llvm::FunctionType* fty = llvm::FunctionType::get(objectTy, types, false);
const llvm::FunctionType* fty = llvm::FunctionType::get(voidPtrTy, types, false);
llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M)
->setAttributes(Attr_NoAlias);
}