diff --git a/mlir/lib/Target/Cpp/TranslateToCpp.cpp b/mlir/lib/Target/Cpp/TranslateToCpp.cpp index 067a0470b14e4..b896edc6cea1e 100644 --- a/mlir/lib/Target/Cpp/TranslateToCpp.cpp +++ b/mlir/lib/Target/Cpp/TranslateToCpp.cpp @@ -1362,8 +1362,9 @@ LogicalResult CppEmitter::emitAttribute(Location loc, Attribute attr) { } } if (auto dense = dyn_cast(attr)) { + assert(isa(dense.getType()) && "Expected shaped type"); if (auto iType = dyn_cast( - cast(dense.getType()).getElementType())) { + cast(dense.getType()).getElementType())) { os << '{'; interleaveComma(dense, os, [&](const APInt &val) { printInt(val, shouldMapToUnsigned(iType.getSignedness())); @@ -1372,7 +1373,7 @@ LogicalResult CppEmitter::emitAttribute(Location loc, Attribute attr) { return success(); } if (auto iType = dyn_cast( - cast(dense.getType()).getElementType())) { + cast(dense.getType()).getElementType())) { os << '{'; interleaveComma(dense, os, [&](const APInt &val) { printInt(val, false); }); diff --git a/mlir/test/Target/Cpp/const.mlir b/mlir/test/Target/Cpp/const.mlir index d3656f830c48c..2a5ff1a0f0177 100644 --- a/mlir/test/Target/Cpp/const.mlir +++ b/mlir/test/Target/Cpp/const.mlir @@ -16,6 +16,8 @@ func.func @emitc_constant() { %c8 = "emitc.constant"(){value = dense<0> : tensor} : () -> tensor %c9 = "emitc.constant"(){value = dense<[0, 1]> : tensor<2xindex>} : () -> tensor<2xindex> %c10 = "emitc.constant"(){value = dense<[[0.0, 1.0], [2.0, 3.0]]> : tensor<2x2xf32>} : () -> tensor<2x2xf32> + %c11 = "emitc.constant"(){value = dense<[0, 1]> : !emitc.array<2xindex>} : () -> !emitc.array<2xindex> + %c12 = "emitc.constant"(){value = dense<[0.0, 1.0]> : !emitc.array<2xf32>} : () -> !emitc.array<2xf32> return } // CPP-DEFAULT: void emitc_constant() { @@ -33,6 +35,8 @@ func.func @emitc_constant() { // CPP-DEFAULT-NEXT: Tensor [[V8:[^ ]*]] = {0}; // CPP-DEFAULT-NEXT: Tensor [[V9:[^ ]*]] = {0, 1}; // CPP-DEFAULT-NEXT: Tensor [[V10:[^ ]*]] = {0.0e+00f, 1.000000000e+00f, 2.000000000e+00f, 3.000000000e+00f}; +// CPP-DEFAULT-NEXT: size_t [[V11:[^ ]*]][2] = {0, 1}; +// CPP-DEFAULT-NEXT: float [[V12:[^ ]*]][2] = {0.0e+00f, 1.000000000e+00f}; // CPP-DECLTOP: void emitc_constant() { // CPP-DECLTOP-NEXT: int32_t [[V0:[^ ]*]]; @@ -49,6 +53,8 @@ func.func @emitc_constant() { // CPP-DECLTOP-NEXT: Tensor [[V8:[^ ]*]]; // CPP-DECLTOP-NEXT: Tensor [[V9:[^ ]*]]; // CPP-DECLTOP-NEXT: Tensor [[V10:[^ ]*]]; +// CPP-DECLTOP-NEXT: size_t [[V11:[^ ]*]][2]; +// CPP-DECLTOP-NEXT: float [[V12:[^ ]*]][2]; // CPP-DECLTOP-NEXT: [[V0]] = INT_MAX; // CPP-DECLTOP-NEXT: [[V1]] = 42; // CPP-DECLTOP-NEXT: [[V2]] = -1; @@ -63,3 +69,5 @@ func.func @emitc_constant() { // CPP-DECLTOP-NEXT: [[V8]] = {0}; // CPP-DECLTOP-NEXT: [[V9]] = {0, 1}; // CPP-DECLTOP-NEXT: [[V10]] = {0.0e+00f, 1.000000000e+00f, 2.000000000e+00f, 3.000000000e+00f}; +// CPP-DECLTOP-NEXT: [[V11]] = {0, 1}; +// CPP-DECLTOP-NEXT: [[V12]] = {0.0e+00f, 1.000000000e+00f};