+ ]
+ attr_struct = "mod_attr"
+ pinned = "exception"
+ throws_init = "false"
+ op_index = 1
+ arity_override = "oparity_binary"
+
+class Mul(Binop):
+ """returns the product of its operands"""
+ flags = [ "commutative" ]
+
+class Mulh(Binop):
+ """returns the upper word of the product of its operands (the part which
+ would not fit into the result mode of a normal Mul anymore)"""
+ flags = [ "commutative" ]
+
+@op
+class Mux:
+ """returns the false or true operand depending on the value of the sel
+ operand"""
+ ins = [
+ ("sel", "value making the output selection"),
+ ("false", "selected if sel input is false"),
+ ("true", "selected if sel input is true"),
+ ]
+ flags = []
+ pinned = "no"
+
+@op
+class NoMem:
+ """Placeholder node for cases where you don't need any memory input"""
+ mode = "mode_M"
+ flags = [ "dump_noblock" ]
+ pinned = "yes"
+ knownBlock = True
+ block = "get_irg_start_block(irg)"
+ singleton = True
+
+@op
+class Not(Unop):
+ """returns the bitwise complement of a value. Works for boolean values, too."""
+ flags = []
+
+@op
+class Or(Binop):
+ """returns the result of a bitwise or operation of its operands"""
+ flags = [ "commutative" ]
+
+@op
+class Phi:
+ """Choose a value based on control flow. A phi node has 1 input for each
+ predecessor of its block. If a block is entered from its nth predecessor
+ all phi nodes produce their nth input as result."""
+ pinned = "yes"
+ arity = "variable"
+ input_name = "pred"
+ flags = []
+ attr_struct = "phi_attr"
+ init = '''
+ res->attr.phi.u.backedge = new_backedge_arr(get_irg_obstack(irg), arity);'''
+ customSerializer = True
+
+@op
+class Pin:
+ """Pin the value of the node node in the current block. No users of the Pin
+ node can float above the Block of the Pin. The node cannot float behind
+ this block. Often used to Pin the NoMem node."""
+ ins = [
+ ("op", "value which is pinned"),
+ ]
+ mode = "get_irn_mode(irn_op)"
+ flags = [ "highlevel" ]
+ pinned = "yes"
+
+@op
+class Proj:
+ """returns an entry of a tuple value"""
+ ins = [
+ ("pred", "the tuple value from which a part is extracted"),
+ ]
+ flags = []
+ pinned = "no"
+ knownBlock = True
+ knownGraph = True
+ block = "get_nodes_block(irn_pred)"
+ graph = "get_irn_irg(irn_pred)"
+ attrs = [
+ dict(
+ type = "long",
+ name = "proj",
+ comment = "number of tuple component to be extracted",
+ ),
+ ]
+ attr_struct = "proj_attr"
+
+@op
+class Raise:
+ """Raises an exception. Unconditional change of control flow. Writes an
+ explicit Except variable to memory to pass it to the exception handler.
+ Must be lowered to a Call to a runtime check function."""
+ ins = [
+ ("mem", "memory dependency"),
+ ("exo_ptr", "pointer to exception object to be thrown"),
+ ]
+ outs = [
+ ("M", "memory result"),
+ ("X", "control flow to exception handler"),
+ ]
+ flags = [ "highlevel", "cfopcode" ]
+ pinned = "yes"
+
+@op
+class Return:
+ """Returns from the current function. Takes memory and return values as
+ operands."""
+ ins = [
+ ("mem", "memory dependency"),
+ ]
+ arity = "variable"
+ input_name = "res"
+ mode = "mode_X"
+ flags = [ "cfopcode" ]
+ pinned = "yes"
+
+class Rotl(Binop):
+ """Returns its first operand bits rotated left by the amount in the 2nd
+ operand"""
+ flags = []
+
+@op
+class Sel:
+ """Computes the address of a entity of a compound type given the base
+ address of an instance of the compound type.
+
+ Optimisations assume that a Sel node can only produce a NULL pointer if the
+ ptr input was NULL."""
+ ins = [
+ ("mem", "memory dependency"),
+ ("ptr", "pointer to object to select from"),
+ ]
+ arity = "variable"
+ input_name = "index"
+ flags = []
+ mode = "is_Method_type(get_entity_type(entity)) ? mode_P_code : mode_P_data"
+ pinned = "no"
+ attrs = [