From: Haruki Imai Date: Thu, 17 Jun 2021 01:37:32 +0000 (-0700) Subject: [mlir] Fixed dynamic operand storage on big-endian machines. X-Git-Tag: llvmorg-14-init~3753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5a55205bb31f2cbc7573656da61cb9eb923bc8cc;p=platform%2Fupstream%2Fllvm.git [mlir] Fixed dynamic operand storage on big-endian machines. Many tests fails by D101969 (https://reviews.llvm.org/D101969) on big-endian machines. This patch changes bit order of TrailingOperandStorage in big-endian machines. This patch works on System Z (Triple = "s390x-ibm-linux", CPU = "z14"). Signed-off-by: Haruki Imai Reviewed By: rriddle Differential Revision: https://reviews.llvm.org/D104225 --- diff --git a/mlir/include/mlir/IR/OperationSupport.h b/mlir/include/mlir/IR/OperationSupport.h index 20d73cc..c1f7a1a 100644 --- a/mlir/include/mlir/IR/OperationSupport.h +++ b/mlir/include/mlir/IR/OperationSupport.h @@ -484,7 +484,11 @@ namespace detail { /// This class contains the information for a trailing operand storage. struct TrailingOperandStorage final : public llvm::TrailingObjects { +#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN) + TrailingOperandStorage() : numOperands(0), capacity(0), reserved(0) {} +#else TrailingOperandStorage() : reserved(0), capacity(0), numOperands(0) {} +#endif ~TrailingOperandStorage() { for (auto &operand : getOperands()) operand.~OpOperand(); @@ -495,12 +499,21 @@ struct TrailingOperandStorage final return {getTrailingObjects(), numOperands}; } +#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN) + /// The number of operands within the storage. + unsigned numOperands; + /// The total capacity number of operands that the storage can hold. + unsigned capacity : 31; + /// We reserve a range of bits for use by the operand storage. + unsigned reserved : 1; +#else /// We reserve a range of bits for use by the operand storage. unsigned reserved : 1; /// The total capacity number of operands that the storage can hold. unsigned capacity : 31; /// The number of operands within the storage. unsigned numOperands; +#endif }; /// This class handles the management of operation operands. Operands are