long str$compare_multi(const struct dsc$descriptor_s *first_source_string,
                       const struct dsc$descriptor_s *second_source_string,
                       const unsigned long *flags,
                       const unsigned long *language) {
  unsigned long case_sensitive, character_set;
  char *s1_ptr, *s2_ptr;
  unsigned short s1_length, s2_length;
  unsigned short min_length;
  long result;
  case_sensitive = 1;
  if ((unsigned long)flags != 0) {
    switch (*flags) {
    case 0:
      case_sensitive = 1;
      break;
    case 1:
      case_sensitive = 0;
      break;
    default:
      result = 0x00158234;
      return result;
    }
  }
  character_set = 1;
  if ((unsigned long)language != 0) {
    switch (*language) {
    case 1:
      character_set = 1;
      break;
    case 2:
      character_set = 2;
      break;
    case 3:
      character_set = 3;
      break;
    case 4:
      character_set = 4;
      break;
    case 5:
      character_set = 5;
      break;
    case 6:
      character_set = 6;
      break;
    default:
      result = 0x00158234;
      return result;
    }
  }
  str$analyze_sdesc(first_source_string, &s1_length, &s1_ptr);
  str$analyze_sdesc(second_source_string, &s2_length, &s2_ptr);
  min_length = (s1_length < s2_length) ? s1_length : s2_length;
  if (min_length != 0)
    result = memcmp(s1_ptr, s2_ptr, min_length);
  if (result == 0) {
    if (s1_length < s2_length) {
      while ((min_length < s2_length) && (result == 0)) {
        if (s2_ptr[min_length++] != ' ') {
          result = -1;
        }
      }
    } else {
      if (s1_length > s2_length) {
        while ((min_length < s1_length) && (result == 0)) {
          if (s1_ptr[min_length++] != ' ')
            result = 1;
        }
      }
    }
  }
  if (result < -1) {
    result = -1;
  }
  if (result > 1) {
    result = 1;
  }
  return result;
}


x86 assembly (clang, -O0):
<str$compare_multi>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
movq   $0x1,-0x30(%rbp)
mov    -0x20(%rbp),%rax
cmp    $0x0,%rax
je     11ae <str$compare_multi+0x8e>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x60(%rbp)
test   %rax,%rax
je     117a <str$compare_multi+0x5a>
jmp    1167 <str$compare_multi+0x47>
mov    -0x60(%rbp),%rax
sub    $0x1,%rax
je     1187 <str$compare_multi+0x67>
jmp    1194 <str$compare_multi+0x74>
movq   $0x1,-0x30(%rbp)
jmp    11a9 <str$compare_multi+0x89>
movq   $0x0,-0x30(%rbp)
jmp    11a9 <str$compare_multi+0x89>
movq   $0x158234,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1406 <str$compare_multi+0x2e6>
jmp    11ae <str$compare_multi+0x8e>
movq   $0x1,-0x38(%rbp)
mov    -0x28(%rbp),%rax
cmp    $0x0,%rax
je     1259 <str$compare_multi+0x139>
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x68(%rbp)
sub    $0x5,%rax
ja     123f <str$compare_multi+0x11f>
mov    -0x68(%rbp),%rax
lea    0xe18(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movq   $0x1,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x2,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x3,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x4,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x5,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x6,-0x38(%rbp)
jmp    1254 <str$compare_multi+0x134>
movq   $0x158234,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    1406 <str$compare_multi+0x2e6>
jmp    1259 <str$compare_multi+0x139>
mov    -0x10(%rbp),%rdi
lea    -0x4a(%rbp),%rsi
lea    -0x40(%rbp),%rdx
mov    $0x0,%al
call   1030 <str$analyze_sdesc@plt>
mov    -0x18(%rbp),%rdi
lea    -0x4c(%rbp),%rsi
lea    -0x48(%rbp),%rdx
mov    $0x0,%al
call   1030 <str$analyze_sdesc@plt>
movzwl -0x4a(%rbp),%eax
movzwl -0x4c(%rbp),%ecx
cmp    %ecx,%eax
jge    129b <str$compare_multi+0x17b>
movzwl -0x4a(%rbp),%eax
mov    %eax,-0x6c(%rbp)
jmp    12a2 <str$compare_multi+0x182>
movzwl -0x4c(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %ax,-0x4e(%rbp)
movzwl -0x4e(%rbp),%eax
cmp    $0x0,%eax
je     12cf <str$compare_multi+0x1af>
mov    -0x40(%rbp),%rdi
mov    -0x48(%rbp),%rsi
movzwl -0x4e(%rbp),%eax
mov    %eax,%edx
call   1040 <memcmp@plt>
cltq
mov    %rax,-0x58(%rbp)
cmpq   $0x0,-0x58(%rbp)
jne    13d8 <str$compare_multi+0x2b8>
movzwl -0x4a(%rbp),%eax
movzwl -0x4c(%rbp),%ecx
cmp    %ecx,%eax
jge    1354 <str$compare_multi+0x234>
jmp    12ef <str$compare_multi+0x1cf>
movzwl -0x4e(%rbp),%ecx
movzwl -0x4c(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x6d(%rbp)
jge    130f <str$compare_multi+0x1ef>
cmpq   $0x0,-0x58(%rbp)
sete   %al
mov    %al,-0x6d(%rbp)
mov    -0x6d(%rbp),%al
test   $0x1,%al
jne    131f <str$compare_multi+0x1ff>
jmp    134f <str$compare_multi+0x22f>
mov    -0x48(%rbp),%rax
mov    -0x4e(%rbp),%cx
mov    %cx,%dx
add    $0x1,%dx
mov    %dx,-0x4e(%rbp)
movzwl %cx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     134a <str$compare_multi+0x22a>
movq   $0xffffffffffffffff,-0x58(%rbp)
ff
jmp    12ef <str$compare_multi+0x1cf>
jmp    13d3 <str$compare_multi+0x2b3>
movzwl -0x4a(%rbp),%eax
movzwl -0x4c(%rbp),%ecx
cmp    %ecx,%eax
jle    13ce <str$compare_multi+0x2ae>
jmp    1369 <str$compare_multi+0x249>
movzwl -0x4e(%rbp),%ecx
movzwl -0x4a(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x6e(%rbp)
jge    1389 <str$compare_multi+0x269>
cmpq   $0x0,-0x58(%rbp)
sete   %al
mov    %al,-0x6e(%rbp)
mov    -0x6e(%rbp),%al
test   $0x1,%al
jne    1399 <str$compare_multi+0x279>
jmp    13c9 <str$compare_multi+0x2a9>
mov    -0x40(%rbp),%rax
mov    -0x4e(%rbp),%cx
mov    %cx,%dx
add    $0x1,%dx
mov    %dx,-0x4e(%rbp)
movzwl %cx,%ecx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     13c4 <str$compare_multi+0x2a4>
movq   $0x1,-0x58(%rbp)
jmp    1369 <str$compare_multi+0x249>
jmp    13ce <str$compare_multi+0x2ae>
jmp    13d3 <str$compare_multi+0x2b3>
jmp    13d8 <str$compare_multi+0x2b8>
cmpq   $0xffffffffffffffff,-0x58(%rbp)
jge    13eb <str$compare_multi+0x2cb>
movq   $0xffffffffffffffff,-0x58(%rbp)
ff
cmpq   $0x1,-0x58(%rbp)
jle    13fe <str$compare_multi+0x2de>
movq   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<str$compare_multi>:
push   %r14
push   %rbx
sub    $0x18,%rsp
mov    %rsi,%rbx
test   %rdx,%rdx
je     113e <str$compare_multi+0x1e>
mov    $0x158234,%eax
cmpq   $0x1,(%rdx)
ja     124a <str$compare_multi+0x12a>
test   %rcx,%rcx
je     1159 <str$compare_multi+0x39>
mov    (%rcx),%rcx
add    $0xffffffffffffffff,%rcx
mov    $0x158234,%eax
cmp    $0x5,%rcx
ja     124a <str$compare_multi+0x12a>
lea    0x6(%rsp),%rsi
lea    0x10(%rsp),%rdx
xor    %eax,%eax
call   1030 <str$analyze_sdesc@plt>
lea    0x4(%rsp),%rsi
lea    0x8(%rsp),%rdx
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <str$analyze_sdesc@plt>
movzwl 0x6(%rsp),%ebx
movzwl 0x4(%rsp),%r14d
cmp    %r14w,%bx
mov    %r14d,%eax
cmovb  %ebx,%eax
test   %ax,%ax
je     11bc <str$compare_multi+0x9c>
mov    0x10(%rsp),%rdi
mov    0x8(%rsp),%rsi
movzwl %ax,%edx
call   1040 <memcmp@plt>
test   %eax,%eax
je     11bc <str$compare_multi+0x9c>
movslq %eax,%rcx
test   %rcx,%rcx
jns    123e <str$compare_multi+0x11e>
jmp    1206 <str$compare_multi+0xe6>
movzwl %bx,%eax
movzwl %r14w,%ecx
cmp    %cx,%ax
jae    120f <str$compare_multi+0xef>
mov    0x8(%rsp),%rdx
add    $0x1,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl -0x1(%rdx,%rax,1),%ebx
cmp    $0x20,%bl
jne    11f6 <str$compare_multi+0xd6>
lea    0x1(%rax),%rsi
cmp    %rcx,%rax
mov    %rsi,%rax
jb     11e0 <str$compare_multi+0xc0>
xor    %ecx,%ecx
cmp    $0x20,%bl
setne  %cl
neg    %rcx
test   %rcx,%rcx
jns    123e <str$compare_multi+0x11e>
mov    $0xffffffffffffffff,%rax
jmp    124a <str$compare_multi+0x12a>
cmp    %cx,%ax
jbe    1248 <str$compare_multi+0x128>
mov    0x10(%rsp),%rdx
add    $0x1,%rcx
nopl   (%rax)
movzbl -0x1(%rdx,%rcx,1),%ebx
cmp    $0x20,%bl
jne    1236 <str$compare_multi+0x116>
lea    0x1(%rcx),%rsi
cmp    %rax,%rcx
mov    %rsi,%rcx
jb     1220 <str$compare_multi+0x100>
xor    %ecx,%ecx
cmp    $0x20,%bl
setne  %cl
mov    $0x1,%eax
test   %rcx,%rcx
jne    124a <str$compare_multi+0x12a>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
%"struct.dsc$descriptor_s" = type opaque
define i64 @"str$compare_multi"(%"struct.dsc$descriptor_s"* %0, %"struct.dsc$descriptor_s"* %1, i64* %2, i64* %3) {
%5 = alloca i64
%6 = alloca %"struct.dsc$descriptor_s"*
%7 = alloca %"struct.dsc$descriptor_s"*
%8 = alloca i64*
%9 = alloca i64*
%10 = alloca i64
%11 = alloca i64
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i16
%15 = alloca i16
%16 = alloca i16
%17 = alloca i64
store %"struct.dsc$descriptor_s"* %0, %"struct.dsc$descriptor_s"** %6
store %"struct.dsc$descriptor_s"* %1, %"struct.dsc$descriptor_s"** %7
store i64* %2, i64** %8
store i64* %3, i64** %9
store i64 1, i64* %10
%18 = load i64*, i64** %8
%19 = ptrtoint i64* %18 to i64
%20 = icmp ne i64 %19, 0
br i1 %20, label %21, label %29
21: ; preds = %4
%22 = load i64*, i64** %8
%23 = load i64, i64* %22
switch i64 %23, label %26 [
i64 0, label %24
i64 1, label %25
]
24: ; preds = %21
store i64 1, i64* %10
br label %28
25: ; preds = %21
store i64 0, i64* %10
br label %28
26: ; preds = %21
store i64 1409588, i64* %17
%27 = load i64, i64* %17
store i64 %27, i64* %5
br label %149
28: ; preds = %25, %24
br label %29
29: ; preds = %28, %4
store i64 1, i64* %11
%30 = load i64*, i64** %9
%31 = ptrtoint i64* %30 to i64
%32 = icmp ne i64 %31, 0
br i1 %32, label %33, label %45
33: ; preds = %29
%34 = load i64*, i64** %9
%35 = load i64, i64* %34
switch i64 %35, label %42 [
i64 1, label %36
i64 2, label %37
i64 3, label %38
i64 4, label %39
i64 5, label %40
i64 6, label %41
]
36: ; preds = %33
store i64 1, i64* %11
br label %44
37: ; preds = %33
store i64 2, i64* %11
br label %44
38: ; preds = %33
store i64 3, i64* %11
br label %44
39: ; preds = %33
store i64 4, i64* %11
br label %44
40: ; preds = %33
store i64 5, i64* %11
br label %44
41: ; preds = %33
store i64 6, i64* %11
br label %44
42: ; preds = %33
store i64 1409588, i64* %17
%43 = load i64, i64* %17
store i64 %43, i64* %5
br label %149
44: ; preds = %41, %40, %39, %38, %37, %36
br label %45
45: ; preds = %44, %29
%46 = load %"struct.dsc$descriptor_s"*, %"struct.dsc$descriptor_s"** %6
%47 = call i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...) bitcast (i32 (...)* @"str$analyze_sdesc" to i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...)*)(%"struct.dsc$descriptor_s"* %46, i16* %14, i8** %12)
%48 = load %"struct.dsc$descriptor_s"*, %"struct.dsc$descriptor_s"** %7
%49 = call i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...) bitcast (i32 (...)* @"str$analyze_sdesc" to i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...)*)(%"struct.dsc$descriptor_s"* %48, i16* %15, i8** %13)
%50 = load i16, i16* %14
%51 = zext i16 %50 to i32
%52 = load i16, i16* %15
%53 = zext i16 %52 to i32
%54 = icmp slt i32 %51, %53
br i1 %54, label %55, label %58
55: ; preds = %45
%56 = load i16, i16* %14
%57 = zext i16 %56 to i32
br label %61
58: ; preds = %45
%59 = load i16, i16* %15
%60 = zext i16 %59 to i32
br label %61
61: ; preds = %58, %55
%62 = phi i32 [ %57, %55 ], [ %60, %58 ]
%63 = trunc i32 %62 to i16
store i16 %63, i16* %16
%64 = load i16, i16* %16
%65 = zext i16 %64 to i32
%66 = icmp ne i32 %65, 0
br i1 %66, label %67, label %74
67: ; preds = %61
%68 = load i8*, i8** %12
%69 = load i8*, i8** %13
%70 = load i16, i16* %16
%71 = zext i16 %70 to i64
%72 = call i32 @memcmp(i8* %68, i8* %69, i64 %71)
%73 = sext i32 %72 to i64
store i64 %73, i64* %17
br label %74
74: ; preds = %67, %61
%75 = load i64, i64* %17
%76 = icmp eq i64 %75, 0
br i1 %76, label %77, label %139
77: ; preds = %74
%78 = load i16, i16* %14
%79 = zext i16 %78 to i32
%80 = load i16, i16* %15
%81 = zext i16 %80 to i32
%82 = icmp slt i32 %79, %81
br i1 %82, label %83, label %107
83: ; preds = %77
br label %84
84: ; preds = %105, %83
%85 = load i16, i16* %16
%86 = zext i16 %85 to i32
%87 = load i16, i16* %15
%88 = zext i16 %87 to i32
%89 = icmp slt i32 %86, %88
br i1 %89, label %90, label %93
90: ; preds = %84
%91 = load i64, i64* %17
%92 = icmp eq i64 %91, 0
br label %93
93: ; preds = %90, %84
%94 = phi i1 [ false, %84 ], [ %92, %90 ]
br i1 %94, label %95, label %106
95: ; preds = %93
%96 = load i8*, i8** %13
%97 = load i16, i16* %16
%98 = add i16 %97, 1
store i16 %98, i16* %16
%99 = zext i16 %97 to i64
%100 = getelementptr inbounds i8, i8* %96, i64 %99
%101 = load i8, i8* %100
%102 = sext i8 %101 to i32
%103 = icmp ne i32 %102, 32
br i1 %103, label %104, label %105
104: ; preds = %95
store i64 -1, i64* %17
br label %105
105: ; preds = %104, %95
br label %84
106: ; preds = %93
br label %138
107: ; preds = %77
%108 = load i16, i16* %14
%109 = zext i16 %108 to i32
%110 = load i16, i16* %15
%111 = zext i16 %110 to i32
%112 = icmp sgt i32 %109, %111
br i1 %112, label %113, label %137
113: ; preds = %107
br label %114
114: ; preds = %135, %113
%115 = load i16, i16* %16
%116 = zext i16 %115 to i32
%117 = load i16, i16* %14
%118 = zext i16 %117 to i32
%119 = icmp slt i32 %116, %118
br i1 %119, label %120, label %123
120: ; preds = %114
%121 = load i64, i64* %17
%122 = icmp eq i64 %121, 0
br label %123
123: ; preds = %120, %114
%124 = phi i1 [ false, %114 ], [ %122, %120 ]
br i1 %124, label %125, label %136
125: ; preds = %123
%126 = load i8*, i8** %12
%127 = load i16, i16* %16
%128 = add i16 %127, 1
store i16 %128, i16* %16
%129 = zext i16 %127 to i64
%130 = getelementptr inbounds i8, i8* %126, i64 %129
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = icmp ne i32 %132, 32
br i1 %133, label %134, label %135
134: ; preds = %125
store i64 1, i64* %17
br label %135
135: ; preds = %134, %125
br label %114
136: ; preds = %123
br label %137
137: ; preds = %136, %107
br label %138
138: ; preds = %137, %106
br label %139
139: ; preds = %138, %74
%140 = load i64, i64* %17
%141 = icmp slt i64 %140, -1
br i1 %141, label %142, label %143
142: ; preds = %139
store i64 -1, i64* %17
br label %143
143: ; preds = %142, %139
%144 = load i64, i64* %17
%145 = icmp sgt i64 %144, 1
br i1 %145, label %146, label %147
146: ; preds = %143
store i64 1, i64* %17
br label %147
147: ; preds = %146, %143
%148 = load i64, i64* %17
store i64 %148, i64* %5
br label %149
149: ; preds = %147, %42, %26
%150 = load i64, i64* %5
ret i64 %150
}

LLVM IR (-O2):
%"struct.dsc$descriptor_s" = type opaque
define i64 @"str$compare_multi"(%"struct.dsc$descriptor_s"* %0, %"struct.dsc$descriptor_s"* %1, i64* %2, i64* %3) {
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i16
%8 = alloca i16
%9 = bitcast i8** %5 to i8*
%10 = bitcast i8** %6 to i8*
%11 = bitcast i16* %7 to i8*
%12 = bitcast i16* %8 to i8*
%13 = icmp eq i64* %2, null
br i1 %13, label %17, label %14
14: ; preds = %4
%15 = load i64, i64* %2
%16 = icmp ult i64 %15, 2
br i1 %16, label %17, label %77
17: ; preds = %14, %4
%18 = icmp eq i64* %3, null
br i1 %18, label %23, label %19
19: ; preds = %17
%20 = load i64, i64* %3
%21 = add i64 %20, -1
%22 = icmp ult i64 %21, 6
br i1 %22, label %23, label %77
23: ; preds = %19, %17
%24 = call i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...) bitcast (i32 (...)* @"str$analyze_sdesc" to i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...)*)(%"struct.dsc$descriptor_s"* %0, i16* %7, i8** %5)
%25 = call i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...) bitcast (i32 (...)* @"str$analyze_sdesc" to i32 (%"struct.dsc$descriptor_s"*, i16*, i8**, ...)*)(%"struct.dsc$descriptor_s"* %1, i16* %8, i8** %6)
%26 = load i16, i16* %7
%27 = load i16, i16* %8
%28 = icmp ult i16 %26, %27
%29 = select i1 %28, i16 %26, i16 %27
%30 = icmp eq i16 %29, 0
br i1 %30, label %38, label %31
31: ; preds = %23
%32 = load i8*, i8** %5
%33 = load i8*, i8** %6
%34 = zext i16 %29 to i64
%35 = call i32 @memcmp(i8* %32, i8* %33, i64 %34)
%36 = sext i32 %35 to i64
%37 = icmp eq i32 %35, 0
br i1 %37, label %38, label %67
38: ; preds = %23, %31
br i1 %28, label %39, label %51
39: ; preds = %38
%40 = load i8*, i8** %6
%41 = zext i16 %26 to i64
%42 = zext i16 %27 to i64
br label %43
43: ; preds = %39, %43
%44 = phi i64 [ %41, %39 ], [ %45, %43 ]
%45 = add nuw nsw i64 %44, 1
%46 = getelementptr inbounds i8, i8* %40, i64 %44
%47 = load i8, i8* %46
%48 = icmp ne i8 %47, 32
%49 = icmp uge i64 %45, %42
%50 = or i1 %48, %49
br i1 %50, label %65, label %43
51: ; preds = %38
%52 = icmp ugt i16 %26, %27
br i1 %52, label %53, label %75
53: ; preds = %51
%54 = load i8*, i8** %5
%55 = zext i16 %27 to i64
%56 = zext i16 %26 to i64
br label %57
57: ; preds = %53, %57
%58 = phi i64 [ %55, %53 ], [ %59, %57 ]
%59 = add nuw nsw i64 %58, 1
%60 = getelementptr inbounds i8, i8* %54, i64 %58
%61 = load i8, i8* %60
%62 = icmp ne i8 %61, 32
%63 = icmp uge i64 %59, %56
%64 = or i1 %62, %63
br i1 %64, label %70, label %57
65: ; preds = %43
%66 = sext i1 %48 to i64
br label %67
67: ; preds = %65, %31
%68 = phi i64 [ %36, %31 ], [ %66, %65 ]
%69 = icmp sgt i64 %68, -1
br i1 %69, label %72, label %75
70: ; preds = %57
%71 = zext i1 %62 to i64
br label %72
72: ; preds = %70, %67
%73 = phi i64 [ %68, %67 ], [ %71, %70 ]
%74 = icmp eq i64 %73, 0
br i1 %74, label %75, label %77
75: ; preds = %51, %67, %72
%76 = phi i64 [ 0, %72 ], [ -1, %67 ], [ 0, %51 ]
br label %77
77: ; preds = %75, %72, %19, %14
%78 = phi i64 [ 1409588, %14 ], [ 1409588, %19 ], [ %76, %75 ], [ 1, %72 ]
ret i64 %78
}