================
@@ -278,6 +284,127 @@ static mlir::Value emitX86MaskTest(CIRGenBuilderTy
&builder, mlir::Location loc,
return emitIntrinsicCallOp(builder, loc, intrinsicName, resTy,
mlir::ValueRange{lhsVec, rhsVec});
}
+// TODO: The cgf parameter should be removed when all the NYI cases are
+// implemented.
+static std::optional<mlir::Value> emitX86MaskedCompareResult(CIRGenFunction
&cgf, CIRGenBuilderTy &builder,
+ mlir::Value cmp, unsigned
numElts,
+ mlir::Value maskIn,
+ mlir::Location loc) {
+ if (maskIn) {
+ cgf.cgm.errorNYI(loc, "emitX86MaskedCompareResult");
+ }
+ if (numElts < 8) {
+ llvm::SmallVector<mlir::Attribute> indices;
+ mlir::Type i64Ty = builder.getSInt64Ty();
+
+ for (unsigned i = 0; i != numElts; ++i)
+ indices.push_back(cir::IntAttr::get(i64Ty, i));
+ for (unsigned i = numElts; i != 8; ++i)
+ indices.push_back(cir::IntAttr::get(i64Ty, i % numElts + numElts));
+
+ // This should shuffle between cmp (first vector) and null (second vector)
+ mlir::Value nullVec = builder.getNullValue(cmp.getType(), loc);
+ cmp = builder.createVecShuffle(loc, cmp, nullVec, indices);
+ }
+ return builder.createBitcast(
+ cmp, builder.getUIntNTy(std::max(numElts, 8U)));
+}
+
+// TODO: The cgf parameter should be removed when all the NYI cases are
+// implemented.
+static std::optional<mlir::Value> emitX86MaskedCompare(CIRGenFunction &cgf,
CIRGenBuilderTy &builder,
+ unsigned cc, bool isSigned,
+ ArrayRef<mlir::Value> ops,
+ mlir::Location loc) {
+ assert((ops.size() == 2 || ops.size() == 4) &&
+ "Unexpected number of arguments");
+ unsigned numElts = cast<cir::VectorType>(ops[0].getType()).getSize();
+ mlir::Value cmp;
+
+ if (cc == 3) {
+ cgf.cgm.errorNYI(loc, "emitX86MaskedCompare: cc == 3");
----------------
andykaylor wrote:
```suggestion
cgf.cgm.errorNYI(loc, "emitX86MaskedCompare: cc == 3");
return {};
```
https://github.com/llvm/llvm-project/pull/171694
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits