#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 */
float atof(char *);
int atoi(char *);
char *strchr(char *, char);
int /*<<< orphan*/ strncpy(char *, char const *, int);
char toupper(char const);
int SARParseLatitudeDMS(const char *string, float *dms) {
  const char *sp;
  int in_len, is_traditional = 0, is_south = 0;
  int lstring_len = 80;
  char *sp2, *sp3;
  char lstring[80];
  if (dms != NULL)
    *dms = 0.0f;
  if ((string != NULL) ? (*string == '\0') : 1)
    return (-1);
  sp = string;
  in_len = 0;
  while ((*sp != '\0') && !(((*sp) == ' ') || ((*sp) == '\t'))) {
    if (toupper(*sp) == '\'')
      is_traditional = 1;
    if (toupper(*sp) == 'S')
      is_south = 1;
    sp++;
    in_len++;
  }
  if (in_len > 0)
    strncpy(lstring, string,
            (((in_len) < (lstring_len)) ? (in_len) : (lstring_len)));
  else
    *lstring = '\0';
  lstring[(((in_len) < (lstring_len - 1)) ? (in_len) : (lstring_len - 1))] =
      '\0';
  if (is_traditional) {
    int d = 0, m = 0, s = 0;
    sp2 = lstring;
    if (sp2 != NULL) {
      sp3 = strchr(sp2, '\'');
      if (sp3 != NULL) {
        *sp3 = '\0';
        d = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = sp3 + 1;
      } else {
        d = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = NULL;
      }
    }
    if (sp2 != NULL) {
      sp3 = strchr(sp2, '"');
      if (sp3 != NULL) {
        *sp3 = '\0';
        m = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = sp3 + 1;
      } else {
        m = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = NULL;
      }
    }
    if (sp2 != NULL) {
      sp3 = strchr(sp2, '"');
      if (sp3 != NULL) {
        *sp3 = '\0';
        s = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = sp3 + 1;
      } else {
        s = (((sp2) != NULL) ? atoi(sp2) : 0);
        sp2 = NULL;
      }
    }
    if (dms != NULL) {
      if (is_south && (d > 0.0f))
        *dms = (float)-d - ((float)m / 60.0f) - ((float)s / 60.0f / 100.0f);
      else if (d < 0)
        *dms = (float)d - ((float)m / 60.0f) - ((float)s / 60.0f / 100.0f);
      else
        *dms = (float)d + ((float)m / 60.0f) + ((float)s / 60.0f / 100.0f);
    }
  } else {
    sp2 = lstring;
    if (dms != NULL) {
      float d = (float)(((sp2) != NULL) ? atof(sp2) : 0.0f);
      if (is_south && (d > 0.0f))
        *dms = -d;
      else
        *dms = d;
    }
  }
  return (0);
}


x86 assembly (clang, -O0):
<SARParseLatitudeDMS>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x50,-0x30(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     118e <SARParseLatitudeDMS+0x3e>
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax)
cmpq   $0x0,-0x10(%rbp)
je     11ae <SARParseLatitudeDMS+0x5e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     11bd <SARParseLatitudeDMS+0x6d>
jmp    11c9 <SARParseLatitudeDMS+0x79>
mov    $0x1,%al
test   $0x1,%al
jne    11bd <SARParseLatitudeDMS+0x6d>
jmp    11c9 <SARParseLatitudeDMS+0x79>
movl   $0xffffffff,-0x4(%rbp)
jmp    1793 <SARParseLatitudeDMS+0x643>
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xa1(%rbp)
je     1229 <SARParseLatitudeDMS+0xd9>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0xa2(%rbp)
je     121b <SARParseLatitudeDMS+0xcb>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0xa2(%rbp)
mov    -0xa2(%rbp),%al
xor    $0xff,%al
mov    %al,-0xa1(%rbp)
mov    -0xa1(%rbp),%al
test   $0x1,%al
jne    123c <SARParseLatitudeDMS+0xec>
jmp    1294 <SARParseLatitudeDMS+0x144>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x27,%eax
jne    125b <SARParseLatitudeDMS+0x10b>
movl   $0x1,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x53,%eax
jne    127a <SARParseLatitudeDMS+0x12a>
movl   $0x1,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11d8 <SARParseLatitudeDMS+0x88>
cmpl   $0x0,-0x24(%rbp)
jle    12f8 <SARParseLatitudeDMS+0x1a8>
lea    -0x90(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0xb0(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    12d1 <SARParseLatitudeDMS+0x181>
mov    -0x24(%rbp),%eax
mov    %eax,-0xbc(%rbp)
jmp    12da <SARParseLatitudeDMS+0x18a>
mov    -0x30(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    -0xb0(%rbp),%rsi
mov    -0xb8(%rbp),%rdi
mov    -0xbc(%rbp),%edx
call   1030 <strncpy@plt>
jmp    12ff <SARParseLatitudeDMS+0x1af>
movb   $0x0,-0x90(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    131e <SARParseLatitudeDMS+0x1ce>
mov    -0x24(%rbp),%eax
mov    %eax,-0xc0(%rbp)
jmp    132a <SARParseLatitudeDMS+0x1da>
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xc0(%rbp)
mov    -0xc0(%rbp),%eax
cltq
movb   $0x0,-0x90(%rbp,%rax,1)
cmpl   $0x0,-0x28(%rbp)
je     16db <SARParseLatitudeDMS+0x58b>
movl   $0x0,-0x94(%rbp)
movl   $0x0,-0x98(%rbp)
movl   $0x0,-0x9c(%rbp)
lea    -0x90(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
je     142a <SARParseLatitudeDMS+0x2da>
mov    -0x38(%rbp),%rdi
mov    $0x27,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     13e5 <SARParseLatitudeDMS+0x295>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     13bb <SARParseLatitudeDMS+0x26b>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xc4(%rbp)
jmp    13c8 <SARParseLatitudeDMS+0x278>
xor    %eax,%eax
mov    %eax,-0xc4(%rbp)
jmp    13c8 <SARParseLatitudeDMS+0x278>
mov    -0xc4(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1425 <SARParseLatitudeDMS+0x2d5>
cmpq   $0x0,-0x38(%rbp)
je     1404 <SARParseLatitudeDMS+0x2b4>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xc8(%rbp)
jmp    1411 <SARParseLatitudeDMS+0x2c1>
xor    %eax,%eax
mov    %eax,-0xc8(%rbp)
jmp    1411 <SARParseLatitudeDMS+0x2c1>
mov    -0xc8(%rbp),%eax
mov    %eax,-0x94(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    142a <SARParseLatitudeDMS+0x2da>
cmpq   $0x0,-0x38(%rbp)
je     14e7 <SARParseLatitudeDMS+0x397>
mov    -0x38(%rbp),%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     14a2 <SARParseLatitudeDMS+0x352>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     1478 <SARParseLatitudeDMS+0x328>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xcc(%rbp)
jmp    1485 <SARParseLatitudeDMS+0x335>
xor    %eax,%eax
mov    %eax,-0xcc(%rbp)
jmp    1485 <SARParseLatitudeDMS+0x335>
mov    -0xcc(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    14e2 <SARParseLatitudeDMS+0x392>
cmpq   $0x0,-0x38(%rbp)
je     14c1 <SARParseLatitudeDMS+0x371>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd0(%rbp)
jmp    14ce <SARParseLatitudeDMS+0x37e>
xor    %eax,%eax
mov    %eax,-0xd0(%rbp)
jmp    14ce <SARParseLatitudeDMS+0x37e>
mov    -0xd0(%rbp),%eax
mov    %eax,-0x98(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    14e7 <SARParseLatitudeDMS+0x397>
cmpq   $0x0,-0x38(%rbp)
je     15a4 <SARParseLatitudeDMS+0x454>
mov    -0x38(%rbp),%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     155f <SARParseLatitudeDMS+0x40f>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     1535 <SARParseLatitudeDMS+0x3e5>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd4(%rbp)
jmp    1542 <SARParseLatitudeDMS+0x3f2>
xor    %eax,%eax
mov    %eax,-0xd4(%rbp)
jmp    1542 <SARParseLatitudeDMS+0x3f2>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    159f <SARParseLatitudeDMS+0x44f>
cmpq   $0x0,-0x38(%rbp)
je     157e <SARParseLatitudeDMS+0x42e>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd8(%rbp)
jmp    158b <SARParseLatitudeDMS+0x43b>
xor    %eax,%eax
mov    %eax,-0xd8(%rbp)
jmp    158b <SARParseLatitudeDMS+0x43b>
mov    -0xd8(%rbp),%eax
mov    %eax,-0x9c(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    15a4 <SARParseLatitudeDMS+0x454>
cmpq   $0x0,-0x18(%rbp)
je     16d6 <SARParseLatitudeDMS+0x586>
cmpl   $0x0,-0x2c(%rbp)
je     1622 <SARParseLatitudeDMS+0x4d2>
cvtsi2ssl -0x94(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1622 <SARParseLatitudeDMS+0x4d2>
xor    %eax,%eax
sub    -0x94(%rbp),%eax
cvtsi2ss %eax,%xmm0
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0xa1b(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0xa03(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x9f3(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16d1 <SARParseLatitudeDMS+0x581>
cmpl   $0x0,-0x94(%rbp)
jge    1680 <SARParseLatitudeDMS+0x530>
cvtsi2ssl -0x94(%rbp),%xmm0
ff
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0x9bd(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0x9a5(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x995(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16cc <SARParseLatitudeDMS+0x57c>
cvtsi2ssl -0x94(%rbp),%xmm0
ff
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0x96c(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0x954(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x944(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16d1 <SARParseLatitudeDMS+0x581>
jmp    16d6 <SARParseLatitudeDMS+0x586>
jmp    178c <SARParseLatitudeDMS+0x63c>
lea    -0x90(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1787 <SARParseLatitudeDMS+0x637>
cmpq   $0x0,-0x38(%rbp)
je     1712 <SARParseLatitudeDMS+0x5c2>
mov    -0x38(%rbp),%rdi
call   1050 <atof@plt>
movss  %xmm0,-0xdc(%rbp)
ff
jmp    1722 <SARParseLatitudeDMS+0x5d2>
xorps  %xmm0,%xmm0
movss  %xmm0,-0xdc(%rbp)
ff
jmp    1722 <SARParseLatitudeDMS+0x5d2>
movss  -0xdc(%rbp),%xmm0
ff
movss  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x0,-0x2c(%rbp)
je     1772 <SARParseLatitudeDMS+0x622>
movss  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1772 <SARParseLatitudeDMS+0x622>
movss  -0xa0(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    1782 <SARParseLatitudeDMS+0x632>
movss  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    1787 <SARParseLatitudeDMS+0x637>
jmp    178c <SARParseLatitudeDMS+0x63c>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SARParseLatitudeDMS>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rdi,%rbp
test   %rsi,%rsi
je     116c <SARParseLatitudeDMS+0x1c>
movl   $0x0,(%rsi)
mov    $0xffffffff,%eax
test   %rbp,%rbp
je     1399 <SARParseLatitudeDMS+0x249>
mov    0x0(%rbp),%cl
test   %cl,%cl
je     1399 <SARParseLatitudeDMS+0x249>
mov    %rsi,0x8(%rsp)
xor    %ebx,%ebx
mov    $0x1,%r13d
movabs $0x100000201,%r12
xor    %r15d,%r15d
xor    %r14d,%r14d
jmp    11d7 <SARParseLatitudeDMS+0x87>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl %cl,%edi
call   1040 <toupper@plt>
cmp    $0x27,%al
cmove  %r13d,%r15d
movsbl 0x0(%rbp,%rbx,1),%edi
call   1040 <toupper@plt>
cmp    $0x53,%al
cmove  %r13d,%r14d
movzbl 0x1(%rbp,%rbx,1),%ecx
add    $0x1,%rbx
cmp    $0x20,%cl
ja     11b0 <SARParseLatitudeDMS+0x60>
movzbl %cl,%eax
bt     %rax,%r12
jae    11b0 <SARParseLatitudeDMS+0x60>
test   %ebx,%ebx
je     1203 <SARParseLatitudeDMS+0xb3>
cmp    $0x50,%ebx
mov    $0x50,%edx
cmovb  %ebx,%edx
lea    0x10(%rsp),%rdi
mov    %rbp,%rsi
call   1030 <strncpy@plt>
jmp    1208 <SARParseLatitudeDMS+0xb8>
movb   $0x0,0x10(%rsp)
mov    0x8(%rsp),%r12
cmp    $0x4f,%ebx
mov    $0x4f,%eax
cmovb  %ebx,%eax
movb   $0x0,0x10(%rsp,%rax,1)
test   %r15d,%r15d
je     12a6 <SARParseLatitudeDMS+0x156>
lea    0x10(%rsp),%rdi
mov    $0x27,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     12e5 <SARParseLatitudeDMS+0x195>
mov    %rax,%rbp
movb   $0x0,(%rax)
lea    0x10(%rsp),%rdi
call   1070 <atoi@plt>
mov    %eax,%r15d
add    $0x1,%rbp
mov    %rbp,%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     12f6 <SARParseLatitudeDMS+0x1a6>
mov    %rax,%r13
movb   $0x0,(%rax)
mov    %rbp,%rdi
call   1070 <atoi@plt>
mov    %eax,%ebx
add    $0x1,%r13
mov    %r13,%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     1294 <SARParseLatitudeDMS+0x144>
movb   $0x0,(%rax)
mov    %r13,%rdi
call   1070 <atoi@plt>
test   %r12,%r12
jne    130b <SARParseLatitudeDMS+0x1bb>
jmp    1397 <SARParseLatitudeDMS+0x247>
test   %r12,%r12
je     1397 <SARParseLatitudeDMS+0x247>
lea    0x10(%rsp),%rdi
call   1050 <atof@plt>
test   %r14d,%r14d
je     1391 <SARParseLatitudeDMS+0x241>
movaps 0xd57(%rip),%xmm1
xorps  %xmm0,%xmm1
xorps  %xmm2,%xmm2
cmpltss %xmm0,%xmm2
andps  %xmm2,%xmm1
andnps %xmm0,%xmm2
orps   %xmm1,%xmm2
movaps %xmm2,%xmm0
jmp    1391 <SARParseLatitudeDMS+0x241>
lea    0x10(%rsp),%rdi
call   1070 <atoi@plt>
mov    %eax,%r15d
xor    %ebx,%ebx
jmp    1300 <SARParseLatitudeDMS+0x1b0>
mov    %rbp,%rdi
call   1070 <atoi@plt>
mov    %eax,%ebx
xor    %eax,%eax
test   %r12,%r12
je     1397 <SARParseLatitudeDMS+0x247>
test   %r14d,%r14d
je     1345 <SARParseLatitudeDMS+0x1f5>
test   %r15d,%r15d
jle    1345 <SARParseLatitudeDMS+0x1f5>
neg    %r15d
cvtsi2ss %r15d,%xmm0
cvtsi2ss %ebx,%xmm1
cvtsi2ss %eax,%xmm2
divss  0xcd3(%rip),%xmm2
unpcklps %xmm2,%xmm1
divps  0xcd9(%rip),%xmm1
subss  %xmm1,%xmm0
shufps $0x55,%xmm1,%xmm1
subss  %xmm1,%xmm0
jmp    1391 <SARParseLatitudeDMS+0x241>
cvtsi2ss %r15d,%xmm1
cvtsi2ss %ebx,%xmm2
divss  0xcaa(%rip),%xmm2
cvtsi2ss %eax,%xmm0
test   %r15d,%r15d
js     1379 <SARParseLatitudeDMS+0x229>
divss  0xc99(%rip),%xmm0
addss  %xmm1,%xmm2
divss  0xc91(%rip),%xmm0
addss  %xmm2,%xmm0
jmp    1391 <SARParseLatitudeDMS+0x241>
divss  0xc87(%rip),%xmm0
subss  %xmm2,%xmm1
divss  0xc77(%rip),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%r12)
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @SARParseLatitudeDMS(i8* %0, float* writeonly %1) {
%3 = alloca [80 x i8]
%4 = getelementptr inbounds [80 x i8], [80 x i8]* %3, i64 0, i64 0
%5 = icmp eq float* %1, null
br i1 %5, label %7, label %6
6: ; preds = %2
store float 0.000000e+00, float* %1
br label %7
7: ; preds = %6, %2
%8 = icmp eq i8* %0, null
br i1 %8, label %111, label %9
9: ; preds = %7
%10 = load i8, i8* %0
%11 = icmp eq i8 %10, 0
br i1 %11, label %111, label %12
12: ; preds = %9, %18
%13 = phi i8 [ %28, %18 ], [ %10, %9 ]
%14 = phi i32 [ %27, %18 ], [ 0, %9 ]
%15 = phi i32 [ %21, %18 ], [ 0, %9 ]
%16 = phi i32 [ %25, %18 ], [ 0, %9 ]
%17 = phi i8* [ %26, %18 ], [ %0, %9 ]
switch i8 %13, label %18 [
i8 0, label %29
i8 32, label %29
i8 9, label %29
]
18: ; preds = %12
%19 = tail call signext i8 @toupper(i8 signext %13)
%20 = icmp eq i8 %19, 39
%21 = select i1 %20, i32 1, i32 %15
%22 = load i8, i8* %17
%23 = tail call signext i8 @toupper(i8 signext %22)
%24 = icmp eq i8 %23, 83
%25 = select i1 %24, i32 1, i32 %16
%26 = getelementptr inbounds i8, i8* %17, i64 1
%27 = add nuw nsw i32 %14, 1
%28 = load i8, i8* %26
br label %12
29: ; preds = %12, %12, %12
%30 = icmp eq i32 %14, 0
br i1 %30, label %35, label %31
31: ; preds = %29
%32 = icmp ult i32 %14, 80
%33 = select i1 %32, i32 %14, i32 80
%34 = call i32 @strncpy(i8* %4, i8* %0, i32 %33)
br label %36
35: ; preds = %29
store i8 0, i8* %4
br label %36
36: ; preds = %35, %31
%37 = icmp ult i32 %14, 79
%38 = select i1 %37, i32 %14, i32 79
%39 = zext i32 %38 to i64
%40 = getelementptr inbounds [80 x i8], [80 x i8]* %3, i64 0, i64 %39
store i8 0, i8* %40
%41 = icmp eq i32 %15, 0
br i1 %41, label %101, label %42
42: ; preds = %36
%43 = call i8* @strchr(i8* %4, i8 signext 39)
%44 = icmp eq i8* %43, null
br i1 %44, label %45, label %47
45: ; preds = %42
%46 = call i32 @atoi(i8* %4)
br label %63
47: ; preds = %42
store i8 0, i8* %43
%48 = call i32 @atoi(i8* %4)
%49 = getelementptr inbounds i8, i8* %43, i64 1
%50 = call i8* @strchr(i8* %49, i8 signext 34)
%51 = icmp eq i8* %50, null
br i1 %51, label %52, label %54
52: ; preds = %47
%53 = call i32 @atoi(i8* %49)
br label %63
54: ; preds = %47
store i8 0, i8* %50
%55 = call i32 @atoi(i8* %49)
%56 = getelementptr inbounds i8, i8* %50, i64 1
%57 = call i8* @strchr(i8* %56, i8 signext 34)
%58 = icmp eq i8* %57, null
br i1 %58, label %61, label %59
59: ; preds = %54
store i8 0, i8* %57
%60 = call i32 @atoi(i8* %56)
br label %63
61: ; preds = %54
%62 = call i32 @atoi(i8* %56)
br label %63
63: ; preds = %45, %52, %59, %61
%64 = phi i32 [ %55, %59 ], [ %55, %61 ], [ 0, %45 ], [ %53, %52 ]
%65 = phi i32 [ %48, %59 ], [ %48, %61 ], [ %46, %45 ], [ %48, %52 ]
%66 = phi i32 [ %60, %59 ], [ %62, %61 ], [ 0, %45 ], [ 0, %52 ]
br i1 %5, label %111, label %67
67: ; preds = %63
%68 = icmp ne i32 %16, 0
%69 = icmp sgt i32 %65, 0
%70 = select i1 %68, i1 %69, i1 false
br i1 %70, label %71, label %84
71: ; preds = %67
%72 = sub nsw i32 0, %65
%73 = sitofp i32 %72 to float
%74 = sitofp i32 %64 to float
%75 = sitofp i32 %66 to float
%76 = fdiv float %75, 6.000000e+01
%77 = insertelement <2 x float> poison, float %74, i64 0
%78 = insertelement <2 x float> %77, float %76, i64 1
%79 = fdiv <2 x float> %78, <float 6.000000e+01, float 1.000000e+02>
%80 = extractelement <2 x float> %79, i64 0
%81 = fsub float %73, %80
%82 = extractelement <2 x float> %79, i64 1
%83 = fsub float %81, %82
br label %109
84: ; preds = %67
%85 = icmp slt i32 %65, 0
%86 = sitofp i32 %65 to float
%87 = sitofp i32 %64 to float
%88 = fdiv float %87, 6.000000e+01
br i1 %85, label %89, label %95
89: ; preds = %84
%90 = fsub float %86, %88
%91 = sitofp i32 %66 to float
%92 = fdiv float %91, 6.000000e+01
%93 = fdiv float %92, 1.000000e+02
%94 = fsub float %90, %93
br label %109
95: ; preds = %84
%96 = fadd float %88, %86
%97 = sitofp i32 %66 to float
%98 = fdiv float %97, 6.000000e+01
%99 = fdiv float %98, 1.000000e+02
%100 = fadd float %96, %99
br label %109
101: ; preds = %36
br i1 %5, label %111, label %102
102: ; preds = %101
%103 = call float @atof(i8* %4)
%104 = icmp ne i32 %16, 0
%105 = fcmp ogt float %103, 0.000000e+00
%106 = select i1 %104, i1 %105, i1 false
%107 = fneg float %103
%108 = select i1 %106, float %107, float %103
br label %109
109: ; preds = %89, %95, %71, %102
%110 = phi float [ %108, %102 ], [ %83, %71 ], [ %100, %95 ], [ %94, %89 ]
store float %110, float* %1
br label %111
111: ; preds = %109, %101, %63, %9, %7
%112 = phi i32 [ -1, %7 ], [ -1, %9 ], [ 0, %63 ], [ 0, %101 ], [ 0, %109 ]
ret i32 %112
}