comparison 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
comparison
equal deleted inserted replaced
52:0c77619e803b 53:06ccc817acd4
608 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); 608 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
609 609
610 return new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); 610 return new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
611 } 611 }
612 612
613 613 //////////////////////////////////////////////////////////////////////////////////////////
614
615 llvm::Value* LLVM_DtoCompareDelegate(TOK op, llvm::Value* lhs, llvm::Value* rhs)
616 {
617 llvm::ICmpInst::Predicate pred = (op == TOKequal) ? llvm::ICmpInst::ICMP_EQ : llvm::ICmpInst::ICMP_NE;
618 llvm::Value* l = gIR->ir->CreateLoad(LLVM_DtoGEPi(lhs,0,0,"tmp"),"tmp");
619 llvm::Value* r = gIR->ir->CreateLoad(LLVM_DtoGEPi(rhs,0,0,"tmp"),"tmp");
620 llvm::Value* b1 = gIR->ir->CreateICmp(pred,l,r,"tmp");
621 l = gIR->ir->CreateLoad(LLVM_DtoGEPi(lhs,0,1,"tmp"),"tmp");
622 r = gIR->ir->CreateLoad(LLVM_DtoGEPi(rhs,0,1,"tmp"),"tmp");
623 llvm::Value* b2 = gIR->ir->CreateICmp(pred,l,r,"tmp");
624 llvm::Value* b = gIR->ir->CreateAnd(b1,b2,"tmp");
625 if (op == TOKnotequal)
626 return gIR->ir->CreateNot(b,"tmp");
627 return b;
628 }
614 629
615 ////////////////////////////////////////////////////////////////////////////////////////// 630 //////////////////////////////////////////////////////////////////////////////////////////
616 631
617 llvm::GlobalValue::LinkageTypes LLVM_DtoLinkage(PROT prot, uint stc) 632 llvm::GlobalValue::LinkageTypes LLVM_DtoLinkage(PROT prot, uint stc)
618 { 633 {