Mercurial > projects > ldc
comparison gen/tollvm.c @ 8:5e69b77a5c51 trunk
[svn r12] fixed accessing aggregate fields of aggregates
removed some useless branches for successive scopes ala {}{}{}
author | lindquist |
---|---|
date | Thu, 27 Sep 2007 06:03:06 +0200 |
parents | 35d93ce68cf4 |
children | dafae18f9c08 |
comparison
equal
deleted
inserted
replaced
7:7a155ba88c53 | 8:5e69b77a5c51 |
---|---|
458 assert(ini); | 458 assert(ini); |
459 | 459 |
460 VarDeclaration* vd = (VarDeclaration*)si->vars.data[i]; | 460 VarDeclaration* vd = (VarDeclaration*)si->vars.data[i]; |
461 assert(vd); | 461 assert(vd); |
462 Logger::println("vars[%d] = %s", i, vd->toChars()); | 462 Logger::println("vars[%d] = %s", i, vd->toChars()); |
463 unsigned idx = si->ad->offsetToIndex(vd->offset); | 463 |
464 std::vector<unsigned> idxs; | |
465 si->ad->offsetToIndex(vd->offset, idxs); | |
466 assert(idxs.size() == 1); | |
467 unsigned idx = idxs[0]; | |
464 | 468 |
465 llvm::Constant* v = 0; | 469 llvm::Constant* v = 0; |
466 | 470 |
467 if (ExpInitializer* ex = ini->isExpInitializer()) | 471 if (ExpInitializer* ex = ini->isExpInitializer()) |
468 { | 472 { |
817 std::vector<llvm::Value*> v(2); | 821 std::vector<llvm::Value*> v(2); |
818 v[0] = i0; | 822 v[0] = i0; |
819 v[1] = i1; | 823 v[1] = i1; |
820 return new llvm::GetElementPtrInst(ptr, v.begin(), v.end(), var, bb); | 824 return new llvm::GetElementPtrInst(ptr, v.begin(), v.end(), var, bb); |
821 } | 825 } |
826 | |
827 llvm::Value* LLVM_DtoGEP(llvm::Value* ptr, const std::vector<unsigned>& src, const std::string& var, llvm::BasicBlock* bb) | |
828 { | |
829 size_t n = src.size(); | |
830 std::vector<llvm::Value*> dst(n); | |
831 Logger::cout() << "indices:"; | |
832 for (size_t i=0; i<n; ++i) | |
833 { | |
834 Logger::cout() << ' ' << i; | |
835 dst[i] = llvm::ConstantInt::get(llvm::Type::Int32Ty, src[i], false); | |
836 } | |
837 Logger::cout() << '\n'; | |
838 return new llvm::GetElementPtrInst(ptr, dst.begin(), dst.end(), var, bb); | |
839 } |