Skip to content

scf.if

scf dialect

Conditional execution with optional else region for resultless conditionals.

Operation contract

Property Value
Semantic phase source structure
Traits ImplicitTerminator(scf.yield)
Interfaces RegionBranch

Signature

Kind Name Type Cardinality Description
Operand condition i1 required
Result results any variadic
Region then_region region required Executed when condition is true. Terminated by scf.yield. (single block, terminator scf.yield.)
Region else_region region optional Executed when condition is false. Terminated by scf.yield. (single block, terminator scf.yield.)

Verification constraints

  • YieldCountMatchesResults(then_region, results)
  • YieldTypesMatchResults(then_region, results)
  • YieldCountMatchesResults(else_region, results)
  • YieldTypesMatchResults(else_region, results)

Examples

scf.if %cond {
  scf.yield
}
scf.if %cond {
  scf.yield
} else {
  scf.yield
}
%result = scf.if %cond -> (f32) {
  scf.yield %a : f32
} else {
  scf.yield %b : f32
}