Lines Matching refs:rewriter
54 mlir::ConversionPatternRewriter &rewriter, in genConstantIndex() argument
56 auto cattr = rewriter.getI64IntegerAttr(offset); in genConstantIndex()
57 return rewriter.create<mlir::LLVM::ConstantOp>(loc, ity, cattr); in genConstantIndex()
60 static mlir::Block *createBlock(mlir::ConversionPatternRewriter &rewriter, in createBlock() argument
63 return rewriter.createBlock(insertBefore->getParent(), in createBlock()
102 genI32Constant(mlir::Location loc, mlir::ConversionPatternRewriter &rewriter, in genI32Constant() argument
104 mlir::Type i32Ty = rewriter.getI32Type(); in genI32Constant()
105 mlir::IntegerAttr attr = rewriter.getI32IntegerAttr(value); in genI32Constant()
106 return rewriter.create<mlir::LLVM::ConstantOp>(loc, i32Ty, attr); in genI32Constant()
111 mlir::ConversionPatternRewriter &rewriter, in genConstantOffset() argument
114 mlir::IntegerAttr cattr = rewriter.getI32IntegerAttr(offset); in genConstantOffset()
115 return rewriter.create<mlir::LLVM::ConstantOp>(loc, ity, cattr); in genConstantOffset()
123 mlir::ConversionPatternRewriter &rewriter, in integerCast() argument
133 return rewriter.create<mlir::LLVM::TruncOp>(loc, ty, val); in integerCast()
135 return rewriter.create<mlir::LLVM::SExtOp>(loc, ty, val); in integerCast()
142 mlir::ConversionPatternRewriter &rewriter, in getValueFromBox() argument
144 mlir::LLVM::ConstantOp c0 = genConstantOffset(loc, rewriter, 0); in getValueFromBox()
146 genConstantOffset(loc, rewriter, boxValue); in getValueFromBox()
148 auto p = rewriter.create<mlir::LLVM::GEPOp>( in getValueFromBox()
150 return rewriter.create<mlir::LLVM::LoadOp>(loc, resultTy, p); in getValueFromBox()
158 mlir::ConversionPatternRewriter &rewriter) const { in getDimsFromBox()
159 mlir::LLVM::ConstantOp c0 = genConstantOffset(loc, rewriter, 0); in getDimsFromBox()
161 genConstantOffset(loc, rewriter, kDimsPosInBox); in getDimsFromBox()
163 loadFromOffset(loc, box, c0, cDims, dim, 0, retTys[0], rewriter); in getDimsFromBox()
165 loadFromOffset(loc, box, c0, cDims, dim, 1, retTys[1], rewriter); in getDimsFromBox()
167 loadFromOffset(loc, box, c0, cDims, dim, 2, retTys[2], rewriter); in getDimsFromBox()
175 mlir::ConversionPatternRewriter &rewriter) const { in loadFromOffset()
177 mlir::LLVM::ConstantOp c = genConstantOffset(loc, rewriter, off); in loadFromOffset()
178 mlir::LLVM::GEPOp p = genGEP(loc, pty, rewriter, a, c0, cDims, dim, c); in loadFromOffset()
179 return rewriter.create<mlir::LLVM::LoadOp>(loc, ty, p); in loadFromOffset()
184 mlir::ConversionPatternRewriter &rewriter) const { in loadStrideFromBox()
186 auto c0 = genConstantOffset(loc, rewriter, 0); in loadStrideFromBox()
187 auto cDims = genConstantOffset(loc, rewriter, kDimsPosInBox); in loadStrideFromBox()
188 auto dimValue = genConstantIndex(loc, idxTy, rewriter, dim); in loadStrideFromBox()
190 rewriter); in loadStrideFromBox()
196 mlir::ConversionPatternRewriter &rewriter) const { in loadBaseAddrFromBox()
197 mlir::LLVM::ConstantOp c0 = genConstantOffset(loc, rewriter, 0); in loadBaseAddrFromBox()
199 genConstantOffset(loc, rewriter, kAddrPosInBox); in loadBaseAddrFromBox()
201 mlir::LLVM::GEPOp p = genGEP(loc, pty, rewriter, box, c0, cAddr); in loadBaseAddrFromBox()
202 return rewriter.create<mlir::LLVM::LoadOp>(loc, ty, p); in loadBaseAddrFromBox()
207 mlir::ConversionPatternRewriter &rewriter) const { in loadElementSizeFromBox()
208 mlir::LLVM::ConstantOp c0 = genConstantOffset(loc, rewriter, 0); in loadElementSizeFromBox()
210 genConstantOffset(loc, rewriter, kElemLenPosInBox); in loadElementSizeFromBox()
212 mlir::LLVM::GEPOp p = genGEP(loc, pty, rewriter, box, c0, cElemLen); in loadElementSizeFromBox()
213 return rewriter.create<mlir::LLVM::LoadOp>(loc, ty, p); in loadElementSizeFromBox()
247 mlir::ConversionPatternRewriter &rewriter, in genBoxAttributeCheck() argument
249 mlir::Type attrTy = rewriter.getI32Type(); in genBoxAttributeCheck()
251 getValueFromBox(loc, box, attrTy, rewriter, kAttributePosInBox); in genBoxAttributeCheck()
253 genConstantOffset(loc, rewriter, maskValue); in genBoxAttributeCheck()
255 rewriter.create<mlir::LLVM::AndOp>(loc, attrTy, attribute, attrMask); in genBoxAttributeCheck()
256 mlir::LLVM::ConstantOp c0 = genConstantOffset(loc, rewriter, 0); in genBoxAttributeCheck()
257 return rewriter.create<mlir::LLVM::ICmpOp>( in genBoxAttributeCheck()
263 mlir::ConversionPatternRewriter &rewriter, in genGEP() argument
266 return rewriter.create<mlir::LLVM::GEPOp>(loc, ty, base, cv); in genGEP()
285 mlir::ConversionPatternRewriter &rewriter) const final { in matchAndRewrite()
287 return doRewrite(op, ty, adaptor, rewriter); in matchAndRewrite()
292 mlir::ConversionPatternRewriter &rewriter) const = 0;
303 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
305 rewriter.replaceOpWithNewOp<mlir::LLVM::AddressOfOp>( in matchAndRewrite()
317 mlir::ConversionPatternRewriter &rewriter) { in getDependentTypeMemSizeFn() argument
332 mlir::ConversionPatternRewriter &rewriter) { in genAllocationScaleSize() argument
345 genConstantIndex(loc, ity, rewriter, constSize).getResult()}; in genAllocationScaleSize()
359 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
364 mlir::Value size = genConstantIndex(loc, ity, rewriter, 1).getResult(); in matchAndRewrite()
378 size = integerCast(loc, rewriter, ity, lenParams[0]); in matchAndRewrite()
381 getDependentTypeMemSizeFn(recTy, alloc, rewriter); in matchAndRewrite()
384 mlir::NamedAttribute attr = rewriter.getNamedAttr( in matchAndRewrite()
386 auto call = rewriter.create<mlir::LLVM::CallOp>( in matchAndRewrite()
395 if (auto scaleSize = genAllocationScaleSize(alloc, ity, rewriter)) in matchAndRewrite()
396 size = rewriter.create<mlir::LLVM::MulOp>(loc, ity, size, scaleSize); in matchAndRewrite()
400 size = rewriter.create<mlir::LLVM::MulOp>( in matchAndRewrite()
401 loc, ity, size, integerCast(loc, rewriter, ity, operands[i])); in matchAndRewrite()
405 rewriter.replaceOpWithNewOp<mlir::LLVM::AllocaOp>(alloc, ty, size, in matchAndRewrite()
408 auto al = rewriter.create<mlir::LLVM::AllocaOp>(loc, ty, size, in matchAndRewrite()
410 rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(alloc, resultTy, al); in matchAndRewrite()
421 mlir::ConversionPatternRewriter &rewriter, in genExtractValueWithIndex() argument
423 auto cx = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(x)); in genExtractValueWithIndex()
425 return rewriter.create<mlir::LLVM::ExtractValueOp>(loc, xty, tuple, cx); in genExtractValueWithIndex()
436 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
441 rewriter.replaceOp(boxaddr, loadBaseAddrFromBox(loc, ty, a, rewriter)); in matchAndRewrite()
443 auto c0attr = rewriter.getI32IntegerAttr(0); in matchAndRewrite()
445 rewriter.replaceOpWithNewOp<mlir::LLVM::ExtractValueOp>(boxaddr, ty, a, in matchAndRewrite()
459 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
467 loc, boxChar, boxChar.getType(), rewriter, ctx, boxcharLenIdx); in matchAndRewrite()
468 mlir::Value lenAfterCast = integerCast(loc, rewriter, returnValTy, len); in matchAndRewrite()
469 rewriter.replaceOp(boxCharLen, lenAfterCast); in matchAndRewrite()
483 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
491 adaptor.getOperands()[1], rewriter); in matchAndRewrite()
492 rewriter.replaceOp(boxdims, results); in matchAndRewrite()
504 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
508 auto elemSize = getValueFromBox(loc, a, ty, rewriter, kElemLenPosInBox); in matchAndRewrite()
509 rewriter.replaceOp(boxelesz, elemSize); in matchAndRewrite()
521 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
525 genBoxAttributeCheck(loc, box, rewriter, kAttrAllocatable); in matchAndRewrite()
526 rewriter.replaceOp(boxisalloc, check); in matchAndRewrite()
538 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
542 getValueFromBox(loc, a, rewriter.getI32Type(), rewriter, kRankPosInBox); in matchAndRewrite()
543 auto c0 = genConstantOffset(loc, rewriter, 0); in matchAndRewrite()
544 rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>( in matchAndRewrite()
557 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
560 mlir::Value check = genBoxAttributeCheck(loc, box, rewriter, kAttrPointer); in matchAndRewrite()
561 rewriter.replaceOp(boxisptr, check); in matchAndRewrite()
573 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
577 auto result = getValueFromBox(loc, a, ty, rewriter, kRankPosInBox); in matchAndRewrite()
578 rewriter.replaceOp(boxrank, result); in matchAndRewrite()
591 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
604 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
609 auto result = getValueFromBox(loc, box, typeTy, rewriter, kTypePosInBox); in matchAndRewrite()
611 rewriter.replaceOpWithNewOp<mlir::LLVM::IntToPtrOp>(boxtypedesc, typePtrTy, in matchAndRewrite()
623 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
627 rewriter.replaceOpWithNewOp<mlir::LLVM::ConstantOp>(constop, ty, attr); in matchAndRewrite()
633 mlir::Type intTy = rewriter.getIntegerType(bits); in matchAndRewrite()
635 mlir::Value cst = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in matchAndRewrite()
637 cst = rewriter.create<mlir::LLVM::ConstantOp>(loc, ty, arr); in matchAndRewrite()
645 rewriter.create<mlir::LLVM::ConstantOp>(loc, intTy, elemAttr); in matchAndRewrite()
647 constop.getContext(), rewriter.getI32IntegerAttr(a.index())); in matchAndRewrite()
648 cst = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, cst, elemCst, in matchAndRewrite()
654 rewriter.replaceOp(constop, cst); in matchAndRewrite()
665 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
669 rewriter.replaceOpWithNewOp<mlir::LLVM::CallOp>( in matchAndRewrite()
693 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
699 auto pos0 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
701 rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, operands[0], in matchAndRewrite()
703 rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, operands[1], in matchAndRewrite()
706 rewriter.create<mlir::LLVM::FCmpOp>(loc, resTy, rp, cmp->getAttrs()); in matchAndRewrite()
707 auto pos1 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
709 rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, operands[0], in matchAndRewrite()
711 rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, operands[1], in matchAndRewrite()
714 rewriter.create<mlir::LLVM::FCmpOp>(loc, resTy, ip, cmp->getAttrs()); in matchAndRewrite()
718 rewriter.replaceOpWithNewOp<mlir::LLVM::AndOp>(cmp, resTy, cp); in matchAndRewrite()
721 rewriter.replaceOpWithNewOp<mlir::LLVM::OrOp>(cmp, resTy, cp); in matchAndRewrite()
724 rewriter.replaceOp(cmp, rcp.getResult()); in matchAndRewrite()
737 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
744 rewriter.create<mlir::LLVM::ConstantOp>(loc, ety, realFloatAttr); in matchAndRewrite()
747 rewriter.create<mlir::LLVM::ConstantOp>(loc, ety, imFloatAttr); in matchAndRewrite()
748 auto realIndex = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
749 auto imIndex = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
750 auto undef = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in matchAndRewrite()
751 auto setReal = rewriter.create<mlir::LLVM::InsertValueOp>( in matchAndRewrite()
753 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>(conc, ty, setReal, in matchAndRewrite()
773 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
780 rewriter.replaceOp(convert, op0); in matchAndRewrite()
795 return rewriter.create<mlir::LLVM::FPTruncOp>(loc, toTy, val); in matchAndRewrite()
796 return rewriter.create<mlir::LLVM::FPExtOp>(loc, toTy, val); in matchAndRewrite()
803 rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
805 rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
807 auto rp = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, ty, op0, zero); in matchAndRewrite()
808 auto ip = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, ty, op0, one); in matchAndRewrite()
814 auto un = rewriter.create<mlir::LLVM::UndefOp>(loc, toTy); in matchAndRewrite()
816 rewriter.create<mlir::LLVM::InsertValueOp>(loc, toTy, un, rc, zero); in matchAndRewrite()
817 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>(convert, toTy, i1, in matchAndRewrite()
827 mlir::Value zero = genConstantIndex(loc, fromTy, rewriter, 0); in matchAndRewrite()
828 rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>( in matchAndRewrite()
833 rewriter.replaceOpWithNewOp<mlir::LLVM::ZExtOp>(convert, toTy, op0); in matchAndRewrite()
843 rewriter.replaceOp(convert, v); in matchAndRewrite()
847 rewriter.replaceOpWithNewOp<mlir::LLVM::FPToSIOp>(convert, toTy, op0); in matchAndRewrite()
857 rewriter.replaceOpWithNewOp<mlir::LLVM::TruncOp>(convert, toTy, op0); in matchAndRewrite()
860 rewriter.replaceOpWithNewOp<mlir::LLVM::SExtOp>(convert, toTy, op0); in matchAndRewrite()
865 rewriter.replaceOpWithNewOp<mlir::LLVM::SIToFPOp>(convert, toTy, op0); in matchAndRewrite()
870 rewriter.replaceOpWithNewOp<mlir::LLVM::IntToPtrOp>(convert, toTy, op0); in matchAndRewrite()
876 rewriter.replaceOpWithNewOp<mlir::LLVM::PtrToIntOp>(convert, toTy, op0); in matchAndRewrite()
881 rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(convert, toTy, op0); in matchAndRewrite()
896 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
910 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
923 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
935 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
949 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
963 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
972 auto llvmStruct = rewriter.create<mlir::LLVM::UndefOp>(loc, llvmStructTy); in matchAndRewrite()
976 mlir::Value lenAfterCast = integerCast(loc, rewriter, lenTy, charBufferLen); in matchAndRewrite()
978 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
979 auto c1 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
980 auto insertBufferOp = rewriter.create<mlir::LLVM::InsertValueOp>( in matchAndRewrite()
982 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>( in matchAndRewrite()
992 getMalloc(fir::AllocMemOp op, mlir::ConversionPatternRewriter &rewriter) { in getMalloc() argument
1001 rewriter.getUnknownLoc(), "malloc", in getMalloc()
1011 mlir::ConversionPatternRewriter &rewriter) { in computeDerivedTypeSize() argument
1012 auto nullPtr = rewriter.create<mlir::LLVM::NullOp>(loc, ptrTy); in computeDerivedTypeSize()
1013 mlir::Value one = genConstantIndex(loc, idxTy, rewriter, 1); in computeDerivedTypeSize()
1015 auto gep = rewriter.create<mlir::LLVM::GEPOp>(loc, ptrTy, nullPtr, args); in computeDerivedTypeSize()
1016 return rewriter.create<mlir::LLVM::PtrToIntOp>(loc, idxTy, gep); in computeDerivedTypeSize()
1026 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1029 mlir::LLVM::LLVMFuncOp mallocFunc = getMalloc(heap, rewriter); in matchAndRewrite()
1035 mlir::Value size = genTypeSizeInBytes(loc, ity, rewriter, ty); in matchAndRewrite()
1036 if (auto scaleSize = genAllocationScaleSize(heap, ity, rewriter)) in matchAndRewrite()
1037 size = rewriter.create<mlir::LLVM::MulOp>(loc, ity, size, scaleSize); in matchAndRewrite()
1039 size = rewriter.create<mlir::LLVM::MulOp>( in matchAndRewrite()
1040 loc, ity, size, integerCast(loc, rewriter, ity, opnd)); in matchAndRewrite()
1042 auto malloc = rewriter.create<mlir::LLVM::CallOp>( in matchAndRewrite()
1044 rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(heap, ty, in matchAndRewrite()
1051 mlir::ConversionPatternRewriter &rewriter, in genTypeSizeInBytes()
1057 return genConstantIndex(loc, idxTy, rewriter, size / 8); in genTypeSizeInBytes()
1060 return computeDerivedTypeSize(loc, ptrTy, idxTy, rewriter); in genTypeSizeInBytes()
1067 getFree(fir::FreeMemOp op, mlir::ConversionPatternRewriter &rewriter) { in getFree() argument
1075 rewriter.getUnknownLoc(), "free", in getFree()
1097 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1098 mlir::LLVM::LLVMFuncOp freeFunc = getFree(freemem, rewriter); in matchAndRewrite()
1100 auto bitcast = rewriter.create<mlir::LLVM::BitcastOp>( in matchAndRewrite()
1103 rewriter.create<mlir::LLVM::CallOp>( in matchAndRewrite()
1105 rewriter.eraseOp(freemem); in matchAndRewrite()
1121 getFuncForAllocaInsert(mlir::ConversionPatternRewriter &rewriter) const { in getFuncForAllocaInsert()
1122 mlir::Operation *parentOp = rewriter.getInsertionBlock()->getParentOp(); in getFuncForAllocaInsert()
1131 mlir::ConversionPatternRewriter &rewriter) const { in genAllocaWithType()
1132 auto thisPt = rewriter.saveInsertionPoint(); in genAllocaWithType()
1133 mlir::LLVM::LLVMFuncOp func = getFuncForAllocaInsert(rewriter); in genAllocaWithType()
1134 rewriter.setInsertionPointToStart(&func.front()); in genAllocaWithType()
1135 auto size = this->genI32Constant(loc, rewriter, 1); in genAllocaWithType()
1136 auto al = rewriter.create<mlir::LLVM::AllocaOp>(loc, toTy, size, alignment); in genAllocaWithType()
1137 rewriter.restoreInsertionPoint(thisPt); in genAllocaWithType()
1164 mlir::Location loc, mlir::ConversionPatternRewriter &rewriter, in getSizeAndTypeCode()
1169 return {this->genConstantOffset(loc, rewriter, width / 8), in __anon447c3e180902()
1170 this->genConstantOffset(loc, rewriter, typeCode)}; in __anon447c3e180902()
1175 return {this->genConstantOffset(loc, rewriter, width / 8), in __anon447c3e180a02()
1176 this->genConstantOffset(loc, rewriter, typeCode)}; in __anon447c3e180a02()
1180 return {this->genConstantOffset(loc, rewriter, width / 8), in __anon447c3e180b02()
1181 this->genConstantOffset(loc, rewriter, typeCode)}; in __anon447c3e180b02()
1186 return {this->genConstantOffset(loc, rewriter, width / 8 * 2), in __anon447c3e180c02()
1187 this->genConstantOffset(loc, rewriter, typeCode)}; in __anon447c3e180c02()
1193 auto typeCodeVal = this->genConstantOffset(loc, rewriter, typeCode); in __anon447c3e180d02()
1197 auto byteWidth = genConstantIndex(loc, i64Ty, rewriter, width / 8); in __anon447c3e180d02()
1198 auto len64 = FIROpConversion<OP>::integerCast(loc, rewriter, i64Ty, len); in __anon447c3e180d02()
1200 rewriter.create<mlir::LLVM::MulOp>(loc, i64Ty, byteWidth, len64); in __anon447c3e180d02()
1235 auto len = this->genConstantOffset(loc, rewriter, ty.getLen());
1246 return getSizeAndTypeCode(loc, rewriter, seqTy.getEleTy(), lenParams);
1251 auto nullPtr = rewriter.create<mlir::LLVM::NullOp>(loc, ptrTy);
1253 genConstantIndex(loc, this->lowerTy().offsetType(), rewriter, 1);
1254 auto gep = rewriter.create<mlir::LLVM::GEPOp>(loc, ptrTy, nullPtr,
1256 auto eleSize = rewriter.create<mlir::LLVM::PtrToIntOp>(
1259 this->genConstantOffset(loc, rewriter, fir::derivedToTypeCode())};
1264 return {this->genConstantOffset(loc, rewriter, sizeof(void *)),
1265 this->genConstantOffset(loc, rewriter, CFI_type_cptr)};
1271 mlir::Value insertField(mlir::ConversionPatternRewriter &rewriter, in insertField()
1278 value = rewriter.create<mlir::LLVM::BitcastOp>(loc, fldTy, value); in insertField()
1280 value = this->integerCast(loc, rewriter, fldTy, value); in insertField()
1283 attrs.push_back(rewriter.getI32IntegerAttr(i)); in insertField()
1284 auto indexesAttr = mlir::ArrayAttr::get(rewriter.getContext(), attrs); in insertField()
1285 return rewriter.create<mlir::LLVM::InsertValueOp>(loc, boxTy, dest, value, in insertField()
1290 insertBaseAddress(mlir::ConversionPatternRewriter &rewriter, in insertBaseAddress()
1293 return insertField(rewriter, loc, dest, {kAddrPosInBox}, base, in insertBaseAddress()
1297 inline mlir::Value insertLowerBound(mlir::ConversionPatternRewriter &rewriter, in insertLowerBound()
1300 return insertField(rewriter, loc, dest, in insertLowerBound()
1304 inline mlir::Value insertExtent(mlir::ConversionPatternRewriter &rewriter, in insertExtent()
1307 return insertField(rewriter, loc, dest, {kDimsPosInBox, dim, kDimExtentPos}, in insertExtent()
1311 inline mlir::Value insertStride(mlir::ConversionPatternRewriter &rewriter, in insertStride()
1314 return insertField(rewriter, loc, dest, {kDimsPosInBox, dim, kDimStridePos}, in insertStride()
1322 getTypeDescriptor(BOX box, mlir::ConversionPatternRewriter &rewriter, in getTypeDescriptor()
1330 return rewriter.create<mlir::LLVM::AddressOfOp>(loc, ty, in getTypeDescriptor()
1337 return rewriter.create<mlir::LLVM::AddressOfOp>(loc, ty, in getTypeDescriptor()
1347 return rewriter.create<mlir::LLVM::NullOp>( in getTypeDescriptor()
1353 consDescriptorPrefix(BOX box, mlir::ConversionPatternRewriter &rewriter, in consDescriptorPrefix()
1361 rewriter.create<mlir::LLVM::UndefOp>(loc, llvmBoxTy); in consDescriptorPrefix()
1371 getSizeAndTypeCode(loc, rewriter, boxTy.getEleTy(), typeparams); in consDescriptorPrefix()
1373 insertField(rewriter, loc, descriptor, {kElemLenPosInBox}, eleSize); in consDescriptorPrefix()
1374 descriptor = insertField(rewriter, loc, descriptor, {kVersionPosInBox}, in consDescriptorPrefix()
1375 this->genI32Constant(loc, rewriter, CFI_VERSION)); in consDescriptorPrefix()
1376 descriptor = insertField(rewriter, loc, descriptor, {kRankPosInBox}, in consDescriptorPrefix()
1377 this->genI32Constant(loc, rewriter, rank)); in consDescriptorPrefix()
1378 descriptor = insertField(rewriter, loc, descriptor, {kTypePosInBox}, cfiTy); in consDescriptorPrefix()
1380 insertField(rewriter, loc, descriptor, {kAttributePosInBox}, in consDescriptorPrefix()
1381 this->genI32Constant(loc, rewriter, getCFIAttr(boxTy))); in consDescriptorPrefix()
1384 insertField(rewriter, loc, descriptor, {kF18AddendumPosInBox}, in consDescriptorPrefix()
1385 this->genI32Constant(loc, rewriter, hasAddendum ? 1 : 0)); in consDescriptorPrefix()
1392 getTypeDescriptor(box, rewriter, loc, unwrapIfDerived(boxTy)); in consDescriptorPrefix()
1394 insertField(rewriter, loc, descriptor, {typeDescFieldId}, typeDesc, in consDescriptorPrefix()
1406 genBoxOffsetGep(mlir::ConversionPatternRewriter &rewriter, mlir::Location loc, in genBoxOffsetGep()
1453 this->integerCast(loc, rewriter, outterOffsetTy, *substringOffset); in genBoxOffsetGep()
1455 gepArgs[0] = rewriter.create<mlir::LLVM::AddOp>(loc, outterOffsetTy, in genBoxOffsetGep()
1460 return rewriter.create<mlir::LLVM::GEPOp>(loc, resultTy, base, gepArgs); in genBoxOffsetGep()
1484 placeInMemoryIfNotGlobalInit(mlir::ConversionPatternRewriter &rewriter, in placeInMemoryIfNotGlobalInit()
1486 auto *thisBlock = rewriter.getInsertionBlock(); in placeInMemoryIfNotGlobalInit()
1490 auto alloca = genAllocaWithType(loc, boxPtrTy, defaultAlign, rewriter); in placeInMemoryIfNotGlobalInit()
1491 rewriter.create<mlir::LLVM::StoreOp>(loc, boxValue, alloca); in placeInMemoryIfNotGlobalInit()
1498 computeTripletExtent(mlir::ConversionPatternRewriter &rewriter, in computeTripletExtent() argument
1501 mlir::Value extent = rewriter.create<mlir::LLVM::SubOp>(loc, type, ub, lb); in computeTripletExtent()
1502 extent = rewriter.create<mlir::LLVM::AddOp>(loc, type, extent, step); in computeTripletExtent()
1503 extent = rewriter.create<mlir::LLVM::SDivOp>(loc, type, extent, step); in computeTripletExtent()
1506 auto cmp = rewriter.create<mlir::LLVM::ICmpOp>( in computeTripletExtent()
1508 return rewriter.create<mlir::LLVM::SelectOp>(loc, cmp, extent, zero); in computeTripletExtent()
1518 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1522 embox, rewriter, /*rank=*/0, /*lenParams=*/operands.drop_front(1)); in matchAndRewrite()
1523 dest = insertBaseAddress(rewriter, embox.getLoc(), dest, operands[0]); in matchAndRewrite()
1529 auto result = placeInMemoryIfNotGlobalInit(rewriter, embox.getLoc(), dest); in matchAndRewrite()
1530 rewriter.replaceOp(embox, result); in matchAndRewrite()
1541 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1544 consDescriptorPrefix(xbox, rewriter, xbox.getOutRank(), in matchAndRewrite()
1556 mlir::Value zero = genConstantIndex(loc, i64Ty, rewriter, 0); in matchAndRewrite()
1557 mlir::Value one = genConstantIndex(loc, i64Ty, rewriter, 1); in matchAndRewrite()
1573 loc, i64Ty, rewriter, lowerTy().characterBitsize(charTy) / 8); in matchAndRewrite()
1575 integerCast(loc, rewriter, i64Ty, operands[xbox.lenParamOffset()]); in matchAndRewrite()
1577 rewriter.create<mlir::LLVM::MulOp>(loc, i64Ty, charSize, castedLen); in matchAndRewrite()
1578 prevPtrOff = integerCast(loc, rewriter, i64Ty, byteOffset); in matchAndRewrite()
1593 mlir::Value prevDimByteStride = integerCast(loc, rewriter, i64Ty, eleSize); in matchAndRewrite()
1598 prevDimByteStride = computeDerivedTypeSize(loc, eleTy, i64Ty, rewriter); in matchAndRewrite()
1607 loc, i64Ty, rewriter, in matchAndRewrite()
1624 auto ao = rewriter.create<mlir::LLVM::SubOp>(loc, i64Ty, off, adj); in matchAndRewrite()
1629 rewriter.create<mlir::LLVM::MulOp>(loc, i64Ty, ao, prevPtrOff); in matchAndRewrite()
1631 rewriter.create<mlir::LLVM::AddOp>(loc, i64Ty, dimOff, ptrOffset); in matchAndRewrite()
1644 extent = computeTripletExtent(rewriter, loc, operands[sliceOffset], in matchAndRewrite()
1661 auto extentIsEmpty = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
1663 lb = rewriter.create<mlir::LLVM::SelectOp>(loc, extentIsEmpty, one, in matchAndRewrite()
1666 dest = insertLowerBound(rewriter, loc, dest, descIdx, lb); in matchAndRewrite()
1668 dest = insertExtent(rewriter, loc, dest, descIdx, extent); in matchAndRewrite()
1673 step = rewriter.create<mlir::LLVM::MulOp>(loc, i64Ty, step, in matchAndRewrite()
1675 dest = insertStride(rewriter, loc, dest, descIdx, step); in matchAndRewrite()
1680 prevDimByteStride = rewriter.create<mlir::LLVM::MulOp>( in matchAndRewrite()
1683 prevPtrOff = rewriter.create<mlir::LLVM::MulOp>(loc, i64Ty, prevPtrOff, in matchAndRewrite()
1703 base = genBoxOffsetGep(rewriter, loc, base, ptrOffset, cstInteriorIndices, in matchAndRewrite()
1706 dest = insertBaseAddress(rewriter, loc, dest, base); in matchAndRewrite()
1710 mlir::Value result = placeInMemoryIfNotGlobalInit(rewriter, loc, dest); in matchAndRewrite()
1711 rewriter.replaceOp(xbox, result); in matchAndRewrite()
1729 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1740 loadElementSizeFromBox(loc, idxTy, loweredBox, rewriter); in matchAndRewrite()
1743 genConstantIndex(loc, idxTy, rewriter, charTy.getFKind()); in matchAndRewrite()
1744 len = rewriter.create<mlir::LLVM::SDivOp>(loc, idxTy, len, width); in matchAndRewrite()
1752 consDescriptorPrefix(rebox, rewriter, rebox.getOutRank(), lenParams); in matchAndRewrite()
1759 mlir::Value dim = genConstantIndex(loc, idxTy, rewriter, i); in matchAndRewrite()
1761 getDimsFromBox(loc, {idxTy, idxTy, idxTy}, loweredBox, dim, rewriter); in matchAndRewrite()
1768 loadBaseAddrFromBox(loc, baseTy, loweredBox, rewriter); in matchAndRewrite()
1772 operands, rewriter); in matchAndRewrite()
1774 operands, rewriter); in matchAndRewrite()
1784 mlir::ConversionPatternRewriter &rewriter) const { in finalizeRebox()
1787 genConstantIndex(loc, lowerTy().indexType(), rewriter, 0); in finalizeRebox()
1788 mlir::Value one = genConstantIndex(loc, lowerTy().indexType(), rewriter, 1); in finalizeRebox()
1795 auto extentIsEmpty = rewriter.create<mlir::LLVM::ICmpOp>( in finalizeRebox()
1797 lb = rewriter.create<mlir::LLVM::SelectOp>(loc, extentIsEmpty, one, lb); in finalizeRebox()
1799 dest = insertLowerBound(rewriter, loc, dest, dim, lb); in finalizeRebox()
1800 dest = insertExtent(rewriter, loc, dest, dim, extent); in finalizeRebox()
1801 dest = insertStride(rewriter, loc, dest, dim, std::get<1>(iter.value())); in finalizeRebox()
1803 dest = insertBaseAddress(rewriter, loc, dest, base); in finalizeRebox()
1805 placeInMemoryIfNotGlobalInit(rewriter, rebox.getLoc(), dest); in finalizeRebox()
1806 rewriter.replaceOp(rebox, result); in finalizeRebox()
1815 mlir::ConversionPatternRewriter &rewriter) const { in sliceBox()
1819 mlir::Value zero = genConstantIndex(loc, idxTy, rewriter, 0); in sliceBox()
1826 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, llvmElePtrTy, base); in sliceBox()
1834 base = genBoxOffsetGep(rewriter, loc, base, zero, in sliceBox()
1843 inputExtents, inputStrides, rewriter); in sliceBox()
1846 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, voidPtrTy, base); in sliceBox()
1852 mlir::Value one = genConstantIndex(loc, idxTy, rewriter, 1); in sliceBox()
1861 integerCast(loc, rewriter, idxTy, operands[sliceOps]); in sliceBox()
1866 ? integerCast(loc, rewriter, idxTy, operands[shiftOps]) in sliceBox()
1869 rewriter.create<mlir::LLVM::SubOp>(loc, idxTy, sliceLb, sliceOrigin); in sliceBox()
1871 rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, diff, inputStride); in sliceBox()
1872 base = genGEP(loc, voidPtrTy, rewriter, base, offset); in sliceBox()
1880 integerCast(loc, rewriter, idxTy, operands[sliceOps + 2]); in sliceBox()
1882 mlir::Value sliceUb = integerCast(loc, rewriter, idxTy, upper); in sliceBox()
1883 mlir::Value extent = computeTripletExtent(rewriter, loc, sliceLb, in sliceBox()
1888 rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, step, inputStride); in sliceBox()
1893 slicedExtents, slicedStrides, rewriter); in sliceBox()
1902 mlir::ConversionPatternRewriter &rewriter) const { in reshapeBox()
1909 inputStrides, rewriter); in reshapeBox()
1915 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, voidPtrTy, base); in reshapeBox()
1925 ? genConstantIndex(loc, idxTy, rewriter, 1) in reshapeBox()
1929 mlir::Value extent = integerCast(loc, rewriter, idxTy, rawExtent); in reshapeBox()
1933 stride = rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, extent, stride); in reshapeBox()
1936 rewriter); in reshapeBox()
1955 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
1987 collectIndices(mlir::ConversionPatternRewriter &rewriter, in collectIndices()
1998 attrs.push_back(mlir::IntegerAttr::get(rewriter.getI32Type(), index)); in collectIndices()
2022 mlir::ConversionPatternRewriter &rewriter) const override { in doRewrite()
2024 auto attrs = collectIndices(rewriter, extractVal.getCoor()); in doRewrite()
2027 rewriter.replaceOpWithNewOp<mlir::LLVM::ExtractValueOp>( in doRewrite()
2042 mlir::ConversionPatternRewriter &rewriter) const override { in doRewrite()
2044 auto attrs = collectIndices(rewriter, insertVal.getCoor()); in doRewrite()
2047 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>( in doRewrite()
2071 mlir::ConversionPatternRewriter &rewriter) const override { in doRewrite()
2098 auto i64Ty = rewriter.getI64Type(); in doRewrite()
2104 lastOp = rewriter.create<mlir::LLVM::InsertValueOp>( in doRewrite()
2115 mlir::IntegerAttr::get(rewriter.getI64Type(), subscript)); in doRewrite()
2118 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>( in doRewrite()
2138 mlir::ConversionPatternRewriter &rewriter) const override { in doRewrite()
2152 mlir::Value one = genConstantIndex(loc, idxTy, rewriter, 1); in doRewrite()
2154 mlir::Value zero = genConstantIndex(loc, idxTy, rewriter, 0); in doRewrite()
2164 integerCast(loc, rewriter, idxTy, operands[indexOffset]); in doRewrite()
2166 isShifted ? integerCast(loc, rewriter, idxTy, operands[shiftOffset]) in doRewrite()
2177 step = integerCast(loc, rewriter, idxTy, operands[sliceOffset + 2]); in doRewrite()
2179 auto idx = rewriter.create<mlir::LLVM::SubOp>(loc, idxTy, index, lb); in doRewrite()
2181 rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, idx, step); in doRewrite()
2184 integerCast(loc, rewriter, idxTy, operands[sliceOffset]); in doRewrite()
2185 auto adj = rewriter.create<mlir::LLVM::SubOp>(loc, idxTy, sliceLb, lb); in doRewrite()
2186 diff = rewriter.create<mlir::LLVM::AddOp>(loc, idxTy, diff, adj); in doRewrite()
2192 mlir::Value stride = loadStrideFromBox(loc, operands[0], i, rewriter); in doRewrite()
2193 auto sc = rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, diff, stride); in doRewrite()
2194 offset = rewriter.create<mlir::LLVM::AddOp>(loc, idxTy, sc, offset); in doRewrite()
2197 auto sc = rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, diff, prevExt); in doRewrite()
2198 offset = rewriter.create<mlir::LLVM::AddOp>(loc, idxTy, sc, offset); in doRewrite()
2201 auto nextExt = integerCast(loc, rewriter, idxTy, operands[shapeOffset]); in doRewrite()
2203 rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, prevExt, nextExt); in doRewrite()
2213 loadBaseAddrFromBox(loc, baseTy, operands[0], rewriter); in doRewrite()
2215 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, voidPtrTy, base); in doRewrite()
2218 rewriter.create<mlir::LLVM::GEPOp>(loc, voidPtrTy, base, args); in doRewrite()
2220 rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(coor, ty, addr); in doRewrite()
2223 auto casted = rewriter.create<mlir::LLVM::BitcastOp>(loc, baseTy, addr); in doRewrite()
2235 rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(coor, ty, casted, args); in doRewrite()
2251 auto length = integerCast(loc, rewriter, idxTy, in doRewrite()
2254 rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, offset, length); in doRewrite()
2260 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, ty, operands[0]); in doRewrite()
2271 base = rewriter.create<mlir::LLVM::BitcastOp>(loc, newTy, operands[0]); in doRewrite()
2276 rewriter.replaceOpWithNewOp<mlir::LLVM::GEPOp>(coor, ty, base, args); in doRewrite()
2293 mlir::ConversionPatternRewriter &rewriter) const override { in doRewrite()
2305 genConstantIndex(loc, lowerTy().indexType(), rewriter, 0); in doRewrite()
2307 mlir::Value gep = genGEP(loc, ty, rewriter, base, offs); in doRewrite()
2308 rewriter.replaceOp(coor, gep); in doRewrite()
2314 return doRewriteBox(coor, ty, operands, loc, rewriter); in doRewrite()
2318 return doRewriteRefOrPtr(coor, ty, operands, loc, rewriter); in doRewrite()
2320 return rewriter.notifyMatchFailure( in doRewrite()
2393 mlir::ConversionPatternRewriter &rewriter) const { in doRewriteBox()
2427 genConstantIndex(loc, lowerTy().indexType(), rewriter, 0); in doRewriteBox()
2430 boxBaseAddr, rewriter); in doRewriteBox()
2444 mlir::Value off = genConstantIndex(loc, idxTy, rewriter, 0); in doRewriteBox()
2448 loadStrideFromBox(loc, operands[0], index - i, rewriter); in doRewriteBox()
2449 auto sc = rewriter.create<mlir::LLVM::MulOp>(loc, idxTy, in doRewriteBox()
2451 off = rewriter.create<mlir::LLVM::AddOp>(loc, idxTy, sc, off); in doRewriteBox()
2454 rewriter.create<mlir::LLVM::BitcastOp>(loc, voidPtrTy, resultAddr); in doRewriteBox()
2456 resultAddr = rewriter.create<mlir::LLVM::GEPOp>(loc, voidPtrTy, in doRewriteBox()
2465 rewriter.create<mlir::LLVM::BitcastOp>(loc, recRefTy, resultAddr); in doRewriteBox()
2469 auto gep = rewriter.create<mlir::LLVM::GEPOp>( in doRewriteBox()
2473 rewriter.create<mlir::LLVM::BitcastOp>(loc, voidPtrTy, gep); in doRewriteBox()
2479 rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(coor, ty, resultAddr); in doRewriteBox()
2486 mlir::ConversionPatternRewriter &rewriter) const { in doRewriteRefOrPtr()
2529 genConstantIndex(loc, lowerTy().indexType(), rewriter, 0); in doRewriteRefOrPtr()
2580 mlir::Value retval = genGEP(loc, ty, rewriter, base, offs); in doRewriteRefOrPtr()
2581 rewriter.replaceOp(coor, retval); in doRewriteRefOrPtr()
2598 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2605 rewriter.replaceOp(field, mlir::ValueRange{genConstantOffset( in matchAndRewrite()
2606 field.getLoc(), rewriter, index)}); in matchAndRewrite()
2615 mlir::NamedAttribute callAttr = rewriter.getNamedAttr("callee", symAttr); in matchAndRewrite()
2616 mlir::NamedAttribute fieldAttr = rewriter.getNamedAttr( in matchAndRewrite()
2618 rewriter.replaceOpWithNewOp<mlir::LLVM::CallOp>( in matchAndRewrite()
2638 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2650 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2662 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2663 rewriter.replaceOpWithNewOp<mlir::LLVM::ReturnOp>(op, in matchAndRewrite()
2677 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2685 auto g = rewriter.create<mlir::LLVM::GlobalOp>( in matchAndRewrite()
2688 rewriter.inlineRegionBefore(global.getRegion(), gr, gr.end()); in matchAndRewrite()
2709 rewriter.setInsertionPointAfter(insertOp); in matchAndRewrite()
2710 rewriter.replaceOpWithNewOp<mlir::arith::ConstantOp>( in matchAndRewrite()
2715 rewriter.eraseOp(global); in matchAndRewrite()
2761 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2767 rewriter.replaceOp(load, adaptor.getOperands()[0]); in matchAndRewrite()
2769 rewriter.replaceOpWithNewOp<mlir::LLVM::LoadOp>( in matchAndRewrite()
2785 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2786 rewriter.replaceOp(noreassoc, adaptor.getOperands()[0]); in matchAndRewrite()
2793 mlir::ConversionPatternRewriter &rewriter, in genCondBrOp() argument
2796 rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, dest, *destOps, newBlock, in genCondBrOp()
2799 rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, dest, newBlock); in genCondBrOp()
2804 mlir::ConversionPatternRewriter &rewriter) { in genBrOp() argument
2806 rewriter.replaceOpWithNewOp<mlir::LLVM::BrOp>(caseOp, *destOps, dest); in genBrOp()
2808 rewriter.replaceOpWithNewOp<mlir::LLVM::BrOp>(caseOp, llvm::None, dest); in genBrOp()
2814 mlir::ConversionPatternRewriter &rewriter) { in genCaseLadderStep() argument
2815 auto *thisBlock = rewriter.getInsertionBlock(); in genCaseLadderStep()
2816 auto *newBlock = createBlock(rewriter, dest); in genCaseLadderStep()
2817 rewriter.setInsertionPointToEnd(thisBlock); in genCaseLadderStep()
2818 genCondBrOp(loc, cmp, dest, destOps, rewriter, newBlock); in genCaseLadderStep()
2819 rewriter.setInsertionPointToEnd(newBlock); in genCaseLadderStep()
2846 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2866 auto cmp = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
2868 genCaseLadderStep(loc, cmp, dest, destOps, rewriter); in matchAndRewrite()
2872 auto cmp = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
2874 genCaseLadderStep(loc, cmp, dest, destOps, rewriter); in matchAndRewrite()
2878 auto cmp = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
2880 genCaseLadderStep(loc, cmp, dest, destOps, rewriter); in matchAndRewrite()
2884 auto cmp = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
2886 auto *thisBlock = rewriter.getInsertionBlock(); in matchAndRewrite()
2887 auto *newBlock1 = createBlock(rewriter, dest); in matchAndRewrite()
2888 auto *newBlock2 = createBlock(rewriter, dest); in matchAndRewrite()
2889 rewriter.setInsertionPointToEnd(thisBlock); in matchAndRewrite()
2890 rewriter.create<mlir::LLVM::CondBrOp>(loc, cmp, newBlock1, newBlock2); in matchAndRewrite()
2891 rewriter.setInsertionPointToEnd(newBlock1); in matchAndRewrite()
2893 auto cmp0 = rewriter.create<mlir::LLVM::ICmpOp>( in matchAndRewrite()
2895 genCondBrOp(loc, cmp0, dest, destOps, rewriter, newBlock2); in matchAndRewrite()
2896 rewriter.setInsertionPointToEnd(newBlock2); in matchAndRewrite()
2901 genBrOp(caseOp, dest, destOps, rewriter); in matchAndRewrite()
2910 mlir::ConversionPatternRewriter &rewriter) { in selectMatchAndRewrite() argument
2940 if (select.getSelector().getType() != rewriter.getI32Type()) in selectMatchAndRewrite()
2941 selector = rewriter.create<mlir::LLVM::TruncOp>(loc, rewriter.getI32Type(), in selectMatchAndRewrite()
2944 rewriter.replaceOpWithNewOp<mlir::LLVM::SwitchOp>( in selectMatchAndRewrite()
2960 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2961 selectMatchAndRewrite<fir::SelectOp>(lowerTy(), op, adaptor, rewriter); in matchAndRewrite()
2972 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2973 selectMatchAndRewrite<fir::SelectRankOp>(lowerTy(), op, adaptor, rewriter); in matchAndRewrite()
2984 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
2997 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3002 auto val = rewriter.create<mlir::LLVM::LoadOp>( in matchAndRewrite()
3005 rewriter.replaceOpWithNewOp<mlir::LLVM::StoreOp>( in matchAndRewrite()
3008 rewriter.replaceOpWithNewOp<mlir::LLVM::StoreOp>( in matchAndRewrite()
3024 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3033 genExtractValueWithIndex(loc, tuple, tupleTy, rewriter, ctx, 0); in matchAndRewrite()
3036 genExtractValueWithIndex(loc, tuple, tupleTy, rewriter, ctx, 1); in matchAndRewrite()
3037 mlir::Value lenAfterCast = integerCast(loc, rewriter, lenTy, len); in matchAndRewrite()
3039 rewriter.replaceOp(unboxchar, in matchAndRewrite()
3053 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3065 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3066 rewriter.replaceOpWithNewOp<mlir::LLVM::UndefOp>( in matchAndRewrite()
3077 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3080 rewriter.replaceOpWithNewOp<mlir::LLVM::NullOp>(zero, ty); in matchAndRewrite()
3082 rewriter.replaceOpWithNewOp<mlir::LLVM::ConstantOp>( in matchAndRewrite()
3085 rewriter.replaceOpWithNewOp<mlir::LLVM::ConstantOp>( in matchAndRewrite()
3089 return rewriter.notifyMatchFailure( in matchAndRewrite()
3103 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3104 rewriter.replaceOpWithNewOp<mlir::LLVM::UnreachableOp>(unreach); in matchAndRewrite()
3120 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3131 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
3132 ptr = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, ty, ptr, c0); in matchAndRewrite()
3135 genConstantIndex(isPresent.getLoc(), idxTy, rewriter, 0); in matchAndRewrite()
3136 auto addr = rewriter.create<mlir::LLVM::PtrToIntOp>(loc, idxTy, ptr); in matchAndRewrite()
3137 rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>( in matchAndRewrite()
3151 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3158 auto undefStruct = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in matchAndRewrite()
3160 rewriter.create<mlir::LLVM::NullOp>(loc, structTy.getBody()[0]); in matchAndRewrite()
3162 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
3163 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>( in matchAndRewrite()
3166 rewriter.replaceOpWithNewOp<mlir::LLVM::NullOp>(absent, ty); in matchAndRewrite()
3180 mlir::ConversionPatternRewriter &rewriter, in complexSum() argument
3186 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in complexSum()
3187 auto c1 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(1)); in complexSum()
3190 auto x0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c0); in complexSum()
3191 auto y0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c1); in complexSum()
3192 auto x1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c0); in complexSum()
3193 auto y1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c1); in complexSum()
3194 auto rx = rewriter.create<LLVMOP>(loc, eleTy, x0, x1); in complexSum()
3195 auto ry = rewriter.create<LLVMOP>(loc, eleTy, y0, y1); in complexSum()
3196 auto r0 = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in complexSum()
3197 auto r1 = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, r0, rx, c0); in complexSum()
3198 return rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, r1, ry, c1); in complexSum()
3208 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3212 rewriter, lowerTy()); in matchAndRewrite()
3213 rewriter.replaceOp(addc, r.getResult()); in matchAndRewrite()
3223 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3227 rewriter, lowerTy()); in matchAndRewrite()
3228 rewriter.replaceOp(subc, r.getResult()); in matchAndRewrite()
3239 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3247 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
3248 auto c1 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
3251 auto x0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c0); in matchAndRewrite()
3252 auto y0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c1); in matchAndRewrite()
3253 auto x1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c0); in matchAndRewrite()
3254 auto y1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c1); in matchAndRewrite()
3255 auto xx = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, x0, x1); in matchAndRewrite()
3256 auto yx = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, y0, x1); in matchAndRewrite()
3257 auto xy = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, x0, y1); in matchAndRewrite()
3258 auto ri = rewriter.create<mlir::LLVM::FAddOp>(loc, eleTy, xy, yx); in matchAndRewrite()
3259 auto yy = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, y0, y1); in matchAndRewrite()
3260 auto rr = rewriter.create<mlir::LLVM::FSubOp>(loc, eleTy, xx, yy); in matchAndRewrite()
3261 auto ra = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in matchAndRewrite()
3262 auto r1 = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, ra, rr, c0); in matchAndRewrite()
3263 auto r0 = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, r1, ri, c1); in matchAndRewrite()
3264 rewriter.replaceOp(mulc, r0.getResult()); in matchAndRewrite()
3275 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3284 auto c0 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
3285 auto c1 = mlir::ArrayAttr::get(ctx, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
3288 auto x0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c0); in matchAndRewrite()
3289 auto y0 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, a, c1); in matchAndRewrite()
3290 auto x1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c0); in matchAndRewrite()
3291 auto y1 = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, b, c1); in matchAndRewrite()
3292 auto xx = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, x0, x1); in matchAndRewrite()
3293 auto x1x1 = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, x1, x1); in matchAndRewrite()
3294 auto yx = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, y0, x1); in matchAndRewrite()
3295 auto xy = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, x0, y1); in matchAndRewrite()
3296 auto yy = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, y0, y1); in matchAndRewrite()
3297 auto y1y1 = rewriter.create<mlir::LLVM::FMulOp>(loc, eleTy, y1, y1); in matchAndRewrite()
3298 auto d = rewriter.create<mlir::LLVM::FAddOp>(loc, eleTy, x1x1, y1y1); in matchAndRewrite()
3299 auto rrn = rewriter.create<mlir::LLVM::FAddOp>(loc, eleTy, xx, yy); in matchAndRewrite()
3300 auto rin = rewriter.create<mlir::LLVM::FSubOp>(loc, eleTy, yx, xy); in matchAndRewrite()
3301 auto rr = rewriter.create<mlir::LLVM::FDivOp>(loc, eleTy, rrn, d); in matchAndRewrite()
3302 auto ri = rewriter.create<mlir::LLVM::FDivOp>(loc, eleTy, rin, d); in matchAndRewrite()
3303 auto ra = rewriter.create<mlir::LLVM::UndefOp>(loc, ty); in matchAndRewrite()
3304 auto r1 = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, ra, rr, c0); in matchAndRewrite()
3305 auto r0 = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, r1, ri, c1); in matchAndRewrite()
3306 rewriter.replaceOp(divc, r0.getResult()); in matchAndRewrite()
3317 mlir::ConversionPatternRewriter &rewriter) const override { in matchAndRewrite()
3325 auto c0 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(0)); in matchAndRewrite()
3326 auto c1 = mlir::ArrayAttr::get(ctxt, rewriter.getI32IntegerAttr(1)); in matchAndRewrite()
3327 auto rp = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, o0, c0); in matchAndRewrite()
3328 auto ip = rewriter.create<mlir::LLVM::ExtractValueOp>(loc, eleTy, o0, c1); in matchAndRewrite()
3329 auto nrp = rewriter.create<mlir::LLVM::FNegOp>(loc, eleTy, rp); in matchAndRewrite()
3330 auto nip = rewriter.create<mlir::LLVM::FNegOp>(loc, eleTy, ip); in matchAndRewrite()
3331 auto r = rewriter.create<mlir::LLVM::InsertValueOp>(loc, ty, o0, nrp, c0); in matchAndRewrite()
3332 rewriter.replaceOpWithNewOp<mlir::LLVM::InsertValueOp>(neg, ty, r, nip, c1); in matchAndRewrite()
3350 mlir::ConversionPatternRewriter &rewriter) const final { in matchAndRewrite()
3352 return rewriter.notifyMatchFailure(op, "op must be dead"); in matchAndRewrite()
3353 rewriter.eraseOp(op); in matchAndRewrite()