Mercurial > projects > ldc
comparison gen/tollvm.cpp @ 98:6789050b5ad1 trunk
[svn r102] Further delayed emission of function bodies to avoid problems with circular-forward-references.
Now uses the DMD _adEq(void[], void[], TypeInfo) runtime function for array equality comparison.
author | lindquist |
---|---|
date | Wed, 14 Nov 2007 23:39:10 +0100 |
parents | c4e161556a21 |
children | a676a7743642 |
comparison
equal
deleted
inserted
replaced
97:c4e161556a21 | 98:6789050b5ad1 |
---|---|
816 llvm::Value* DtoGEP(llvm::Value* ptr, llvm::Value* i0, llvm::Value* i1, const std::string& var, llvm::BasicBlock* bb) | 816 llvm::Value* DtoGEP(llvm::Value* ptr, llvm::Value* i0, llvm::Value* i1, const std::string& var, llvm::BasicBlock* bb) |
817 { | 817 { |
818 std::vector<llvm::Value*> v(2); | 818 std::vector<llvm::Value*> v(2); |
819 v[0] = i0; | 819 v[0] = i0; |
820 v[1] = i1; | 820 v[1] = i1; |
821 Logger::cout() << "DtoGEP: " << *ptr << '\n'; | 821 //Logger::cout() << "DtoGEP: " << *ptr << '\n'; |
822 return new llvm::GetElementPtrInst(ptr, v.begin(), v.end(), var, bb?bb:gIR->scopebb()); | 822 return new llvm::GetElementPtrInst(ptr, v.begin(), v.end(), var, bb?bb:gIR->scopebb()); |
823 } | 823 } |
824 | 824 |
825 ////////////////////////////////////////////////////////////////////////////////////////// | 825 ////////////////////////////////////////////////////////////////////////////////////////// |
826 | 826 |
827 llvm::Value* DtoGEP(llvm::Value* ptr, const std::vector<unsigned>& src, const std::string& var, llvm::BasicBlock* bb) | 827 llvm::Value* DtoGEP(llvm::Value* ptr, const std::vector<unsigned>& src, const std::string& var, llvm::BasicBlock* bb) |
828 { | 828 { |
829 size_t n = src.size(); | 829 size_t n = src.size(); |
830 std::vector<llvm::Value*> dst(n); | 830 std::vector<llvm::Value*> dst(n, NULL); |
831 std::ostream& ostr = Logger::cout(); | 831 //std::ostream& ostr = Logger::cout(); |
832 ostr << "indices for '" << *ptr << "':"; | 832 //ostr << "indices for '" << *ptr << "':"; |
833 for (size_t i=0; i<n; ++i) | 833 for (size_t i=0; i<n; ++i) |
834 { | 834 { |
835 ostr << ' ' << i; | 835 //ostr << ' ' << i; |
836 dst[i] = llvm::ConstantInt::get(llvm::Type::Int32Ty, src[i], false); | 836 dst[i] = llvm::ConstantInt::get(llvm::Type::Int32Ty, src[i], false); |
837 } | 837 } |
838 ostr << '\n'; | 838 //ostr << '\n';*/ |
839 return new llvm::GetElementPtrInst(ptr, dst.begin(), dst.end(), var, bb?bb:gIR->scopebb()); | 839 return new llvm::GetElementPtrInst(ptr, dst.begin(), dst.end(), var, bb?bb:gIR->scopebb()); |
840 } | 840 } |
841 | 841 |
842 ////////////////////////////////////////////////////////////////////////////////////////// | 842 ////////////////////////////////////////////////////////////////////////////////////////// |
843 | 843 |
1421 | 1421 |
1422 DValue* DtoCastClass(DValue* val, Type* _to) | 1422 DValue* DtoCastClass(DValue* val, Type* _to) |
1423 { | 1423 { |
1424 const llvm::Type* tolltype = DtoType(_to); | 1424 const llvm::Type* tolltype = DtoType(_to); |
1425 Type* to = DtoDType(_to); | 1425 Type* to = DtoDType(_to); |
1426 assert(to->ty == Tclass); | 1426 assert(to->ty == Tclass || to->ty == Tpointer); |
1427 llvm::Value* rval = new llvm::BitCastInst(val->getRVal(), tolltype, "tmp", gIR->scopebb()); | 1427 llvm::Value* rval = new llvm::BitCastInst(val->getRVal(), tolltype, "tmp", gIR->scopebb()); |
1428 return new DImValue(_to, rval); | 1428 return new DImValue(_to, rval); |
1429 } | 1429 } |
1430 | 1430 |
1431 DValue* DtoCastArray(DValue* u, Type* to) | 1431 DValue* DtoCastArray(DValue* u, Type* to) |
1626 return false; | 1626 return false; |
1627 } | 1627 } |
1628 | 1628 |
1629 llvm::Value* DtoBitCast(llvm::Value* v, const llvm::Type* t) | 1629 llvm::Value* DtoBitCast(llvm::Value* v, const llvm::Type* t) |
1630 { | 1630 { |
1631 if (v->getType() == t) | |
1632 return v; | |
1631 return gIR->ir->CreateBitCast(v, t, "tmp"); | 1633 return gIR->ir->CreateBitCast(v, t, "tmp"); |
1632 } | 1634 } |
1633 | 1635 |
1634 const llvm::PointerType* isaPointer(llvm::Value* v) | 1636 const llvm::PointerType* isaPointer(llvm::Value* v) |
1635 { | 1637 { |