#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_class_OC_DummyStream {
  int dummy;
};

/* Variables and functions */
unsigned char *_ZnwmPv(unsigned long long, unsigned char *);
void _ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_(
    struct l_class_OC_DummyStream *llvm_cbe_this, unsigned int **llvm_cbe___p,
    unsigned int **llvm_cbe___val) {
  struct l_class_OC_DummyStream *llvm_cbe_this_2e_addr;
  unsigned int **llvm_cbe___p_2e_addr;
  unsigned int **llvm_cbe___val_2e_addr;
  struct l_class_OC_DummyStream *llvm_cbe_this1;
  unsigned int **llvm_cbe_tmp;
  unsigned char *llvm_cbe_call;
  unsigned int **llvm_cbe_tmp2;
  unsigned int *llvm_cbe_tmp3;
  *(&llvm_cbe_this_2e_addr) = llvm_cbe_this;
  *(&llvm_cbe___p_2e_addr) = llvm_cbe___p;
  *(&llvm_cbe___val_2e_addr) = llvm_cbe___val;
  llvm_cbe_this1 = *(&llvm_cbe_this_2e_addr);
  llvm_cbe_tmp = *(&llvm_cbe___p_2e_addr);
  llvm_cbe_call = _ZnwmPv(8ull, (((unsigned char *)llvm_cbe_tmp)));
  if ((llvm_cbe_call == ((unsigned char *)0))) {
    goto llvm_cbe_new_2e_end;
  } else {
    goto llvm_cbe_new_2e_notnull;
  }
llvm_cbe_new_2e_notnull:
  llvm_cbe_tmp2 = *(&llvm_cbe___val_2e_addr);
  llvm_cbe_tmp3 = *llvm_cbe_tmp2;
  *(((unsigned int **)llvm_cbe_call)) = llvm_cbe_tmp3;
  return;
llvm_cbe_new_2e_end:
  return;
}


x86 assembly (clang, -O0):
<_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rsi
mov    $0x8,%edi
call   1030 <_ZnwmPv@plt>
mov    %rax,-0x48(%rbp)
cmpq   $0x0,-0x48(%rbp)
jne    116e <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x5e>
jmp    1196 <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x86>
jmp    1173 <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x63>
mov    -0x30(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rcx
mov    -0x48(%rbp),%rax
mov    %rcx,(%rax)
jmp    119b <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x8b>
jmp    119b <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x8b>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_>:
push   %rbx
mov    %rdx,%rbx
mov    $0x8,%edi
call   1030 <_ZnwmPv@plt>
test   %rax,%rax
je     1129 <_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_+0x19>
mov    (%rbx),%rcx
mov    %rcx,(%rax)
pop    %rbx
ret

LLVM IR (-O0):
%struct.l_class_OC_DummyStream = type { i32 }
define void @_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_(%struct.l_class_OC_DummyStream* %0, i32** %1, i32** %2) {
%4 = alloca %struct.l_class_OC_DummyStream*
%5 = alloca i32**
%6 = alloca i32**
%7 = alloca %struct.l_class_OC_DummyStream*
%8 = alloca i32**
%9 = alloca i32**
%10 = alloca %struct.l_class_OC_DummyStream*
%11 = alloca i32**
%12 = alloca i8*
%13 = alloca i32**
%14 = alloca i32*
store %struct.l_class_OC_DummyStream* %0, %struct.l_class_OC_DummyStream** %4
store i32** %1, i32*** %5
store i32** %2, i32*** %6
%15 = load %struct.l_class_OC_DummyStream*, %struct.l_class_OC_DummyStream** %4
store %struct.l_class_OC_DummyStream* %15, %struct.l_class_OC_DummyStream** %7
%16 = load i32**, i32*** %5
store i32** %16, i32*** %8
%17 = load i32**, i32*** %6
store i32** %17, i32*** %9
%18 = load %struct.l_class_OC_DummyStream*, %struct.l_class_OC_DummyStream** %7
store %struct.l_class_OC_DummyStream* %18, %struct.l_class_OC_DummyStream** %10
%19 = load i32**, i32*** %8
store i32** %19, i32*** %11
%20 = load i32**, i32*** %11
%21 = bitcast i32** %20 to i8*
%22 = call i8* @_ZnwmPv(i64 8, i8* %21)
store i8* %22, i8** %12
%23 = load i8*, i8** %12
%24 = icmp eq i8* %23, null
br i1 %24, label %25, label %26
25: ; preds = %3
br label %34
26: ; preds = %3
br label %27
27: ; preds = %26
%28 = load i32**, i32*** %9
store i32** %28, i32*** %13
%29 = load i32**, i32*** %13
%30 = load i32*, i32** %29
store i32* %30, i32** %14
%31 = load i32*, i32** %14
%32 = load i8*, i8** %12
%33 = bitcast i8* %32 to i32**
store i32* %31, i32** %33
br label %35
34: ; preds = %25
br label %35
35: ; preds = %34, %27
ret void
}

LLVM IR (-O2):
%struct.l_class_OC_DummyStream = type { i32 }
define void @_ZN9__gnu_cxx13new_allocatorIPiE9constructEPS1_RKS1_(%struct.l_class_OC_DummyStream* nocapture readnone %0, i32** %1, i32** nocapture %2) {
%4 = bitcast i32** %1 to i8*
%5 = tail call i8* @_ZnwmPv(i64 8, i8* %4)
%6 = icmp eq i8* %5, null
br i1 %6, label %10, label %7
7: ; preds = %3
%8 = load i32*, i32** %2
%9 = bitcast i8* %5 to i32**
store i32* %8, i32** %9
br label %10
10: ; preds = %3, %7
ret void
}