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 }