int max_of_four(int a, int b, int c, int d) {
  return ((a) >= (((b) >= (((c) >= (d)) ? (c) : (d)))
                      ? (b)
                      : (((c) >= (d)) ? (c) : (d))))
             ? (a)
             : (((b) >= (((c) >= (d)) ? (c) : (d)))
                    ? (b)
                    : (((c) >= (d)) ? (c) : (d)));
}


x86 assembly (clang, -O0):
<max_of_four>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     1133 <max_of_four+0x33>
mov    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    1139 <max_of_four+0x39>
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jl     1152 <max_of_four+0x52>
mov    -0x8(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1175 <max_of_four+0x75>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     1169 <max_of_four+0x69>
mov    -0xc(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    116f <max_of_four+0x6f>
mov    -0x10(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x20(%rbp),%ecx
cmp    %ecx,%eax
jl     118e <max_of_four+0x8e>
mov    -0x4(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    11f3 <max_of_four+0xf3>
mov    -0x8(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     11ab <max_of_four+0xab>
mov    -0xc(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    11b1 <max_of_four+0xb1>
mov    -0x10(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
cmp    %ecx,%eax
jl     11ca <max_of_four+0xca>
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    11ed <max_of_four+0xed>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jl     11e1 <max_of_four+0xe1>
mov    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    11e7 <max_of_four+0xe7>
mov    -0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<max_of_four>:
mov    %edx,%eax
cmp    %ecx,%edx
cmovl  %ecx,%eax
cmp    %esi,%eax
cmovle %esi,%eax
cmp    %edi,%eax
cmovle %edi,%eax
ret

LLVM IR (-O0):
define i32 @max_of_four(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%9 = load i32, i32* %5
%10 = load i32, i32* %6
%11 = load i32, i32* %7
%12 = load i32, i32* %8
%13 = icmp sge i32 %11, %12
br i1 %13, label %14, label %16
14: ; preds = %4
%15 = load i32, i32* %7
br label %18
16: ; preds = %4
%17 = load i32, i32* %8
br label %18
18: ; preds = %16, %14
%19 = phi i32 [ %15, %14 ], [ %17, %16 ]
%20 = icmp sge i32 %10, %19
br i1 %20, label %21, label %23
21: ; preds = %18
%22 = load i32, i32* %6
br label %33
23: ; preds = %18
%24 = load i32, i32* %7
%25 = load i32, i32* %8
%26 = icmp sge i32 %24, %25
br i1 %26, label %27, label %29
27: ; preds = %23
%28 = load i32, i32* %7
br label %31
29: ; preds = %23
%30 = load i32, i32* %8
br label %31
31: ; preds = %29, %27
%32 = phi i32 [ %28, %27 ], [ %30, %29 ]
br label %33
33: ; preds = %31, %21
%34 = phi i32 [ %22, %21 ], [ %32, %31 ]
%35 = icmp sge i32 %9, %34
br i1 %35, label %36, label %38
36: ; preds = %33
%37 = load i32, i32* %5
br label %64
38: ; preds = %33
%39 = load i32, i32* %6
%40 = load i32, i32* %7
%41 = load i32, i32* %8
%42 = icmp sge i32 %40, %41
br i1 %42, label %43, label %45
43: ; preds = %38
%44 = load i32, i32* %7
br label %47
45: ; preds = %38
%46 = load i32, i32* %8
br label %47
47: ; preds = %45, %43
%48 = phi i32 [ %44, %43 ], [ %46, %45 ]
%49 = icmp sge i32 %39, %48
br i1 %49, label %50, label %52
50: ; preds = %47
%51 = load i32, i32* %6
br label %62
52: ; preds = %47
%53 = load i32, i32* %7
%54 = load i32, i32* %8
%55 = icmp sge i32 %53, %54
br i1 %55, label %56, label %58
56: ; preds = %52
%57 = load i32, i32* %7
br label %60
58: ; preds = %52
%59 = load i32, i32* %8
br label %60
60: ; preds = %58, %56
%61 = phi i32 [ %57, %56 ], [ %59, %58 ]
br label %62
62: ; preds = %60, %50
%63 = phi i32 [ %51, %50 ], [ %61, %60 ]
br label %64
64: ; preds = %62, %36
%65 = phi i32 [ %37, %36 ], [ %63, %62 ]
ret i32 %65
}

LLVM IR (-O2):
define i32 @max_of_four(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = icmp slt i32 %2, %3
%6 = select i1 %5, i32 %3, i32 %2
%7 = icmp sgt i32 %6, %1
%8 = select i1 %7, i32 %6, i32 %1
%9 = icmp sgt i32 %8, %0
%10 = select i1 %9, i32 %8, i32 %0
ret i32 %10
}