#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 */
typedef struct TYPE_11__ TYPE_4__;
typedef struct TYPE_10__ TYPE_3__;
typedef struct TYPE_9__ TYPE_2__;
typedef struct TYPE_8__ TYPE_1__;

/* Type definitions */
struct TYPE_11__ {
  scalar_t__ itype;
  int utype;
  int size;
  TYPE_3__ *funcs;
};
struct TYPE_10__ {
  int /*<<< orphan*/ (*prim_free)(int /*<<< orphan*/ **, TYPE_4__ const *);
  int /*<<< orphan*/ (*prim_clear)(int /*<<< orphan*/ **, TYPE_4__ const *);
};
struct TYPE_8__ {
  int /*<<< orphan*/ *asn1_value;
};
struct TYPE_9__ {
  int type;
  TYPE_1__ value;
};
typedef int /*<<< orphan*/ ASN1_VALUE;
typedef TYPE_2__ ASN1_TYPE;
typedef int /*<<< orphan*/ ASN1_STRING;
typedef TYPE_3__ ASN1_PRIMITIVE_FUNCS;
typedef int /*<<< orphan*/ ASN1_OBJECT;
typedef TYPE_4__ ASN1_ITEM;
typedef int ASN1_BOOLEAN;

/* Variables and functions */
scalar_t__ ASN1_ITYPE_MSTRING;
int /*<<< orphan*/ ASN1_OBJECT_free(int /*<<< orphan*/ *);
int /*<<< orphan*/ OPENSSL_free(int /*<<< orphan*/ *);
#define V_ASN1_ANY 131
#define V_ASN1_BOOLEAN 130
#define V_ASN1_NULL 129
#define V_ASN1_OBJECT 128
int /*<<< orphan*/ asn1_string_embed_free(int /*<<< orphan*/ *, int);
int /*<<< orphan*/ stub1(int /*<<< orphan*/ **, TYPE_4__ const *);
int /*<<< orphan*/ stub2(int /*<<< orphan*/ **, TYPE_4__ const *);
void asn1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed) {
  int utype;
  if (it) {
    const ASN1_PRIMITIVE_FUNCS *pf = it->funcs;
    if (embed) {
      if (pf && pf->prim_clear) {
        pf->prim_clear(pval, it);
        return;
      }
    } else if (pf && pf->prim_free) {
      pf->prim_free(pval, it);
      return;
    }
  }
  if (!it) {
    ASN1_TYPE *typ = (ASN1_TYPE *)*pval;
    utype = typ->type;
    pval = &typ->value.asn1_value;
    if (!*pval)
      return;
  } else if (it->itype == ASN1_ITYPE_MSTRING) {
    utype = -1;
    if (!*pval)
      return;
  } else {
    utype = it->utype;
    if ((utype != V_ASN1_BOOLEAN) && !*pval)
      return;
  }
  switch (utype) {
  case V_ASN1_OBJECT:
    ASN1_OBJECT_free((ASN1_OBJECT *)*pval);
    break;
  case V_ASN1_BOOLEAN:
    if (it)
      *(ASN1_BOOLEAN *)pval = it->size;
    else
      *(ASN1_BOOLEAN *)pval = -1;
    return;
  case V_ASN1_NULL:
    break;
  case V_ASN1_ANY:
    asn1_primitive_free(pval, NULL, 0);
    OPENSSL_free(*pval);
    break;
  default:
    asn1_string_embed_free((ASN1_STRING *)*pval, embed);
    break;
  }
  *pval = NULL;
}


x86 assembly (clang, -O0):
<asn1_primitive_free>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     11e3 <asn1_primitive_free+0xa3>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rax
mov    %rax,-0x20(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     11aa <asn1_primitive_free+0x6a>
cmpq   $0x0,-0x20(%rbp)
je     11a5 <asn1_primitive_free+0x65>
mov    -0x20(%rbp),%rax
cmpq   $0x0,0x8(%rax)
je     11a5 <asn1_primitive_free+0x65>
mov    -0x20(%rbp),%rax
mov    0x8(%rax),%rax
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   *%rax
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    11de <asn1_primitive_free+0x9e>
cmpq   $0x0,-0x20(%rbp)
je     11d9 <asn1_primitive_free+0x99>
mov    -0x20(%rbp),%rax
cmpq   $0x0,(%rax)
je     11d9 <asn1_primitive_free+0x99>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   *%rax
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    11de <asn1_primitive_free+0x9e>
jmp    11e3 <asn1_primitive_free+0xa3>
cmpq   $0x0,-0x10(%rbp)
jne    1226 <asn1_primitive_free+0xe6>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
cmpq   $0x0,(%rax)
jne    1221 <asn1_primitive_free+0xe1>
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    1290 <asn1_primitive_free+0x150>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    0x2dac(%rip),%rcx
cmp    (%rcx),%rax
jne    125c <asn1_primitive_free+0x11c>
movl   $0xffffffff,-0x18(%rbp)
mov    -0x8(%rbp),%rax
cmpq   $0x0,(%rax)
jne    1257 <asn1_primitive_free+0x117>
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    128b <asn1_primitive_free+0x14b>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x82,-0x18(%rbp)
je     1286 <asn1_primitive_free+0x146>
mov    -0x8(%rbp),%rax
cmpq   $0x0,(%rax)
jne    1286 <asn1_primitive_free+0x146>
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    128b <asn1_primitive_free+0x14b>
jmp    1290 <asn1_primitive_free+0x150>
mov    -0x18(%rbp),%eax
add    $0xffffff80,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x3,%eax
ja     131b <asn1_primitive_free+0x1db>
mov    -0x30(%rbp),%rax
lea    0xd50(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
mov    (%rax),%rdi
call   1040 <ASN1_OBJECT_free@plt>
jmp    132a <asn1_primitive_free+0x1ea>
cmpq   $0x0,-0x10(%rbp)
je     12e7 <asn1_primitive_free+0x1a7>
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
jmp    12f1 <asn1_primitive_free+0x1b1>
mov    -0x8(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    1335 <asn1_primitive_free+0x1f5>
jmp    132a <asn1_primitive_free+0x1ea>
mov    -0x8(%rbp),%rdi
xor    %eax,%eax
mov    %eax,%esi
xor    %edx,%edx
call   1060 <asn1_primitive_free@plt>
mov    -0x8(%rbp),%rax
mov    (%rax),%rdi
call   1050 <OPENSSL_free@plt>
jmp    132a <asn1_primitive_free+0x1ea>
mov    -0x8(%rbp),%rax
mov    (%rax),%rdi
mov    -0x14(%rbp),%esi
call   1030 <asn1_string_embed_free@plt>
mov    -0x8(%rbp),%rax
movq   $0x0,(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<asn1_primitive_free>:
push   %rbx
mov    %rdi,%rbx
test   %rsi,%rsi
je     1161 <asn1_primitive_free+0x21>
mov    0x10(%rsi),%rax
test   %edx,%edx
je     1192 <asn1_primitive_free+0x52>
test   %rax,%rax
je     11a5 <asn1_primitive_free+0x65>
mov    0x8(%rax),%rax
test   %rax,%rax
jne    119f <asn1_primitive_free+0x5f>
jmp    11a5 <asn1_primitive_free+0x65>
mov    (%rbx),%rbx
mov    0x8(%rbx),%rdi
test   %rdi,%rdi
je     11d7 <asn1_primitive_free+0x97>
mov    (%rbx),%eax
add    $0x8,%rbx
add    $0xffffff80,%eax
cmp    $0x3,%eax
ja     11bc <asn1_primitive_free+0x7c>
lea    0xe7e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
call   1040 <ASN1_OBJECT_free@plt>
jmp    11f9 <asn1_primitive_free+0xb9>
test   %rax,%rax
je     11a5 <asn1_primitive_free+0x65>
mov    (%rax),%rax
test   %rax,%rax
je     11a5 <asn1_primitive_free+0x65>
mov    %rbx,%rdi
pop    %rbx
jmp    *%rax
mov    (%rsi),%rax
mov    0x2e31(%rip),%rcx
cmp    (%rcx),%rax
jne    11c5 <asn1_primitive_free+0x85>
mov    (%rbx),%rdi
test   %rdi,%rdi
je     11d7 <asn1_primitive_free+0x97>
mov    %edx,%esi
call   1030 <asn1_string_embed_free@plt>
jmp    11f9 <asn1_primitive_free+0xb9>
mov    0x8(%rsi),%eax
cmp    $0x82,%eax
je     11de <asn1_primitive_free+0x9e>
mov    (%rbx),%rdi
test   %rdi,%rdi
jne    1173 <asn1_primitive_free+0x33>
pop    %rbx
ret
test   %rsi,%rsi
je     1202 <asn1_primitive_free+0xc2>
mov    0xc(%rsi),%eax
mov    %eax,(%rbx)
pop    %rbx
ret
mov    %rbx,%rdi
xor    %esi,%esi
xor    %edx,%edx
call   1060 <asn1_primitive_free@plt>
mov    (%rbx),%rdi
call   1050 <OPENSSL_free@plt>
movq   $0x0,(%rbx)
pop    %rbx
ret
movl   $0xffffffff,(%rbx)
pop    %rbx
ret

LLVM IR (-O0):
%struct.TYPE_11__ = type { i64, i32, i32, %struct.TYPE_10__* }
%struct.TYPE_10__ = type { i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)* }
%struct.TYPE_9__ = type { i32, %struct.TYPE_8__ }
%struct.TYPE_8__ = type { i32* }
@ASN1_ITYPE_MSTRING = global i64 0
define void @asn1_primitive_free(i32** %0, %struct.TYPE_11__* %1, i32 %2) {
%4 = alloca i32**
%5 = alloca %struct.TYPE_11__*
%6 = alloca i32
%7 = alloca i32
%8 = alloca %struct.TYPE_10__*
%9 = alloca %struct.TYPE_9__*
store i32** %0, i32*** %4
store %struct.TYPE_11__* %1, %struct.TYPE_11__** %5
store i32 %2, i32* %6
%10 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%11 = icmp ne %struct.TYPE_11__* %10, null
br i1 %11, label %12, label %51
12: ; preds = %3
%13 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%14 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %13, i32 0, i32 3
%15 = load %struct.TYPE_10__*, %struct.TYPE_10__** %14
store %struct.TYPE_10__* %15, %struct.TYPE_10__** %8
%16 = load i32, i32* %6
%17 = icmp ne i32 %16, 0
br i1 %17, label %18, label %34
18: ; preds = %12
%19 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%20 = icmp ne %struct.TYPE_10__* %19, null
br i1 %20, label %21, label %33
21: ; preds = %18
%22 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%23 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %22, i32 0, i32 1
%24 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %23
%25 = icmp ne i32 (i32**, %struct.TYPE_11__*)* %24, null
br i1 %25, label %26, label %33
26: ; preds = %21
%27 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%28 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %27, i32 0, i32 1
%29 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %28
%30 = load i32**, i32*** %4
%31 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%32 = call i32 %29(i32** %30, %struct.TYPE_11__* %31)
br label %126
33: ; preds = %21, %18
br label %50
34: ; preds = %12
%35 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%36 = icmp ne %struct.TYPE_10__* %35, null
br i1 %36, label %37, label %49
37: ; preds = %34
%38 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%39 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %38, i32 0, i32 0
%40 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %39
%41 = icmp ne i32 (i32**, %struct.TYPE_11__*)* %40, null
br i1 %41, label %42, label %49
42: ; preds = %37
%43 = load %struct.TYPE_10__*, %struct.TYPE_10__** %8
%44 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %43, i32 0, i32 0
%45 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %44
%46 = load i32**, i32*** %4
%47 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%48 = call i32 %45(i32** %46, %struct.TYPE_11__* %47)
br label %126
49: ; preds = %37, %34
br label %50
50: ; preds = %49, %33
br label %51
51: ; preds = %50, %3
%52 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%53 = icmp ne %struct.TYPE_11__* %52, null
br i1 %53, label %69, label %54
54: ; preds = %51
%55 = load i32**, i32*** %4
%56 = load i32*, i32** %55
%57 = bitcast i32* %56 to %struct.TYPE_9__*
store %struct.TYPE_9__* %57, %struct.TYPE_9__** %9
%58 = load %struct.TYPE_9__*, %struct.TYPE_9__** %9
%59 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %58, i32 0, i32 0
%60 = load i32, i32* %59
store i32 %60, i32* %7
%61 = load %struct.TYPE_9__*, %struct.TYPE_9__** %9
%62 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %61, i32 0, i32 1
%63 = getelementptr inbounds %struct.TYPE_8__, %struct.TYPE_8__* %62, i32 0, i32 0
store i32** %63, i32*** %4
%64 = load i32**, i32*** %4
%65 = load i32*, i32** %64
%66 = icmp ne i32* %65, null
br i1 %66, label %68, label %67
67: ; preds = %54
br label %126
68: ; preds = %54
br label %94
69: ; preds = %51
%70 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%71 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %70, i32 0, i32 0
%72 = load i64, i64* %71
%73 = load i64, i64* @ASN1_ITYPE_MSTRING
%74 = icmp eq i64 %72, %73
br i1 %74, label %75, label %81
75: ; preds = %69
store i32 -1, i32* %7
%76 = load i32**, i32*** %4
%77 = load i32*, i32** %76
%78 = icmp ne i32* %77, null
br i1 %78, label %80, label %79
79: ; preds = %75
br label %126
80: ; preds = %75
br label %93
81: ; preds = %69
%82 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%83 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %82, i32 0, i32 1
%84 = load i32, i32* %83
store i32 %84, i32* %7
%85 = load i32, i32* %7
%86 = icmp ne i32 %85, 130
br i1 %86, label %87, label %92
87: ; preds = %81
%88 = load i32**, i32*** %4
%89 = load i32*, i32** %88
%90 = icmp ne i32* %89, null
br i1 %90, label %92, label %91
91: ; preds = %87
br label %126
92: ; preds = %87, %81
br label %93
93: ; preds = %92, %80
br label %94
94: ; preds = %93, %68
%95 = load i32, i32* %7
switch i32 %95, label %119 [
i32 128, label %96
i32 130, label %100
i32 129, label %113
i32 131, label %114
]
96: ; preds = %94
%97 = load i32**, i32*** %4
%98 = load i32*, i32** %97
%99 = call i32 @ASN1_OBJECT_free(i32* %98)
br label %124
100: ; preds = %94
%101 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%102 = icmp ne %struct.TYPE_11__* %101, null
br i1 %102, label %103, label %109
103: ; preds = %100
%104 = load %struct.TYPE_11__*, %struct.TYPE_11__** %5
%105 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %104, i32 0, i32 2
%106 = load i32, i32* %105
%107 = load i32**, i32*** %4
%108 = bitcast i32** %107 to i32*
store i32 %106, i32* %108
br label %112
109: ; preds = %100
%110 = load i32**, i32*** %4
%111 = bitcast i32** %110 to i32*
store i32 -1, i32* %111
br label %112
112: ; preds = %109, %103
br label %126
113: ; preds = %94
br label %124
114: ; preds = %94
%115 = load i32**, i32*** %4
%116 = load i32**, i32*** %4
%117 = load i32*, i32** %116
%118 = call i32 @OPENSSL_free(i32* %117)
br label %124
119: ; preds = %94
%120 = load i32**, i32*** %4
%121 = load i32*, i32** %120
%122 = load i32, i32* %6
%123 = call i32 @asn1_string_embed_free(i32* %121, i32 %122)
br label %124
124: ; preds = %119, %114, %113, %96
%125 = load i32**, i32*** %4
store i32* null, i32** %125
br label %126
126: ; preds = %124, %112, %91, %79, %67, %42, %26
ret void
}

LLVM IR (-O2):
%struct.TYPE_11__ = type { i64, i32, i32, %struct.TYPE_10__* }
%struct.TYPE_10__ = type { i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)* }
%struct.TYPE_9__ = type { i32, %struct.TYPE_8__ }
%struct.TYPE_8__ = type { i32* }
@ASN1_ITYPE_MSTRING = global i64 0
define void @asn1_primitive_free(i32** %0, %struct.TYPE_11__* %1, i32 %2) {
%4 = icmp eq %struct.TYPE_11__* %1, null
br i1 %4, label %24, label %5
5: ; preds = %3
%6 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %1, i64 0, i32 3
%7 = load %struct.TYPE_10__*, %struct.TYPE_10__** %6
%8 = icmp eq i32 %2, 0
%9 = icmp eq %struct.TYPE_10__* %7, null
br i1 %8, label %17, label %10
10: ; preds = %5
br i1 %9, label %32, label %11
11: ; preds = %10
%12 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %7, i64 0, i32 1
%13 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %12
%14 = icmp eq i32 (i32**, %struct.TYPE_11__*)* %13, null
br i1 %14, label %32, label %15
15: ; preds = %11
%16 = tail call i32 %13(i32** %0, %struct.TYPE_11__* %1)
br label %70
17: ; preds = %5
br i1 %9, label %32, label %18
18: ; preds = %17
%19 = getelementptr inbounds %struct.TYPE_10__, %struct.TYPE_10__* %7, i64 0, i32 0
%20 = load i32 (i32**, %struct.TYPE_11__*)*, i32 (i32**, %struct.TYPE_11__*)** %19
%21 = icmp eq i32 (i32**, %struct.TYPE_11__*)* %20, null
br i1 %21, label %32, label %22
22: ; preds = %18
%23 = tail call i32 %20(i32** %0, %struct.TYPE_11__* %1)
br label %70
24: ; preds = %3
%25 = bitcast i32** %0 to %struct.TYPE_9__**
%26 = load %struct.TYPE_9__*, %struct.TYPE_9__** %25
%27 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %26, i64 0, i32 0
%28 = load i32, i32* %27
%29 = getelementptr inbounds %struct.TYPE_9__, %struct.TYPE_9__* %26, i64 0, i32 1, i32 0
%30 = load i32*, i32** %29
%31 = icmp eq i32* %30, null
br i1 %31, label %70, label %47
32: ; preds = %11, %10, %18, %17
%33 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %1, i64 0, i32 0
%34 = load i64, i64* %33
%35 = load i64, i64* @ASN1_ITYPE_MSTRING
%36 = icmp eq i64 %34, %35
br i1 %36, label %37, label %40
37: ; preds = %32
%38 = load i32*, i32** %0
%39 = icmp eq i32* %38, null
br i1 %39, label %70, label %64
40: ; preds = %32
%41 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %1, i64 0, i32 1
%42 = load i32, i32* %41
%43 = icmp eq i32 %42, 130
br i1 %43, label %54, label %44
44: ; preds = %40
%45 = load i32*, i32** %0
%46 = icmp eq i32* %45, null
br i1 %46, label %70, label %47
47: ; preds = %44, %24
%48 = phi i32* [ %45, %44 ], [ %30, %24 ]
%49 = phi i32 [ %42, %44 ], [ %28, %24 ]
%50 = phi i32** [ %0, %44 ], [ %29, %24 ]
switch i32 %49, label %64 [
i32 128, label %51
i32 130, label %53
i32 129, label %68
i32 131, label %61
]
51: ; preds = %47
%52 = tail call i32 @ASN1_OBJECT_free(i32* %48)
br label %68
53: ; preds = %47
br i1 %4, label %59, label %54
54: ; preds = %40, %53
%55 = phi i32** [ %50, %53 ], [ %0, %40 ]
%56 = getelementptr inbounds %struct.TYPE_11__, %struct.TYPE_11__* %1, i64 0, i32 2
%57 = load i32, i32* %56
%58 = bitcast i32** %55 to i32*
store i32 %57, i32* %58
br label %70
59: ; preds = %53
%60 = bitcast i32** %50 to i32*
store i32 -1, i32* %60
br label %70
61: ; preds = %47
tail call void @asn1_primitive_free(i32** %50, %struct.TYPE_11__* null, i32 0)
%62 = load i32*, i32** %50
%63 = tail call i32 @OPENSSL_free(i32* %62)
br label %68
64: ; preds = %37, %47
%65 = phi i32* [ %48, %47 ], [ %38, %37 ]
%66 = phi i32** [ %50, %47 ], [ %0, %37 ]
%67 = tail call i32 @asn1_string_embed_free(i32* %65, i32 %2)
br label %68
68: ; preds = %64, %61, %47, %51
%69 = phi i32** [ %66, %64 ], [ %50, %61 ], [ %50, %47 ], [ %50, %51 ]
store i32* null, i32** %69
br label %70
70: ; preds = %54, %59, %44, %37, %15, %22, %24, %68
ret void
}