Mercurial > projects > ldc
diff gen/tollvm.c @ 53:06ccc817acd4 trunk
[svn r57] Added most basic TypeInfo (rebuild lphobos).
Fixed some SymOffExp bugs.
Added another typeinfo test case.
author | lindquist |
---|---|
date | Tue, 23 Oct 2007 07:16:02 +0200 |
parents | 0c77619e803b |
children | 28e99b04a132 |
line wrap: on
line diff
--- a/gen/tollvm.c Tue Oct 23 05:55:12 2007 +0200 +++ b/gen/tollvm.c Tue Oct 23 07:16:02 2007 +0200 @@ -610,7 +610,22 @@ return new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); } +////////////////////////////////////////////////////////////////////////////////////////// +llvm::Value* LLVM_DtoCompareDelegate(TOK op, llvm::Value* lhs, llvm::Value* rhs) +{ + llvm::ICmpInst::Predicate pred = (op == TOKequal) ? llvm::ICmpInst::ICMP_EQ : llvm::ICmpInst::ICMP_NE; + llvm::Value* l = gIR->ir->CreateLoad(LLVM_DtoGEPi(lhs,0,0,"tmp"),"tmp"); + llvm::Value* r = gIR->ir->CreateLoad(LLVM_DtoGEPi(rhs,0,0,"tmp"),"tmp"); + llvm::Value* b1 = gIR->ir->CreateICmp(pred,l,r,"tmp"); + l = gIR->ir->CreateLoad(LLVM_DtoGEPi(lhs,0,1,"tmp"),"tmp"); + r = gIR->ir->CreateLoad(LLVM_DtoGEPi(rhs,0,1,"tmp"),"tmp"); + llvm::Value* b2 = gIR->ir->CreateICmp(pred,l,r,"tmp"); + llvm::Value* b = gIR->ir->CreateAnd(b1,b2,"tmp"); + if (op == TOKnotequal) + return gIR->ir->CreateNot(b,"tmp"); + return b; +} //////////////////////////////////////////////////////////////////////////////////////////