EnzymeAD / EnzymeAD/Enzyme

Enzyme: Cannot deduce type of extract for CUDA code

Open
#2,342 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
LLVM
Stars
1.7k
Forks
188
Avg merge
1d 22h
Merged PRs (30d)
26

Description

I have 2 cuda codes, both give Enzyme: Cannot deduce type of extract errors. The crash occurs in O0 but not in O3, only in CUDA but not CPU.

```
home/mixu/software/llvm-18.1.8/llvm-project-llvmorg-18.1.8/build/bin/clang++ --cuda-path=/home/mixu/dev/vNNN/Cromwell/Dependencies/cuda/ --target=x86_64-pc-linux-gnu --gcc-toolchain=/home/mixu/dev/vNNN/Cromwell/Dependencies/../../FBU_Dependencies/thirdparty/compilers/gcc/linx64 -std=c++17 -stdlib=libstdc++ -Wno-deprecated-builtins -Wno-unknown-warning-option -g -std=c++17 --cuda-path=/home/mixu/dev/vNNN/Cromwell/Dependencies/cuda -fPIC --target=x86_64-pc-linux-gnu --gcc-toolchain=/home/mixu/dev/vNNN/Cromwell/Dependencies/../../FBU_Dependencies/thirdparty/compilers/gcc/linx64 -std=c++17 -stdlib=libstdc++ -Wno-deprecated-builtins -Wno-unknown-warning-option -fopenmp --cuda-gpu-arch=sm_60 -w -Wno-missing-template-arg-list-after-template-kw -fplugin=/home/mixu/software/Enzyme/enzyme/build-18/Enzyme/ClangEnzyme-18.so -mllvm -enzyme-loose-types=1 -mllvm -enzyme-coalese=1 -mllvm -enzyme-noalias=1 -mllvm -enzyme-phi-restructure=1 -x cuda -Xarch_device -g0 -MD -MT MeshMetrics.cxx.o -MF
MeshMetrics.cxx.o.d -x cuda -c MeshMetrics.cxx -o CMakeFiles/MeshMetrics.cxx.o
```
where the original code is

```
struct centroid_volume
{
Real volume[2];
Real centroid[2][SpatialDimension];
};

struct CellVolumeAndCentroidOp_internal
{
typedef centroid_volume DataType;
device_func DataType pre_work(dsize_t /* idx */)
{
centroid_volume result{};
for (dsize_t id = neighbor_start; id < neighbor_end; ++id)
{
for (dsize_t dim = 0; dim < SpatialDimension; ++dim)
result.centroid[id][dim] = Real(0);
result.volume[id] = 0;
}
return result;
}
```
This gives the error

```
error: Enzyme: Cannot deduce type of extract %3 = extractvalue %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume" %call, 1{} start: 0 size: 48 extractSize: 48

i64 0: {[-1]:Anything}, intvals: {0,}
i32 0: {[-1]:Anything}, intvals: {0,}
i32 1: {[-1]:Integer}, intvals: {1,}
%4 = load i32, ptr %arrayidx, align 4: {[-1]:Integer}, intvals: {}
%cond = phi i32 [ %4, %cond.true ], [ 0, %entry ]: {[-1]:Integer}, intvals: {0,}
%call2 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE7OffsetsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #144: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
i32 %idx: {[-1]:Integer}, intvals: {0,}
ptr %operation: {[-1]:Pointer, [-1,0]:Pointer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,16]:Pointer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,32]:Pointer, [-1,32,0]:Float@double, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,56]:Integer, [-1,57]:Integer, [-1,58]:Integer, [-1,59]:Integer, [-1,72]:Integer, [-1,73]:Integer, [-1,74]:Integer, [-1,75]:Integer, [-1,76]:Integer, [-1,77]:Integer, [-1,78]:Integer, [-1,79]:Integer, [-1,80]:Pointer, [-1,88]:Integer, [-1,89]:Integer, [-1,90]:Integer, [-1,91]:Integer, [-1,92]:Integer, [-1,93]:Integer, [-1,94]:Integer, [-1,95]:Integer, [-1,96]:Integer, [-1,97]:Integer, [-1,98]:Integer, [-1,99]:Integer, [-1,100]:Integer, [-1,101]:Integer, [-1,102]:Integer, [-1,103]:Integer, [-1,104]:Integer, [-1,105]:Integer, [-1,106]:Integer, [-1,107]:Integer}, intvals: {}
ptr %map_view: {[-1]:Pointer, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,16]:Pointer, [-1,16,0]:Integer, [-1,16,1]:Integer, [-1,16,2]:Integer, [-1,16,3]:Integer}, intvals: {}
%iv = phi i64 [ %iv.next, %for.body ], [ 0, %cond.end ]: {[-1]:Integer}, intvals: {0,}
%call1 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE7OffsetsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #144: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%inc = add i32 %8, 1: {[-1]:Integer}, intvals: {1,}
%.fca.1.2.extract = extractvalue [2 x [3 x double]] %3, 1, 2: {}, intvals: {}
%.fca.1.extract = extractvalue [2 x double] %1, 1: {}, intvals: {}
%.fca.0.0.extract = extractvalue [2 x [3 x double]] %3, 0, 0: {}, intvals: {}
%idxprom12 = zext i32 %8 to i64: {[-1]:Integer}, intvals: {0,}
%.fca.1.0.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 1, i32 0: {[-1]:Pointer}, intvals: {}
%.fca.0.2.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 0, i32 2: {[-1]:Pointer}, intvals: {}
i64 1: {[-1]:Integer}, intvals: {1,}
call void @_ZN8Cromwell13GeometryTools4Mesh7Metrics32CellVolumeAndCentroidOp_internal9post_workINS_8Patterns14CudaOperationsEEEvjRNS2_15centroid_volumeE(ptr noundef nonnull align 8 dereferenceable(108) %operation, i32 noundef %idx, ptr noundef nonnull align 8 dereferenceable(64) %data) #144: {}, intvals: {}
%idxprom = zext i32 %sub to i64: {[-1]:Integer}, intvals: {-1,}
%8 = trunc i64 %7 to i32: {[-1]:Integer}, intvals: {0,}
%idxprom3 = zext i32 %idx to i64: {[-1]:Integer}, intvals: {0,}
%idxprom9 = zext i32 %neighbor_minus_1.0 to i64: {[-1]:Integer}, intvals: {}
%.fca.1.2.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 1, i32 2: {[-1]:Pointer}, intvals: {}
%1 = extractvalue %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume" %call, 0: {}, intvals: {}
%3 = extractvalue %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume" %call, 1: {}, intvals: {}
%cmp = icmp ugt i32 %idx, 0: {[-1]:Integer}, intvals: {}
%sub6 = sub i32 %5, 1: {[-1]:Integer}, intvals: {}
%sub = sub i32 %idx, 1: {[-1]:Integer}, intvals: {-1,}
%arrayidx = getelementptr inbounds i32, ptr %call1, i64 %idxprom: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%.fca.1.1.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 1, i32 1: {[-1]:Pointer}, intvals: {}
%2 = getelementptr inbounds %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume", ptr %data, i32 0, i32 1: {[-1]:Pointer}, intvals: {}
%neighbor_minus_1.0 = phi i32 [ %sub6, %cond.end ], [ %8, %for.body ]: {[-1]:Integer}, intvals: {}
%data = alloca %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume", align 8: {[-1]:Pointer}, intvals: {}
%7 = add i64 %6, %iv: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer}, intvals: {0,}
%.fca.0.extract = extractvalue [2 x double] %1, 0: {}, intvals: {}
%.fca.0.0.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 0, i32 0: {[-1]:Pointer}, intvals: {}
%iv.next = add nuw nsw i64 %iv, 1: {[-1]:Integer}, intvals: {1,}
%6 = zext i32 %cond to i64: {[-1]:Integer}, intvals: {0,}
%cmp7 = icmp ult i32 %8, %5: {[-1]:Integer}, intvals: {}
%call8 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE9NeighborsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #144: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%.fca.0.1.gep = getelementptr inbounds [2 x [3 x double]], ptr %2, i32 0, i32 0, i32 1: {[-1]:Pointer}, intvals: {}
%arrayidx10 = getelementptr inbounds i32, ptr %call8, i64 %idxprom9: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%9 = load i32, ptr %arrayidx10, align 4: {[-1]:Integer}, intvals: {}
%call11 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE9NeighborsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #144: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%arrayidx13 = getelementptr inbounds i32, ptr %call11, i64 %idxprom12: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%10 = load i32, ptr %arrayidx13, align 4: {[-1]:Integer}, intvals: {}
%0 = getelementptr inbounds %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume", ptr %data, i32 0, i32 0: {[-1]:Pointer}, intvals: {}
%call = call %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume" @_ZN8Cromwell13GeometryTools4Mesh7Metrics32CellVolumeAndCentroidOp_internal8pre_workEj(ptr noundef nonnull align 8 dereferenceable(108) %operation, i32 noundef %idx) #144: {}, intvals: {}
%.fca.0.gep = getelementptr inbounds [2 x double], ptr %0, i32 0, i32 0: {[-1]:Pointer}, intvals: {}
%.fca.1.gep = getelementptr inbounds [2 x double], ptr %0, i32 0, i32 1: {[-1]:Pointer}, intvals: {}
%.fca.0.1.extract = extractvalue [2 x [3 x double]] %3, 0, 1: {}, intvals: {}
%.fca.0.2.extract = extractvalue [2 x [3 x double]] %3, 0, 2: {}, intvals: {}
%.fca.1.0.extract = extractvalue [2 x [3 x double]] %3, 1, 0: {}, intvals: {}
%.fca.1.1.extract = extractvalue [2 x [3 x double]] %3, 1, 1: {}, intvals: {}
call void @_ZN8Cromwell13GeometryTools4Mesh7Metrics32CellVolumeAndCentroidOp_internalclEjjjRNS2_15centroid_volumeE(ptr noundef nonnull align 8 dereferenceable(108) %operation, i32 noundef %idx, i32 noundef %9, i32 noundef %10, ptr noundef nonnull align 8 dereferenceable(64) %data) #144: {}, intvals: {}
%arrayidx4 = getelementptr inbounds i32, ptr %call2, i64 %idxprom3: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
%5 = load i32, ptr %arrayidx4, align 4: {[-1]:Integer}, intvals: {}
%call5 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE9NeighborsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #144: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}

error: Enzyme: Cannot deduce type of extract %1 = extractvalue %"struct.Cromwell::GeometryTools::Mesh::Metrics::centroid_volume" %call, 0{} start: 0 size: 16 extractSize: 16
```

----------------------------------------------------------

The second one is similar:

```
template
struct OperationInterior3
{
typedef std::array DataType;
device_func DataType pre_work(dsize_t idx)
{
DataType gradient{};
for (dsize_t k = 0; k < D; ++k)
{
for (dsize_t l = 0; l < SpatialDimension; ++l)
gradient[k * SpatialDimension + l] = 0;
}
return gradient;
}
```

with error msg

```
error: Enzyme: Cannot deduce type of extract %0 = extractvalue %"struct.std::array.4" %call, 0{} start: 0 size: 48 extractSize: 48
18:00:18 cromwell 3ddp
18:00:18 cromwell 3ddpi64 0: {[-1]:Anything}, intvals: {0,}
18:00:18 cromwell 3ddpi32 0: {[-1]:Anything}, intvals: {0,}
18:00:18 cromwell 3ddpi32 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %.fca.5.extract = extractvalue [6 x double] %0, 5: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.5.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 5: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %1 = load i32, ptr %arrayidx, align 4: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.4.extract = extractvalue [6 x double] %0, 4: {}, intvals: {}
18:00:18 cromwell 3ddp %data = alloca %"struct.std::array.4", align 8: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddpi32 %idx: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddpptr %operation: {[-1]:Pointer, [-1,0]:Pointer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,16]:Pointer, [-1,24]:Integer, [-1,25]:Integer, [-1,26]:Integer, [-1,27]:Integer, [-1,28]:Integer, [-1,29]:Integer, [-1,30]:Integer, [-1,31]:Integer, [-1,32]:Pointer, [-1,40]:Integer, [-1,41]:Integer, [-1,42]:Integer, [-1,43]:Integer, [-1,44]:Integer, [-1,45]:Integer, [-1,46]:Integer, [-1,47]:Integer, [-1,48]:Pointer, [-1,56]:Integer, [-1,57]:Integer, [-1,58]:Integer, [-1,59]:Integer, [-1,60]:Integer, [-1,61]:Integer, [-1,62]:Integer, [-1,63]:Integer, [-1,64]:Pointer, [-1,72]:Integer, [-1,73]:Integer, [-1,74]:Integer, [-1,75]:Integer, [-1,76]:Integer, [-1,77]:Integer, [-1,78]:Integer, [-1,79]:Integer, [-1,80]:Pointer, [-1,88]:Integer, [-1,89]:Integer, [-1,90]:Integer, [-1,91]:Integer, [-1,92]:Integer, [-1,93]:Integer, [-1,94]:Integer, [-1,95]:Integer, [-1,96]:Pointer, [-1,104]:Integer, [-1,105]:Integer, [-1,106]:Integer, [-1,107]:Integer, [-1,108]:Integer, [-1,109]:Integer, [-1,110]:Integer, [-1,111]:Integer, [-1,112]:Pointer, [-1,120]:Integer, [-1,121]:Integer, [-1,122]:Integer, [-1,123]:Integer, [-1,124]:Integer, [-1,125]:Integer, [-1,126]:Integer, [-1,127]:Integer, [-1,128]:Pointer, [-1,136]:Integer, [-1,137]:Integer, [-1,138]:Integer, [-1,139]:Integer, [-1,140]:Integer, [-1,141]:Integer, [-1,142]:Integer, [-1,143]:Integer, [-1,144]:Pointer, [-1,144,0]:Integer, [-1,152]:Integer, [-1,153]:Integer, [-1,154]:Integer, [-1,155]:Integer, [-1,156]:Integer, [-1,157]:Integer, [-1,158]:Integer, [-1,159]:Integer, [-1,160]:Integer, [-1,161]:Integer, [-1,162]:Integer, [-1,163]:Integer, [-1,164]:Integer, [-1,165]:Integer, [-1,166]:Integer, [-1,167]:Integer, [-1,168]:Integer, [-1,169]:Integer, [-1,170]:Integer, [-1,171]:Integer, [-1,172]:Integer, [-1,173]:Integer, [-1,174]:Integer, [-1,175]:Integer}, intvals: {}
18:00:18 cromwell 3ddpptr %map_view: {[-1]:Pointer, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,1]:Integer, [-1,8,2]:Integer, [-1,8,3]:Integer, [-1,16]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.2.extract = extractvalue [6 x double] %0, 2: {}, intvals: {}
18:00:18 cromwell 3ddp call void @_ZN8Cromwell11CommonModel9Operators20priv_CM_Op_LstSqrGrd18OperationInterior3ILj2EEclEjjjRSt5arrayIdLm6EE(ptr noundef nonnull align 8 dereferenceable(176) %operation, i32 noundef %idx, i32 noundef %9, i32 noundef %8, ptr noundef nonnull align 8 dereferenceable(48) %data) #141: {}, intvals: {}
18:00:18 cromwell 3ddp %arrayidx = getelementptr inbounds i32, ptr %call1, i64 %idxprom: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %call2 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE7OffsetsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #141: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %arrayidx4 = getelementptr inbounds i32, ptr %call2, i64 %idxprom3: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %iv.next = add nuw nsw i64 %iv, 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %7 = add i64 %3, %iv: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %iv = phi i64 [ %iv.next, %for.body ], [ 0, %cond.end ]: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %arrayidx8 = getelementptr inbounds i32, ptr %call5, i64 %idxprom7: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %9 = load i32, ptr %arrayidx8, align 4: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %inc = add i32 %8, 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %.fca.0.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 0: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.1.extract = extractvalue [6 x double] %0, 1: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.1.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 1: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %cond = phi i32 [ %1, %cond.true ], [ 0, %entry ]: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %.fca.2.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 2: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.3.extract = extractvalue [6 x double] %0, 3: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.4.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 4: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %4 = zext i32 %cond to i64: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddpi64 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %call = call %"struct.std::array.4" @_ZN8Cromwell11CommonModel9Operators20priv_CM_Op_LstSqrGrd18OperationInterior3ILj2EE8pre_workEj(ptr noundef nonnull align 8 dereferenceable(176) %operation, i32 noundef %idx) #141: {}, intvals: {}
18:00:18 cromwell 3ddp %0 = extractvalue %"struct.std::array.4" %call, 0: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.0.extract = extractvalue [6 x double] %0, 0: {}, intvals: {}
18:00:18 cromwell 3ddp %3 = zext i32 %cond to i64: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %2 = load i32, ptr %arrayidx4, align 4: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %call5 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE9NeighborsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #141: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.3.gep = getelementptr inbounds [6 x double], ptr %data, i32 0, i32 3: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %idxprom = zext i32 %sub to i64: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %8 = trunc i64 %7 to i32: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %idxprom3 = zext i32 %idx to i64: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %inc9 = add i32 %6, 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %cmp = icmp ugt i32 %idx, 0: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %call1 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE7OffsetsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #141: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %sub = sub i32 %idx, 1: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp call void @_ZN8Cromwell11CommonModel9Operators20priv_CM_Op_LstSqrGrd18OperationInterior3ILj2EE9post_workEjRSt5arrayIdLm6EE(ptr noundef nonnull align 8 dereferenceable(176) %operation, i32 noundef %idx, ptr noundef nonnull align 8 dereferenceable(48) %data) #141: {}, intvals: {}
18:00:18 cromwell 3ddp %6 = trunc i64 %5 to i32: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %5 = add i64 %4, %iv: {[0]:Integer, [1]:Integer, [2]:Integer, [3]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %cmp6 = icmp ult i32 %6, %2: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %idxprom7 = zext i32 %6 to i64: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp
18:00:18 cromwell 3ddp
18:00:18 cromwell 3ddperror: Enzyme: Cannot deduce type of extract %0 = extractvalue %"struct.std::array.10" %call, 0{} start: 0 size: 72 extractSize: 72
18:00:18 cromwell 3ddp
18:00:18 cromwell 3ddpi64 0: {[-1]:Anything}, intvals: {0,}
18:00:18 cromwell 3ddpi32 0: {[-1]:Anything}, intvals: {0,}
18:00:18 cromwell 3ddpi32 1: {[-1]:Integer}, intvals: {1,}
18:00:18 cromwell 3ddp %.fca.5.extract = extractvalue [9 x double] %0, 5: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.5.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 5: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.6.extract = extractvalue [9 x double] %0, 6: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.6.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 6: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.3.extract = extractvalue [9 x double] %0, 3: {}, intvals: {}
18:00:18 cromwell 3ddp %arrayidx = getelementptr inbounds i32, ptr %call1, i64 %idxprom: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %cond = phi i32 [ %1, %cond.true ], [ 0, %entry ]: {[-1]:Integer}, intvals: {0,}
18:00:18 cromwell 3ddp %.fca.4.extract = extractvalue [9 x double] %0, 4: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.4.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 4: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %1 = load i32, ptr %arrayidx, align 4: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.7.extract = extractvalue [9 x double] %0, 7: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.7.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 7: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.8.extract = extractvalue [9 x double] %0, 8: {}, intvals: {}
18:00:18 cromwell 3ddp %.fca.8.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 8: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %cmp = icmp ugt i32 %idx, 0: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %call1 = call noundef ptr @_ZNK8Cromwell10Containers10CRSMapViewIjjE7OffsetsEv(ptr noundef nonnull align 8 dereferenceable(24) %map_view) #141: {[-1]:Pointer}, intvals: {}
18:00:18 cromwell 3ddp %sub = sub i32 %idx, 1: {[-1]:Integer}, intvals: {}
18:00:18 cromwell 3ddp %.fca.0.gep = getelementptr inbounds [9 x double], ptr %data, i32 0, i32 0: {[-1]:Pointer}, intvals: {}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.