Skip to content

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

@xys-syx

Description

@xys-syx

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
}

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions