@@ -508,6 +508,23 @@ class LLVM_CastOp<string mnemonic, string instName, Type type,
508508 $_location, $_resultType, $arg);
509509 }];
510510}
511+ class LLVM_CastOpWithNNegFlag<string mnemonic, string instName, Type type,
512+ Type resultType, list<Trait> traits = []> :
513+ LLVM_Op<mnemonic, !listconcat([Pure], [DeclareOpInterfaceMethods<NonNegFlagInterface>], traits)>,
514+ LLVM_Builder<"$res = builder.Create" # instName # "($arg, $_resultType, /*Name=*/\"\", op.getNonNeg());"> {
515+ let arguments = (ins type:$arg, UnitAttr:$nonNeg);
516+ let results = (outs resultType:$res);
517+ let builders = [LLVM_OneResultOpBuilder];
518+ let assemblyFormat = "(`nneg` $nonNeg^)? $arg attr-dict `:` type($arg) `to` type($res)";
519+ string llvmInstName = instName;
520+ string mlirBuilder = [{
521+ auto op = $_builder.create<$_qualCppClassName>(
522+ $_location, $_resultType, $arg);
523+ moduleImport.setNonNegFlag(inst, op);
524+ $res = op;
525+ }];
526+ }
527+
511528def LLVM_BitcastOp : LLVM_CastOp<"bitcast", "BitCast", LLVM_AnyNonAggregate,
512529 LLVM_AnyNonAggregate, [DeclareOpInterfaceMethods<PromotableOpInterface>]> {
513530 let hasFolder = 1;
@@ -531,7 +548,7 @@ def LLVM_SExtOp : LLVM_CastOp<"sext", "SExt",
531548 LLVM_ScalarOrVectorOf<AnySignlessInteger>> {
532549 let hasVerifier = 1;
533550}
534- def LLVM_ZExtOp : LLVM_CastOp <"zext", "ZExt",
551+ def LLVM_ZExtOp : LLVM_CastOpWithNNegFlag <"zext", "ZExt",
535552 LLVM_ScalarOrVectorOf<AnySignlessInteger>,
536553 LLVM_ScalarOrVectorOf<AnySignlessInteger>> {
537554 let hasFolder = 1;
@@ -543,7 +560,7 @@ def LLVM_TruncOp : LLVM_CastOp<"trunc", "Trunc",
543560def LLVM_SIToFPOp : LLVM_CastOp<"sitofp", "SIToFP",
544561 LLVM_ScalarOrVectorOf<AnySignlessInteger>,
545562 LLVM_ScalarOrVectorOf<LLVM_AnyFloat>>;
546- def LLVM_UIToFPOp : LLVM_CastOp <"uitofp", "UIToFP",
563+ def LLVM_UIToFPOp : LLVM_CastOpWithNNegFlag <"uitofp", "UIToFP",
547564 LLVM_ScalarOrVectorOf<AnySignlessInteger>,
548565 LLVM_ScalarOrVectorOf<LLVM_AnyFloat>>;
549566def LLVM_FPToSIOp : LLVM_CastOp<"fptosi", "FPToSI",
0 commit comments