#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 */
double log(double);
double pow(double, double const);
int /*<<< orphan*/ printf(char *, double, double, double);
int /*<<< orphan*/ scanf(char *, ...);
int main() {
  const double p[] = {0.5555, 6.11, 5417.7530, 273.16, 10.0};
  char type1, type2;
  double num1, num2;
  double T, D, H;
  while (1) {
    scanf(" %c", &type1);
    if (type1 == 'E')
      break;
    scanf("%lf", &num1);
    scanf(" %c", &type2);
    scanf("%lf", &num2);
    if (type1 == 'T' && type2 == 'D') {
      T = num1;
      D = num2;
      H = pow(2.718281828, p[2] * (1 / p[3] - 1 / (p[3] + D)));
      H = p[1] * H - p[4];
      H = T + p[0] * H;
    } else if (type1 == 'T' && type2 == 'H') {
      T = num1;
      H = num2;
      D = (H - T) / p[0];
      D = (D + p[4]) / p[1];
      D = log(D);
      D = 1 / p[3] - D / p[2];
      D = 1 / D - p[3];
    } else if (type1 == 'D' && type2 == 'H') {
      D = num1;
      H = num2;
      T = pow(2.718281828, p[2] * (1 / p[3] - 1 / (p[3] + D)));
      T = p[1] * T - p[4];
      T = H - p[0] * T;
    } else if (type1 == 'D' && type2 == 'T') {
      T = num2;
      D = num1;
      H = pow(2.718281828, p[2] * (1 / p[3] - 1 / (p[3] + D)));
      H = p[1] * H - p[4];
      H = T + p[0] * H;
    } else if (type1 == 'H' && type2 == 'T') {
      T = num2;
      H = num1;
      D = (H - T) / p[0];
      D = (D + p[4]) / p[1];
      D = log(D);
      D = 1 / p[3] - D / p[2];
      D = 1 / D - p[3];
    } else if (type1 == 'H' && type2 == 'D') {
      D = num2;
      H = num1;
      T = pow(2.718281828, p[2] * (1 / p[3] - 1 / (p[3] + D)));
      T = p[1] * T - p[4];
      T = H - p[0] * T;
    } else
      break;
    printf("T %.1f D %.1f H %.1f\n", T, D, H);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x30(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1040 <memset@plt>
movsd  0xea9(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe94(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe7f(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe6a(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  0xe55(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    0xe81(%rip),%rdi
lea    -0x31(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
movsbl -0x31(%rbp),%eax
cmp    $0x45,%eax
jne    11d4 <main+0x84>
jmp    16c8 <main+0x578>
lea    0xe61(%rip),%rdi
lea    -0x40(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    0xe4b(%rip),%rdi
lea    -0x32(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    0xe3d(%rip),%rdi
lea    -0x48(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
movsbl -0x31(%rbp),%eax
cmp    $0x54,%eax
jne    12ce <main+0x17e>
movsbl -0x32(%rbp),%eax
cmp    $0x44,%eax
jne    12ce <main+0x17e>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xdeb(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm3
addsd  -0x58(%rbp),%xmm3
movsd  0xdd4(%rip),%xmm2
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xdb8(%rip),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    16a8 <main+0x558>
movsbl -0x31(%rbp),%eax
cmp    $0x54,%eax
jne    136f <main+0x21f>
movsbl -0x32(%rbp),%eax
cmp    $0x48,%eax
jne    136f <main+0x21f>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  0xcf5(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
divsd  -0x20(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xcd5(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    16a3 <main+0x553>
movsbl -0x31(%rbp),%eax
cmp    $0x44,%eax
jne    144a <main+0x2fa>
movsbl -0x32(%rbp),%eax
cmp    $0x48,%eax
jne    144a <main+0x2fa>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xc86(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm3
addsd  -0x58(%rbp),%xmm3
movsd  0xc6f(%rip),%xmm2
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xc53(%rip),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    169e <main+0x54e>
movsbl -0x31(%rbp),%eax
cmp    $0x44,%eax
jne    150e <main+0x3be>
movsbl -0x32(%rbp),%eax
cmp    $0x54,%eax
jne    150e <main+0x3be>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xbab(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm3
addsd  -0x58(%rbp),%xmm3
movsd  0xb94(%rip),%xmm2
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xb78(%rip),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1699 <main+0x549>
movsbl -0x31(%rbp),%eax
cmp    $0x48,%eax
jne    15af <main+0x45f>
movsbl -0x32(%rbp),%eax
cmp    $0x54,%eax
jne    15af <main+0x45f>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  0xab5(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
divsd  -0x20(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xa95(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1694 <main+0x544>
movsbl -0x31(%rbp),%eax
cmp    $0x48,%eax
jne    168a <main+0x53a>
movsbl -0x32(%rbp),%eax
cmp    $0x44,%eax
jne    168a <main+0x53a>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  0xa46(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm3
addsd  -0x58(%rbp),%xmm3
movsd  0xa2f(%rip),%xmm2
divsd  %xmm3,%xmm2
subsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm1
movsd  0xa13(%rip),%xmm0
call   1070 <pow@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    168f <main+0x53f>
jmp    16c8 <main+0x578>
jmp    1694 <main+0x544>
jmp    1699 <main+0x549>
jmp    169e <main+0x54e>
jmp    16a3 <main+0x553>
jmp    16a8 <main+0x558>
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
lea    0x982(%rip),%rdi
call   1030 <printf@plt>
jmp    11b0 <main+0x60>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
lea    0xf13(%rip),%rdi
lea    0xe(%rsp),%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
cmpb   $0x45,0xe(%rsp)
jne    1179 <main+0x39>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xeec(%rip),%r15
lea    0xee1(%rip),%rbx
lea    0xf(%rsp),%r12
lea    0x28(%rsp),%r13
lea    0xed8(%rip),%rbp
lea    0xe(%rsp),%r14
jmp    1245 <main+0x105>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
addsd  0xe30(%rip),%xmm0
movsd  0xe30(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0xe2c(%rip),%xmm1
mulsd  0xe2c(%rip),%xmm1
movsd  0xe2c(%rip),%xmm0
call   1060 <pow@plt>
movsd  0x18(%rsp),%xmm1
movapd %xmm0,%xmm2
movsd  0x20(%rsp),%xmm0
mulsd  0xe17(%rip),%xmm2
addsd  0xe17(%rip),%xmm2
mulsd  0xe1f(%rip),%xmm2
addsd  %xmm0,%xmm2
mov    %rbp,%rdi
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
cmpb   $0x45,0xe(%rsp)
je     1168 <main+0x28>
mov    %r15,%rdi
lea    0x30(%rsp),%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
mov    %r15,%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1040 <scanf@plt>
movzbl 0xe(%rsp),%ecx
movzbl 0xf(%rsp),%eax
cmp    $0x54,%cl
jne    1285 <main+0x145>
cmp    $0x44,%al
je     11b0 <main+0x70>
cmp    $0x54,%cl
jne    1300 <main+0x1c0>
cmp    $0x48,%al
jne    1300 <main+0x1c0>
movsd  0x30(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
subsd  %xmm1,%xmm0
divsd  0xd8e(%rip),%xmm0
addsd  0xd8e(%rip),%xmm0
divsd  0xd66(%rip),%xmm0
call   1050 <log@plt>
movsd  0x10(%rsp),%xmm2
divsd  0xd7b(%rip),%xmm0
addsd  0xd33(%rip),%xmm0
movsd  0xd73(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  0x20(%rsp),%xmm0
addsd  0xd69(%rip),%xmm1
jmp    1225 <main+0xe5>
nopl   0x0(%rax)
cmp    $0x44,%cl
jne    131d <main+0x1dd>
cmp    $0x48,%al
jne    131d <main+0x1dd>
movsd  0x30(%rsp),%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  0x28(%rsp),%xmm0
jmp    1380 <main+0x240>
cmp    $0x44,%cl
jne    133d <main+0x1fd>
cmp    $0x54,%al
jne    133d <main+0x1fd>
movsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x30(%rsp),%xmm0
jmp    11c2 <main+0x82>
cmp    $0x48,%cl
jne    135d <main+0x21d>
cmp    $0x54,%al
jne    135d <main+0x21d>
movsd  0x28(%rsp),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x30(%rsp),%xmm0
jmp    12a0 <main+0x160>
cmp    $0x48,%cl
jne    1168 <main+0x28>
cmp    $0x44,%al
jne    1168 <main+0x28>
movsd  0x28(%rsp),%xmm1
movsd  %xmm1,0x18(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd %xmm1,%xmm0
addsd  0xc6e(%rip),%xmm0
movsd  0xc6e(%rip),%xmm1
divsd  %xmm0,%xmm1
addsd  0xc6a(%rip),%xmm1
mulsd  0xc6a(%rip),%xmm1
movsd  0xc6a(%rip),%xmm0
call   1060 <pow@plt>
movsd  0x18(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
mulsd  0xc59(%rip),%xmm0
addsd  0xc59(%rip),%xmm0
mulsd  0xc59(%rip),%xmm0
addsd  %xmm2,%xmm0
jmp    1225 <main+0xe5>

LLVM IR (-O0):
@.str = [4 x i8] c" %c\00"
@.str.1 = [4 x i8] c"%lf\00"
@.str.2 = [22 x i8] c"T %.1f D %.1f H %.1f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [5 x double]
%3 = alloca i8
%4 = alloca i8
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
store i32 0, i32* %1
%10 = bitcast [5 x double]* %2 to i8*
%11 = bitcast i8* %10 to [5 x double]*
%12 = getelementptr inbounds [5 x double], [5 x double]* %11, i32 0, i32 0
store double 5.555000e-01, double* %12
%13 = getelementptr inbounds [5 x double], [5 x double]* %11, i32 0, i32 1
store double 6.110000e+00, double* %13
%14 = getelementptr inbounds [5 x double], [5 x double]* %11, i32 0, i32 2
store double 0x40B529C0C49BA5E3, double* %14
%15 = getelementptr inbounds [5 x double], [5 x double]* %11, i32 0, i32 3
store double 2.731600e+02, double* %15
%16 = getelementptr inbounds [5 x double], [5 x double]* %11, i32 0, i32 4
store double 1.000000e+01, double* %16
br label %17
17: ; preds = %0, %256
%18 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %3)
%19 = load i8, i8* %3
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 69
br i1 %21, label %22, label %23
22: ; preds = %17
br label %261
23: ; preds = %17
%24 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), double* %5)
%25 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %4)
%26 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), double* %6)
%27 = load i8, i8* %3
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 84
br i1 %29, label %30, label %62
30: ; preds = %23
%31 = load i8, i8* %4
%32 = sext i8 %31 to i32
%33 = icmp eq i32 %32, 68
br i1 %33, label %34, label %62
34: ; preds = %30
%35 = load double, double* %5
store double %35, double* %7
%36 = load double, double* %6
store double %36, double* %8
%37 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%38 = load double, double* %37
%39 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%40 = load double, double* %39
%41 = fdiv double 1.000000e+00, %40
%42 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%43 = load double, double* %42
%44 = load double, double* %8
%45 = fadd double %43, %44
%46 = fdiv double 1.000000e+00, %45
%47 = fsub double %41, %46
%48 = fmul double %38, %47
%49 = call double @pow(double 0x4005BF0A8B04919B, double %48)
store double %49, double* %9
%50 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%51 = load double, double* %50
%52 = load double, double* %9
%53 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%54 = load double, double* %53
%55 = fneg double %54
%56 = call double @llvm.fmuladd.f64(double %51, double %52, double %55)
store double %56, double* %9
%57 = load double, double* %7
%58 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%59 = load double, double* %58
%60 = load double, double* %9
%61 = call double @llvm.fmuladd.f64(double %59, double %60, double %57)
store double %61, double* %9
br label %256
62: ; preds = %30, %23
%63 = load i8, i8* %3
%64 = sext i8 %63 to i32
%65 = icmp eq i32 %64, 84
br i1 %65, label %66, label %101
66: ; preds = %62
%67 = load i8, i8* %4
%68 = sext i8 %67 to i32
%69 = icmp eq i32 %68, 72
br i1 %69, label %70, label %101
70: ; preds = %66
%71 = load double, double* %5
store double %71, double* %7
%72 = load double, double* %6
store double %72, double* %9
%73 = load double, double* %9
%74 = load double, double* %7
%75 = fsub double %73, %74
%76 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%77 = load double, double* %76
%78 = fdiv double %75, %77
store double %78, double* %8
%79 = load double, double* %8
%80 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%81 = load double, double* %80
%82 = fadd double %79, %81
%83 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%84 = load double, double* %83
%85 = fdiv double %82, %84
store double %85, double* %8
%86 = load double, double* %8
%87 = call double @log(double %86)
store double %87, double* %8
%88 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%89 = load double, double* %88
%90 = fdiv double 1.000000e+00, %89
%91 = load double, double* %8
%92 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%93 = load double, double* %92
%94 = fdiv double %91, %93
%95 = fsub double %90, %94
store double %95, double* %8
%96 = load double, double* %8
%97 = fdiv double 1.000000e+00, %96
%98 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%99 = load double, double* %98
%100 = fsub double %97, %99
store double %100, double* %8
br label %255
101: ; preds = %66, %62
%102 = load i8, i8* %3
%103 = sext i8 %102 to i32
%104 = icmp eq i32 %103, 68
br i1 %104, label %105, label %138
105: ; preds = %101
%106 = load i8, i8* %4
%107 = sext i8 %106 to i32
%108 = icmp eq i32 %107, 72
br i1 %108, label %109, label %138
109: ; preds = %105
%110 = load double, double* %5
store double %110, double* %8
%111 = load double, double* %6
store double %111, double* %9
%112 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%113 = load double, double* %112
%114 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%115 = load double, double* %114
%116 = fdiv double 1.000000e+00, %115
%117 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%118 = load double, double* %117
%119 = load double, double* %8
%120 = fadd double %118, %119
%121 = fdiv double 1.000000e+00, %120
%122 = fsub double %116, %121
%123 = fmul double %113, %122
%124 = call double @pow(double 0x4005BF0A8B04919B, double %123)
store double %124, double* %7
%125 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%126 = load double, double* %125
%127 = load double, double* %7
%128 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%129 = load double, double* %128
%130 = fneg double %129
%131 = call double @llvm.fmuladd.f64(double %126, double %127, double %130)
store double %131, double* %7
%132 = load double, double* %9
%133 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%134 = load double, double* %133
%135 = load double, double* %7
%136 = fneg double %134
%137 = call double @llvm.fmuladd.f64(double %136, double %135, double %132)
store double %137, double* %7
br label %254
138: ; preds = %105, %101
%139 = load i8, i8* %3
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 68
br i1 %141, label %142, label %174
142: ; preds = %138
%143 = load i8, i8* %4
%144 = sext i8 %143 to i32
%145 = icmp eq i32 %144, 84
br i1 %145, label %146, label %174
146: ; preds = %142
%147 = load double, double* %6
store double %147, double* %7
%148 = load double, double* %5
store double %148, double* %8
%149 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%150 = load double, double* %149
%151 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%152 = load double, double* %151
%153 = fdiv double 1.000000e+00, %152
%154 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%155 = load double, double* %154
%156 = load double, double* %8
%157 = fadd double %155, %156
%158 = fdiv double 1.000000e+00, %157
%159 = fsub double %153, %158
%160 = fmul double %150, %159
%161 = call double @pow(double 0x4005BF0A8B04919B, double %160)
store double %161, double* %9
%162 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%163 = load double, double* %162
%164 = load double, double* %9
%165 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%166 = load double, double* %165
%167 = fneg double %166
%168 = call double @llvm.fmuladd.f64(double %163, double %164, double %167)
store double %168, double* %9
%169 = load double, double* %7
%170 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%171 = load double, double* %170
%172 = load double, double* %9
%173 = call double @llvm.fmuladd.f64(double %171, double %172, double %169)
store double %173, double* %9
br label %253
174: ; preds = %142, %138
%175 = load i8, i8* %3
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 72
br i1 %177, label %178, label %213
178: ; preds = %174
%179 = load i8, i8* %4
%180 = sext i8 %179 to i32
%181 = icmp eq i32 %180, 84
br i1 %181, label %182, label %213
182: ; preds = %178
%183 = load double, double* %6
store double %183, double* %7
%184 = load double, double* %5
store double %184, double* %9
%185 = load double, double* %9
%186 = load double, double* %7
%187 = fsub double %185, %186
%188 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%189 = load double, double* %188
%190 = fdiv double %187, %189
store double %190, double* %8
%191 = load double, double* %8
%192 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%193 = load double, double* %192
%194 = fadd double %191, %193
%195 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%196 = load double, double* %195
%197 = fdiv double %194, %196
store double %197, double* %8
%198 = load double, double* %8
%199 = call double @log(double %198)
store double %199, double* %8
%200 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%201 = load double, double* %200
%202 = fdiv double 1.000000e+00, %201
%203 = load double, double* %8
%204 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%205 = load double, double* %204
%206 = fdiv double %203, %205
%207 = fsub double %202, %206
store double %207, double* %8
%208 = load double, double* %8
%209 = fdiv double 1.000000e+00, %208
%210 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%211 = load double, double* %210
%212 = fsub double %209, %211
store double %212, double* %8
br label %252
213: ; preds = %178, %174
%214 = load i8, i8* %3
%215 = sext i8 %214 to i32
%216 = icmp eq i32 %215, 72
br i1 %216, label %217, label %250
217: ; preds = %213
%218 = load i8, i8* %4
%219 = sext i8 %218 to i32
%220 = icmp eq i32 %219, 68
br i1 %220, label %221, label %250
221: ; preds = %217
%222 = load double, double* %6
store double %222, double* %8
%223 = load double, double* %5
store double %223, double* %9
%224 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 2
%225 = load double, double* %224
%226 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%227 = load double, double* %226
%228 = fdiv double 1.000000e+00, %227
%229 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 3
%230 = load double, double* %229
%231 = load double, double* %8
%232 = fadd double %230, %231
%233 = fdiv double 1.000000e+00, %232
%234 = fsub double %228, %233
%235 = fmul double %225, %234
%236 = call double @pow(double 0x4005BF0A8B04919B, double %235)
store double %236, double* %7
%237 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 1
%238 = load double, double* %237
%239 = load double, double* %7
%240 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 4
%241 = load double, double* %240
%242 = fneg double %241
%243 = call double @llvm.fmuladd.f64(double %238, double %239, double %242)
store double %243, double* %7
%244 = load double, double* %9
%245 = getelementptr inbounds [5 x double], [5 x double]* %2, i64 0, i64 0
%246 = load double, double* %245
%247 = load double, double* %7
%248 = fneg double %246
%249 = call double @llvm.fmuladd.f64(double %248, double %247, double %244)
store double %249, double* %7
br label %251
250: ; preds = %217, %213
br label %261
251: ; preds = %221
br label %252
252: ; preds = %251, %182
br label %253
253: ; preds = %252, %146
br label %254
254: ; preds = %253, %109
br label %255
255: ; preds = %254, %70
br label %256
256: ; preds = %255, %34
%257 = load double, double* %7
%258 = load double, double* %8
%259 = load double, double* %9
%260 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), double %257, double %258, double %259)
br label %17
261: ; preds = %250, %22
ret i32 0
}

LLVM IR (-O2):
@.str = [4 x i8] c" %c\00"
@.str.1 = [4 x i8] c"%lf\00"
@.str.2 = [22 x i8] c"T %.1f D %.1f H %.1f\0A\00"
define i32 @main() {
%1 = alloca i8
%2 = alloca i8
%3 = alloca double
%4 = alloca double
%5 = bitcast double* %3 to i8*
%6 = bitcast double* %4 to i8*
%7 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %1)
%8 = load i8, i8* %1
%9 = icmp eq i8 %8, 69
br i1 %9, label %105, label %10
10: ; preds = %0, %97
%11 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), double* %3)
%12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %2)
%13 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), double* %4)
%14 = load i8, i8* %1
%15 = icmp eq i8 %14, 84
%16 = load i8, i8* %2
%17 = icmp eq i8 %16, 68
%18 = select i1 %15, i1 %17, i1 false
br i1 %18, label %19, label %29
19: ; preds = %10
%20 = load double, double* %3
%21 = load double, double* %4
%22 = fadd double %21, 2.731600e+02
%23 = fdiv double 1.000000e+00, %22
%24 = fsub double 0x3F6DFD603AC7A821, %23
%25 = fmul double %24, 0x40B529C0C49BA5E3
%26 = call double @pow(double 0x4005BF0A8B04919B, double %25)
%27 = call double @llvm.fmuladd.f64(double %26, double 6.110000e+00, double -1.000000e+01)
%28 = call double @llvm.fmuladd.f64(double %27, double 5.555000e-01, double %20)
br label %97
29: ; preds = %10
%30 = icmp eq i8 %16, 72
%31 = select i1 %15, i1 %30, i1 false
br i1 %31, label %32, label %44
32: ; preds = %29
%33 = load double, double* %3
%34 = load double, double* %4
%35 = fsub double %34, %33
%36 = fdiv double %35, 5.555000e-01
%37 = fadd double %36, 1.000000e+01
%38 = fdiv double %37, 6.110000e+00
%39 = call double @log(double %38)
%40 = fdiv double %39, 0x40B529C0C49BA5E3
%41 = fsub double 0x3F6DFD603AC7A821, %40
%42 = fdiv double 1.000000e+00, %41
%43 = fadd double %42, -2.731600e+02
br label %97
44: ; preds = %29
%45 = icmp eq i8 %14, 68
%46 = select i1 %45, i1 %30, i1 false
br i1 %46, label %47, label %57
47: ; preds = %44
%48 = load double, double* %3
%49 = load double, double* %4
%50 = fadd double %48, 2.731600e+02
%51 = fdiv double 1.000000e+00, %50
%52 = fsub double 0x3F6DFD603AC7A821, %51
%53 = fmul double %52, 0x40B529C0C49BA5E3
%54 = call double @pow(double 0x4005BF0A8B04919B, double %53)
%55 = call double @llvm.fmuladd.f64(double %54, double 6.110000e+00, double -1.000000e+01)
%56 = call double @llvm.fmuladd.f64(double %55, double -5.555000e-01, double %49)
br label %97
57: ; preds = %44
%58 = icmp eq i8 %16, 84
%59 = select i1 %45, i1 %58, i1 false
br i1 %59, label %60, label %70
60: ; preds = %57
%61 = load double, double* %4
%62 = load double, double* %3
%63 = fadd double %62, 2.731600e+02
%64 = fdiv double 1.000000e+00, %63
%65 = fsub double 0x3F6DFD603AC7A821, %64
%66 = fmul double %65, 0x40B529C0C49BA5E3
%67 = call double @pow(double 0x4005BF0A8B04919B, double %66)
%68 = call double @llvm.fmuladd.f64(double %67, double 6.110000e+00, double -1.000000e+01)
%69 = call double @llvm.fmuladd.f64(double %68, double 5.555000e-01, double %61)
br label %97
70: ; preds = %57
%71 = icmp eq i8 %14, 72
%72 = select i1 %71, i1 %58, i1 false
br i1 %72, label %73, label %85
73: ; preds = %70
%74 = load double, double* %4
%75 = load double, double* %3
%76 = fsub double %75, %74
%77 = fdiv double %76, 5.555000e-01
%78 = fadd double %77, 1.000000e+01
%79 = fdiv double %78, 6.110000e+00
%80 = call double @log(double %79)
%81 = fdiv double %80, 0x40B529C0C49BA5E3
%82 = fsub double 0x3F6DFD603AC7A821, %81
%83 = fdiv double 1.000000e+00, %82
%84 = fadd double %83, -2.731600e+02
br label %97
85: ; preds = %70
%86 = select i1 %71, i1 %17, i1 false
br i1 %86, label %87, label %105
87: ; preds = %85
%88 = load double, double* %4
%89 = load double, double* %3
%90 = fadd double %88, 2.731600e+02
%91 = fdiv double 1.000000e+00, %90
%92 = fsub double 0x3F6DFD603AC7A821, %91
%93 = fmul double %92, 0x40B529C0C49BA5E3
%94 = call double @pow(double 0x4005BF0A8B04919B, double %93)
%95 = call double @llvm.fmuladd.f64(double %94, double 6.110000e+00, double -1.000000e+01)
%96 = call double @llvm.fmuladd.f64(double %95, double -5.555000e-01, double %89)
br label %97
97: ; preds = %32, %60, %87, %73, %47, %19
%98 = phi double [ %20, %19 ], [ %33, %32 ], [ %56, %47 ], [ %61, %60 ], [ %74, %73 ], [ %96, %87 ]
%99 = phi double [ %21, %19 ], [ %43, %32 ], [ %48, %47 ], [ %62, %60 ], [ %84, %73 ], [ %88, %87 ]
%100 = phi double [ %28, %19 ], [ %34, %32 ], [ %49, %47 ], [ %69, %60 ], [ %75, %73 ], [ %89, %87 ]
%101 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), double %98, double %99, double %100)
%102 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %1)
%103 = load i8, i8* %1
%104 = icmp eq i8 %103, 69
br i1 %104, label %105, label %10
105: ; preds = %97, %85, %0
ret i32 0
}