@@ -93,6 +93,33 @@ void CreateNdDescOp::build(OpBuilder &builder, OperationState &state,
9393 {} /* empty const strides*/ );
9494}
9595
96+ void CreateNdDescOp::build (OpBuilder &builder, OperationState &state,
97+ Type tdesc, TypedValue<MemRefType> source,
98+ llvm::ArrayRef<OpFoldResult> offsets,
99+ llvm::ArrayRef<OpFoldResult> shape,
100+ llvm::ArrayRef<OpFoldResult> strides) {
101+ assert (shape.size () && offsets.size () && strides.size () &&
102+ shape.size () == strides.size () && shape.size () == offsets.size ());
103+
104+ llvm::SmallVector<int64_t > staticOffsets;
105+ llvm::SmallVector<int64_t > staticShape;
106+ llvm::SmallVector<int64_t > staticStrides;
107+ llvm::SmallVector<Value> dynamicOffsets;
108+ llvm::SmallVector<Value> dynamicShape;
109+ llvm::SmallVector<Value> dynamicStrides;
110+
111+ dispatchIndexOpFoldResults (offsets, dynamicOffsets, staticOffsets);
112+ dispatchIndexOpFoldResults (shape, dynamicShape, staticShape);
113+ dispatchIndexOpFoldResults (strides, dynamicStrides, staticStrides);
114+
115+ auto staticOffsetsAttr = builder.getDenseI64ArrayAttr (staticOffsets);
116+ auto staticShapeAttr = builder.getDenseI64ArrayAttr (staticShape);
117+ auto staticStridesAttr = builder.getDenseI64ArrayAttr (staticStrides);
118+
119+ build (builder, state, tdesc, source, dynamicOffsets, dynamicShape,
120+ dynamicStrides, staticOffsetsAttr, staticShapeAttr, staticStridesAttr);
121+ }
122+
96123void CreateNdDescOp::build (OpBuilder &builder, OperationState &state,
97124 Type tdesc, TypedValue<IntegerType> source,
98125 llvm::ArrayRef<OpFoldResult> offsets,
0 commit comments