================================================================================ Function prototype ================================================================================ func.func @abort() -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list))))) ================================================================================ Simple function using func, arith dialects ================================================================================ func.func @test_addi(%arg0 : i64, %arg1 : i64) -> i64 { %0 = arith.addi %arg0, %arg1 : i64 return %0 : i64 } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (integer_type))) (value_use) (type (builtin_type (integer_type)))) (func_return (type_list_attr_parens (type (builtin_type (integer_type))))) (region (entry_block (operation (op_result (value_use)) (custom_operation (arith_dialect (value_use) (value_use) (type (builtin_type (integer_type)))))) (operation (custom_operation (func_dialect (value_use) (type (builtin_type (integer_type)))))))))))) ================================================================================ Function with multiple return values ================================================================================ func.func @count(%x: i64) -> (i64, i64) { return %x, %x: i64, i64 } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list (value_use) (type (builtin_type (integer_type)))) (func_return (type_list_attr_parens (type (builtin_type (integer_type))) (type (builtin_type (integer_type))))) (region (entry_block (operation (custom_operation (func_dialect (value_use) (value_use) (type (builtin_type (integer_type))) (type (builtin_type (integer_type)))))))))))) ================================================================================ Variadic function ================================================================================ llvm.func @variadic(...) -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (llvm_dialect (symbol_ref_id) (func_arg_list (variadic)))))) ================================================================================ Variadic function with other arguments ================================================================================ llvm.func @variadic_args(i32, i32, ...) -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (llvm_dialect (symbol_ref_id) (func_arg_list (type (builtin_type (integer_type))) (type (builtin_type (integer_type))) (variadic)))))) ================================================================================ Generic operation in a module, with attributes ================================================================================ module { "llvm.func"() ({ }) {sym_name = "foo", function_type = !llvm.func} : () -> () } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (builtin_dialect (region (entry_block (operation (generic_operation (string_literal) (region) (attribute (dictionary_attribute (attribute_entry (bare_id) (attribute_value (string_literal))) (attribute_entry (bare_id) (attribute_value (type (dialect_type (pretty_dialect_item (dialect_namespace) (dialect_ident) (pretty_dialect_item_body)))))))) (function_type))))))))) ================================================================================ Generic operation with successor and region ================================================================================ func.func @terminator_with_regions() { "region"()[^bb2] ({}) : () -> () ^bb2: return } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list) (region (entry_block (operation (generic_operation (string_literal) (successor (caret_id)) (region) (function_type)))) (block (block_label (caret_id)) (operation (custom_operation (func_dialect))))))))) ================================================================================ Function with private specifier, and func.call ================================================================================ func.func private @source() -> tensor func.func @call_source() -> tensor { %0 = call @source() : () -> tensor return %0 : tensor } -------------------------------------------------------------------------------- (toplevel (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list) (func_return (type_list_attr_parens (type (builtin_type (tensor_type (dim_list (float_type)))))))))) (operation (custom_operation (func_dialect (symbol_ref_id) (func_arg_list) (func_return (type_list_attr_parens (type (builtin_type (tensor_type (dim_list (float_type))))))) (region (entry_block (operation (op_result (value_use)) (custom_operation (func_dialect (symbol_ref_id) (function_type (type (builtin_type (tensor_type (dim_list (float_type))))))))) (operation (custom_operation (func_dialect (value_use) (type (builtin_type (tensor_type (dim_list (float_type))))))))))))))