Index: mlir/lib/IR/BuiltinAttributes.cpp =================================================================== --- mlir/lib/IR/BuiltinAttributes.cpp +++ mlir/lib/IR/BuiltinAttributes.cpp @@ -696,8 +696,8 @@ size_t storageBitWidth = getDenseElementStorageWidth(bitWidth); // Compress the attribute values into a character buffer. - SmallVector data(llvm::divideCeil(storageBitWidth, CHAR_BIT) * - values.size()); + SmallVector data( + llvm::divideCeil(storageBitWidth * values.size(), CHAR_BIT)); APInt intVal; for (unsigned i = 0, e = values.size(); i < e; ++i) { assert(eltType == values[i].getType() && @@ -1027,7 +1027,7 @@ template static void writeAPIntsToBuffer(size_t storageWidth, std::vector &data, APRangeT &&values) { - data.resize(llvm::divideCeil(storageWidth, CHAR_BIT) * llvm::size(values)); + data.resize(llvm::divideCeil(storageWidth * llvm::size(values), CHAR_BIT)); size_t offset = 0; for (auto it = values.begin(), e = values.end(); it != e; ++it, offset += storageWidth) { @@ -1184,7 +1184,7 @@ assert(newArrayType && "Unhandled tensor type"); size_t numRawElements = attr.isSplat() ? 1 : newArrayType.getNumElements(); - data.resize(llvm::divideCeil(storageBitWidth, CHAR_BIT) * numRawElements); + data.resize(llvm::divideCeil(storageBitWidth * numRawElements, CHAR_BIT)); // Functor used to process a single element value of the attribute. auto processElt = [&](decltype(*attr.begin()) value, size_t index) { Index: mlir/test/Target/SPIRV/constant.mlir =================================================================== --- mlir/test/Target/SPIRV/constant.mlir +++ mlir/test/Target/SPIRV/constant.mlir @@ -159,7 +159,7 @@ spv.func @bool_vector_const() -> () "None" { // CHECK: spv.Constant dense : vector<2xi1> %0 = spv.Constant dense : vector<2xi1> - // CHECK: spv.Constant dense<[true, true, true]> : vector<3xi1> + // CHECK: spv.Constant dense : vector<3xi1> %1 = spv.Constant dense : vector<3xi1> // CHECK: spv.Constant dense<[false, true]> : vector<2xi1> %2 = spv.Constant dense<[false, true]> : vector<2xi1>