Index: mlir/lib/IR/BuiltinAttributes.cpp =================================================================== --- mlir/lib/IR/BuiltinAttributes.cpp +++ mlir/lib/IR/BuiltinAttributes.cpp @@ -1188,8 +1188,11 @@ size_t elementBitWidth = getDenseElementStorageWidth(elementType); assert(numElements * elementBitWidth == inRawData.size() * CHAR_BIT && inRawData.size() <= outRawData.size()); - convertEndianOfCharForBEmachine(inRawData.begin(), outRawData.begin(), - elementBitWidth, numElements); + if (elementBitWidth <= CHAR_BIT) + std::memcpy(outRawData.begin(), inRawData.begin(), inRawData.size()); + else + convertEndianOfCharForBEmachine(inRawData.begin(), outRawData.begin(), + elementBitWidth, numElements); } //===----------------------------------------------------------------------===// Index: mlir/test/IR/parse-literal.mlir =================================================================== --- /dev/null +++ mlir/test/IR/parse-literal.mlir @@ -0,0 +1,43 @@ +// RUN: mlir-opt %s | FileCheck %s + +// CHECK-LABEL: @parse_i64_tensor +func.func @parse_i64_tensor() -> tensor<4xi64> { + // CHECK: dense<255> : tensor<4xi64> + %0 = arith.constant dense<"0xFF00000000000000FF00000000000000FF00000000000000FF00000000000000"> : tensor<4xi64> + return %0 : tensor<4xi64> +} + +// CHECK-LABEL: @parse_i32_tensor +func.func @parse_i32_tensor() -> tensor<8xi32> { + // CHECK: dense<255> : tensor<8xi32> + %0 = arith.constant dense<"0xFF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000"> : tensor<8xi32> + return %0 : tensor<8xi32> +} + +// CHECK-LABEL: @parse_i16_tensor +func.func @parse_i16_tensor() -> tensor<16xi16> { + // CHECK: dense<255> : tensor<16xi16> + %0 = arith.constant dense<"0xFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00"> : tensor<16xi16> + return %0 : tensor<16xi16> +} + +// CHECK-LABEL: @parse_i8_tensor +func.func @parse_i8_tensor() -> tensor<32xi8> { + // CHECK: dense<15> : tensor<32xi8> + %0 = arith.constant dense<"0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"> : tensor<32xi8> + return %0 : tensor<32xi8> +} + +// CHECK-LABEL: @parse_i4_tensor +func.func @parse_i4_tensor() -> tensor<32xi4> { + // CHECK: dense<-1> : tensor<32xi4> + %0 = arith.constant dense<"0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"> : tensor<32xi4> + return %0 : tensor<32xi4> +} + +// CHECK-LABEL: @parse_i1_tensor +func.func @parse_i1_tensor() -> tensor<256xi1> { + // CHECK: dense<"0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"> : tensor<256xi1> + %0 = arith.constant dense<"0x0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F"> : tensor<256xi1> + return %0 : tensor<256xi1> +}