YingboMa / ForwardDiff2.jl

Other
52 stars 4 forks source link

Inference failure on nested differentiation #14

Open YingboMa opened 4 years ago

YingboMa commented 4 years ago
julia> @code_warntype D(D(+))(1)
Variables
  #self#::Core.Compiler.Const(ForwardDiff2.var"#deriv#31"{ForwardDiff2.var"#deriv#31"{typeof(+)}}(ForwardDiff2.var"#deriv#31"{typeof(+)}(+)), false)
  arg::Int64
  #29::ForwardDiff2.var"#29#34"{Int64,ForwardDiff2.var"#deriv#31"{typeof(+)}}

Body::Any
1 ─ %1 = ForwardDiff2.:(var"#29#34")::Core.Compiler.Const(ForwardDiff2.var"#29#34", false)
│   %2 = Core.typeof(arg)::Core.Compiler.Const(Int64, false)
│   %3 = Core.getfield(#self#, :f)::Core.Compiler.Const(ForwardDiff2.var"#deriv#31"{typeof(+)}(+), false)
│   %4 = Core.typeof(%3)::Core.Compiler.Const(ForwardDiff2.var"#deriv#31"{typeof(+)}, false)
│   %5 = Core.apply_type(%1, %2, %4)::Core.Compiler.Const(ForwardDiff2.var"#29#34"{Int64,ForwardDiff2.var"#deriv#31"{typeof(+)}}, false)
│   %6 = Core.getfield(#self#, :f)::Core.Compiler.Const(ForwardDiff2.var"#deriv#31"{typeof(+)}(+), false)
│        (#29 = %new(%5, arg, %6))
│   %8 = #29::ForwardDiff2.var"#29#34"{Int64,ForwardDiff2.var"#deriv#31"{typeof(+)}}
│   %9 = ForwardDiff2.dualrun(%8)::Any
└──      return %9
YingboMa commented 4 years ago

Caused by https://github.com/jrevels/Cassette.jl/issues/155