Lines Matching defs:builder
32 MemRefDescriptor MemRefDescriptor::undef(OpBuilder &builder, Location loc,
35 Value descriptor = builder.create<LLVM::UndefOp>(loc, descriptorType);
43 MemRefDescriptor::fromStaticShape(OpBuilder &builder, Location loc,
46 return fromStaticShape(builder, loc, typeConverter, type, memory, memory);
50 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
63 auto descr = MemRefDescriptor::undef(builder, loc, convertedType);
64 descr.setAllocatedPtr(builder, loc, memory);
65 descr.setAlignedPtr(builder, loc, alignedMemory);
66 descr.setConstantOffset(builder, loc, offset);
70 descr.setConstantSize(builder, loc, i, type.getDimSize(i));
71 descr.setConstantStride(builder, loc, i, strides[i]);
77 Value MemRefDescriptor::allocatedPtr(OpBuilder &builder, Location loc) {
78 return extractPtr(builder, loc, kAllocatedPtrPosInMemRefDescriptor);
82 void MemRefDescriptor::setAllocatedPtr(OpBuilder &builder, Location loc,
84 setPtr(builder, loc, kAllocatedPtrPosInMemRefDescriptor, ptr);
88 Value MemRefDescriptor::alignedPtr(OpBuilder &builder, Location loc) {
89 return extractPtr(builder, loc, kAlignedPtrPosInMemRefDescriptor);
93 void MemRefDescriptor::setAlignedPtr(OpBuilder &builder, Location loc,
95 setPtr(builder, loc, kAlignedPtrPosInMemRefDescriptor, ptr);
100 static Value createIndexAttrConstant(OpBuilder &builder, Location loc,
102 return builder.create<LLVM::ConstantOp>(loc, resultType,
103 builder.getIndexAttr(value));
107 Value MemRefDescriptor::offset(OpBuilder &builder, Location loc) {
108 return builder.create<LLVM::ExtractValueOp>(loc, value,
113 void MemRefDescriptor::setOffset(OpBuilder &builder, Location loc,
115 value = builder.create<LLVM::InsertValueOp>(loc, value, offset,
120 void MemRefDescriptor::setConstantOffset(OpBuilder &builder, Location loc,
122 setOffset(builder, loc,
123 createIndexAttrConstant(builder, loc, indexType, offset));
127 Value MemRefDescriptor::size(OpBuilder &builder, Location loc, unsigned pos) {
128 return builder.create<LLVM::ExtractValueOp>(
132 Value MemRefDescriptor::size(OpBuilder &builder, Location loc, Value pos,
136 auto ptrTy = LLVM::LLVMPointerType::get(builder.getContext());
139 auto one = createIndexAttrConstant(builder, loc, indexType, 1);
140 auto sizes = builder.create<LLVM::ExtractValueOp>(
142 auto sizesPtr = builder.create<LLVM::AllocaOp>(loc, ptrTy, arrayTy, one,
144 builder.create<LLVM::StoreOp>(loc, sizes, sizesPtr);
147 auto resultPtr = builder.create<LLVM::GEPOp>(loc, ptrTy, arrayTy, sizesPtr,
149 return builder.create<LLVM::LoadOp>(loc, indexType, resultPtr);
153 void MemRefDescriptor::setSize(OpBuilder &builder, Location loc, unsigned pos,
155 value = builder.create<LLVM::InsertValueOp>(
159 void MemRefDescriptor::setConstantSize(OpBuilder &builder, Location loc,
161 setSize(builder, loc, pos,
162 createIndexAttrConstant(builder, loc, indexType, size));
166 Value MemRefDescriptor::stride(OpBuilder &builder, Location loc, unsigned pos) {
167 return builder.create<LLVM::ExtractValueOp>(
172 void MemRefDescriptor::setStride(OpBuilder &builder, Location loc, unsigned pos,
174 value = builder.create<LLVM::InsertValueOp>(
179 void MemRefDescriptor::setConstantStride(OpBuilder &builder, Location loc,
181 setStride(builder, loc, pos,
182 createIndexAttrConstant(builder, loc, indexType, stride));
191 Value MemRefDescriptor::bufferPtr(OpBuilder &builder, Location loc,
198 Value ptr = alignedPtr(builder, loc);
207 ? offset(builder, loc)
208 : createIndexAttrConstant(builder, loc, indexType, offsetCst);
210 ptr = builder.create<LLVM::GEPOp>(loc, ptr.getType(), elementType, ptr,
223 Value MemRefDescriptor::pack(OpBuilder &builder, Location loc,
227 auto d = MemRefDescriptor::undef(builder, loc, llvmType);
229 d.setAllocatedPtr(builder, loc, values[kAllocatedPtrPosInMemRefDescriptor]);
230 d.setAlignedPtr(builder, loc, values[kAlignedPtrPosInMemRefDescriptor]);
231 d.setOffset(builder, loc, values[kOffsetPosInMemRefDescriptor]);
235 d.setSize(builder, loc, i, values[kSizePosInMemRefDescriptor + i]);
236 d.setStride(builder, loc, i, values[kSizePosInMemRefDescriptor + rank + i]);
244 void MemRefDescriptor::unpack(OpBuilder &builder, Location loc, Value packed,
251 results.push_back(d.allocatedPtr(builder, loc));
252 results.push_back(d.alignedPtr(builder, loc));
253 results.push_back(d.offset(builder, loc));
255 results.push_back(d.size(builder, loc, i));
257 results.push_back(d.stride(builder, loc, i));
303 UnrankedMemRefDescriptor UnrankedMemRefDescriptor::undef(OpBuilder &builder,
306 Value descriptor = builder.create<LLVM::UndefOp>(loc, descriptorType);
309 Value UnrankedMemRefDescriptor::rank(OpBuilder &builder, Location loc) const {
310 return extractPtr(builder, loc, kRankInUnrankedMemRefDescriptor);
312 void UnrankedMemRefDescriptor::setRank(OpBuilder &builder, Location loc,
314 setPtr(builder, loc, kRankInUnrankedMemRefDescriptor, v);
316 Value UnrankedMemRefDescriptor::memRefDescPtr(OpBuilder &builder,
318 return extractPtr(builder, loc, kPtrInUnrankedMemRefDescriptor);
320 void UnrankedMemRefDescriptor::setMemRefDescPtr(OpBuilder &builder,
322 setPtr(builder, loc, kPtrInUnrankedMemRefDescriptor, v);
329 Value UnrankedMemRefDescriptor::pack(OpBuilder &builder, Location loc,
334 auto d = UnrankedMemRefDescriptor::undef(builder, loc, llvmType);
336 d.setRank(builder, loc, values[kRankInUnrankedMemRefDescriptor]);
337 d.setMemRefDescPtr(builder, loc, values[kPtrInUnrankedMemRefDescriptor]);
343 void UnrankedMemRefDescriptor::unpack(OpBuilder &builder, Location loc,
348 results.push_back(d.rank(builder, loc));
349 results.push_back(d.memRefDescPtr(builder, loc));
353 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
364 Value one = createIndexAttrConstant(builder, loc, indexType, 1);
365 Value two = createIndexAttrConstant(builder, loc, indexType, 2);
367 builder, loc, indexType,
380 builder, loc, indexType,
383 builder.create<LLVM::MulOp>(loc, indexType, two, pointerSize);
386 Value rank = desc.rank(builder, loc);
387 Value doubleRank = builder.create<LLVM::MulOp>(loc, indexType, two, rank);
389 builder.create<LLVM::AddOp>(loc, indexType, doubleRank, one);
390 Value rankIndexSize = builder.create<LLVM::MulOp>(
394 Value allocationSize = builder.create<LLVM::AddOp>(
401 OpBuilder &builder, Location loc, Value memRefDescPtr,
403 return builder.create<LLVM::LoadOp>(loc, elemPtrType, memRefDescPtr);
407 OpBuilder &builder, Location loc, Value memRefDescPtr,
409 builder.create<LLVM::StoreOp>(loc, allocatedPtr, memRefDescPtr);
413 castToElemPtrPtr(OpBuilder &builder, Location loc, Value memRefDescPtr,
415 auto elemPtrPtrType = LLVM::LLVMPointerType::get(builder.getContext());
420 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
423 castToElemPtrPtr(builder, loc, memRefDescPtr, elemPtrType);
426 builder.create<LLVM::GEPOp>(loc, elemPtrPtrType, elemPtrType,
428 return builder.create<LLVM::LoadOp>(loc, elemPtrType, alignedGep);
432 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
435 castToElemPtrPtr(builder, loc, memRefDescPtr, elemPtrType);
438 builder.create<LLVM::GEPOp>(loc, elemPtrPtrType, elemPtrType,
440 builder.create<LLVM::StoreOp>(loc, alignedPtr, alignedGep);
444 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
447 castToElemPtrPtr(builder, loc, memRefDescPtr, elemPtrType);
449 return builder.create<LLVM::GEPOp>(loc, elemPtrPtrType, elemPtrType,
453 Value UnrankedMemRefDescriptor::offset(OpBuilder &builder, Location loc,
458 offsetBasePtr(builder, loc, typeConverter, memRefDescPtr, elemPtrType);
459 return builder.create<LLVM::LoadOp>(loc, typeConverter.getIndexType(),
463 void UnrankedMemRefDescriptor::setOffset(OpBuilder &builder, Location loc,
469 offsetBasePtr(builder, loc, typeConverter, memRefDescPtr, elemPtrType);
470 builder.create<LLVM::StoreOp>(loc, offset, offsetPtr);
474 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
479 auto resultType = LLVM::LLVMPointerType::get(builder.getContext());
480 return builder.create<LLVM::GEPOp>(loc, resultType, structTy, memRefDescPtr,
484 Value UnrankedMemRefDescriptor::size(OpBuilder &builder, Location loc,
489 auto ptrType = LLVM::LLVMPointerType::get(builder.getContext());
492 builder.create<LLVM::GEPOp>(loc, ptrType, indexTy, sizeBasePtr, index);
493 return builder.create<LLVM::LoadOp>(loc, indexTy, sizeStoreGep);
496 void UnrankedMemRefDescriptor::setSize(OpBuilder &builder, Location loc,
501 auto ptrType = LLVM::LLVMPointerType::get(builder.getContext());
504 builder.create<LLVM::GEPOp>(loc, ptrType, indexTy, sizeBasePtr, index);
505 builder.create<LLVM::StoreOp>(loc, size, sizeStoreGep);
509 OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
512 auto ptrType = LLVM::LLVMPointerType::get(builder.getContext());
514 return builder.create<LLVM::GEPOp>(loc, ptrType, indexTy, sizeBasePtr, rank);
517 Value UnrankedMemRefDescriptor::stride(OpBuilder &builder, Location loc,
522 auto ptrType = LLVM::LLVMPointerType::get(builder.getContext());
525 builder.create<LLVM::GEPOp>(loc, ptrType, indexTy, strideBasePtr, index);
526 return builder.create<LLVM::LoadOp>(loc, indexTy, strideStoreGep);
529 void UnrankedMemRefDescriptor::setStride(OpBuilder &builder, Location loc,
534 auto ptrType = LLVM::LLVMPointerType::get(builder.getContext());
537 builder.create<LLVM::GEPOp>(loc, ptrType, indexTy, strideBasePtr, index);
538 builder.create<LLVM::StoreOp>(loc, stride, strideStoreGep);