#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 main() {
  float fahr, celsius;
  printf("Fahrenheit\tCelsius\n");
  for (fahr = 0.0; fahr <= 300.0; fahr += 20.0) {
    celsius = (5.0 / 9.0) * (fahr - 32.0);
    printf("%3.0f\t\t%5.1f\n", fahr, celsius);
  }
  printf("\n");
  printf("Fahrenheit\tCelsius\n");
  for (fahr = 300.0; fahr >= 0.0; fahr -= 20.0) {
    celsius = (5.0 / 9.0) * (fahr - 32.0);
    printf("%3.0f\t\t%5.1f\n", fahr, celsius);
  }
  printf("\n");
  printf("Celsius\t\tFahrenheit\n");
  for (celsius = 0.0; celsius <= 150.0; celsius += 10.0) {
    fahr = (9.0 / 5.0) * celsius + 32.0;
    printf("%3.0f\t\t%5.1f\n", celsius, fahr);
  }
  printf("\n");
  printf("Celsius\t\tFahrenheit\n");
  for (celsius = 150.0; celsius >= 0.0; celsius -= 10.0) {
    fahr = (9.0 / 5.0) * celsius + 32.0;
    printf("%3.0f\t\t%5.1f\n", celsius, fahr);
  }
  printf("\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xf1a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xeba(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     11bd <main+0xad>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xeb7(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xebb(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0xc(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xec1(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe85(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
jmp    1135 <main+0x25>
lea    0xe9c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xe6e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movss  0xe57(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1269 <main+0x159>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe0b(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe0f(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0xc(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xe15(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdd9(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
jmp    11e6 <main+0xd6>
lea    0xdf0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xde4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd6a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1315 <main+0x205>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd57(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd53(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xd69(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd1d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    128d <main+0x17d>
lea    0xd44(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd38(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movss  0xd03(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     13c1 <main+0x2b1>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcab(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xca7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xcbd(%rip),%rdi
mov    $0x2,%al
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc71(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    133e <main+0x22e>
lea    0xc98(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
lea    0x1073(%rip),%r14
mov    %r14,%rdi
call   1040 <puts@plt>
lea    0x1056(%rip),%rbx
movsd  0xeae(%rip),%xmm1
xorps  %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xea1(%rip),%xmm0
movsd  0xea1(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe97(%rip),%xmm0
movsd  0xe97(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe8d(%rip),%xmm0
movsd  0xe8d(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe83(%rip),%xmm0
movsd  0xe83(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe79(%rip),%xmm0
movsd  0xe79(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe6f(%rip),%xmm0
movsd  0xe6f(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe65(%rip),%xmm0
mov    %rbx,%rdi
movsd  0xe1a(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe53(%rip),%xmm0
movsd  0xe53(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe49(%rip),%xmm0
movsd  0xe49(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe3f(%rip),%xmm0
movsd  0xe3f(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe35(%rip),%xmm0
movsd  0xe35(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe2b(%rip),%xmm0
movsd  0xe2b(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe21(%rip),%xmm0
movsd  0xe21(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe17(%rip),%xmm0
movsd  0xe17(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe0d(%rip),%xmm0
movsd  0xe0d(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
movsd  0xdde(%rip),%xmm0
movsd  0xdde(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xdb4(%rip),%xmm0
movsd  0xdb4(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xd8a(%rip),%xmm0
movsd  0xd8a(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xd60(%rip),%xmm0
movsd  0xd60(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xd36(%rip),%xmm0
movsd  0xd36(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xd0c(%rip),%xmm0
movsd  0xd0c(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xce2(%rip),%xmm0
movsd  0xce2(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xcb8(%rip),%xmm0
movsd  0xcb8(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xc96(%rip),%xmm0
movsd  0xc4e(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xc6c(%rip),%xmm0
movsd  0xc6c(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xc42(%rip),%xmm0
movsd  0xc42(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xc18(%rip),%xmm0
movsd  0xc18(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xbee(%rip),%xmm0
movsd  0xbee(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xbc4(%rip),%xmm0
movsd  0xbc4(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xb9a(%rip),%xmm0
movsd  0xb9a(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
xorps  %xmm0,%xmm0
mov    %rbx,%rdi
movsd  0xb75(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xd1e(%rip),%r14
mov    %r14,%rdi
call   1040 <puts@plt>
movsd  0xc3d(%rip),%xmm1
xorps  %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xc30(%rip),%xmm0
movsd  0xc30(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xc26(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xb1b(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xc14(%rip),%xmm0
movsd  0xc14(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xc0a(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xaf7(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xbf8(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xbc5(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xadb(%rip),%xmm0
movsd  0xb13(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xbcc(%rip),%xmm0
movsd  0xbcc(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xbc2(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xaaf(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xbb0(%rip),%xmm0
movsd  0xbb0(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xba6(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xa8b(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xb94(%rip),%xmm0
movsd  0xb94(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xb8a(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xa67(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xb78(%rip),%xmm0
movsd  0xb78(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xb6e(%rip),%xmm1
mov    %rbx,%rdi
movsd  0xa43(%rip),%xmm0
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xb5c(%rip),%xmm0
movsd  0xb5c(%rip),%xmm1
mov    %rbx,%rdi
mov    $0x2,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
movsd  0xb2d(%rip),%xmm0
movsd  0xb2d(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x9eb(%rip),%xmm0
movsd  0xb03(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xae1(%rip),%xmm0
movsd  0xae1(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x9a7(%rip),%xmm0
movsd  0xab7(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xa95(%rip),%xmm0
movsd  0xa95(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x963(%rip),%xmm0
movsd  0xa6b(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0xa49(%rip),%xmm0
movsd  0xa49(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x91f(%rip),%xmm0
movsd  0xa1f(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x9fd(%rip),%xmm0
movsd  0x9fd(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x8db(%rip),%xmm0
movsd  0x913(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x999(%rip),%xmm0
movsd  0x9b9(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x897(%rip),%xmm0
movsd  0x997(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x975(%rip),%xmm0
movsd  0x975(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x853(%rip),%xmm0
movsd  0x94b(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    %rbx,%rdi
movsd  0x929(%rip),%xmm0
movsd  0x929(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
xorps  %xmm0,%xmm0
mov    %rbx,%rdi
movsd  0x904(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [20 x i8] c"Fahrenheit\09Celsius\0A\00"
@.str.1 = [14 x i8] c"%3.0f\09\09%5.1f\0A\00"
@.str.2 = [2 x i8] c"\0A\00"
@.str.3 = [21 x i8] c"Celsius\09\09Fahrenheit\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
store i32 0, i32* %1
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0))
store float 0.000000e+00, float* %2
br label %5
5: ; preds = %20, %0
%6 = load float, float* %2
%7 = fpext float %6 to double
%8 = fcmp ole double %7, 3.000000e+02
br i1 %8, label %9, label %25
9: ; preds = %5
%10 = load float, float* %2
%11 = fpext float %10 to double
%12 = fsub double %11, 3.200000e+01
%13 = fmul double 0x3FE1C71C71C71C72, %12
%14 = fptrunc double %13 to float
store float %14, float* %3
%15 = load float, float* %2
%16 = fpext float %15 to double
%17 = load float, float* %3
%18 = fpext float %17 to double
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double %16, double %18)
br label %20
20: ; preds = %9
%21 = load float, float* %2
%22 = fpext float %21 to double
%23 = fadd double %22, 2.000000e+01
%24 = fptrunc double %23 to float
store float %24, float* %2
br label %5
25: ; preds = %5
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0))
store float 3.000000e+02, float* %2
br label %28
28: ; preds = %43, %25
%29 = load float, float* %2
%30 = fpext float %29 to double
%31 = fcmp oge double %30, 0.000000e+00
br i1 %31, label %32, label %48
32: ; preds = %28
%33 = load float, float* %2
%34 = fpext float %33 to double
%35 = fsub double %34, 3.200000e+01
%36 = fmul double 0x3FE1C71C71C71C72, %35
%37 = fptrunc double %36 to float
store float %37, float* %3
%38 = load float, float* %2
%39 = fpext float %38 to double
%40 = load float, float* %3
%41 = fpext float %40 to double
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double %39, double %41)
br label %43
43: ; preds = %32
%44 = load float, float* %2
%45 = fpext float %44 to double
%46 = fsub double %45, 2.000000e+01
%47 = fptrunc double %46 to float
store float %47, float* %2
br label %28
48: ; preds = %28
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
store float 0.000000e+00, float* %3
br label %51
51: ; preds = %65, %48
%52 = load float, float* %3
%53 = fpext float %52 to double
%54 = fcmp ole double %53, 1.500000e+02
br i1 %54, label %55, label %70
55: ; preds = %51
%56 = load float, float* %3
%57 = fpext float %56 to double
%58 = call double @llvm.fmuladd.f64(double 1.800000e+00, double %57, double 3.200000e+01)
%59 = fptrunc double %58 to float
store float %59, float* %2
%60 = load float, float* %3
%61 = fpext float %60 to double
%62 = load float, float* %2
%63 = fpext float %62 to double
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double %61, double %63)
br label %65
65: ; preds = %55
%66 = load float, float* %3
%67 = fpext float %66 to double
%68 = fadd double %67, 1.000000e+01
%69 = fptrunc double %68 to float
store float %69, float* %3
br label %51
70: ; preds = %51
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.3, i64 0, i64 0))
store float 1.500000e+02, float* %3
br label %73
73: ; preds = %87, %70
%74 = load float, float* %3
%75 = fpext float %74 to double
%76 = fcmp oge double %75, 0.000000e+00
br i1 %76, label %77, label %92
77: ; preds = %73
%78 = load float, float* %3
%79 = fpext float %78 to double
%80 = call double @llvm.fmuladd.f64(double 1.800000e+00, double %79, double 3.200000e+01)
%81 = fptrunc double %80 to float
store float %81, float* %2
%82 = load float, float* %3
%83 = fpext float %82 to double
%84 = load float, float* %2
%85 = fpext float %84 to double
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double %83, double %85)
br label %87
87: ; preds = %77
%88 = load float, float* %3
%89 = fpext float %88 to double
%90 = fsub double %89, 1.000000e+01
%91 = fptrunc double %90 to float
store float %91, float* %3
br label %73
92: ; preds = %73
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str.1 = [14 x i8] c"%3.0f\09\09%5.1f\0A\00"
@str.4 = [19 x i8] c"Fahrenheit\09Celsius\00"
@str.6 = [20 x i8] c"Celsius\09\09Fahrenheit\00"
define i32 @main() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.4, i64 0, i64 0))
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 0.000000e+00, double 0xC031C71C80000000)
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+01, double 0xC01AAAAAA0000000)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 4.000000e+01, double 0x4011C71C80000000)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 6.000000e+01, double 0x402F1C71C0000000)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 8.000000e+01, double 0x403AAAAAA0000000)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+02, double 0x4042E38E40000000)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.200000e+02, double 0x404871C720000000)
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.400000e+02, double 6.000000e+01)
%10 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.600000e+02, double 0x4051C71C80000000)
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.800000e+02, double 0x40548E38E0000000)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+02, double 0x4057555560000000)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.200000e+02, double 0x405A1C71C0000000)
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.400000e+02, double 0x405CE38E40000000)
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.600000e+02, double 0x405FAAAAA0000000)
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.800000e+02, double 0x406138E380000000)
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 3.000000e+02, double 0x40629C71C0000000)
%18 = tail call i32 @putchar(i32 10)
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.4, i64 0, i64 0))
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 3.000000e+02, double 0x40629C71C0000000)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.800000e+02, double 0x406138E380000000)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.600000e+02, double 0x405FAAAAA0000000)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.400000e+02, double 0x405CE38E40000000)
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.200000e+02, double 0x405A1C71C0000000)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+02, double 0x4057555560000000)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.800000e+02, double 0x40548E38E0000000)
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.600000e+02, double 0x4051C71C80000000)
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.400000e+02, double 6.000000e+01)
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.200000e+02, double 0x404871C720000000)
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+02, double 0x4042E38E40000000)
%31 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 8.000000e+01, double 0x403AAAAAA0000000)
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 6.000000e+01, double 0x402F1C71C0000000)
%33 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 4.000000e+01, double 0x4011C71C80000000)
%34 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+01, double 0xC01AAAAAA0000000)
%35 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 0.000000e+00, double 0xC031C71C80000000)
%36 = tail call i32 @putchar(i32 10)
%37 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.6, i64 0, i64 0))
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 0.000000e+00, double 3.200000e+01)
%39 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+01, double 5.000000e+01)
%40 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+01, double 6.800000e+01)
%41 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 3.000000e+01, double 8.600000e+01)
%42 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 4.000000e+01, double 1.040000e+02)
%43 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 5.000000e+01, double 1.220000e+02)
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 6.000000e+01, double 1.400000e+02)
%45 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 7.000000e+01, double 1.580000e+02)
%46 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 8.000000e+01, double 1.760000e+02)
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 9.000000e+01, double 1.940000e+02)
%48 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+02, double 2.120000e+02)
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.100000e+02, double 2.300000e+02)
%50 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.200000e+02, double 2.480000e+02)
%51 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.300000e+02, double 2.660000e+02)
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.400000e+02, double 2.840000e+02)
%53 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.500000e+02, double 3.020000e+02)
%54 = tail call i32 @putchar(i32 10)
%55 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.6, i64 0, i64 0))
%56 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.500000e+02, double 3.020000e+02)
%57 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.400000e+02, double 2.840000e+02)
%58 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.300000e+02, double 2.660000e+02)
%59 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.200000e+02, double 2.480000e+02)
%60 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.100000e+02, double 2.300000e+02)
%61 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+02, double 2.120000e+02)
%62 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 9.000000e+01, double 1.940000e+02)
%63 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 8.000000e+01, double 1.760000e+02)
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 7.000000e+01, double 1.580000e+02)
%65 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 6.000000e+01, double 1.400000e+02)
%66 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 5.000000e+01, double 1.220000e+02)
%67 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 4.000000e+01, double 1.040000e+02)
%68 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 3.000000e+01, double 8.600000e+01)
%69 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 2.000000e+01, double 6.800000e+01)
%70 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 1.000000e+01, double 5.000000e+01)
%71 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), double 0.000000e+00, double 3.200000e+01)
%72 = tail call i32 @putchar(i32 10)
ret i32 0
}