@@ -93,6 +93,33 @@ void CreateNdDescOp::build(OpBuilder &builder, OperationState &state,
93
93
{} /* empty const strides*/ );
94
94
}
95
95
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
+
96
123
void CreateNdDescOp::build (OpBuilder &builder, OperationState &state,
97
124
Type tdesc, TypedValue<IntegerType> source,
98
125
llvm::ArrayRef<OpFoldResult> offsets,
0 commit comments