#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 const *);
scalar_t__ isdigit(int);
scalar_t__ isspace(int);
int /*<<< orphan*/ *strchr(char *, char const);
int parse_coord(const char *s, double *a) {
  double e, f, n = 1.0;
  int r;
  for (; isspace((int)*s); s++)
    ;
  if (*s == '-') {
    s++;
    n = -1.0;
  }
  for (*a = 0.0; isdigit((int)*s); s++) {
    *a *= 10.0;
    *a += *s - '0';
  }
  for (; isspace((int)*s); s++)
    ;
  if (*s == '\0') {
    *a *= n;
    return -1;
  }
  if (((strchr("Nn", (*s)) != NULL) || (strchr("Ss", (*s)) != NULL))) {
    r = 0;
    if ((strchr("Ss", (*s)) != NULL))
      n *= -1.0;
  } else if (((strchr("EeOo", (*s)) != NULL) || (strchr("Ww", (*s)) != NULL))) {
    r = 1;
    if ((strchr("Ww", (*s)) != NULL))
      n *= -1.0;
  } else if (*s == '.') {
    s++;
    for (e = 1.0, f = 0.0; isdigit((int)*s); e *= 10.0, s++) {
      f *= 10.0;
      f += *s - '0';
    }
    *a += f / e;
    *a *= n;
    for (; isspace((int)*s); s++)
      ;
    if (*s == '\0')
      return -1;
    if (((strchr("Nn", (*s)) != NULL) || (strchr("Ss", (*s)) != NULL))) {
      if ((strchr("Ss", (*s)) != NULL))
        *a *= -1.0;
      return 0;
    } else if (((strchr("EeOo", (*s)) != NULL) ||
                (strchr("Ww", (*s)) != NULL))) {
      if ((strchr("Ww", (*s)) != NULL))
        *a *= -1.0;
      return 1;
    } else
      return -1;
  } else {
    *a *= n;
    return -1;
  }
  s++;
  for (; isspace((int)*s); s++)
    ;
  f = atof(s);
  *a += f / 60.0;
  *a *= n;
  return r;
}


x86 assembly (clang, -O0):
<parse_coord>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movsd  0xea8(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%rax
je     1189 <parse_coord+0x49>
jmp    1178 <parse_coord+0x38>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    115d <parse_coord+0x1d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    11b2 <parse_coord+0x72>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movsd  0xe5b(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     1212 <parse_coord+0xd2>
mov    -0x18(%rbp),%rax
movsd  0xe31(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2sd %eax,%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11bd <parse_coord+0x7d>
jmp    1217 <parse_coord+0xd7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%rax
je     1243 <parse_coord+0x103>
jmp    1232 <parse_coord+0xf2>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1217 <parse_coord+0xd7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1270 <parse_coord+0x130>
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
mov    -0x10(%rbp),%rax
lea    0xda5(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
jne    12aa <parse_coord+0x16a>
mov    -0x10(%rbp),%rax
lea    0xd8b(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     12e5 <parse_coord+0x1a5>
movl   $0x0,-0x34(%rbp)
mov    -0x10(%rbp),%rax
lea    0xd67(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     12e0 <parse_coord+0x1a0>
movsd  0xd32(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1579 <parse_coord+0x439>
mov    -0x10(%rbp),%rax
lea    0xd36(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
jne    131f <parse_coord+0x1df>
mov    -0x10(%rbp),%rax
lea    0xd1e(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     135a <parse_coord+0x21a>
movl   $0x1,-0x34(%rbp)
mov    -0x10(%rbp),%rax
lea    0xcfa(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     1355 <parse_coord+0x215>
movsd  0xcbd(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    1574 <parse_coord+0x434>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1557 <parse_coord+0x417>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movsd  0xc82(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%rax
je     13ee <parse_coord+0x2ae>
movsd  0xc67(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
cvtsi2sd %eax,%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xc3d(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    138b <parse_coord+0x24b>
movsd  -0x28(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%rax
je     1441 <parse_coord+0x301>
jmp    1430 <parse_coord+0x2f0>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1415 <parse_coord+0x2d5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    145d <parse_coord+0x31d>
movl   $0xffffffff,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
mov    -0x10(%rbp),%rax
lea    0xbb8(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
jne    1497 <parse_coord+0x357>
mov    -0x10(%rbp),%rax
lea    0xb9e(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     14d4 <parse_coord+0x394>
mov    -0x10(%rbp),%rax
lea    0xb81(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     14c8 <parse_coord+0x388>
mov    -0x18(%rbp),%rax
movsd  0xb48(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
mov    -0x10(%rbp),%rax
lea    0xb47(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
jne    150e <parse_coord+0x3ce>
mov    -0x10(%rbp),%rax
lea    0xb2f(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     154b <parse_coord+0x40b>
mov    -0x10(%rbp),%rax
lea    0xb12(%rip),%rdi
movsbl (%rax),%esi
call   1050 <strchr@plt>
cmp    $0x0,%rax
je     153f <parse_coord+0x3ff>
mov    -0x18(%rbp),%rax
movsd  0xad1(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
movl   $0xffffffff,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movl   $0xffffffff,-0x4(%rbp)
jmp    15f3 <parse_coord+0x4b3>
jmp    1579 <parse_coord+0x439>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isspace@plt>
cmp    $0x0,%rax
je     15b1 <parse_coord+0x471>
jmp    15a0 <parse_coord+0x460>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1585 <parse_coord+0x445>
mov    -0x10(%rbp),%rdi
call   1040 <atof@plt>
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xa4c(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_coord>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r14
mov    %rdi,%rbx
add    $0xffffffffffffffff,%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1060 <isspace@plt>
test   %rax,%rax
jne    1160 <parse_coord+0x20>
xor    %ebp,%ebp
cmpb   $0x2d,(%rbx)
sete   %bpl
lea    0xe7e(%rip),%r15
movq   $0x0,(%r14)
movsbl (%rbx,%rbp,1),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     11dc <parse_coord+0x9c>
nopw   0x0(%rax,%rax,1)
movsd  (%r14),%xmm0
mulsd  0xe73(%rip),%xmm0
movsd  %xmm0,(%r14)
movsbl (%rbx,%rbp,1),%eax
add    $0xffffffd0,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%r14)
movsbl 0x1(%rbx,%rbp,1),%edi
call   1030 <isdigit@plt>
add    $0x1,%rbx
test   %rax,%rax
jne    11a0 <parse_coord+0x60>
add    %rbp,%rbx
movsd  (%r15,%rbp,8),%xmm0
movapd %xmm0,(%rsp)
add    $0xffffffffffffffff,%rbx
xchg   %ax,%ax
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1060 <isspace@plt>
test   %rax,%rax
jne    11f0 <parse_coord+0xb0>
mov    (%rbx),%al
test   %al,%al
je     1364 <parse_coord+0x224>
movsbl %al,%esi
lea    0xe22(%rip),%rdi
call   1050 <strchr@plt>
xor    %r15d,%r15d
test   %rax,%rax
je     122c <parse_coord+0xec>
lea    0xe11(%rip),%rbp
jmp    127d <parse_coord+0x13d>
movsbl (%rbx),%esi
lea    0xe05(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strchr@plt>
test   %rax,%rax
jne    127d <parse_coord+0x13d>
movsbl (%rbx),%esi
lea    0xdf1(%rip),%rdi
call   1050 <strchr@plt>
mov    $0x1,%r15d
test   %rax,%rax
je     1266 <parse_coord+0x126>
lea    0xddf(%rip),%rbp
jmp    127d <parse_coord+0x13d>
movsbl (%rbx),%esi
lea    0xdd3(%rip),%rbp
mov    %rbp,%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     12e9 <parse_coord+0x1a9>
movsbl (%rbx),%esi
mov    %rbp,%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     129c <parse_coord+0x15c>
movapd (%rsp),%xmm0
xorpd  0xd76(%rip),%xmm0
jmp    12a1 <parse_coord+0x161>
movapd (%rsp),%xmm0
movapd %xmm0,(%rsp)
cs nopw 0x0(%rax,%rax,1)
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1060 <isspace@plt>
test   %rax,%rax
jne    12b0 <parse_coord+0x170>
mov    %rbx,%rdi
call   1040 <atof@plt>
divsd  0xd56(%rip),%xmm0
addsd  (%r14),%xmm0
movapd (%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    1374 <parse_coord+0x234>
cmpb   $0x2e,(%rbx)
jne    1364 <parse_coord+0x224>
add    $0x1,%rbx
movsbl (%rbx),%edi
call   1030 <isdigit@plt>
test   %rax,%rax
je     1387 <parse_coord+0x247>
movsd  0xd25(%rip),%xmm2
xorpd  %xmm1,%xmm1
movapd %xmm1,%xmm0
movsd  0xd05(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsbl (%rbx),%eax
add    $0xffffffd0,%eax
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm3,0x18(%rsp)
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rsp)
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1030 <isdigit@plt>
movsd  0x20(%rsp),%xmm2
movsd  0x18(%rsp),%xmm1
test   %rax,%rax
jne    130f <parse_coord+0x1cf>
divsd  %xmm2,%xmm1
jmp    138b <parse_coord+0x24b>
movapd (%rsp),%xmm0
mulsd  (%r14),%xmm0
mov    $0xffffffff,%r15d
movsd  %xmm0,(%r14)
mov    %r15d,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
xorpd  %xmm1,%xmm1
addsd  (%r14),%xmm1
movapd (%rsp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,(%r14)
add    $0xffffffffffffffff,%rbx
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1060 <isspace@plt>
test   %rax,%rax
jne    13a2 <parse_coord+0x262>
mov    (%rbx),%al
mov    $0xffffffff,%r15d
test   %al,%al
je     1379 <parse_coord+0x239>
movsbl %al,%esi
lea    0xc6e(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
jne    13e8 <parse_coord+0x2a8>
movsbl (%rbx),%esi
lea    0xc5d(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     1419 <parse_coord+0x2d9>
movsbl (%rbx),%esi
lea    0xc49(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     1411 <parse_coord+0x2d1>
movsd  (%r14),%xmm0
xorpd  0xc07(%rip),%xmm0
xor    %r15d,%r15d
jmp    1374 <parse_coord+0x234>
xor    %r15d,%r15d
jmp    1379 <parse_coord+0x239>
movsbl (%rbx),%esi
lea    0xc1b(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
jne    1445 <parse_coord+0x305>
movsbl (%rbx),%esi
lea    0xc0c(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     1379 <parse_coord+0x239>
movsbl (%rbx),%esi
lea    0xbf4(%rip),%rdi
call   1050 <strchr@plt>
test   %rax,%rax
je     1471 <parse_coord+0x331>
movsd  (%r14),%xmm0
xorpd  0xbaa(%rip),%xmm0
mov    $0x1,%r15d
jmp    1374 <parse_coord+0x234>
mov    $0x1,%r15d
jmp    1379 <parse_coord+0x239>

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

LLVM IR (-O2):
@.str = [3 x i8] c"Nn\00"
@.str.1 = [3 x i8] c"Ss\00"
@.str.2 = [5 x i8] c"EeOo\00"
@.str.3 = [3 x i8] c"Ww\00"
define i32 @parse_coord(i8* nocapture %0, double* nocapture %1) {
br label %3
3: ; preds = %3, %2
%4 = phi i8* [ %0, %2 ], [ %9, %3 ]
%5 = load i8, i8* %4
%6 = sext i8 %5 to i32
%7 = tail call i64 @isspace(i32 %6)
%8 = icmp eq i64 %7, 0
%9 = getelementptr inbounds i8, i8* %4, i64 1
br i1 %8, label %10, label %3
10: ; preds = %3
%11 = load i8, i8* %4
%12 = icmp eq i8 %11, 45
%13 = zext i1 %12 to i64
%14 = getelementptr i8, i8* %4, i64 %13
%15 = select i1 %12, double -1.000000e+00, double 1.000000e+00
store double 0.000000e+00, double* %1
%16 = load i8, i8* %14
%17 = sext i8 %16 to i32
%18 = tail call i64 @isdigit(i32 %17)
%19 = icmp eq i64 %18, 0
br i1 %19, label %34, label %20
20: ; preds = %10, %20
%21 = phi i8* [ %29, %20 ], [ %14, %10 ]
%22 = load double, double* %1
%23 = fmul double %22, 1.000000e+01
store double %23, double* %1
%24 = load i8, i8* %21
%25 = sext i8 %24 to i32
%26 = add nsw i32 %25, -48
%27 = sitofp i32 %26 to double
%28 = fadd double %23, %27
store double %28, double* %1
%29 = getelementptr inbounds i8, i8* %21, i64 1
%30 = load i8, i8* %29
%31 = sext i8 %30 to i32
%32 = tail call i64 @isdigit(i32 %31)
%33 = icmp eq i64 %32, 0
br i1 %33, label %34, label %20
34: ; preds = %20, %10
%35 = phi i8* [ %14, %10 ], [ %29, %20 ]
br label %36
36: ; preds = %34, %36
%37 = phi i8* [ %42, %36 ], [ %35, %34 ]
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = tail call i64 @isspace(i32 %39)
%41 = icmp eq i64 %40, 0
%42 = getelementptr inbounds i8, i8* %37, i64 1
br i1 %41, label %43, label %36
43: ; preds = %36
%44 = load i8, i8* %37
%45 = icmp eq i8 %44, 0
br i1 %45, label %46, label %49
46: ; preds = %43
%47 = load double, double* %1
%48 = fmul double %15, %47
br label %159
49: ; preds = %43
%50 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 signext %44)
%51 = icmp eq i32* %50, null
br i1 %51, label %52, label %138
52: ; preds = %49
%53 = load i8, i8* %37
%54 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8 signext %53)
%55 = icmp eq i32* %54, null
br i1 %55, label %56, label %138
56: ; preds = %52
%57 = load i8, i8* %37
%58 = tail call i32* @strchr(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8 signext %57)
%59 = icmp eq i32* %58, null
br i1 %59, label %60, label %138
60: ; preds = %56
%61 = load i8, i8* %37
%62 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), i8 signext %61)
%63 = icmp eq i32* %62, null
br i1 %63, label %64, label %138
64: ; preds = %60
%65 = load i8, i8* %37
%66 = icmp eq i8 %65, 46
br i1 %66, label %67, label %135
67: ; preds = %64
%68 = load i8, i8* %42
%69 = sext i8 %68 to i32
%70 = tail call i64 @isdigit(i32 %69)
%71 = icmp eq i64 %70, 0
br i1 %71, label %90, label %72
72: ; preds = %67, %72
%73 = phi i8* [ %83, %72 ], [ %42, %67 ]
%74 = phi double [ %81, %72 ], [ 0.000000e+00, %67 ]
%75 = phi double [ %82, %72 ], [ 1.000000e+00, %67 ]
%76 = fmul double %74, 1.000000e+01
%77 = load i8, i8* %73
%78 = sext i8 %77 to i32
%79 = add nsw i32 %78, -48
%80 = sitofp i32 %79 to double
%81 = fadd double %76, %80
%82 = fmul double %75, 1.000000e+01
%83 = getelementptr inbounds i8, i8* %73, i64 1
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = tail call i64 @isdigit(i32 %85)
%87 = icmp eq i64 %86, 0
br i1 %87, label %88, label %72
88: ; preds = %72
%89 = fdiv double %81, %82
br label %90
90: ; preds = %88, %67
%91 = phi i8* [ %42, %67 ], [ %83, %88 ]
%92 = phi double [ 0.000000e+00, %67 ], [ %89, %88 ]
%93 = load double, double* %1
%94 = fadd double %92, %93
%95 = fmul double %15, %94
store double %95, double* %1
br label %96
96: ; preds = %96, %90
%97 = phi i8* [ %91, %90 ], [ %102, %96 ]
%98 = load i8, i8* %97
%99 = sext i8 %98 to i32
%100 = tail call i64 @isspace(i32 %99)
%101 = icmp eq i64 %100, 0
%102 = getelementptr inbounds i8, i8* %97, i64 1
br i1 %101, label %103, label %96
103: ; preds = %96
%104 = load i8, i8* %97
%105 = icmp eq i8 %104, 0
br i1 %105, label %162, label %106
106: ; preds = %103
%107 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8 signext %104)
%108 = icmp eq i32* %107, null
br i1 %108, label %109, label %113
109: ; preds = %106
%110 = load i8, i8* %97
%111 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8 signext %110)
%112 = icmp eq i32* %111, null
br i1 %112, label %120, label %113
113: ; preds = %109, %106
%114 = load i8, i8* %97
%115 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8 signext %114)
%116 = icmp eq i32* %115, null
br i1 %116, label %162, label %117
117: ; preds = %113
%118 = load double, double* %1
%119 = fneg double %118
br label %159
120: ; preds = %109
%121 = load i8, i8* %97
%122 = tail call i32* @strchr(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8 signext %121)
%123 = icmp eq i32* %122, null
br i1 %123, label %124, label %128
124: ; preds = %120
%125 = load i8, i8* %97
%126 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), i8 signext %125)
%127 = icmp eq i32* %126, null
br i1 %127, label %162, label %128
128: ; preds = %124, %120
%129 = load i8, i8* %97
%130 = tail call i32* @strchr(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), i8 signext %129)
%131 = icmp eq i32* %130, null
br i1 %131, label %162, label %132
132: ; preds = %128
%133 = load double, double* %1
%134 = fneg double %133
br label %159
135: ; preds = %64
%136 = load double, double* %1
%137 = fmul double %15, %136
br label %159
138: ; preds = %56, %60, %49, %52
%139 = phi i8* [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), %52 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), %49 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), %60 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), %56 ]
%140 = phi i32 [ 0, %52 ], [ 0, %49 ], [ 1, %60 ], [ 1, %56 ]
%141 = load i8, i8* %37
%142 = tail call i32* @strchr(i8* %139, i8 signext %141)
%143 = icmp eq i32* %142, null
%144 = fneg double %15
%145 = select i1 %143, double %15, double %144
br label %146
146: ; preds = %146, %138
%147 = phi i8* [ %37, %138 ], [ %148, %146 ]
%148 = getelementptr inbounds i8, i8* %147, i64 1
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = tail call i64 @isspace(i32 %150)
%152 = icmp eq i64 %151, 0
br i1 %152, label %153, label %146
153: ; preds = %146
%154 = tail call double @atof(i8* %148)
%155 = fdiv double %154, 6.000000e+01
%156 = load double, double* %1
%157 = fadd double %156, %155
%158 = fmul double %145, %157
br label %159
159: ; preds = %46, %135, %153, %117, %132
%160 = phi double [ %134, %132 ], [ %119, %117 ], [ %158, %153 ], [ %137, %135 ], [ %48, %46 ]
%161 = phi i32 [ 1, %132 ], [ 0, %117 ], [ %140, %153 ], [ -1, %135 ], [ -1, %46 ]
store double %160, double* %1
br label %162
162: ; preds = %159, %124, %128, %113, %103
%163 = phi i32 [ -1, %103 ], [ 0, %113 ], [ 1, %128 ], [ -1, %124 ], [ %161, %159 ]
ret i32 %163
}