func.func @simple(i64, i1) -> i64 {
// <- function.builtin
// ^ function
// ^ punctuation.bracket
// ^ type.builtin
// ^ punctuation.delimeter
// ^ type.builtin
// ^ punctuation.bracket
// ^ operator
// ^ type.builtin
// ^ punctuation.bracket
^bb0(%a: i64, %cond: i1):
// <- tag
// ^ variable.parameter
// ^ type.builtin
// ^ variable.parameter
// ^ type.builtin
cf.cond_br %cond, ^bb1, ^bb2
// ^ function.builtin
// ^ variable.parameter
// ^ tag
// ^ tag
^bb1:
// <- tag
cf.br ^bb3(%a: i64) // Branch passes %a as the argument
// ^ function.builtin
// ^ tag
// ^ variable.parameter
// ^ type.builtin
// ^ comment
^bb2:
// <- tag
%b = arith.addi %a, %a : i64
// ^ variable
// ^ operator
// ^ function.builtin
// ^ variable.parameter
// ^ variable.parameter
// ^ type.builtin
cf.br ^bb3(%b: i64) // Branch passes %b as the argument
// ^ function.builtin
// ^ tag
// ^ variable
// ^ type.builtin
// ^ comment
^bb3(%c: i64):
// <- tag
// ^ variable.parameter
// ^ type.builtin
cf.br ^bb4(%c, %a : i64, i64)
// ^ function.builtin
// ^ tag
// ^ variable.parameter
// ^ variable.parameter
// ^ type.builtin
// ^ type.builtin
^bb4(%d : i64, %e : i64):
// <- tag
// ^ variable.parameter
// ^ type.builtin
// ^ variable.parameter
// ^ type.builtin
%0 = arith.addi %d, %e : i64
// ^ variable
// ^ operator
// ^ function.builtin
// ^ variable.parameter
// ^ variable.parameter
// ^ type.builtin
return %0 : i64 // Return is also a terminator.
// ^ function.builtin
// ^ variable
// ^ type.builtin
// ^ comment
}
// <- punctuation.bracket