@@ -84,6 +84,14 @@ static mlir::Value getMaskVecValue(CIRGenBuilderTy &builder, mlir::Location loc,
8484 }
8585 return maskVec;
8686}
87+ static mlir::Value emitX86CompressExpand (CIRGenFunction &cgf, const CallExpr *expr,ArrayRef<mlir::Value> ops, bool IsCompress, const std::string &ID){
88+ auto ResultTy = cast<cir::VectorType>(ops[1 ].getType ());
89+ mlir::Value MaskValue = getMaskVecValue (cgf, expr, ops[2 ], cast<cir::VectorType>(ResultTy).getSize ());
90+ llvm::SmallVector<mlir::Value, 4 > op{ops[0 ], ops[1 ], MaskValue};
91+
92+ return emitIntrinsicCallOp (cgf,expr, ID, ResultTy, op);
93+
94+ }
8795
8896mlir::Value CIRGenFunction::emitX86BuiltinExpr (unsigned builtinID,
8997 const CallExpr *expr) {
@@ -456,7 +464,9 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID,
456464 case X86::BI__builtin_ia32_compresshi512_mask:
457465 case X86::BI__builtin_ia32_compressqi128_mask:
458466 case X86::BI__builtin_ia32_compressqi256_mask:
459- case X86::BI__builtin_ia32_compressqi512_mask:
467+ case X86::BI__builtin_ia32_compressqi512_mask:{
468+ return emitX86CompressExpand (*this , expr, ops, true , " x86_avx512_mask_compress" );
469+ }
460470 case X86::BI__builtin_ia32_gather3div2df:
461471 case X86::BI__builtin_ia32_gather3div2di:
462472 case X86::BI__builtin_ia32_gather3div4df:
0 commit comments