Skip to content

[Bug] unordered_map access #2367

@ax3l

Description

@ax3l

I encounter an issue in ImpactX when differentiating through functions with return types of value std::unordered_map<std::string, double>.

I use those dictionary style types to return named tuples of ~20 values in certain physics (analysis) routines, usually then optimizing on a select few parameters in them. Unfortunately, I get some LLVM error that I do not (yet) know how to read (error: Enzyme: Cannot deduce type of copy call) .

Here is the full reproducer:
https://fwd.gymni.ch/DTQR3r

#include <cmath>
#include <string>
#include <unordered_map>


std::unordered_map<std::string, double>
reduced_beam_characteristics (double x, double y)
{
    std::unordered_map<std::string, double> data;

    data["alpha_x"] = x*x + y;
    data["alpha_y"] = y*y + 2.;

    return data;
}

double compute (double r)
{
    double x = std::sqrt(r);
    double y = std::log(r);

    std::unordered_map<std::string, double> const rbc =
        reduced_beam_characteristics(x, y);
    return rbc.at("alpha_x");
}

double __enzyme_autodiff(void*, double);

int main()
{
    double q1_k = 3.0;

    // normal
    double const alpha_x = compute(q1_k);

    // diff (fails)
    double ddx = __enzyme_autodiff((void*) compute, q1_k);

}
In file included from :2: In file included from /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/string:40: /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/char_traits.h:437:33: error: Enzyme: Cannot deduce type of copy call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(7) %6, ptr noundef nonnull align 1 dereferenceable(7) @.str, i64 7, i1 false) #20, !dbg !3616 %39 = load i64, ptr %38, align 8, !dbg !3931, !tbaa !3932: {[-1]:Integer}, intvals: {} double %0: {[-1]:Float@double}, intvals: {} %27 = load ptr, ptr %25, align 8, !dbg !3783, !tbaa !3791: {[-1]:Pointer}, intvals: {} call void @_ZdlPv(ptr noundef %29) #21, !dbg !3877: {}, intvals: {} call void @_ZdlPv(ptr noundef %15) #21, !dbg !3736: {}, intvals: {} call void @_ZdlPv(ptr noundef nonnull %25) #21, !dbg !3925: {}, intvals: {} %28 = getelementptr inbounds i8, ptr %25, i64 8, !dbg !3798: {[-1]:Pointer, [-1,0]:Pointer}, intvals: {} %24 = phi i64 [ 0, %22 ], [ %26, %33 ]: {[-1]:Integer}, intvals: {0,} %2 = alloca %"class.std::unordered_map", align 8: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,0,0]:Pointer, [-1,0,0,0,0,8]:Pointer, [-1,0,0,0,0,16]:Integer, [-1,0,0,0,0,17]:Integer, [-1,0,0,0,0,18]:Integer, [-1,0,0,0,0,19]:Integer, [-1,0,0,0,0,20]:Integer, [-1,0,0,0,0,21]:Integer, [-1,0,0,0,0,22]:Integer, [-1,0,0,0,0,23]:Integer, [-1,0,0,0,0,24]:Integer, [-1,0,0,0,0,31]:Integer, [-1,0,0,0,0,40]:Float@double, [-1,0,0,0,0,48]:Integer, [-1,0,0,0,0,49]:Integer, [-1,0,0,0,0,50]:Integer, [-1,0,0,0,0,51]:Integer, [-1,0,0,0,0,52]:Integer, [-1,0,0,0,0,53]:Integer, [-1,0,0,0,0,54]:Integer, [-1,0,0,0,0,55]:Integer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,8,0]:Integer, [-1,0,0,0,8,7]:Integer, [-1,0,0,0,8,16]:Float@double, [-1,0,0,0,8,24]:Integer, [-1,0,0,0,8,25]:Integer, [-1,0,0,0,8,26]:Integer, [-1,0,0,0,8,27]:Integer, [-1,0,0,0,8,28]:Integer, [-1,0,0,0,8,29]:Integer, [-1,0,0,0,8,30]:Integer, [-1,0,0,0,8,31]:Integer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,16]:Pointer, [-1,16,0]:Pointer, [-1,16,0,0]:Pointer, [-1,16,0,0,0]:Pointer, [-1,16,0,0,0,0]:Pointer, [-1,16,0,0,0,8]:Pointer, [-1,16,0,0,0,16]:Integer, [-1,16,0,0,0,17]:Integer, [-1,16,0,0,0,18]:Integer, [-1,16,0,0,0,19]:Integer, [-1,16,0,0,0,20]:Integer, [-1,16,0,0,0,21]:Integer, [-1,16,0,0,0,22]:Integer, [-1,16,0,0,0,23]:Integer, [-1,16,0,0,0,24]:Integer, [-1,16,0,0,0,31]:Integer, [-1,16,0,0,0,40]:Float@double, [-1,16,0,0,0,48]:Integer, [-1,16,0,0,0,49]:Integer, [-1,16,0,0,0,50]:Integer, [-1,16,0,0,0,51]:Integer, [-1,16,0,0,0,52]:Integer, [-1,16,0,0,0,53]:Integer, [-1,16,0,0,0,54]:Integer, [-1,16,0,0,0,55]:Integer, [-1,16,0,0,8]:Pointer, [-1,16,0,0,8,0]:Integer, [-1,16,0,0,8,7]:Integer, [-1,16,0,0,8,16]:Float@double, [-1,16,0,0,8,24]:Integer, [-1,16,0,0,8,25]:Integer, [-1,16,0,0,8,26]:Integer, [-1,16,0,0,8,27]:Integer, [-1,16,0,0,8,28]:Integer, [-1,16,0,0,8,29]:Integer, [-1,16,0,0,8,30]:Integer, [-1,16,0,0,8,31]:Integer, [-1,16,0,0,16]:Integer, [-1,16,0,0,17]:Integer, [-1,16,0,0,18]:Integer, [-1,16,0,0,19]:Integer, [-1,16,0,0,20]:Integer, [-1,16,0,0,21]:Integer, [-1,16,0,0,22]:Integer, [-1,16,0,0,23]:Integer, [-1,16,0,0,24]:Integer, [-1,16,0,0,31]:Integer, [-1,16,0,0,40]:Float@double, [-1,16,0,0,48]:Integer, [-1,16,0,0,49]:Integer, [-1,16,0,0,50]:Integer, [-1,16,0,0,51]:Integer, [-1,16,0,0,52]:Integer, [-1,16,0,0,53]:Integer, [-1,16,0,0,54]:Integer, [-1,16,0,0,55]:Integer, [-1,16,0,8]:Pointer, [-1,16,0,8,0]:Integer, [-1,16,0,8,7]:Integer, [-1,16,0,8,16]:Float@double, [-1,16,0,8,24]:Integer, [-1,16,0,8,25]:Integer, [-1,16,0,8,26]:Integer, [-1,16,0,8,27]:Integer, [-1,16,0,8,28]:Integer, [-1,16,0,8,29]:Integer, [-1,16,0,8,30]:Integer, [-1,16,0,8,31]:Integer, [-1,16,0,16]:Integer, [-1,16,0,17]:Integer, [-1,16,0,18]:Integer, [-1,16,0,19]:Integer, [-1,16,0,20]:Integer, [-1,16,0,21]:Integer, [-1,16,0,22]:Integer, [-1,16,0,23]:Integer, [-1,16,0,24]:Integer, [-1,16,0,31]:Integer, [-1,16,0,40]:Float@double, [-1,16,0,48]:Integer, [-1,16,0,49]:Integer, [-1,16,0,50]:Integer, [-1,16,0,51]:Integer, [-1,16,0,52]:Integer, [-1,16,0,53]:Integer, [-1,16,0,54]:Integer, [-1,16,0,55]:Integer, [-1,16,8]:Pointer, [-1,16,8,0]:Integer, [-1,16,8,7]:Integer, [-1,16,8,16]:Float@double, [-1,16,8,24]:Integer, [-1,16,8,25]:Integer, [-1,16,8,26]:Integer, [-1,16,8,27]:Integer, [-1,16,8,28]:Integer, [-1,16,8,29]:Integer, [-1,16,8,30]:Integer, [-1,16,8,31]:Integer, [-1,16,16]:Integer, [-1,16,17]:Integer, [-1,16,18]:Integer, [-1,16,19]:Integer, [-1,16,20]:Integer, [-1,16,21]:Integer, [-1,16,22]:Integer, [-1,16,23]:Integer, [-1,16,24]:Integer, [-1,16,31]:Integer, [-1,16,40]:Float@double, [-1,16,48]:Integer, [-1,16,49]:Integer, [-1,16,50]:Integer, [-1,16,51]:Integer, [-1,16,52]:Integer, [-1,16,53]:Integer, [-1,16,54]:Integer, [-1,16,55]:Integer, [-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]:Float@float, [-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,48,0]:Pointer, [-1,48,0,0]:Pointer, [-1,48,0,0,0]:Pointer, [-1,48,0,0,0,0]:Pointer, [-1,48,0,0,0,8]:Pointer, [-1,48,0,0,0,16]:Integer, [-1,48,0,0,0,17]:Integer, [-1,48,0,0,0,18]:Integer, [-1,48,0,0,0,19]:Integer, [-1,48,0,0,0,20]:Integer, [-1,48,0,0,0,21]:Integer, [-1,48,0,0,0,22]:Integer, [-1,48,0,0,0,23]:Integer, [-1,48,0,0,0,24]:Integer, [-1,48,0,0,0,31]:Integer, [-1,48,0,0,0,40]:Float@double, [-1,48,0,0,0,48]:Integer, [-1,48,0,0,0,49]:Integer, [-1,48,0,0,0,50]:Integer, [-1,48,0,0,0,51]:Integer, [-1,48,0,0,0,52]:Integer, [-1,48,0,0,0,53]:Integer, [-1,48,0,0,0,54]:Integer, [-1,48,0,0,0,55]:Integer, [-1,48,0,0,8]:Pointer, [-1,48,0,0,8,0]:Integer, [-1,48,0,0,8,7]:Integer, [-1,48,0,0,8,16]:Float@double, [-1,48,0,0,8,24]:Integer, [-1,48,0,0,8,25]:Integer, [-1,48,0,0,8,26]:Integer, [-1,48,0,0,8,27]:Integer, [-1,48,0,0,8,28]:Integer, [-1,48,0,0,8,29]:Integer, [-1,48,0,0,8,30]:Integer, [-1,48,0,0,8,31]:Integer, [-1,48,0,0,16]:Integer, [-1,48,0,0,17]:Integer, [-1,48,0,0,18]:Integer, [-1,48,0,0,19]:Integer, [-1,48,0,0,20]:Integer, [-1,48,0,0,21]:Integer, [-1,48,0,0,22]:Integer, [-1,48,0,0,23]:Integer, [-1,48,0,0,24]:Integer, [-1,48,0,0,31]:Integer, [-1,48,0,0,40]:Float@double, [-1,48,0,0,48]:Integer, [-1,48,0,0,49]:Integer, [-1,48,0,0,50]:Integer, [-1,48,0,0,51]:Integer, [-1,48,0,0,52]:Integer, [-1,48,0,0,53]:Integer, [-1,48,0,0,54]:Integer, [-1,48,0,0,55]:Integer, [-1,48,0,8]:Pointer, [-1,48,0,8,0]:Integer, [-1,48,0,8,7]:Integer, [-1,48,0,8,16]:Float@double, [-1,48,0,8,24]:Integer, [-1,48,0,8,25]:Integer, [-1,48,0,8,26]:Integer, [-1,48,0,8,27]:Integer, [-1,48,0,8,28]:Integer, [-1,48,0,8,29]:Integer, [-1,48,0,8,30]:Integer, [-1,48,0,8,31]:Integer, [-1,48,0,16]:Integer, [-1,48,0,17]:Integer, [-1,48,0,18]:Integer, [-1,48,0,19]:Integer, [-1,48,0,20]:Integer, [-1,48,0,21]:Integer, [-1,48,0,22]:Integer, [-1,48,0,23]:Integer, [-1,48,0,24]:Integer, [-1,48,0,31]:Integer, [-1,48,0,40]:Float@double, [-1,48,0,48]:Integer, [-1,48,0,49]:Integer, [-1,48,0,50]:Integer, [-1,48,0,51]:Integer, [-1,48,0,52]:Integer, [-1,48,0,53]:Integer, [-1,48,0,54]:Integer, [-1,48,0,55]:Integer, [-1,48,8]:Pointer, [-1,48,8,0]:Integer, [-1,48,8,7]:Integer, [-1,48,8,16]:Float@double, [-1,48,8,24]:Integer, [-1,48,8,25]:Integer, [-1,48,8,26]:Integer, [-1,48,8,27]:Integer, [-1,48,8,28]:Integer, [-1,48,8,29]:Integer, [-1,48,8,30]:Integer, [-1,48,8,31]:Integer, [-1,48,16]:Integer, [-1,48,17]:Integer, [-1,48,18]:Integer, [-1,48,19]:Integer, [-1,48,20]:Integer, [-1,48,21]:Integer, [-1,48,22]:Integer, [-1,48,23]:Integer, [-1,48,24]:Integer, [-1,48,31]:Integer, [-1,48,40]:Float@double, [-1,48,48]:Integer, [-1,48,49]:Integer, [-1,48,50]:Integer, [-1,48,51]:Integer, [-1,48,52]:Integer, [-1,48,53]:Integer, [-1,48,54]:Integer, [-1,48,55]:Integer}, intvals: {} %3 = alloca %"class.std::__cxx11::basic_string", align 8: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,7]:Integer, [-1,8]:Integer, [-1,9]:Integer, [-1,10]:Integer, [-1,11]:Integer, [-1,12]:Integer, [-1,13]:Integer, [-1,14]:Integer, [-1,15]:Integer, [-1,23]:Integer}, intvals: {} %14 = load double, ptr %13, align 8, !dbg !3674, !tbaa !3675: {[-1]:Float@double}, intvals: {} %15 = load ptr, ptr %3, align 8, !dbg !3696, !tbaa !3697: {[-1]:Pointer, [-1,7]:Integer}, intvals: {} %20 = load ptr, ptr %19, align 8, !dbg !3766, !tbaa !3767: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,7]:Integer, [-1,0,8,16]:Float@double, [-1,0,8,24]:Integer, [-1,0,8,25]:Integer, [-1,0,8,26]:Integer, [-1,0,8,27]:Integer, [-1,0,8,28]:Integer, [-1,0,8,29]:Integer, [-1,0,8,30]:Integer, [-1,0,8,31]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,31]:Integer, [-1,0,40]:Float@double, [-1,0,48]:Integer, [-1,0,49]:Integer, [-1,0,50]:Integer, [-1,0,51]:Integer, [-1,0,52]:Integer, [-1,0,53]:Integer, [-1,0,54]:Integer, [-1,0,55]:Integer, [-1,8]:Pointer, [-1,8,0]:Integer, [-1,8,7]:Integer, [-1,8,16]:Float@double, [-1,8,24]:Integer, [-1,8,25]:Integer, [-1,8,26]:Integer, [-1,8,27]:Integer, [-1,8,28]:Integer, [-1,8,29]:Integer, [-1,8,30]:Integer, [-1,8,31]:Integer, [-1,16]:Integer, [-1,17]:Integer, [-1,18]:Integer, [-1,19]:Integer, [-1,20]:Integer, [-1,21]:Integer, [-1,22]:Integer, [-1,23]:Integer, [-1,24]:Integer, [-1,31]:Integer, [-1,40]:Float@double, [-1,48]:Integer, [-1,49]:Integer, [-1,50]:Integer, [-1,51]:Integer, [-1,52]:Integer, [-1,53]:Integer, [-1,54]:Integer, [-1,55]:Integer}, intvals: {} %40 = shl i64 %39, 3, !dbg !3933: {[-1]:Integer}, intvals: {} %16 = icmp eq ptr %15, %6, !dbg !3703: {[-1]:Integer}, intvals: {} call void @_ZdlPv(ptr noundef %41) #21, !dbg !4037: {}, intvals: {} %26 = add nuw nsw i64 %24, 1, !dbg !3783: {[-1]:Integer}, intvals: {1,} %29 = load ptr, ptr %28, align 8, !dbg !3861, !tbaa !3697: {[-1]:Pointer}, intvals: {} %21 = icmp eq ptr %20, null, !dbg !3781: {[-1]:Integer}, intvals: {} %25 = phi ptr [ %27, %33 ], [ %20, %22 ]: {[-1]:Pointer, [-1,0]:Pointer, [-1,8]:Pointer}, intvals: {} %9 = call ptr @_ZNKSt10_HashtableINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_dESaIS8_ENSt8__detail10_Select1stESt8equal_toIS5_ESt4hashIS5_ENSA_18_Mod_range_hashingENSA_20_Default_ranged_hashENSA_20_Prime_rehash_policyENSA_17_Hashtable_traitsILb1ELb0ELb1EEEE4findERS7_(ptr noundef nonnull align 8 dereferenceable(56) %2, ptr noundef nonnull align 8 dereferenceable(32) %3) #20, !dbg !3668: {[-1]:Pointer, [-1,40]:Float@double}, intvals: {} %42 = getelementptr inbounds %"class.std::_Hashtable", ptr %2, i64 0, i32 5, !dbg !3956: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,0,0]:Pointer, [-1,0,0,0,0,8]:Pointer, [-1,0,0,0,0,16]:Integer, [-1,0,0,0,0,17]:Integer, [-1,0,0,0,0,18]:Integer, [-1,0,0,0,0,19]:Integer, [-1,0,0,0,0,20]:Integer, [-1,0,0,0,0,21]:Integer, [-1,0,0,0,0,22]:Integer, [-1,0,0,0,0,23]:Integer, [-1,0,0,0,0,24]:Integer, [-1,0,0,0,0,31]:Integer, [-1,0,0,0,0,40]:Float@double, [-1,0,0,0,0,48]:Integer, [-1,0,0,0,0,49]:Integer, [-1,0,0,0,0,50]:Integer, [-1,0,0,0,0,51]:Integer, [-1,0,0,0,0,52]:Integer, [-1,0,0,0,0,53]:Integer, [-1,0,0,0,0,54]:Integer, [-1,0,0,0,0,55]:Integer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,8,0]:Integer, [-1,0,0,0,8,7]:Integer, [-1,0,0,0,8,16]:Float@double, [-1,0,0,0,8,24]:Integer, [-1,0,0,0,8,25]:Integer, [-1,0,0,0,8,26]:Integer, [-1,0,0,0,8,27]:Integer, [-1,0,0,0,8,28]:Integer, [-1,0,0,0,8,29]:Integer, [-1,0,0,0,8,30]:Integer, [-1,0,0,0,8,31]:Integer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,7]:Integer, [-1,0,8,16]:Float@double, [-1,0,8,24]:Integer, [-1,0,8,25]:Integer, [-1,0,8,26]:Integer, [-1,0,8,27]:Integer, [-1,0,8,28]:Integer, [-1,0,8,29]:Integer, [-1,0,8,30]:Integer, [-1,0,8,31]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,31]:Integer, [-1,0,40]:Float@double, [-1,0,48]:Integer, [-1,0,49]:Integer, [-1,0,50]:Integer, [-1,0,51]:Integer, [-1,0,52]:Integer, [-1,0,53]:Integer, [-1,0,54]:Integer, [-1,0,55]:Integer}, intvals: {} %43 = icmp eq ptr %42, %41, !dbg !3957: {[-1]:Integer}, intvals: {} %41 = load ptr, ptr %2, align 8, !dbg !3941, !tbaa !3930: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,7]:Integer, [-1,0,8,16]:Float@double, [-1,0,8,24]:Integer, [-1,0,8,25]:Integer, [-1,0,8,26]:Integer, [-1,0,8,27]:Integer, [-1,0,8,28]:Integer, [-1,0,8,29]:Integer, [-1,0,8,30]:Integer, [-1,0,8,31]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,31]:Integer, [-1,0,40]:Float@double, [-1,0,48]:Integer, [-1,0,49]:Integer, [-1,0,50]:Integer, [-1,0,51]:Integer, [-1,0,52]:Integer, [-1,0,53]:Integer, [-1,0,54]:Integer, [-1,0,55]:Integer}, intvals: {} %37 = load ptr, ptr %2, align 8, !dbg !3929, !tbaa !3930: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,7]:Integer, [-1,0,8,16]:Float@double, [-1,0,8,24]:Integer, [-1,0,8,25]:Integer, [-1,0,8,26]:Integer, [-1,0,8,27]:Integer, [-1,0,8,28]:Integer, [-1,0,8,29]:Integer, [-1,0,8,30]:Integer, [-1,0,8,31]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,31]:Integer, [-1,0,40]:Float@double, [-1,0,48]:Integer, [-1,0,49]:Integer, [-1,0,50]:Integer, [-1,0,51]:Integer, [-1,0,52]:Integer, [-1,0,53]:Integer, [-1,0,54]:Integer, [-1,0,55]:Integer}, intvals: {} %31 = icmp eq ptr %29, %30, !dbg !3865: {[-1]:Integer}, intvals: {} %34 = icmp eq ptr %27, null, !dbg !3781: {[-1]:Integer}, intvals: {} i8 95: {[-1]:Integer}, intvals: {95,} %30 = getelementptr inbounds i8, ptr %25, i64 24, !dbg !3864: {[-1]:Pointer}, intvals: {} i64 3: {[-1]:Integer}, intvals: {3,} i8 97: {[-1]:Integer}, intvals: {97,} ptr null: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {0,} i64 0: {[-1]:Anything}, intvals: {0,} i64 1: {[-1]:Integer}, intvals: {1,} %38 = getelementptr inbounds %"class.std::_Hashtable", ptr %2, i64 0, i32 1, !dbg !3931: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %7 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %3, i64 0, i32 1, !dbg !3636: {[-1]:Pointer, [-1,0]:Integer, [-1,1]:Integer, [-1,2]:Integer, [-1,3]:Integer, [-1,4]:Integer, [-1,5]:Integer, [-1,6]:Integer, [-1,7]:Integer}, intvals: {} %10 = icmp eq ptr %9, null, !dbg !3669: {[-1]:Integer}, intvals: {} [8 x i8] c"alpha_x\00": {[-1]:Anything}, intvals: {} @.str = private unnamed_addr constant [8 x i8] c"alpha_x\00", align 1, !dbg !0: {[-1]:Pointer, [-1,-1]:Anything}, intvals: {} %13 = getelementptr inbounds i8, ptr %9, i64 40, !dbg !3673: {[-1]:Pointer, [-1,0]:Float@double}, intvals: {} %6 = getelementptr inbounds %"class.std::__cxx11::basic_string", ptr %3, i64 0, i32 2, !dbg !3559: {[-1]:Pointer, [-1,7]:Integer}, intvals: {} i8 112: {[-1]:Integer}, intvals: {112,} i8 0: {[-1]:Integer}, intvals: {0,} i8 104: {[-1]:Integer}, intvals: {104,} %8 = getelementptr inbounds i8, ptr %3, i64 23, !dbg !3643: {[-1]:Pointer, [-1,0]:Integer}, intvals: {} call void @_Z28reduced_beam_characteristicsB5cxx11dd(ptr nonnull sret(%"class.std::unordered_map") align 8 %2, double noundef %4, double noundef %5) #20, !dbg !3537: {}, intvals: {} %5 = tail call double @log(double noundef %0) #21, !dbg !3534: {[-1]:Float@double}, intvals: {} %19 = getelementptr inbounds %"class.std::_Hashtable", ptr %2, i64 0, i32 2, !dbg !3765: {[-1]:Pointer, [-1,0]:Pointer, [-1,0,0]:Pointer, [-1,0,0,0]:Pointer, [-1,0,0,0,0]:Pointer, [-1,0,0,0,0,0]:Pointer, [-1,0,0,0,0,8]:Pointer, [-1,0,0,0,0,16]:Integer, [-1,0,0,0,0,17]:Integer, [-1,0,0,0,0,18]:Integer, [-1,0,0,0,0,19]:Integer, [-1,0,0,0,0,20]:Integer, [-1,0,0,0,0,21]:Integer, [-1,0,0,0,0,22]:Integer, [-1,0,0,0,0,23]:Integer, [-1,0,0,0,0,24]:Integer, [-1,0,0,0,0,31]:Integer, [-1,0,0,0,0,40]:Float@double, [-1,0,0,0,0,48]:Integer, [-1,0,0,0,0,49]:Integer, [-1,0,0,0,0,50]:Integer, [-1,0,0,0,0,51]:Integer, [-1,0,0,0,0,52]:Integer, [-1,0,0,0,0,53]:Integer, [-1,0,0,0,0,54]:Integer, [-1,0,0,0,0,55]:Integer, [-1,0,0,0,8]:Pointer, [-1,0,0,0,8,0]:Integer, [-1,0,0,0,8,7]:Integer, [-1,0,0,0,8,16]:Float@double, [-1,0,0,0,8,24]:Integer, [-1,0,0,0,8,25]:Integer, [-1,0,0,0,8,26]:Integer, [-1,0,0,0,8,27]:Integer, [-1,0,0,0,8,28]:Integer, [-1,0,0,0,8,29]:Integer, [-1,0,0,0,8,30]:Integer, [-1,0,0,0,8,31]:Integer, [-1,0,0,0,16]:Integer, [-1,0,0,0,17]:Integer, [-1,0,0,0,18]:Integer, [-1,0,0,0,19]:Integer, [-1,0,0,0,20]:Integer, [-1,0,0,0,21]:Integer, [-1,0,0,0,22]:Integer, [-1,0,0,0,23]:Integer, [-1,0,0,0,24]:Integer, [-1,0,0,0,31]:Integer, [-1,0,0,0,40]:Float@double, [-1,0,0,0,48]:Integer, [-1,0,0,0,49]:Integer, [-1,0,0,0,50]:Integer, [-1,0,0,0,51]:Integer, [-1,0,0,0,52]:Integer, [-1,0,0,0,53]:Integer, [-1,0,0,0,54]:Integer, [-1,0,0,0,55]:Integer, [-1,0,0,8]:Pointer, [-1,0,0,8,0]:Integer, [-1,0,0,8,7]:Integer, [-1,0,0,8,16]:Float@double, [-1,0,0,8,24]:Integer, [-1,0,0,8,25]:Integer, [-1,0,0,8,26]:Integer, [-1,0,0,8,27]:Integer, [-1,0,0,8,28]:Integer, [-1,0,0,8,29]:Integer, [-1,0,0,8,30]:Integer, [-1,0,0,8,31]:Integer, [-1,0,0,16]:Integer, [-1,0,0,17]:Integer, [-1,0,0,18]:Integer, [-1,0,0,19]:Integer, [-1,0,0,20]:Integer, [-1,0,0,21]:Integer, [-1,0,0,22]:Integer, [-1,0,0,23]:Integer, [-1,0,0,24]:Integer, [-1,0,0,31]:Integer, [-1,0,0,40]:Float@double, [-1,0,0,48]:Integer, [-1,0,0,49]:Integer, [-1,0,0,50]:Integer, [-1,0,0,51]:Integer, [-1,0,0,52]:Integer, [-1,0,0,53]:Integer, [-1,0,0,54]:Integer, [-1,0,0,55]:Integer, [-1,0,8]:Pointer, [-1,0,8,0]:Integer, [-1,0,8,7]:Integer, [-1,0,8,16]:Float@double, [-1,0,8,24]:Integer, [-1,0,8,25]:Integer, [-1,0,8,26]:Integer, [-1,0,8,27]:Integer, [-1,0,8,28]:Integer, [-1,0,8,29]:Integer, [-1,0,8,30]:Integer, [-1,0,8,31]:Integer, [-1,0,16]:Integer, [-1,0,17]:Integer, [-1,0,18]:Integer, [-1,0,19]:Integer, [-1,0,20]:Integer, [-1,0,21]:Integer, [-1,0,22]:Integer, [-1,0,23]:Integer, [-1,0,24]:Integer, [-1,0,31]:Integer, [-1,0,40]:Float@double, [-1,0,48]:Integer, [-1,0,49]:Integer, [-1,0,50]:Integer, [-1,0,51]:Integer, [-1,0,52]:Integer, [-1,0,53]:Integer, [-1,0,54]:Integer, [-1,0,55]:Integer}, intvals: {} i8 108: {[-1]:Integer}, intvals: {108,} i64 7: {[-1]:Integer}, intvals: {7,} i8 120: {[-1]:Integer}, intvals: {120,} %4 = tail call double @sqrt(double noundef %0) #21, !dbg !3533: {[-1]:Float@double}, intvals: {} return static_cast(__builtin_memcpy(__s1, __s2, __n)); ^ freeing without malloc %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709 freeing without malloc %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714 freeing without malloc %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714 freeing without malloc %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709 freeing without malloc %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714 freeing without malloc %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714 freeing without malloc %15 = load ptr, ptr %3, align 8, !dbg !3696, !tbaa !3697 freeing without malloc %29 = load ptr, ptr %28, align 8, !dbg !3861, !tbaa !3697 freeing without malloc %25 = phi ptr [ %27, %33 ], [ %20, %22 ] freeing without malloc %41 = load ptr, ptr %2, align 8, !dbg !3941, !tbaa !3930 1 error generated. Compiler returned: 1

Tried Alternative 1

I also tried rewriting to explicit:

double val = rbc.at("alpha_x");

return val;

which also fails to build.

Tried Alternative 2

I can rewrite to return a simpler data structure (e.g., a double) from reduced_beam_characteristics, but that does not work well for my needs here.

Tried Alternative 3

Adding -mllvm -enzyme-loose-types to my command line makes it compile, but likely to wrong code as it emits:

freeing without malloc   %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709
freeing without malloc   %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714
freeing without malloc   %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714
freeing without malloc   %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709
freeing without malloc   %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714
freeing without malloc   %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714
freeing without malloc   %15 = load ptr, ptr %3, align 8, !dbg !3696, !tbaa !3697
freeing without malloc   %29 = load ptr, ptr %28, align 8, !dbg !3861, !tbaa !3697
freeing without malloc   %25 = phi ptr [ %27, %33 ], [ %20, %22 ]
freeing without malloc   %41 = load ptr, ptr %2, align 8, !dbg !3941, !tbaa !3930
ASM generation compiler returned: 0
freeing without malloc   %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709
freeing without malloc   %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714
freeing without malloc   %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714
freeing without malloc   %50 = load ptr, ptr %0, align 8, !dbg !3703, !tbaa !3709
freeing without malloc   %16 = load ptr, ptr %4, align 8, !dbg !3713, !tbaa !3714
freeing without malloc   %25 = load ptr, ptr %5, align 8, !dbg !3797, !tbaa !3714
freeing without malloc   %15 = load ptr, ptr %3, align 8, !dbg !3696, !tbaa !3697
freeing without malloc   %29 = load ptr, ptr %28, align 8, !dbg !3861, !tbaa !3697
freeing without malloc   %25 = phi ptr [ %27, %33 ], [ %20, %22 ]
freeing without malloc   %41 = load ptr, ptr %2, align 8, !dbg !3941, !tbaa !3930
Execution build compiler returned: 0
Program returned: 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions