@@ -551,7 +551,13 @@ def LLVM_InvokeOp : LLVM_Op<"invoke", [
551551 Variadic<LLVM_Type>:$normalDestOperands,
552552 Variadic<LLVM_Type>:$unwindDestOperands,
553553 OptionalAttr<DenseI32ArrayAttr>:$branch_weights,
554- DefaultValuedAttr<CConv, "CConv::C">:$CConv);
554+ DefaultValuedAttr<CConv, "CConv::C">:$CConv,
555+ VariadicOfVariadic<LLVM_Type,
556+ "op_bundle_sizes">:$op_bundle_operands,
557+ DenseI32ArrayAttr:$op_bundle_sizes,
558+ OptionalProperty<
559+ ArrayProperty<StringProperty, "operand bundle tags">
560+ >:$op_bundle_tags);
555561 let results = (outs Optional<LLVM_Type>:$result);
556562 let successors = (successor AnySuccessor:$normalDest,
557563 AnySuccessor:$unwindDest);
@@ -587,7 +593,8 @@ def LLVM_LandingpadOp : LLVM_Op<"landingpad"> {
587593//===----------------------------------------------------------------------===//
588594
589595def LLVM_CallOp : LLVM_MemAccessOpBase<"call",
590- [DeclareOpInterfaceMethods<FastmathFlagsInterface>,
596+ [AttrSizedOperandSegments,
597+ DeclareOpInterfaceMethods<FastmathFlagsInterface>,
591598 DeclareOpInterfaceMethods<CallOpInterface>,
592599 DeclareOpInterfaceMethods<SymbolUserOpInterface>,
593600 DeclareOpInterfaceMethods<BranchWeightOpInterface>]> {
@@ -641,8 +648,13 @@ def LLVM_CallOp : LLVM_MemAccessOpBase<"call",
641648 OptionalAttr<LLVM_MemoryEffectsAttr>:$memory_effects,
642649 OptionalAttr<UnitAttr>:$convergent,
643650 OptionalAttr<UnitAttr>:$no_unwind,
644- OptionalAttr<UnitAttr>:$will_return
645- );
651+ OptionalAttr<UnitAttr>:$will_return,
652+ VariadicOfVariadic<LLVM_Type,
653+ "op_bundle_sizes">:$op_bundle_operands,
654+ DenseI32ArrayAttr:$op_bundle_sizes,
655+ OptionalProperty<
656+ ArrayProperty<StringProperty, "operand bundle tags">
657+ >:$op_bundle_tags);
646658 // Append the aliasing related attributes defined in LLVM_MemAccessOpBase.
647659 let arguments = !con(args, aliasAttrs);
648660 let results = (outs Optional<LLVM_Type>:$result);
@@ -662,6 +674,7 @@ def LLVM_CallOp : LLVM_MemAccessOpBase<"call",
662674 OpBuilder<(ins "LLVMFunctionType":$calleeType, "StringRef":$callee,
663675 CArg<"ValueRange", "{}">:$args)>
664676 ];
677+ let hasVerifier = 1;
665678 let hasCustomAssemblyFormat = 1;
666679 let extraClassDeclaration = [{
667680 /// Returns the callee function type.
@@ -1875,21 +1888,33 @@ def LLVM_InlineAsmOp : LLVM_Op<"inline_asm", [DeclareOpInterfaceMethods<MemoryEf
18751888
18761889def LLVM_CallIntrinsicOp
18771890 : LLVM_Op<"call_intrinsic",
1878- [DeclareOpInterfaceMethods<FastmathFlagsInterface>]> {
1891+ [AttrSizedOperandSegments,
1892+ DeclareOpInterfaceMethods<FastmathFlagsInterface>]> {
18791893 let summary = "Call to an LLVM intrinsic function.";
18801894 let description = [{
18811895 Call the specified llvm intrinsic. If the intrinsic is overloaded, use
18821896 the MLIR function type of this op to determine which intrinsic to call.
18831897 }];
18841898 let arguments = (ins StrAttr:$intrin, Variadic<LLVM_Type>:$args,
18851899 DefaultValuedAttr<LLVM_FastmathFlagsAttr,
1886- "{}">:$fastmathFlags);
1900+ "{}">:$fastmathFlags,
1901+ VariadicOfVariadic<LLVM_Type,
1902+ "op_bundle_sizes">:$op_bundle_operands,
1903+ DenseI32ArrayAttr:$op_bundle_sizes,
1904+ OptionalProperty<
1905+ ArrayProperty<StringProperty, "operand bundle tags">
1906+ >:$op_bundle_tags);
18871907 let results = (outs Optional<LLVM_Type>:$results);
18881908 let llvmBuilder = [{
18891909 return convertCallLLVMIntrinsicOp(op, builder, moduleTranslation);
18901910 }];
18911911 let assemblyFormat = [{
1892- $intrin `(` $args `)` `:` functional-type($args, $results) attr-dict
1912+ $intrin `(` $args `)`
1913+ ( `bundlearg` `(` $op_bundle_operands^ `)` )?
1914+ ( `bundletag` `(` $op_bundle_tags^ `)` )?
1915+ `:` functional-type($args, $results)
1916+ ( `bundletype` `(` type($op_bundle_operands)^ `)` )?
1917+ attr-dict
18931918 }];
18941919
18951920 let hasVerifier = 1;
0 commit comments