Enzyme
Enzyme copied to clipboard
Incorrect calling convention
call void @_Z17__enzyme_autodiffPvRKSt6vectorIN7libint25ShellESaIS2_EERS4_iNS1_8OperatorEiRKS0_I4AtomSaIS9_EE(%"class.Eigen::Matrix"* nonnull sret(%"class.Eigen::Matrix") align 8 %3, i8* bitcast (void (%"class.Eigen::Matrix"*, %"class.std::vector"*, i32, %"class.std::vector.11"*)* @_Z18compute_1body_intsRKSt6vectorIN7libint25ShellESaIS1_EENS0_8OperatorERKS_I4AtomSaIS7_EE to i8*), %"class.std::vector"* nonnull align 8 dereferenceable(24) %1, %"class.std::vector"* nonnull align 8 dereferenceable(24) %0, i32 %91, i32 0, i32 %91, %"class.std::vector.11"* nonnull align 8 dereferenceable(24) %4)
; Function Attrs: uwtable willreturn mustprogress
define internal void @diffe_Z18compute_1body_intsRKSt6vectorIN7libint25ShellESaIS1_EENS0_8OperatorERKS_I4AtomSaIS7_EE(%"class.Eigen::Matrix"* noalias nocapture align 8 %0, %"class.Eigen::Matrix"* nocapture %1, %"class.std::vector"* nocapture nonnull readonly align 8 dereferenceable(24) %2, %"class.std::vector"* nocapture %3, i32 %4, %"class.std::vector.11"* nocapture nonnull readnone align 8 dereferenceable(24) %5) #38 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
...
}
+ %93 = alloca %"class.Eigen::Matrix", align 8
+ i8* bitcast (void (%"class.Eigen::Matrix"*, %"class.std::vector"*, i32, %"class.std::vector.11"*)* @_Z18compute_1body_intsRKSt6vectorIN7libint25ShellESaIS1_EENS0_8OperatorERKS_I4AtomSaIS7_EE to i8*)
+ %"class.std::vector"* %1
+ %"class.std::vector"* %0
+ i32 0
+ %4 = alloca %"class.std::vector.11", align 8
broken at: i=1 - i8* bitcast (void (%"class.Eigen::Matrix"*, %"class.std::vector"*, i32, %"class.std::vector.11"*)* @_Z18compute_1body_intsRKSt6vectorIN7libint25ShellESaIS1_EENS0_8OperatorERKS_I4AtomSaIS7_EE to i8*) - %"class.Eigen::Matrix"*
This appears to be an error in requesting a pointer/duplicated sret return out of the ABI for reverse mode.
Now this isn't presently supported, but we should issue a nicer error of some sort @tgymnich