#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 atof(char *);
int atoi(char *);
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ finite(double);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *);
double pow(double, int);
int /*<<< orphan*/ printf(char *, double, double);
int sqrt(int);
int /*<<< orphan*/ stderr;
int /*<<< orphan*/ usage(char *);
int main(int argc, char **argv) {
  double mw;
  double temperature;
  double kT;
  double P;
  double dP;
  double pressure_lb, pressure_ub;
  int points;
  double B;
  double density;
  int i;
  double current_a;
  if (argc < 7)
    usage(argv[0]);
  else {
    ++argv;
    --argc;
  };
  mw = atof(*argv);
  ++argv;
  --argc;
  temperature = atof(*argv);
  ++argv;
  --argc;
  pressure_lb = atof(*argv);
  ++argv;
  --argc;
  pressure_ub = atof(*argv);
  ++argv;
  --argc;
  points = atoi(*argv);
  ++argv;
  --argc;
  if ((mw < 1) || (mw > 267)) {
    fprintf(stderr, "%s: invalid molecular weight\n", argv[0]);
    usage(argv[0]);
  }
  if (temperature < 0) {
    fprintf(stderr, "%s: invalid temperature\n", argv[0]);
    usage(argv[0]);
  }
  if ((pressure_lb > pressure_ub) || (pressure_lb < 0) || (pressure_ub < 0)) {
    fprintf(stderr, "%s: invalid pressure range specified\n", argv[0]);
    usage(argv[0]);
  }
  if (points < 1) {
    fprintf(stderr, "%s: invalid number of data points\n", argv[0]);
    usage(argv[0]);
  }
  for (i = 0, B = 0; i < argc; i++) {
    current_a = atof(*(argv + i));
    B += current_a * (pow((298.15 / temperature - 1), i));
  }
  pressure_lb *= 101325;
  pressure_ub *= 101325;
  dP = (pressure_ub - pressure_lb) / points;
  B /= 6.02214e23 * 1.0e6;
  kT = 1.3806503e-23 * temperature;
  for (P = pressure_lb; P <= pressure_ub; P += dP) {
    density = (-1 + sqrt(1 + 4 * B * P / kT)) / (2 * B);
    density *= mw / (6.02214e23 * 1.0e6);
    if (!finite(density))
      break;
    else
      printf("%f %f\n", P / 101325, density);
  }
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpl   $0x7,-0x8(%rbp)
jge    11b4 <main+0x34>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1060 <usage@plt>
jmp    11c9 <main+0x49>
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1080 <atoi@plt>
mov    %eax,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
movsd  0xd73(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
ja     12af <main+0x12f>
movsd  -0x18(%rbp),%xmm0
movsd  0xd63(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12d7 <main+0x157>
mov    0x2d2a(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%rdx
lea    0xd9a(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1060 <usage@plt>
xorps  %xmm0,%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    130d <main+0x18d>
mov    0x2cf4(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%rdx
lea    0xd82(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1060 <usage@plt>
movsd  -0x40(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
ja     1339 <main+0x1b9>
xorps  %xmm0,%xmm0
ucomisd -0x40(%rbp),%xmm0
ja     1339 <main+0x1b9>
xorps  %xmm0,%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    1361 <main+0x1e1>
mov    0x2ca0(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%rdx
lea    0xd47(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1060 <usage@plt>
cmpl   $0x1,-0x4c(%rbp)
jge    1393 <main+0x213>
mov    0x2c6e(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    (%rax),%rdx
lea    0xd3b(%rip),%rsi
call   1050 <fprintf@plt>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
call   1060 <usage@plt>
movl   $0x0,-0x64(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1417 <main+0x297>
mov    -0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1030 <atof@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xc6a(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  0xc1d(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x64(%rbp),%edi
call   1070 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x78(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13a2 <main+0x222>
movsd  0xc01(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xbef(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
cvtsi2sdl -0x4c(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0xbb8(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xb9f(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1561 <main+0x3e1>
movsd  0xb97(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  -0x30(%rbp),%xmm1
divsd  -0x28(%rbp),%xmm1
movsd  0xb48(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edi
call   1090 <sqrt@plt>
add    $0xffffffff,%eax
cvtsi2sd %eax,%xmm0
movsd  0xb5a(%rip),%xmm1
mulsd  -0x58(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xb27(%rip),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movaps 0xb45(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xb11(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1526 <main+0x3a6>
jmp    1561 <main+0x3e1>
movsd  -0x30(%rbp),%xmm0
movsd  0xaed(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
lea    0xb9d(%rip),%rdi
call   1040 <printf@plt>
jmp    154d <main+0x3cd>
movsd  -0x38(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1485 <main+0x305>
xor    %edi,%edi
call   10a0 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x38,%rsp
mov    %rsi,%r15
mov    %edi,%ebp
cmp    $0x6,%edi
jg     119e <main+0x1e>
mov    (%r15),%rdi
call   1060 <usage@plt>
jmp    11a5 <main+0x25>
add    $0x8,%r15
add    $0xffffffff,%ebp
mov    (%r15),%rdi
call   1030 <atof@plt>
movsd  %xmm0,0x10(%rsp)
mov    0x8(%r15),%rdi
call   1030 <atof@plt>
movsd  %xmm0,0x8(%rsp)
mov    0x10(%r15),%rdi
call   1030 <atof@plt>
movsd  %xmm0,0x18(%rsp)
mov    0x18(%r15),%rdi
call   1030 <atof@plt>
movsd  %xmm0,(%rsp)
mov    0x20(%r15),%rdi
call   1080 <atoi@plt>
mov    %eax,%r14d
movsd  0xe0d(%rip),%xmm0
ucomisd 0x10(%rsp),%xmm0
ja     120b <main+0x8b>
movsd  0x10(%rsp),%xmm0
ucomisd 0xdff(%rip),%xmm0
jbe    122d <main+0xad>
mov    0x2dce(%rip),%rax
mov    (%rax),%edi
mov    0x28(%r15),%rdx
lea    0xe41(%rip),%rsi
call   1050 <fprintf@plt>
mov    0x28(%r15),%rdi
call   1060 <usage@plt>
xorpd  %xmm0,%xmm0
ucomisd 0x8(%rsp),%xmm0
jbe    125f <main+0xdf>
mov    0x2da0(%rip),%rax
mov    (%rax),%edi
mov    0x28(%r15),%rdx
lea    0xe31(%rip),%rsi
call   1050 <fprintf@plt>
mov    0x28(%r15),%rdi
call   1060 <usage@plt>
xorpd  %xmm0,%xmm0
ucomisd (%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
ja     144f <main+0x2cf>
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
ja     144f <main+0x2cf>
ucomisd (%rsp),%xmm1
ja     144f <main+0x2cf>
test   %r14d,%r14d
jg     12b0 <main+0x130>
mov    0x2d4b(%rip),%rax
mov    (%rax),%edi
mov    0x28(%r15),%rdx
lea    0xe1b(%rip),%rsi
call   1050 <fprintf@plt>
mov    0x28(%r15),%rdi
call   1060 <usage@plt>
xorpd  %xmm2,%xmm2
cmp    $0x6,%ebp
jl     131c <main+0x19c>
movsd  0xd4f(%rip),%xmm0
divsd  0x8(%rsp),%xmm0
addsd  0xd49(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
add    $0xfffffffb,%ebp
mov    %ebp,%ebx
xorpd  %xmm2,%xmm2
xor    %ebp,%ebp
movsd  %xmm2,0x30(%rsp)
mov    0x28(%r15,%rbp,8),%rdi
call   1030 <atof@plt>
movsd  %xmm0,0x28(%rsp)
movsd  0x20(%rsp),%xmm0
mov    %ebp,%edi
call   1070 <pow@plt>
movsd  0x30(%rsp),%xmm2
mulsd  0x28(%rsp),%xmm0
addsd  %xmm0,%xmm2
add    $0x1,%rbp
cmp    %rbp,%rbx
jne    12e0 <main+0x160>
movsd  0xcfc(%rip),%xmm3
movsd  0x18(%rsp),%xmm1
mulsd  %xmm3,%xmm1
movsd  (%rsp),%xmm0
mulsd  %xmm3,%xmm0
movsd  %xmm0,(%rsp)
ucomisd %xmm1,%xmm0
jb     1448 <main+0x2c8>
movsd  (%rsp),%xmm3
subsd  %xmm1,%xmm3
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
divsd  %xmm0,%xmm3
movsd  %xmm3,0x20(%rsp)
divsd  0xcbf(%rip),%xmm2
movsd  0x8(%rsp),%xmm0
mulsd  0xcb9(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0xcb3(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x10(%rsp),%xmm0
divsd  0xc8b(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
addsd  %xmm2,%xmm2
movsd  %xmm2,0x30(%rsp)
lea    0xd2c(%rip),%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm1,0x18(%rsp)
movsd  0x28(%rsp),%xmm0
mulsd  %xmm1,%xmm0
divsd  0x8(%rsp),%xmm0
addsd  0xc22(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1090 <sqrt@plt>
movsd  0x18(%rsp),%xmm2
add    $0xffffffff,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
divsd  0x30(%rsp),%xmm1
mulsd  0x10(%rsp),%xmm1
movapd %xmm1,%xmm0
andpd  0xc41(%rip),%xmm0
ucomisd 0xc29(%rip),%xmm0
je     1448 <main+0x2c8>
movapd %xmm2,%xmm0
divsd  0xbfb(%rip),%xmm0
mov    %rbx,%rdi
call   1040 <printf@plt>
movsd  0x18(%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
movsd  (%rsp),%xmm0
ucomisd %xmm1,%xmm0
jae    13c0 <main+0x240>
xor    %edi,%edi
call   10a0 <exit@plt>
mov    0x2b8a(%rip),%rax
mov    (%rax),%edi
mov    0x28(%r15),%rdx
lea    0xc34(%rip),%rsi
call   1050 <fprintf@plt>
mov    0x28(%r15),%rdi
call   1060 <usage@plt>
test   %r14d,%r14d
jle    128e <main+0x10e>
jmp    12b0 <main+0x130>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [30 x i8] c"%s: invalid molecular weight\0A\00"
@.str.1 = [25 x i8] c"%s: invalid temperature\0A\00"
@.str.2 = [38 x i8] c"%s: invalid pressure range specified\0A\00"
@.str.3 = [35 x i8] c"%s: invalid number of data points\0A\00"
@.str.4 = [7 x i8] c"%f %f\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca i32
%14 = alloca double
%15 = alloca double
%16 = alloca i32
%17 = alloca double
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%18 = load i32, i32* %4
%19 = icmp slt i32 %18, 7
br i1 %19, label %20, label %25
20: ; preds = %2
%21 = load i8**, i8*** %5
%22 = getelementptr inbounds i8*, i8** %21, i64 0
%23 = load i8*, i8** %22
%24 = call i32 @usage(i8* %23)
br label %30
25: ; preds = %2
%26 = load i8**, i8*** %5
%27 = getelementptr inbounds i8*, i8** %26, i32 1
store i8** %27, i8*** %5
%28 = load i32, i32* %4
%29 = add nsw i32 %28, -1
store i32 %29, i32* %4
br label %30
30: ; preds = %25, %20
%31 = load i8**, i8*** %5
%32 = load i8*, i8** %31
%33 = call double @atof(i8* %32)
store double %33, double* %6
%34 = load i8**, i8*** %5
%35 = getelementptr inbounds i8*, i8** %34, i32 1
store i8** %35, i8*** %5
%36 = load i32, i32* %4
%37 = add nsw i32 %36, -1
store i32 %37, i32* %4
%38 = load i8**, i8*** %5
%39 = load i8*, i8** %38
%40 = call double @atof(i8* %39)
store double %40, double* %7
%41 = load i8**, i8*** %5
%42 = getelementptr inbounds i8*, i8** %41, i32 1
store i8** %42, i8*** %5
%43 = load i32, i32* %4
%44 = add nsw i32 %43, -1
store i32 %44, i32* %4
%45 = load i8**, i8*** %5
%46 = load i8*, i8** %45
%47 = call double @atof(i8* %46)
store double %47, double* %11
%48 = load i8**, i8*** %5
%49 = getelementptr inbounds i8*, i8** %48, i32 1
store i8** %49, i8*** %5
%50 = load i32, i32* %4
%51 = add nsw i32 %50, -1
store i32 %51, i32* %4
%52 = load i8**, i8*** %5
%53 = load i8*, i8** %52
%54 = call double @atof(i8* %53)
store double %54, double* %12
%55 = load i8**, i8*** %5
%56 = getelementptr inbounds i8*, i8** %55, i32 1
store i8** %56, i8*** %5
%57 = load i32, i32* %4
%58 = add nsw i32 %57, -1
store i32 %58, i32* %4
%59 = load i8**, i8*** %5
%60 = load i8*, i8** %59
%61 = call i32 @atoi(i8* %60)
store i32 %61, i32* %13
%62 = load i8**, i8*** %5
%63 = getelementptr inbounds i8*, i8** %62, i32 1
store i8** %63, i8*** %5
%64 = load i32, i32* %4
%65 = add nsw i32 %64, -1
store i32 %65, i32* %4
%66 = load double, double* %6
%67 = fcmp olt double %66, 1.000000e+00
br i1 %67, label %71, label %68
68: ; preds = %30
%69 = load double, double* %6
%70 = fcmp ogt double %69, 2.670000e+02
br i1 %70, label %71, label %81
71: ; preds = %68, %30
%72 = load i32, i32* @stderr
%73 = load i8**, i8*** %5
%74 = getelementptr inbounds i8*, i8** %73, i64 0
%75 = load i8*, i8** %74
%76 = call i32 @fprintf(i32 %72, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0), i8* %75)
%77 = load i8**, i8*** %5
%78 = getelementptr inbounds i8*, i8** %77, i64 0
%79 = load i8*, i8** %78
%80 = call i32 @usage(i8* %79)
br label %81
81: ; preds = %71, %68
%82 = load double, double* %7
%83 = fcmp olt double %82, 0.000000e+00
br i1 %83, label %84, label %94
84: ; preds = %81
%85 = load i32, i32* @stderr
%86 = load i8**, i8*** %5
%87 = getelementptr inbounds i8*, i8** %86, i64 0
%88 = load i8*, i8** %87
%89 = call i32 @fprintf(i32 %85, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), i8* %88)
%90 = load i8**, i8*** %5
%91 = getelementptr inbounds i8*, i8** %90, i64 0
%92 = load i8*, i8** %91
%93 = call i32 @usage(i8* %92)
br label %94
94: ; preds = %84, %81
%95 = load double, double* %11
%96 = load double, double* %12
%97 = fcmp ogt double %95, %96
br i1 %97, label %104, label %98
98: ; preds = %94
%99 = load double, double* %11
%100 = fcmp olt double %99, 0.000000e+00
br i1 %100, label %104, label %101
101: ; preds = %98
%102 = load double, double* %12
%103 = fcmp olt double %102, 0.000000e+00
br i1 %103, label %104, label %114
104: ; preds = %101, %98, %94
%105 = load i32, i32* @stderr
%106 = load i8**, i8*** %5
%107 = getelementptr inbounds i8*, i8** %106, i64 0
%108 = load i8*, i8** %107
%109 = call i32 @fprintf(i32 %105, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0), i8* %108)
%110 = load i8**, i8*** %5
%111 = getelementptr inbounds i8*, i8** %110, i64 0
%112 = load i8*, i8** %111
%113 = call i32 @usage(i8* %112)
br label %114
114: ; preds = %104, %101
%115 = load i32, i32* %13
%116 = icmp slt i32 %115, 1
br i1 %116, label %117, label %127
117: ; preds = %114
%118 = load i32, i32* @stderr
%119 = load i8**, i8*** %5
%120 = getelementptr inbounds i8*, i8** %119, i64 0
%121 = load i8*, i8** %120
%122 = call i32 @fprintf(i32 %118, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i8* %121)
%123 = load i8**, i8*** %5
%124 = getelementptr inbounds i8*, i8** %123, i64 0
%125 = load i8*, i8** %124
%126 = call i32 @usage(i8* %125)
br label %127
127: ; preds = %117, %114
store i32 0, i32* %16
store double 0.000000e+00, double* %14
br label %128
128: ; preds = %147, %127
%129 = load i32, i32* %16
%130 = load i32, i32* %4
%131 = icmp slt i32 %129, %130
br i1 %131, label %132, label %150
132: ; preds = %128
%133 = load i8**, i8*** %5
%134 = load i32, i32* %16
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds i8*, i8** %133, i64 %135
%137 = load i8*, i8** %136
%138 = call double @atof(i8* %137)
store double %138, double* %17
%139 = load double, double* %17
%140 = load double, double* %7
%141 = fdiv double 2.981500e+02, %140
%142 = fsub double %141, 1.000000e+00
%143 = load i32, i32* %16
%144 = call double @pow(double %142, i32 %143)
%145 = load double, double* %14
%146 = call double @llvm.fmuladd.f64(double %139, double %144, double %145)
store double %146, double* %14
br label %147
147: ; preds = %132
%148 = load i32, i32* %16
%149 = add nsw i32 %148, 1
store i32 %149, i32* %16
br label %128
150: ; preds = %128
%151 = load double, double* %11
%152 = fmul double %151, 1.013250e+05
store double %152, double* %11
%153 = load double, double* %12
%154 = fmul double %153, 1.013250e+05
store double %154, double* %12
%155 = load double, double* %12
%156 = load double, double* %11
%157 = fsub double %155, %156
%158 = load i32, i32* %13
%159 = sitofp i32 %158 to double
%160 = fdiv double %157, %159
store double %160, double* %10
%161 = load double, double* %14
%162 = fdiv double %161, 6.022140e+29
store double %162, double* %14
%163 = load double, double* %7
%164 = fmul double 0x3B30B0E7DD0A406E, %163
store double %164, double* %8
%165 = load double, double* %11
store double %165, double* %9
br label %166
166: ; preds = %199, %150
%167 = load double, double* %9
%168 = load double, double* %12
%169 = fcmp ole double %167, %168
br i1 %169, label %170, label %203
170: ; preds = %166
%171 = load double, double* %14
%172 = fmul double 4.000000e+00, %171
%173 = load double, double* %9
%174 = fmul double %172, %173
%175 = load double, double* %8
%176 = fdiv double %174, %175
%177 = fadd double 1.000000e+00, %176
%178 = fptosi double %177 to i32
%179 = call i32 @sqrt(i32 %178)
%180 = add nsw i32 -1, %179
%181 = sitofp i32 %180 to double
%182 = load double, double* %14
%183 = fmul double 2.000000e+00, %182
%184 = fdiv double %181, %183
store double %184, double* %15
%185 = load double, double* %6
%186 = fdiv double %185, 6.022140e+29
%187 = load double, double* %15
%188 = fmul double %187, %186
store double %188, double* %15
%189 = load double, double* %15
%190 = call double @llvm.fabs.f64(double %189)
%191 = fcmp one double %190, 0x7FF0000000000000
br i1 %191, label %193, label %192
192: ; preds = %170
br label %203
193: ; preds = %170
%194 = load double, double* %9
%195 = fdiv double %194, 1.013250e+05
%196 = load double, double* %15
%197 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), double %195, double %196)
br label %198
198: ; preds = %193
br label %199
199: ; preds = %198
%200 = load double, double* %10
%201 = load double, double* %9
%202 = fadd double %201, %200
store double %202, double* %9
br label %166
203: ; preds = %192, %166
%204 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [30 x i8] c"%s: invalid molecular weight\0A\00"
@.str.1 = [25 x i8] c"%s: invalid temperature\0A\00"
@.str.2 = [38 x i8] c"%s: invalid pressure range specified\0A\00"
@.str.3 = [35 x i8] c"%s: invalid number of data points\0A\00"
@.str.4 = [7 x i8] c"%f %f\0A\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = icmp slt i32 %0, 7
br i1 %3, label %4, label %7
4: ; preds = %2
%5 = load i8*, i8** %1
%6 = tail call i32 @usage(i8* %5)
br label %10
7: ; preds = %2
%8 = getelementptr inbounds i8*, i8** %1, i64 1
%9 = add nsw i32 %0, -1
br label %10
10: ; preds = %7, %4
%11 = phi i8** [ %1, %4 ], [ %8, %7 ]
%12 = phi i32 [ %0, %4 ], [ %9, %7 ]
%13 = load i8*, i8** %11
%14 = tail call double @atof(i8* %13)
%15 = getelementptr inbounds i8*, i8** %11, i64 1
%16 = load i8*, i8** %15
%17 = tail call double @atof(i8* %16)
%18 = getelementptr inbounds i8*, i8** %11, i64 2
%19 = load i8*, i8** %18
%20 = tail call double @atof(i8* %19)
%21 = getelementptr inbounds i8*, i8** %11, i64 3
%22 = load i8*, i8** %21
%23 = tail call double @atof(i8* %22)
%24 = getelementptr inbounds i8*, i8** %11, i64 4
%25 = load i8*, i8** %24
%26 = tail call i32 @atoi(i8* %25)
%27 = getelementptr inbounds i8*, i8** %11, i64 5
%28 = add i32 %12, -5
%29 = fcmp olt double %14, 1.000000e+00
%30 = fcmp ogt double %14, 2.670000e+02
%31 = or i1 %29, %30
br i1 %31, label %32, label %38
32: ; preds = %10
%33 = load i32, i32* @stderr
%34 = load i8*, i8** %27
%35 = tail call i32 @fprintf(i32 %33, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0), i8* %34)
%36 = load i8*, i8** %27
%37 = tail call i32 @usage(i8* %36)
br label %38
38: ; preds = %10, %32
%39 = fcmp olt double %17, 0.000000e+00
br i1 %39, label %40, label %46
40: ; preds = %38
%41 = load i32, i32* @stderr
%42 = load i8*, i8** %27
%43 = tail call i32 @fprintf(i32 %41, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.1, i64 0, i64 0), i8* %42)
%44 = load i8*, i8** %27
%45 = tail call i32 @usage(i8* %44)
br label %46
46: ; preds = %40, %38
%47 = fcmp ogt double %20, %23
%48 = fcmp olt double %20, 0.000000e+00
%49 = or i1 %48, %47
%50 = fcmp olt double %23, 0.000000e+00
%51 = or i1 %50, %49
br i1 %51, label %52, label %58
52: ; preds = %46
%53 = load i32, i32* @stderr
%54 = load i8*, i8** %27
%55 = tail call i32 @fprintf(i32 %53, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.2, i64 0, i64 0), i8* %54)
%56 = load i8*, i8** %27
%57 = tail call i32 @usage(i8* %56)
br label %58
58: ; preds = %46, %52
%59 = icmp slt i32 %26, 1
br i1 %59, label %60, label %66
60: ; preds = %58
%61 = load i32, i32* @stderr
%62 = load i8*, i8** %27
%63 = tail call i32 @fprintf(i32 %61, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0), i8* %62)
%64 = load i8*, i8** %27
%65 = tail call i32 @usage(i8* %64)
br label %66
66: ; preds = %60, %58
%67 = icmp sgt i32 %12, 5
br i1 %67, label %68, label %83
68: ; preds = %66
%69 = fdiv double 2.981500e+02, %17
%70 = fadd double %69, -1.000000e+00
%71 = zext i32 %28 to i64
br label %72
72: ; preds = %68, %72
%73 = phi i64 [ 0, %68 ], [ %81, %72 ]
%74 = phi double [ 0.000000e+00, %68 ], [ %80, %72 ]
%75 = getelementptr inbounds i8*, i8** %27, i64 %73
%76 = load i8*, i8** %75
%77 = tail call double @atof(i8* %76)
%78 = trunc i64 %73 to i32
%79 = tail call double @pow(double %70, i32 %78)
%80 = tail call double @llvm.fmuladd.f64(double %77, double %79, double %74)
%81 = add nuw nsw i64 %73, 1
%82 = icmp eq i64 %81, %71
br i1 %82, label %83, label %72
83: ; preds = %72, %66
%84 = phi double [ 0.000000e+00, %66 ], [ %80, %72 ]
%85 = fmul double %20, 1.013250e+05
%86 = fmul double %23, 1.013250e+05
%87 = fsub double %86, %85
%88 = sitofp i32 %26 to double
%89 = fdiv double %87, %88
%90 = fdiv double %84, 6.022140e+29
%91 = fmul double %17, 0x3B30B0E7DD0A406E
%92 = fmul double %90, 4.000000e+00
%93 = fcmp ugt double %85, %86
br i1 %93, label %115, label %94
94: ; preds = %83
%95 = fmul double %90, 2.000000e+00
%96 = fdiv double %14, 6.022140e+29
br label %97
97: ; preds = %94, %110
%98 = phi double [ %85, %94 ], [ %113, %110 ]
%99 = fmul double %92, %98
%100 = fdiv double %99, %91
%101 = fadd double %100, 1.000000e+00
%102 = fptosi double %101 to i32
%103 = tail call i32 @sqrt(i32 %102)
%104 = add nsw i32 %103, -1
%105 = sitofp i32 %104 to double
%106 = fdiv double %105, %95
%107 = fmul double %96, %106
%108 = tail call double @llvm.fabs.f64(double %107)
%109 = fcmp ueq double %108, 0x7FF0000000000000
br i1 %109, label %115, label %110
110: ; preds = %97
%111 = fdiv double %98, 1.013250e+05
%112 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), double %111, double %107)
%113 = fadd double %89, %98
%114 = fcmp ugt double %113, %86
br i1 %114, label %115, label %97
115: ; preds = %110, %97, %83
%116 = tail call i32 @exit(i32 0)
unreachable
}