ITADN

cast<AutoDiffTypeInterface>(!llvm.struct<(i64, i64)>) fails

#2771Openxys-syx 创建于 2026-03-28
mlir
X
xys-syxcommented
The minimal reproducible example is: ``` // Run: enzymexlamlir-opt --outline-enzyme-regions --enzyme %s llvm.func @compute(%arg0: !llvm.ptr, %arg1: f64) -> f64 { %0 = llvm.load %arg0 : !llvm.ptr -> !llvm.struct<(i64, i64)> %1 = llvm.extractvalue %0[0] : !llvm.struct<(i64, i64)> %2 = llvm.inttoptr %1 : i64 to !llvm.ptr %3 = llvm.load %2 : !llvm.ptr -> f64 %4 = llvm.fmul %3, %arg1 : f64 llvm.return %4 : f64 } llvm.func @kernel(%arg0: !llvm.ptr, %arg1: !llvm.ptr, %arg2: f64, %arg3: f64) { enzyme.autodiff_region(%arg0, %arg1, %arg2, %arg3) { ^bb0(%a0: !llvm.ptr, %a1: f64): %0 = llvm.load %a0 : !llvm.ptr -> !llvm.struct<(i64, i64)> %1 = llvm.extractvalue %0[0] : !llvm.struct<(i64, i64)> %2 = llvm.inttoptr %1 : i64 to !llvm.ptr %3 = llvm.load %2 : !llvm.ptr -> f64 %4 = llvm.fmul %3, %a1 : f64 enzyme.yield %4 : f64 } attributes { activity = [#enzyme<activity enzyme_dup>, #enzyme<activity enzyme_const>], ret_activity = [#enzyme<activity enzyme_activenoneed>], fn = "compute" } : (!llvm.ptr, !llvm.ptr, f64, f64) -> f64 llvm.return } ```
4 条评论