diffsl 0.11.3

A compiler for a domain-specific language for ordinary differential equations (ODE).
Documentation
// RUN: %eopt --pass-pipeline="builtin.module(print-activity-analysis{dataflow=false annotate=true})" %s --split-input-file 2>&1 | FileCheck %s

// A function that contains active and inactive region dataflow

func.func @region(%x: f64) -> (f64, f64) {
  %f0 = arith.constant 0.0 : f64
  %c0 = arith.constant 0 : index
  %c10 = arith.constant 10 : index
  %c1 = arith.constant 1 : index
  %r0:2 = scf.for %arg12 = %c0 to %c10 step %c1 iter_args(%arg13 = %f0, %arg14 = %f0) -> (f64, f64) {
    %m = arith.addf %arg13, %x : f64
    scf.yield %m, %arg14 : f64, f64
  }
  return %r0#0, %r0#1 : f64, f64
}

// CHECK:  func.func @region(%arg0: f64) -> (f64, f64) attributes {enzyme.arg_icv0 = false, enzyme.ici = false} {
// CHECK-NEXT:    %cst = arith.constant {enzyme.ici = true, enzyme.res_icv0 = true} 0.000000e+00 : f64
// CHECK-NEXT:    %c0 = arith.constant {enzyme.ici = true, enzyme.res_icv0 = true} 0 : index
// CHECK-NEXT:    %c10 = arith.constant {enzyme.ici = true, enzyme.res_icv0 = true} 10 : index
// CHECK-NEXT:    %c1 = arith.constant {enzyme.ici = true, enzyme.res_icv0 = true} 1 : index
// CHECK-NEXT:    %0:2 = scf.for %arg1 = %c0 to %c10 step %c1 iter_args(%arg2 = %cst, %arg3 = %cst) -> (f64, f64) {
// CHECK-NEXT:      %1 = arith.addf %arg2, %arg0 {enzyme.ici = false, enzyme.res_icv0 = false} : f64
// CHECK-NEXT:      scf.yield {enzyme.ici = true} %1, %arg3 : f64, f64
// CHECK-NEXT:    } {enzyme.arg_icv0 = true, enzyme.arg_icv1 = false, enzyme.arg_icv2 = true, enzyme.ici = false, enzyme.res_icv0 = false, enzyme.res_icv1 = true}
// CHECK-NEXT:    return {enzyme.ici = true} %0#0, %0#1 : f64, f64
// CHECK-NEXT:  }