================ @@ -1579,6 +1579,108 @@ OpFoldResult cir::VecExtractOp::fold(FoldAdaptor adaptor) { return elements[index]; } +//===----------------------------------------------------------------------===// +// VecCmpOp +//===----------------------------------------------------------------------===// + +OpFoldResult cir::VecCmpOp::fold(FoldAdaptor adaptor) { + mlir::Attribute lhs = adaptor.getLhs(); + mlir::Attribute rhs = adaptor.getRhs(); + if (!mlir::isa_and_nonnull<cir::ConstVectorAttr>(lhs) || + !mlir::isa_and_nonnull<cir::ConstVectorAttr>(rhs)) + return {}; + + auto lhsVecAttr = mlir::cast<cir::ConstVectorAttr>(lhs); + auto rhsVecAttr = mlir::cast<cir::ConstVectorAttr>(rhs); + + mlir::Type inputElemTy = + mlir::cast<cir::VectorType>(lhsVecAttr.getType()).getElementType(); + if (!isAnyIntegerOrFloatingPointType(inputElemTy)) + return {}; + + cir::CmpOpKind opKind = adaptor.getKind(); + mlir::ArrayAttr lhsVecElhs = lhsVecAttr.getElts(); + mlir::ArrayAttr rhsVecElhs = rhsVecAttr.getElts(); + uint64_t vecSize = lhsVecElhs.size(); + + auto resultVecTy = mlir::cast<cir::VectorType>(getType()); + + SmallVector<mlir::Attribute, 16> elements(vecSize); + for (uint64_t i = 0; i < vecSize; i++) { + mlir::Attribute lhsAttr = lhsVecElhs[i]; + mlir::Attribute rhsAttr = rhsVecElhs[i]; + ---------------- AmrDeveloper wrote:
I eliminated the check to be only once. I was thinking of eliminating the casts and creating a lambda or helper function, but not sure if it's worth https://github.com/llvm/llvm-project/pull/143322 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits