#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 */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ scanf(char *, int *, int *, int *, int *);
int main() {
  int a, b, c, d;
  int largest;
  scanf("%d%d%d%d", &a, &b, &c, &d);
  if (a == b == c == d) {
    printf("The second largest number is %d", a);
  } else {
    if ((a > b) && (a > c) && (a > d)) {
      largest = a;
    }
    if ((b > a) && (b > c) && (b > d)) {
      largest = b;
    }
    if ((c > a) && (c > b) && (c > d)) {
      largest = c;
    }
    if ((d > a) && (d > c) && (d > b)) {
      largest = d;
    }
    if (largest == a) {
      if ((a == b) || (a == c) || (a == d))
        printf("The second largest number is %d", a);
      else if ((b > c) && (b > d))
        printf("The second largest number is %d", b);
      else if ((b == c) || (b == d))
        printf("The second largest number is %d", b);
      else if ((c > b) && (c > d))
        printf("The second largest number is %d", c);
      else if ((b == c) || (c == d))
        printf("The second largest number is %d", c);
      else if ((d > b) && (d > c))
        printf("The second largest number is %d", d);
    }
    if (largest == b) {
      if ((a > c) && (a > d))
        printf("The second largest number is %d", a);
      else if ((a == c) || (a == d))
        printf("The second largest number is %d", a);
      else if ((c > a) && (c > d))
        printf("The second largest number is %d", c);
      else if ((c == a) || (c == d))
        printf("The second largest number is %d", c);
      else if ((d > a) && (d > c))
        printf("The second largest number is %d", d);
    }
    if (largest == c) {
      if ((b > a) && (b > d))
        printf("The second largest number is %d", b);
      else if ((b == a) || (b == d))
        printf("The second largest number is %d", b);
      else if ((a > b) && (a > d))
        printf("The second largest number is %d", a);
      else if ((a == b) || (a == d))
        printf("The second largest number is %d", a);
      else if ((d > b) && (d > a))
        printf("The second largest number is %d", d);
    }
    if (largest == d) {
      if ((b > c) && (b > a))
        printf("The second largest number is %d", b);
      else if ((b == c) || (b == a))
        printf("The second largest number is %d", b);
      else if ((c > b) && (c > a))
        printf("The second largest number is %d", c);
      else if ((c == b) || (a == c))
        printf("The second largest number is %d", c);
      else if ((a > b) && (a > c))
        printf("The second largest number is %d", a);
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeca(%rip),%rdi
lea    -0x8(%rbp),%rsi
lea    -0xc(%rbp),%rdx
lea    -0x10(%rbp),%rcx
lea    -0x14(%rbp),%r8
call   1040 <scanf@plt>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
cmp    -0x10(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
cmp    -0x14(%rbp),%eax
jne    1181 <main+0x61>
mov    -0x8(%rbp),%esi
lea    0xe92(%rip),%rdi
call   1030 <printf@plt>
jmp    165b <main+0x53b>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    11ab <main+0x8b>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    11ab <main+0x8b>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    11ab <main+0x8b>
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    11d5 <main+0xb5>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    11d5 <main+0xb5>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    11d5 <main+0xb5>
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    11ff <main+0xdf>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    11ff <main+0xdf>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    11ff <main+0xdf>
mov    -0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1229 <main+0x109>
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    1229 <main+0x109>
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    1229 <main+0x109>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    1362 <main+0x242>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     1259 <main+0x139>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     1259 <main+0x139>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    126d <main+0x14d>
mov    -0x8(%rbp),%esi
lea    0xda6(%rip),%rdi
call   1030 <printf@plt>
jmp    135d <main+0x23d>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    1299 <main+0x179>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    1299 <main+0x179>
mov    -0xc(%rbp),%esi
lea    0xd7a(%rip),%rdi
call   1030 <printf@plt>
jmp    1358 <main+0x238>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     12b1 <main+0x191>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    12c5 <main+0x1a5>
mov    -0xc(%rbp),%esi
lea    0xd4e(%rip),%rdi
call   1030 <printf@plt>
jmp    1353 <main+0x233>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    12f1 <main+0x1d1>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    12f1 <main+0x1d1>
mov    -0x10(%rbp),%esi
lea    0xd22(%rip),%rdi
call   1030 <printf@plt>
jmp    134e <main+0x22e>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     1309 <main+0x1e9>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    131d <main+0x1fd>
mov    -0x10(%rbp),%esi
lea    0xcf6(%rip),%rdi
call   1030 <printf@plt>
jmp    1349 <main+0x229>
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    1344 <main+0x224>
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    1344 <main+0x224>
mov    -0x14(%rbp),%esi
lea    0xcca(%rip),%rdi
call   1030 <printf@plt>
jmp    1349 <main+0x229>
jmp    134e <main+0x22e>
jmp    1353 <main+0x233>
jmp    1358 <main+0x238>
jmp    135d <main+0x23d>
jmp    1362 <main+0x242>
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    145e <main+0x33e>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    139a <main+0x27a>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    139a <main+0x27a>
mov    -0x8(%rbp),%esi
lea    0xc79(%rip),%rdi
call   1030 <printf@plt>
jmp    1459 <main+0x339>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     13b2 <main+0x292>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    13c6 <main+0x2a6>
mov    -0x8(%rbp),%esi
lea    0xc4d(%rip),%rdi
call   1030 <printf@plt>
jmp    1454 <main+0x334>
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    13f2 <main+0x2d2>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    13f2 <main+0x2d2>
mov    -0x10(%rbp),%esi
lea    0xc21(%rip),%rdi
call   1030 <printf@plt>
jmp    144f <main+0x32f>
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
je     140a <main+0x2ea>
mov    -0x10(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    141e <main+0x2fe>
mov    -0x10(%rbp),%esi
lea    0xbf5(%rip),%rdi
call   1030 <printf@plt>
jmp    144a <main+0x32a>
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1445 <main+0x325>
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    1445 <main+0x325>
mov    -0x14(%rbp),%esi
lea    0xbc9(%rip),%rdi
call   1030 <printf@plt>
jmp    144a <main+0x32a>
jmp    144f <main+0x32f>
jmp    1454 <main+0x334>
jmp    1459 <main+0x339>
jmp    145e <main+0x33e>
mov    -0x18(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    155a <main+0x43a>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1496 <main+0x376>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    1496 <main+0x376>
mov    -0xc(%rbp),%esi
lea    0xb7d(%rip),%rdi
call   1030 <printf@plt>
jmp    1555 <main+0x435>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
je     14ae <main+0x38e>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    14c2 <main+0x3a2>
mov    -0xc(%rbp),%esi
lea    0xb51(%rip),%rdi
call   1030 <printf@plt>
jmp    1550 <main+0x430>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    14ee <main+0x3ce>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jle    14ee <main+0x3ce>
mov    -0x8(%rbp),%esi
lea    0xb25(%rip),%rdi
call   1030 <printf@plt>
jmp    154b <main+0x42b>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     1506 <main+0x3e6>
mov    -0x8(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    151a <main+0x3fa>
mov    -0x8(%rbp),%esi
lea    0xaf9(%rip),%rdi
call   1030 <printf@plt>
jmp    1546 <main+0x426>
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    1541 <main+0x421>
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1541 <main+0x421>
mov    -0x14(%rbp),%esi
lea    0xacd(%rip),%rdi
call   1030 <printf@plt>
jmp    1546 <main+0x426>
jmp    154b <main+0x42b>
jmp    1550 <main+0x430>
jmp    1555 <main+0x435>
jmp    155a <main+0x43a>
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1656 <main+0x536>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    1592 <main+0x472>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1592 <main+0x472>
mov    -0xc(%rbp),%esi
lea    0xa81(%rip),%rdi
call   1030 <printf@plt>
jmp    1651 <main+0x531>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
je     15aa <main+0x48a>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    15be <main+0x49e>
mov    -0xc(%rbp),%esi
lea    0xa55(%rip),%rdi
call   1030 <printf@plt>
jmp    164c <main+0x52c>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    15ea <main+0x4ca>
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    15ea <main+0x4ca>
mov    -0x10(%rbp),%esi
lea    0xa29(%rip),%rdi
call   1030 <printf@plt>
jmp    1647 <main+0x527>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     1602 <main+0x4e2>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    1616 <main+0x4f6>
mov    -0x10(%rbp),%esi
lea    0x9fd(%rip),%rdi
call   1030 <printf@plt>
jmp    1642 <main+0x522>
mov    -0x8(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    163d <main+0x51d>
mov    -0x8(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    163d <main+0x51d>
mov    -0x8(%rbp),%esi
lea    0x9d1(%rip),%rdi
call   1030 <printf@plt>
jmp    1642 <main+0x522>
jmp    1647 <main+0x527>
jmp    164c <main+0x52c>
jmp    1651 <main+0x531>
jmp    1656 <main+0x536>
jmp    165b <main+0x53b>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %rbx
sub    $0x18,%rsp
lea    0xed3(%rip),%rdi
lea    0x14(%rsp),%rsi
lea    0x10(%rsp),%rdx
lea    0xc(%rsp),%rcx
lea    0x8(%rsp),%r8
call   1040 <scanf@plt>
mov    0x14(%rsp),%esi
mov    0x10(%rsp),%eax
xor    %edx,%edx
cmp    %eax,%esi
sete   %dl
mov    0xc(%rsp),%ecx
xor    %edi,%edi
cmp    %edx,%ecx
sete   %dil
mov    0x8(%rsp),%edx
cmp    %edi,%edx
je     12d6 <main+0x1b6>
cmp    %edx,%eax
mov    %esi,%edi
cmovg  %eax,%edi
cmp    %ecx,%eax
cmovle %esi,%edi
cmp    %esi,%eax
cmovle %esi,%edi
cmp    %edx,%ecx
mov    %edi,%ebx
cmovg  %ecx,%ebx
cmp    %eax,%ecx
cmovle %edi,%ebx
cmp    %esi,%ecx
cmovle %edi,%ebx
cmp    %eax,%edx
mov    %ebx,%ebp
cmovg  %edx,%ebp
cmp    %ecx,%edx
cmovle %ebx,%ebp
cmp    %esi,%edx
cmovle %ebx,%ebp
cmp    %esi,%ebp
jne    11f6 <main+0xd6>
cmp    %eax,%esi
je     11ea <main+0xca>
cmp    %ecx,%esi
je     11ea <main+0xca>
cmp    %edx,%esi
je     11ea <main+0xca>
cmp    %ecx,%eax
jle    11b8 <main+0x98>
cmp    %edx,%eax
jg     11e8 <main+0xc8>
cmp    %ecx,%eax
je     11e8 <main+0xc8>
cmp    %edx,%eax
je     11e8 <main+0xc8>
cmp    %edx,%ecx
setg   %sil
cmp    %eax,%ecx
setg   %bl
test   %sil,%bl
jne    12fa <main+0x1da>
cmp    %edx,%ecx
je     12fa <main+0x1da>
cmp    %eax,%edx
jle    11f6 <main+0xd6>
mov    %edx,%esi
cmp    %ecx,%edx
jg     11ea <main+0xca>
jmp    11f6 <main+0xd6>
mov    %eax,%esi
lea    0xe18(%rip),%rdi
call   1030 <printf@plt>
cmp    0x10(%rsp),%ebp
jne    124a <main+0x12a>
mov    0x14(%rsp),%ecx
mov    0xc(%rsp),%eax
mov    0x8(%rsp),%esi
cmp    %eax,%ecx
jle    1210 <main+0xf0>
cmp    %esi,%ecx
jg     123c <main+0x11c>
cmp    %eax,%ecx
je     123c <main+0x11c>
cmp    %esi,%ecx
je     123c <main+0x11c>
cmp    %ecx,%eax
setg   %dl
cmp    %esi,%eax
setg   %bl
test   %bl,%dl
jne    12eb <main+0x1cb>
cmp    %esi,%eax
je     12eb <main+0x1cb>
cmp    %ecx,%esi
jle    124a <main+0x12a>
cmp    %eax,%esi
jg     123e <main+0x11e>
jmp    124a <main+0x12a>
mov    %ecx,%esi
lea    0xdc4(%rip),%rdi
call   1030 <printf@plt>
cmp    0xc(%rsp),%ebp
jne    1296 <main+0x176>
mov    0x10(%rsp),%ecx
mov    0x14(%rsp),%eax
mov    0x8(%rsp),%esi
cmp    %eax,%ecx
jle    1264 <main+0x144>
cmp    %esi,%ecx
jg     1288 <main+0x168>
cmp    %eax,%ecx
je     1288 <main+0x168>
cmp    %esi,%ecx
je     1288 <main+0x168>
cmp    %ecx,%eax
setg   %dl
cmp    %esi,%eax
setg   %bl
test   %bl,%dl
jne    12f2 <main+0x1d2>
cmp    %esi,%eax
je     12f2 <main+0x1d2>
cmp    %ecx,%esi
jle    1296 <main+0x176>
cmp    %eax,%esi
jg     128a <main+0x16a>
jmp    1296 <main+0x176>
mov    %ecx,%esi
lea    0xd78(%rip),%rdi
call   1030 <printf@plt>
cmp    0x8(%rsp),%ebp
jne    12e2 <main+0x1c2>
mov    0x10(%rsp),%ecx
mov    0xc(%rsp),%eax
mov    0x14(%rsp),%esi
cmp    %eax,%ecx
jle    12b0 <main+0x190>
cmp    %esi,%ecx
jg     12d4 <main+0x1b4>
cmp    %eax,%ecx
je     12d4 <main+0x1b4>
cmp    %esi,%ecx
je     12d4 <main+0x1b4>
cmp    %ecx,%eax
setg   %dl
cmp    %esi,%eax
setg   %bl
test   %bl,%dl
jne    12f6 <main+0x1d6>
cmp    %eax,%esi
je     12f6 <main+0x1d6>
cmp    %ecx,%esi
jle    12e2 <main+0x1c2>
cmp    %eax,%esi
jg     12d6 <main+0x1b6>
jmp    12e2 <main+0x1c2>
mov    %ecx,%esi
lea    0xd2c(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %rbp
ret
mov    %eax,%esi
jmp    123e <main+0x11e>
mov    %eax,%esi
jmp    128a <main+0x16a>
mov    %eax,%esi
jmp    12d6 <main+0x1b6>
mov    %ecx,%esi
jmp    11ea <main+0xca>

LLVM IR (-O0):
@.str = [9 x i8] c"%d%d%d%d\00"
@.str.1 = [32 x i8] c"The second largest number is %d\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 0, i32* %1
%7 = call i32 @scanf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %3, i32* %4, i32* %5)
%8 = load i32, i32* %2
%9 = load i32, i32* %3
%10 = icmp eq i32 %8, %9
%11 = zext i1 %10 to i32
%12 = load i32, i32* %4
%13 = icmp eq i32 %11, %12
%14 = zext i1 %13 to i32
%15 = load i32, i32* %5
%16 = icmp eq i32 %14, %15
br i1 %16, label %17, label %20
17: ; preds = %0
%18 = load i32, i32* %2
%19 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %18)
br label %349
20: ; preds = %0
%21 = load i32, i32* %2
%22 = load i32, i32* %3
%23 = icmp sgt i32 %21, %22
br i1 %23, label %24, label %34
24: ; preds = %20
%25 = load i32, i32* %2
%26 = load i32, i32* %4
%27 = icmp sgt i32 %25, %26
br i1 %27, label %28, label %34
28: ; preds = %24
%29 = load i32, i32* %2
%30 = load i32, i32* %5
%31 = icmp sgt i32 %29, %30
br i1 %31, label %32, label %34
32: ; preds = %28
%33 = load i32, i32* %2
store i32 %33, i32* %6
br label %34
34: ; preds = %32, %28, %24, %20
%35 = load i32, i32* %3
%36 = load i32, i32* %2
%37 = icmp sgt i32 %35, %36
br i1 %37, label %38, label %48
38: ; preds = %34
%39 = load i32, i32* %3
%40 = load i32, i32* %4
%41 = icmp sgt i32 %39, %40
br i1 %41, label %42, label %48
42: ; preds = %38
%43 = load i32, i32* %3
%44 = load i32, i32* %5
%45 = icmp sgt i32 %43, %44
br i1 %45, label %46, label %48
46: ; preds = %42
%47 = load i32, i32* %3
store i32 %47, i32* %6
br label %48
48: ; preds = %46, %42, %38, %34
%49 = load i32, i32* %4
%50 = load i32, i32* %2
%51 = icmp sgt i32 %49, %50
br i1 %51, label %52, label %62
52: ; preds = %48
%53 = load i32, i32* %4
%54 = load i32, i32* %3
%55 = icmp sgt i32 %53, %54
br i1 %55, label %56, label %62
56: ; preds = %52
%57 = load i32, i32* %4
%58 = load i32, i32* %5
%59 = icmp sgt i32 %57, %58
br i1 %59, label %60, label %62
60: ; preds = %56
%61 = load i32, i32* %4
store i32 %61, i32* %6
br label %62
62: ; preds = %60, %56, %52, %48
%63 = load i32, i32* %5
%64 = load i32, i32* %2
%65 = icmp sgt i32 %63, %64
br i1 %65, label %66, label %76
66: ; preds = %62
%67 = load i32, i32* %5
%68 = load i32, i32* %4
%69 = icmp sgt i32 %67, %68
br i1 %69, label %70, label %76
70: ; preds = %66
%71 = load i32, i32* %5
%72 = load i32, i32* %3
%73 = icmp sgt i32 %71, %72
br i1 %73, label %74, label %76
74: ; preds = %70
%75 = load i32, i32* %5
store i32 %75, i32* %6
br label %76
76: ; preds = %74, %70, %66, %62
%77 = load i32, i32* %6
%78 = load i32, i32* %2
%79 = icmp eq i32 %77, %78
br i1 %79, label %80, label %156
80: ; preds = %76
%81 = load i32, i32* %2
%82 = load i32, i32* %3
%83 = icmp eq i32 %81, %82
br i1 %83, label %92, label %84
84: ; preds = %80
%85 = load i32, i32* %2
%86 = load i32, i32* %4
%87 = icmp eq i32 %85, %86
br i1 %87, label %92, label %88
88: ; preds = %84
%89 = load i32, i32* %2
%90 = load i32, i32* %5
%91 = icmp eq i32 %89, %90
br i1 %91, label %92, label %95
92: ; preds = %88, %84, %80
%93 = load i32, i32* %2
%94 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %93)
br label %155
95: ; preds = %88
%96 = load i32, i32* %3
%97 = load i32, i32* %4
%98 = icmp sgt i32 %96, %97
br i1 %98, label %99, label %106
99: ; preds = %95
%100 = load i32, i32* %3
%101 = load i32, i32* %5
%102 = icmp sgt i32 %100, %101
br i1 %102, label %103, label %106
103: ; preds = %99
%104 = load i32, i32* %3
%105 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %104)
br label %154
106: ; preds = %99, %95
%107 = load i32, i32* %3
%108 = load i32, i32* %4
%109 = icmp eq i32 %107, %108
br i1 %109, label %114, label %110
110: ; preds = %106
%111 = load i32, i32* %3
%112 = load i32, i32* %5
%113 = icmp eq i32 %111, %112
br i1 %113, label %114, label %117
114: ; preds = %110, %106
%115 = load i32, i32* %3
%116 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %115)
br label %153
117: ; preds = %110
%118 = load i32, i32* %4
%119 = load i32, i32* %3
%120 = icmp sgt i32 %118, %119
br i1 %120, label %121, label %128
121: ; preds = %117
%122 = load i32, i32* %4
%123 = load i32, i32* %5
%124 = icmp sgt i32 %122, %123
br i1 %124, label %125, label %128
125: ; preds = %121
%126 = load i32, i32* %4
%127 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %126)
br label %152
128: ; preds = %121, %117
%129 = load i32, i32* %3
%130 = load i32, i32* %4
%131 = icmp eq i32 %129, %130
br i1 %131, label %136, label %132
132: ; preds = %128
%133 = load i32, i32* %4
%134 = load i32, i32* %5
%135 = icmp eq i32 %133, %134
br i1 %135, label %136, label %139
136: ; preds = %132, %128
%137 = load i32, i32* %4
%138 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %137)
br label %151
139: ; preds = %132
%140 = load i32, i32* %5
%141 = load i32, i32* %3
%142 = icmp sgt i32 %140, %141
br i1 %142, label %143, label %150
143: ; preds = %139
%144 = load i32, i32* %5
%145 = load i32, i32* %4
%146 = icmp sgt i32 %144, %145
br i1 %146, label %147, label %150
147: ; preds = %143
%148 = load i32, i32* %5
%149 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %148)
br label %150
150: ; preds = %147, %143, %139
br label %151
151: ; preds = %150, %136
br label %152
152: ; preds = %151, %125
br label %153
153: ; preds = %152, %114
br label %154
154: ; preds = %153, %103
br label %155
155: ; preds = %154, %92
br label %156
156: ; preds = %155, %76
%157 = load i32, i32* %6
%158 = load i32, i32* %3
%159 = icmp eq i32 %157, %158
br i1 %159, label %160, label %220
160: ; preds = %156
%161 = load i32, i32* %2
%162 = load i32, i32* %4
%163 = icmp sgt i32 %161, %162
br i1 %163, label %164, label %171
164: ; preds = %160
%165 = load i32, i32* %2
%166 = load i32, i32* %5
%167 = icmp sgt i32 %165, %166
br i1 %167, label %168, label %171
168: ; preds = %164
%169 = load i32, i32* %2
%170 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %169)
br label %219
171: ; preds = %164, %160
%172 = load i32, i32* %2
%173 = load i32, i32* %4
%174 = icmp eq i32 %172, %173
br i1 %174, label %179, label %175
175: ; preds = %171
%176 = load i32, i32* %2
%177 = load i32, i32* %5
%178 = icmp eq i32 %176, %177
br i1 %178, label %179, label %182
179: ; preds = %175, %171
%180 = load i32, i32* %2
%181 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %180)
br label %218
182: ; preds = %175
%183 = load i32, i32* %4
%184 = load i32, i32* %2
%185 = icmp sgt i32 %183, %184
br i1 %185, label %186, label %193
186: ; preds = %182
%187 = load i32, i32* %4
%188 = load i32, i32* %5
%189 = icmp sgt i32 %187, %188
br i1 %189, label %190, label %193
190: ; preds = %186
%191 = load i32, i32* %4
%192 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %191)
br label %217
193: ; preds = %186, %182
%194 = load i32, i32* %4
%195 = load i32, i32* %2
%196 = icmp eq i32 %194, %195
br i1 %196, label %201, label %197
197: ; preds = %193
%198 = load i32, i32* %4
%199 = load i32, i32* %5
%200 = icmp eq i32 %198, %199
br i1 %200, label %201, label %204
201: ; preds = %197, %193
%202 = load i32, i32* %4
%203 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %202)
br label %216
204: ; preds = %197
%205 = load i32, i32* %5
%206 = load i32, i32* %2
%207 = icmp sgt i32 %205, %206
br i1 %207, label %208, label %215
208: ; preds = %204
%209 = load i32, i32* %5
%210 = load i32, i32* %4
%211 = icmp sgt i32 %209, %210
br i1 %211, label %212, label %215
212: ; preds = %208
%213 = load i32, i32* %5
%214 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %213)
br label %215
215: ; preds = %212, %208, %204
br label %216
216: ; preds = %215, %201
br label %217
217: ; preds = %216, %190
br label %218
218: ; preds = %217, %179
br label %219
219: ; preds = %218, %168
br label %220
220: ; preds = %219, %156
%221 = load i32, i32* %6
%222 = load i32, i32* %4
%223 = icmp eq i32 %221, %222
br i1 %223, label %224, label %284
224: ; preds = %220
%225 = load i32, i32* %3
%226 = load i32, i32* %2
%227 = icmp sgt i32 %225, %226
br i1 %227, label %228, label %235
228: ; preds = %224
%229 = load i32, i32* %3
%230 = load i32, i32* %5
%231 = icmp sgt i32 %229, %230
br i1 %231, label %232, label %235
232: ; preds = %228
%233 = load i32, i32* %3
%234 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %233)
br label %283
235: ; preds = %228, %224
%236 = load i32, i32* %3
%237 = load i32, i32* %2
%238 = icmp eq i32 %236, %237
br i1 %238, label %243, label %239
239: ; preds = %235
%240 = load i32, i32* %3
%241 = load i32, i32* %5
%242 = icmp eq i32 %240, %241
br i1 %242, label %243, label %246
243: ; preds = %239, %235
%244 = load i32, i32* %3
%245 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %244)
br label %282
246: ; preds = %239
%247 = load i32, i32* %2
%248 = load i32, i32* %3
%249 = icmp sgt i32 %247, %248
br i1 %249, label %250, label %257
250: ; preds = %246
%251 = load i32, i32* %2
%252 = load i32, i32* %5
%253 = icmp sgt i32 %251, %252
br i1 %253, label %254, label %257
254: ; preds = %250
%255 = load i32, i32* %2
%256 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %255)
br label %281
257: ; preds = %250, %246
%258 = load i32, i32* %2
%259 = load i32, i32* %3
%260 = icmp eq i32 %258, %259
br i1 %260, label %265, label %261
261: ; preds = %257
%262 = load i32, i32* %2
%263 = load i32, i32* %5
%264 = icmp eq i32 %262, %263
br i1 %264, label %265, label %268
265: ; preds = %261, %257
%266 = load i32, i32* %2
%267 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %266)
br label %280
268: ; preds = %261
%269 = load i32, i32* %5
%270 = load i32, i32* %3
%271 = icmp sgt i32 %269, %270
br i1 %271, label %272, label %279
272: ; preds = %268
%273 = load i32, i32* %5
%274 = load i32, i32* %2
%275 = icmp sgt i32 %273, %274
br i1 %275, label %276, label %279
276: ; preds = %272
%277 = load i32, i32* %5
%278 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %277)
br label %279
279: ; preds = %276, %272, %268
br label %280
280: ; preds = %279, %265
br label %281
281: ; preds = %280, %254
br label %282
282: ; preds = %281, %243
br label %283
283: ; preds = %282, %232
br label %284
284: ; preds = %283, %220
%285 = load i32, i32* %6
%286 = load i32, i32* %5
%287 = icmp eq i32 %285, %286
br i1 %287, label %288, label %348
288: ; preds = %284
%289 = load i32, i32* %3
%290 = load i32, i32* %4
%291 = icmp sgt i32 %289, %290
br i1 %291, label %292, label %299
292: ; preds = %288
%293 = load i32, i32* %3
%294 = load i32, i32* %2
%295 = icmp sgt i32 %293, %294
br i1 %295, label %296, label %299
296: ; preds = %292
%297 = load i32, i32* %3
%298 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %297)
br label %347
299: ; preds = %292, %288
%300 = load i32, i32* %3
%301 = load i32, i32* %4
%302 = icmp eq i32 %300, %301
br i1 %302, label %307, label %303
303: ; preds = %299
%304 = load i32, i32* %3
%305 = load i32, i32* %2
%306 = icmp eq i32 %304, %305
br i1 %306, label %307, label %310
307: ; preds = %303, %299
%308 = load i32, i32* %3
%309 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %308)
br label %346
310: ; preds = %303
%311 = load i32, i32* %4
%312 = load i32, i32* %3
%313 = icmp sgt i32 %311, %312
br i1 %313, label %314, label %321
314: ; preds = %310
%315 = load i32, i32* %4
%316 = load i32, i32* %2
%317 = icmp sgt i32 %315, %316
br i1 %317, label %318, label %321
318: ; preds = %314
%319 = load i32, i32* %4
%320 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %319)
br label %345
321: ; preds = %314, %310
%322 = load i32, i32* %4
%323 = load i32, i32* %3
%324 = icmp eq i32 %322, %323
br i1 %324, label %329, label %325
325: ; preds = %321
%326 = load i32, i32* %2
%327 = load i32, i32* %4
%328 = icmp eq i32 %326, %327
br i1 %328, label %329, label %332
329: ; preds = %325, %321
%330 = load i32, i32* %4
%331 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %330)
br label %344
332: ; preds = %325
%333 = load i32, i32* %2
%334 = load i32, i32* %3
%335 = icmp sgt i32 %333, %334
br i1 %335, label %336, label %343
336: ; preds = %332
%337 = load i32, i32* %2
%338 = load i32, i32* %4
%339 = icmp sgt i32 %337, %338
br i1 %339, label %340, label %343
340: ; preds = %336
%341 = load i32, i32* %2
%342 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %341)
br label %343
343: ; preds = %340, %336, %332
br label %344
344: ; preds = %343, %329
br label %345
345: ; preds = %344, %318
br label %346
346: ; preds = %345, %307
br label %347
347: ; preds = %346, %296
br label %348
348: ; preds = %347, %284
br label %349
349: ; preds = %348, %17
ret i32 0
}

LLVM IR (-O2):
@.str = [9 x i8] c"%d%d%d%d\00"
@.str.1 = [32 x i8] c"The second largest number is %d\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = bitcast i32* %1 to i8*
%6 = bitcast i32* %2 to i8*
%7 = bitcast i32* %3 to i8*
%8 = bitcast i32* %4 to i8*
%9 = call i32 @scanf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32* %1, i32* %2, i32* %3, i32* %4)
%10 = load i32, i32* %1
%11 = load i32, i32* %2
%12 = icmp eq i32 %10, %11
%13 = zext i1 %12 to i32
%14 = load i32, i32* %3
%15 = icmp eq i32 %14, %13
%16 = zext i1 %15 to i32
%17 = load i32, i32* %4
%18 = icmp eq i32 %17, %16
br i1 %18, label %137, label %19
19: ; preds = %0
%20 = icmp sgt i32 %11, %10
%21 = icmp sgt i32 %11, %14
%22 = select i1 %20, i1 %21, i1 false
%23 = icmp sgt i32 %11, %17
%24 = select i1 %22, i1 %23, i1 false
%25 = select i1 %24, i32 %11, i32 %10
%26 = icmp sgt i32 %14, %10
%27 = icmp sgt i32 %14, %11
%28 = select i1 %26, i1 %27, i1 false
%29 = icmp sgt i32 %14, %17
%30 = select i1 %28, i1 %29, i1 false
%31 = select i1 %30, i32 %14, i32 %25
%32 = icmp sgt i32 %17, %10
%33 = icmp sgt i32 %17, %14
%34 = select i1 %32, i1 %33, i1 false
%35 = icmp sgt i32 %17, %11
%36 = select i1 %34, i1 %35, i1 false
%37 = select i1 %36, i32 %17, i32 %31
%38 = icmp eq i32 %37, %10
br i1 %38, label %39, label %59
39: ; preds = %19
%40 = icmp eq i32 %10, %14
%41 = select i1 %12, i1 true, i1 %40
%42 = icmp eq i32 %10, %17
%43 = select i1 %41, i1 true, i1 %42
br i1 %43, label %56, label %44
44: ; preds = %39
%45 = select i1 %21, i1 %23, i1 false
br i1 %45, label %56, label %46
46: ; preds = %44
%47 = icmp eq i32 %11, %14
%48 = icmp eq i32 %11, %17
%49 = select i1 %47, i1 true, i1 %48
br i1 %49, label %56, label %50
50: ; preds = %46
%51 = select i1 %27, i1 %29, i1 false
%52 = icmp eq i32 %14, %17
%53 = select i1 %51, i1 true, i1 %52
br i1 %53, label %56, label %54
54: ; preds = %50
%55 = select i1 %35, i1 %33, i1 false
br i1 %55, label %56, label %59
56: ; preds = %54, %50, %46, %44, %39
%57 = phi i32 [ %10, %39 ], [ %11, %44 ], [ %11, %46 ], [ %14, %50 ], [ %17, %54 ]
%58 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %57)
br label %59
59: ; preds = %56, %54, %19
%60 = load i32, i32* %2
%61 = icmp eq i32 %37, %60
br i1 %61, label %62, label %86
62: ; preds = %59
%63 = load i32, i32* %1
%64 = load i32, i32* %3
%65 = icmp sgt i32 %63, %64
%66 = load i32, i32* %4
%67 = icmp sgt i32 %63, %66
%68 = select i1 %65, i1 %67, i1 false
br i1 %68, label %83, label %69
69: ; preds = %62
%70 = icmp eq i32 %63, %64
%71 = icmp eq i32 %63, %66
%72 = select i1 %70, i1 true, i1 %71
br i1 %72, label %83, label %73
73: ; preds = %69
%74 = icmp sgt i32 %64, %63
%75 = icmp sgt i32 %64, %66
%76 = select i1 %74, i1 %75, i1 false
%77 = icmp eq i32 %64, %66
%78 = select i1 %76, i1 true, i1 %77
br i1 %78, label %83, label %79
79: ; preds = %73
%80 = icmp sgt i32 %66, %63
%81 = icmp sgt i32 %66, %64
%82 = select i1 %80, i1 %81, i1 false
br i1 %82, label %83, label %86
83: ; preds = %79, %73, %69, %62
%84 = phi i32 [ %63, %62 ], [ %63, %69 ], [ %64, %73 ], [ %66, %79 ]
%85 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %84)
br label %86
86: ; preds = %83, %79, %59
%87 = load i32, i32* %3
%88 = icmp eq i32 %37, %87
br i1 %88, label %89, label %113
89: ; preds = %86
%90 = load i32, i32* %2
%91 = load i32, i32* %1
%92 = icmp sgt i32 %90, %91
%93 = load i32, i32* %4
%94 = icmp sgt i32 %90, %93
%95 = select i1 %92, i1 %94, i1 false
br i1 %95, label %110, label %96
96: ; preds = %89
%97 = icmp eq i32 %90, %91
%98 = icmp eq i32 %90, %93
%99 = select i1 %97, i1 true, i1 %98
br i1 %99, label %110, label %100
100: ; preds = %96
%101 = icmp sgt i32 %91, %90
%102 = icmp sgt i32 %91, %93
%103 = select i1 %101, i1 %102, i1 false
%104 = icmp eq i32 %91, %93
%105 = select i1 %103, i1 true, i1 %104
br i1 %105, label %110, label %106
106: ; preds = %100
%107 = icmp sgt i32 %93, %90
%108 = icmp sgt i32 %93, %91
%109 = select i1 %107, i1 %108, i1 false
br i1 %109, label %110, label %113
110: ; preds = %106, %100, %96, %89
%111 = phi i32 [ %90, %89 ], [ %90, %96 ], [ %91, %100 ], [ %93, %106 ]
%112 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %111)
br label %113
113: ; preds = %110, %106, %86
%114 = load i32, i32* %4
%115 = icmp eq i32 %37, %114
br i1 %115, label %116, label %140
116: ; preds = %113
%117 = load i32, i32* %2
%118 = load i32, i32* %3
%119 = icmp sgt i32 %117, %118
%120 = load i32, i32* %1
%121 = icmp sgt i32 %117, %120
%122 = select i1 %119, i1 %121, i1 false
br i1 %122, label %137, label %123
123: ; preds = %116
%124 = icmp eq i32 %117, %118
%125 = icmp eq i32 %117, %120
%126 = select i1 %124, i1 true, i1 %125
br i1 %126, label %137, label %127
127: ; preds = %123
%128 = icmp sgt i32 %118, %117
%129 = icmp sgt i32 %118, %120
%130 = select i1 %128, i1 %129, i1 false
%131 = icmp eq i32 %120, %118
%132 = select i1 %130, i1 true, i1 %131
br i1 %132, label %137, label %133
133: ; preds = %127
%134 = icmp sgt i32 %120, %117
%135 = icmp sgt i32 %120, %118
%136 = select i1 %134, i1 %135, i1 false
br i1 %136, label %137, label %140
137: ; preds = %133, %127, %123, %116, %0
%138 = phi i32 [ %10, %0 ], [ %117, %116 ], [ %117, %123 ], [ %118, %127 ], [ %120, %133 ]
%139 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.1, i64 0, i64 0), i32 %138)
br label %140
140: ; preds = %137, %113, %133
ret i32 0
}