comparison gen/structs.cpp @ 205:9d44ec83acd1 trunk

[svn r221] Update: Switched to the 2.3 LLVM svn branch, http://llvm.org/svn/llvm-project/llvm/branches/release_23 . Fixed: Implemented volatile statements. Uses the LLVM memory barrier intrinsic, closes #21 .
author lindquist
date Tue, 13 May 2008 17:58:11 +0200
parents db9890b3fb64
children 7816aafeea3c
comparison
equal deleted inserted replaced
204:11fe364b9a3e 205:9d44ec83acd1
41 llargs[0] = sarr; 41 llargs[0] = sarr;
42 llargs[1] = llvm::ConstantInt::get(llvm::Type::Int8Ty, 0, false); 42 llargs[1] = llvm::ConstantInt::get(llvm::Type::Int8Ty, 0, false);
43 llargs[2] = llvm::ConstantInt::get(llvm::Type::Int32Ty, n, false); 43 llargs[2] = llvm::ConstantInt::get(llvm::Type::Int32Ty, n, false);
44 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); 44 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
45 45
46 llvm::Value* ret = new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); 46 llvm::Value* ret = llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
47 47
48 return ret; 48 return ret;
49 } 49 }
50 50
51 ////////////////////////////////////////////////////////////////////////////////////////// 51 //////////////////////////////////////////////////////////////////////////////////////////
69 llargs[0] = dstarr; 69 llargs[0] = dstarr;
70 llargs[1] = srcarr; 70 llargs[1] = srcarr;
71 llargs[2] = llvm::ConstantInt::get(llvm::Type::Int32Ty, n, false); 71 llargs[2] = llvm::ConstantInt::get(llvm::Type::Int32Ty, n, false);
72 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false); 72 llargs[3] = llvm::ConstantInt::get(llvm::Type::Int32Ty, 0, false);
73 73
74 return new llvm::CallInst(fn, llargs.begin(), llargs.end(), "", gIR->scopebb()); 74 return llvm::CallInst::Create(fn, llargs.begin(), llargs.end(), "", gIR->scopebb());
75 } 75 }
76 76
77 ////////////////////////////////////////////////////////////////////////////////////////// 77 //////////////////////////////////////////////////////////////////////////////////////////
78 llvm::Constant* DtoConstStructInitializer(StructInitializer* si) 78 llvm::Constant* DtoConstStructInitializer(StructInitializer* si)
79 { 79 {
128 idxs.push_back(vd->ir.irField->index); 128 idxs.push_back(vd->ir.irField->index);
129 ptr = DtoGEP(ptr, idxs, "tmp"); 129 ptr = DtoGEP(ptr, idxs, "tmp");
130 if (ptr->getType() != llt) 130 if (ptr->getType() != llt)
131 ptr = gIR->ir->CreateBitCast(ptr, llt, "tmp"); 131 ptr = gIR->ir->CreateBitCast(ptr, llt, "tmp");
132 if (vd->ir.irField->indexOffset) 132 if (vd->ir.irField->indexOffset)
133 ptr = new llvm::GetElementPtrInst(ptr, DtoConstUint(vd->ir.irField->indexOffset), "tmp", gIR->scopebb()); 133 ptr = llvm::GetElementPtrInst::Create(ptr, DtoConstUint(vd->ir.irField->indexOffset), "tmp", gIR->scopebb());
134 return ptr; 134 return ptr;
135 } 135 }
136 else if (vdtype->ty == Tstruct && (vd->offset + vdtype->size()) > os) { 136 else if (vdtype->ty == Tstruct && (vd->offset + vdtype->size()) > os) {
137 TypeStruct* ts = (TypeStruct*)vdtype; 137 TypeStruct* ts = (TypeStruct*)vdtype;
138 StructDeclaration* ssd = ts->sym; 138 StructDeclaration* ssd = ts->sym;
140 if (vd->ir.irField->indexOffset) { 140 if (vd->ir.irField->indexOffset) {
141 Logger::println("has union field offset"); 141 Logger::println("has union field offset");
142 ptr = DtoGEP(ptr, idxs, "tmp"); 142 ptr = DtoGEP(ptr, idxs, "tmp");
143 if (ptr->getType() != llt) 143 if (ptr->getType() != llt)
144 ptr = DtoBitCast(ptr, llt); 144 ptr = DtoBitCast(ptr, llt);
145 ptr = new llvm::GetElementPtrInst(ptr, DtoConstUint(vd->ir.irField->indexOffset), "tmp", gIR->scopebb()); 145 ptr = llvm::GetElementPtrInst::Create(ptr, DtoConstUint(vd->ir.irField->indexOffset), "tmp", gIR->scopebb());
146 std::vector<unsigned> tmp; 146 std::vector<unsigned> tmp;
147 return DtoIndexStruct(ptr, ssd, t, os-vd->offset, tmp); 147 return DtoIndexStruct(ptr, ssd, t, os-vd->offset, tmp);
148 } 148 }
149 else { 149 else {
150 const llvm::Type* sty = getPtrToType(DtoType(vd->type)); 150 const llvm::Type* sty = getPtrToType(DtoType(vd->type));
161 } 161 }
162 162
163 size_t llt_sz = getTypeStoreSize(llt->getContainedType(0)); 163 size_t llt_sz = getTypeStoreSize(llt->getContainedType(0));
164 assert(os % llt_sz == 0); 164 assert(os % llt_sz == 0);
165 ptr = DtoBitCast(ptr, llt); 165 ptr = DtoBitCast(ptr, llt);
166 return new llvm::GetElementPtrInst(ptr, DtoConstUint(os / llt_sz), "tmp", gIR->scopebb()); 166 return llvm::GetElementPtrInst::Create(ptr, DtoConstUint(os / llt_sz), "tmp", gIR->scopebb());
167 } 167 }
168 168
169 ////////////////////////////////////////////////////////////////////////////////////////// 169 //////////////////////////////////////////////////////////////////////////////////////////
170 170
171 void DtoResolveStruct(StructDeclaration* sd) 171 void DtoResolveStruct(StructDeclaration* sd)