#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);
int main() {
  double a, b, c, d;
  double fracn, fracd, sumn, sumd;
  sumn = sumd = 1;
  for (a = 1; a < 10; a++) {
    for (b = 1; b < 10; b++) {
      for (c = 1; c < (a + 1); c++) {
        for (d = 1; d < 10; d++) {
          fracd = (a * 10) + b;
          fracn = (c * 10) + d;
          if (fracd <= fracn)
            break;
          if (a == c)
            if (fracn / fracd == d / b) {
              sumn *= b;
              sumd *= d;
            }
          if (a == d)
            if (fracn / fracd == c / b) {
              sumn *= b;
              sumd *= c;
            }
          if (b == c)
            if (fracn / fracd == d / a) {
              sumn *= a;
              sumd *= d;
            }
          if (b == d)
            if (fracn / fracd == c / a) {
              sumn *= a;
              sumd *= c;
            }
        }
      }
    }
  }
  printf("%d / %d\n", (int)sumd, (int)sumn);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
movsd  0xed9(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xecc(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xeba(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    13fd <main+0x2ed>
movsd  0xe9f(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe9a(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    13e1 <main+0x2d1>
movsd  0xe7f(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xe6d(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13c5 <main+0x2b5>
movsd  0xe56(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe51(%rip),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    13a9 <main+0x299>
movsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xe34(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xe15(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1219 <main+0x109>
jmp    13a9 <main+0x299>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jne    1276 <main+0x166>
jp     1276 <main+0x166>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
divsd  -0x18(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jne    1271 <main+0x161>
jp     1271 <main+0x161>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1276 <main+0x166>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jne    12d3 <main+0x1c3>
jp     12d3 <main+0x1c3>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
divsd  -0x18(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jne    12ce <main+0x1be>
jp     12ce <main+0x1be>
movsd  -0x18(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    12d3 <main+0x1c3>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jne    1330 <main+0x220>
jp     1330 <main+0x220>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
divsd  -0x10(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jne    132b <main+0x21b>
jp     132b <main+0x21b>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1330 <main+0x220>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jne    138d <main+0x27d>
jp     138d <main+0x27d>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
divsd  -0x10(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jne    1388 <main+0x278>
jp     1388 <main+0x278>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    138d <main+0x27d>
jmp    1392 <main+0x282>
movsd  0xc66(%rip),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    11af <main+0x9f>
jmp    13ae <main+0x29e>
movsd  0xc4a(%rip),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
jmp    1186 <main+0x76>
jmp    13ca <main+0x2ba>
movsd  0xc2e(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
jmp    1166 <main+0x56>
jmp    13e6 <main+0x2d6>
movsd  0xc12(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    1146 <main+0x36>
cvttsd2si -0x48(%rbp),%esi
cvttsd2si -0x40(%rbp),%edx
lea    0xc02(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x48,%rsp
mov    $0x1,%r8d
movsd  0xedd(%rip),%xmm10
movapd %xmm10,%xmm1
movapd %xmm10,%xmm2
movapd %xmm10,%xmm11
jmp    1153 <main+0x43>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm10,%xmm11
add    $0x1,%r8d
cmp    $0xa,%r8d
je     133b <main+0x22b>
movapd %xmm11,%xmm0
addsd  %xmm10,%xmm0
movapd %xmm0,(%rsp)
movapd %xmm10,%xmm9
mov    $0x1,%r10d
jmp    117f <main+0x6f>
nop
addsd  %xmm10,%xmm9
add    $0x1,%r10d
cmp    $0xa,%r10d
je     1140 <main+0x30>
movapd (%rsp),%xmm0
ucomisd %xmm10,%xmm0
jbe    1170 <main+0x60>
movapd %xmm11,%xmm0
mulsd  0xe70(%rip),%xmm0
addsd  %xmm9,%xmm0
movapd %xmm11,%xmm3
unpcklpd %xmm9,%xmm3
movapd %xmm3,0x10(%rsp)
movapd %xmm0,0x30(%rsp)
unpcklpd %xmm11,%xmm0
movapd %xmm0,0x20(%rsp)
movapd %xmm10,%xmm13
jmp    11e1 <main+0xd1>
cs nopw 0x0(%rax,%rax,1)
nop
addsd  %xmm10,%xmm13
movapd (%rsp),%xmm0
ucomisd %xmm13,%xmm0
jbe    1170 <main+0x60>
movapd %xmm13,%xmm8
unpcklpd %xmm13,%xmm8
divpd  0x10(%rsp),%xmm8
mov    $0x1,%esi
jmp    122b <main+0x11b>
nopl   0x0(%rax)
mulsd  %xmm14,%xmm2
mulsd  %xmm5,%xmm2
mulsd  %xmm15,%xmm2
mulsd  %xmm12,%xmm2
mulsd  %xmm3,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm7,%xmm1
add    $0x1,%esi
cmp    $0xa,%esi
je     11d0 <main+0xc0>
xorps  %xmm7,%xmm7
cvtsi2sd %esi,%xmm7
movapd %xmm13,%xmm6
mulsd  0xdc9(%rip),%xmm6
addsd  %xmm7,%xmm6
ucomisd 0x30(%rsp),%xmm6
jae    11d0 <main+0xc0>
ucomisd %xmm9,%xmm13
setnp  %cl
sete   %r9b
and    %cl,%r9b
ucomisd %xmm11,%xmm13
setnp  %cl
sete   %al
and    %cl,%al
movapd %xmm7,%xmm3
divsd  %xmm9,%xmm3
unpcklpd %xmm7,%xmm6
divpd  0x20(%rsp),%xmm6
ucomisd %xmm3,%xmm6
setnp  %cl
sete   %dl
and    %cl,%dl
movapd %xmm9,%xmm14
test   %dl,%al
jne    1294 <main+0x184>
movapd %xmm10,%xmm14
movapd %xmm7,%xmm3
jne    129f <main+0x18f>
movapd %xmm10,%xmm3
ucomisd %xmm7,%xmm11
setnp  %al
sete   %cl
and    %al,%cl
movapd %xmm6,%xmm4
unpcklpd %xmm6,%xmm4
cmpeqpd %xmm8,%xmm4
movmskpd %xmm4,%edi
mov    %edi,%eax
shr    %al
movapd %xmm9,%xmm5
test   %al,%cl
jne    12d0 <main+0x1c0>
movapd %xmm10,%xmm5
movapd %xmm13,%xmm4
jne    12dc <main+0x1cc>
movapd %xmm10,%xmm4
movapd %xmm6,%xmm0
unpckhpd %xmm6,%xmm0
ucomisd %xmm0,%xmm6
setnp  %al
sete   %cl
and    %al,%cl
movapd %xmm11,%xmm15
test   %cl,%r9b
jne    12ff <main+0x1ef>
movapd %xmm10,%xmm15
movapd %xmm7,%xmm0
jne    130a <main+0x1fa>
movapd %xmm10,%xmm0
ucomisd %xmm7,%xmm9
setnp  %al
sete   %cl
and    %al,%cl
movapd %xmm11,%xmm12
test   %dil,%cl
jne    1326 <main+0x216>
movapd %xmm10,%xmm12
movapd %xmm13,%xmm7
jne    1200 <main+0xf0>
movapd %xmm10,%xmm7
jmp    1200 <main+0xf0>
cvttsd2si %xmm1,%esi
cvttsd2si %xmm2,%edx
lea    0xcc6(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x48,%rsp
ret

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

LLVM IR (-O2):
@.str = [9 x i8] c"%d / %d\0A\00"
define i32 @main() {
br label %1
1: ; preds = %0, %82
%2 = phi double [ 1.000000e+00, %0 ], [ %79, %82 ]
%3 = phi double [ 1.000000e+00, %0 ], [ %78, %82 ]
%4 = phi i32 [ 1, %0 ], [ %83, %82 ]
%5 = sitofp i32 %4 to double
%6 = fadd double %5, 1.000000e+00
%7 = fcmp ogt double %6, 1.000000e+00
%8 = insertelement <2 x double> poison, double %5, i64 0
br label %9
9: ; preds = %1, %77
%10 = phi double [ %2, %1 ], [ %79, %77 ]
%11 = phi double [ %3, %1 ], [ %78, %77 ]
%12 = phi i32 [ 1, %1 ], [ %80, %77 ]
%13 = sitofp i32 %12 to double
br i1 %7, label %14, label %77
14: ; preds = %9
%15 = tail call double @llvm.fmuladd.f64(double %5, double 1.000000e+01, double %13)
%16 = insertelement <2 x double> %8, double %13, i64 1
%17 = insertelement <2 x double> poison, double %15, i64 0
%18 = insertelement <2 x double> %17, double %5, i64 1
br label %19
19: ; preds = %14, %72
%20 = phi double [ %10, %14 ], [ %74, %72 ]
%21 = phi double [ %11, %14 ], [ %73, %72 ]
%22 = phi double [ 1.000000e+00, %14 ], [ %75, %72 ]
%23 = fcmp oeq double %22, %5
%24 = fcmp oeq double %22, %13
%25 = insertelement <2 x double> poison, double %22, i64 0
%26 = shufflevector <2 x double> %25, <2 x double> poison, <2 x i32> zeroinitializer
%27 = fdiv <2 x double> %26, %16
br label %28
28: ; preds = %19, %35
%29 = phi double [ %20, %19 ], [ %69, %35 ]
%30 = phi double [ %21, %19 ], [ %67, %35 ]
%31 = phi i32 [ 1, %19 ], [ %70, %35 ]
%32 = sitofp i32 %31 to double
%33 = tail call double @llvm.fmuladd.f64(double %22, double 1.000000e+01, double %32)
%34 = fcmp ugt double %15, %33
br i1 %34, label %35, label %72
35: ; preds = %28
%36 = fdiv double %32, %13
%37 = insertelement <2 x double> poison, double %33, i64 0
%38 = insertelement <2 x double> %37, double %32, i64 1
%39 = fdiv <2 x double> %38, %18
%40 = extractelement <2 x double> %39, i64 0
%41 = fcmp oeq double %40, %36
%42 = select i1 %23, i1 %41, i1 false
%43 = select i1 %42, double %13, double 1.000000e+00
%44 = fmul double %30, %43
%45 = select i1 %42, double %32, double 1.000000e+00
%46 = fmul double %29, %45
%47 = fcmp oeq double %5, %32
%48 = shufflevector <2 x double> %39, <2 x double> undef, <2 x i32> zeroinitializer
%49 = fcmp oeq <2 x double> %48, %27
%50 = extractelement <2 x i1> %49, i64 1
%51 = select i1 %47, i1 %50, i1 false
%52 = select i1 %51, double %13, double 1.000000e+00
%53 = fmul double %44, %52
%54 = select i1 %51, double %22, double 1.000000e+00
%55 = fmul double %46, %54
%56 = extractelement <2 x double> %39, i64 1
%57 = fcmp oeq double %40, %56
%58 = select i1 %24, i1 %57, i1 false
%59 = select i1 %58, double %5, double 1.000000e+00
%60 = fmul double %53, %59
%61 = select i1 %58, double %32, double 1.000000e+00
%62 = fmul double %55, %61
%63 = fcmp oeq double %13, %32
%64 = extractelement <2 x i1> %49, i64 0
%65 = select i1 %63, i1 %64, i1 false
%66 = select i1 %65, double %5, double 1.000000e+00
%67 = fmul double %60, %66
%68 = select i1 %65, double %22, double 1.000000e+00
%69 = fmul double %62, %68
%70 = add nuw nsw i32 %31, 1
%71 = icmp eq i32 %70, 10
br i1 %71, label %72, label %28
72: ; preds = %35, %28
%73 = phi double [ %67, %35 ], [ %30, %28 ]
%74 = phi double [ %69, %35 ], [ %29, %28 ]
%75 = fadd double %22, 1.000000e+00
%76 = fcmp olt double %75, %6
br i1 %76, label %19, label %77
77: ; preds = %72, %9
%78 = phi double [ %11, %9 ], [ %73, %72 ]
%79 = phi double [ %10, %9 ], [ %74, %72 ]
%80 = add nuw nsw i32 %12, 1
%81 = icmp eq i32 %80, 10
br i1 %81, label %82, label %9
82: ; preds = %77
%83 = add nuw nsw i32 %4, 1
%84 = icmp eq i32 %83, 10
br i1 %84, label %85, label %1
85: ; preds = %82
%86 = fptosi double %79 to i32
%87 = fptosi double %78 to i32
%88 = tail call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %86, i32 %87)
ret i32 0
}