#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
struct l_struct_OC_std_KD__KD__Vector_base {
  int dummy;
};
struct l_class_OC_std_KD__KD_vector {
  int dummy;
};
struct l_class_OC_DummyStream {
  int dummy;
};

/* Variables and functions */
unsigned long long
_ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv(struct l_class_OC_DummyStream *);
struct l_class_OC_DummyStream *
_ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv(
    struct l_struct_OC_std_KD__KD__Vector_base *);
unsigned long long _ZNKSt6vectorIPiSaIS0_EE8max_sizeEv(
    struct l_class_OC_std_KD__KD_vector *llvm_cbe_this) {
  unsigned long long llvm_cbe_retval;
  struct l_class_OC_std_KD__KD_vector *llvm_cbe_this_2e_addr;
  struct l_class_OC_std_KD__KD_vector *llvm_cbe_this1;
  struct l_class_OC_DummyStream *llvm_cbe_call;
  unsigned long long llvm_cbe_call2;
  unsigned long long llvm_cbe_tmp__51;
  *(&llvm_cbe_this_2e_addr) = llvm_cbe_this;
  llvm_cbe_this1 = *(&llvm_cbe_this_2e_addr);
  llvm_cbe_call = _ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv(
      (((struct l_struct_OC_std_KD__KD__Vector_base *)llvm_cbe_this1)));
  llvm_cbe_call2 = _ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv(llvm_cbe_call);
  *(&llvm_cbe_retval) = llvm_cbe_call2;
  llvm_cbe_tmp__51 = *(&llvm_cbe_retval);
  return llvm_cbe_tmp__51;
}


x86 assembly (clang, -O0):
<_ZNKSt6vectorIPiSaIS0_EE8max_sizeEv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
call   1030 <_ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1040 <_ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_ZNKSt6vectorIPiSaIS0_EE8max_sizeEv>:
push   %rax
call   1030 <_ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv@plt>
mov    %rax,%rdi
pop    %rax
jmp    1040 <_ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv@plt>

LLVM IR (-O0):
%struct.l_class_OC_std_KD__KD_vector = type { i32 }
%struct.l_class_OC_DummyStream = type { i32 }
%struct.l_struct_OC_std_KD__KD__Vector_base = type { i32 }
define i64 @_ZNKSt6vectorIPiSaIS0_EE8max_sizeEv(%struct.l_class_OC_std_KD__KD_vector* %0) {
%2 = alloca %struct.l_class_OC_std_KD__KD_vector*
%3 = alloca i64
%4 = alloca %struct.l_class_OC_std_KD__KD_vector*
%5 = alloca %struct.l_class_OC_std_KD__KD_vector*
%6 = alloca %struct.l_class_OC_DummyStream*
%7 = alloca i64
%8 = alloca i64
store %struct.l_class_OC_std_KD__KD_vector* %0, %struct.l_class_OC_std_KD__KD_vector** %2
%9 = load %struct.l_class_OC_std_KD__KD_vector*, %struct.l_class_OC_std_KD__KD_vector** %2
store %struct.l_class_OC_std_KD__KD_vector* %9, %struct.l_class_OC_std_KD__KD_vector** %4
%10 = load %struct.l_class_OC_std_KD__KD_vector*, %struct.l_class_OC_std_KD__KD_vector** %4
store %struct.l_class_OC_std_KD__KD_vector* %10, %struct.l_class_OC_std_KD__KD_vector** %5
%11 = load %struct.l_class_OC_std_KD__KD_vector*, %struct.l_class_OC_std_KD__KD_vector** %5
%12 = bitcast %struct.l_class_OC_std_KD__KD_vector* %11 to %struct.l_struct_OC_std_KD__KD__Vector_base*
%13 = call %struct.l_class_OC_DummyStream* @_ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv(%struct.l_struct_OC_std_KD__KD__Vector_base* %12)
store %struct.l_class_OC_DummyStream* %13, %struct.l_class_OC_DummyStream** %6
%14 = load %struct.l_class_OC_DummyStream*, %struct.l_class_OC_DummyStream** %6
%15 = call i64 @_ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv(%struct.l_class_OC_DummyStream* %14)
store i64 %15, i64* %7
%16 = load i64, i64* %7
store i64 %16, i64* %3
%17 = load i64, i64* %3
store i64 %17, i64* %8
%18 = load i64, i64* %8
ret i64 %18
}

LLVM IR (-O2):
%struct.l_class_OC_std_KD__KD_vector = type { i32 }
%struct.l_struct_OC_std_KD__KD__Vector_base = type { i32 }
%struct.l_class_OC_DummyStream = type { i32 }
define i64 @_ZNKSt6vectorIPiSaIS0_EE8max_sizeEv(%struct.l_class_OC_std_KD__KD_vector* %0) {
%2 = bitcast %struct.l_class_OC_std_KD__KD_vector* %0 to %struct.l_struct_OC_std_KD__KD__Vector_base*
%3 = tail call %struct.l_class_OC_DummyStream* @_ZNKSt12_Vector_baseIPiSaIS0_EE19_M_get_Tp_allocatorEv(%struct.l_struct_OC_std_KD__KD__Vector_base* %2)
%4 = tail call i64 @_ZNK9__gnu_cxx13new_allocatorIPiE8max_sizeEv(%struct.l_class_OC_DummyStream* %3)
ret i64 %4
}