Replaces all lists in the given value by the list returned by the `migrate` function, including inner lists. Does an in-place replacement for list elements.
(self, value, migrate)
| 1133 | self.currentNode) |
| 1134 | |
| 1135 | def __migrateLists(self, value, migrate): |
| 1136 | """Replaces all lists in the given value by the list returned by the |
| 1137 | `migrate` function, including inner lists. |
| 1138 | |
| 1139 | Does an in-place replacement for list elements. |
| 1140 | """ |
| 1141 | if cc.StdvecType.isinstance(value.type): |
| 1142 | eleTy = cc.StdvecType.getElementType(value.type) |
| 1143 | if self.containsList(eleTy): |
| 1144 | size = cc.StdvecSizeOp(self.getIntegerType(), value).result |
| 1145 | ptrTy = cc.PointerType.get(cc.ArrayType.get(eleTy)) |
| 1146 | iterable = cc.StdvecDataOp(ptrTy, value).result |
| 1147 | |
| 1148 | def bodyBuilder(iterVar): |
| 1149 | eleAddr = cc.ComputePtrOp( |
| 1150 | cc.PointerType.get(eleTy), iterable, [iterVar], |
| 1151 | DenseI32ArrayAttr.get([kDynamicPtrIndex], |
| 1152 | context=self.ctx)) |
| 1153 | loadedEle = cc.LoadOp(eleAddr).result |
| 1154 | element = self.__migrateLists(loadedEle, migrate) |
| 1155 | cc.StoreOp(element, eleAddr) |
| 1156 | |
| 1157 | self.createInvariantForLoop(bodyBuilder, size) |
| 1158 | return migrate(value) |
| 1159 | if (cc.StructType.isinstance(value.type) and |
| 1160 | self.containsList(value.type)): |
| 1161 | return self.__copyStructAndConvertElements( |
| 1162 | value, conversion=lambda _, v: self.__migrateLists(v, migrate)) |
| 1163 | assert not self.containsList(value.type) |
| 1164 | return value |
| 1165 | |
| 1166 | def __createFunctionWithinKernel(self, arguments, statements): |
| 1167 | """Returns a `cc.LambdaOp` used to represent functions defined within |
no test coverage detected