#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 SARParseLongitudeDMS(const char *string, float *dms) {
  const char *sp;
  int in_len, is_traditional = 0, is_west = 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) == 'W')
      is_west = 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_west && (d > 0))
        *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_west && (d > 0.0f))
        *dms = -d;
      else
        *dms = d;
    }
  }
  return (0);
}


x86 assembly (clang, -O0):
<SARParseLongitudeDMS>:
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 <SARParseLongitudeDMS+0x3e>
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax)
cmpq   $0x0,-0x10(%rbp)
je     11ae <SARParseLongitudeDMS+0x5e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     11bd <SARParseLongitudeDMS+0x6d>
jmp    11c9 <SARParseLongitudeDMS+0x79>
mov    $0x1,%al
test   $0x1,%al
jne    11bd <SARParseLongitudeDMS+0x6d>
jmp    11c9 <SARParseLongitudeDMS+0x79>
movl   $0xffffffff,-0x4(%rbp)
jmp    178c <SARParseLongitudeDMS+0x63c>
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 <SARParseLongitudeDMS+0xd9>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0xa2(%rbp)
je     121b <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0xec>
jmp    1294 <SARParseLongitudeDMS+0x144>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x27,%eax
jne    125b <SARParseLongitudeDMS+0x10b>
movl   $0x1,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x57,%eax
jne    127a <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x88>
cmpl   $0x0,-0x24(%rbp)
jle    12f8 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x181>
mov    -0x24(%rbp),%eax
mov    %eax,-0xbc(%rbp)
jmp    12da <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x1af>
movb   $0x0,-0x90(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    131e <SARParseLongitudeDMS+0x1ce>
mov    -0x24(%rbp),%eax
mov    %eax,-0xc0(%rbp)
jmp    132a <SARParseLongitudeDMS+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     16d4 <SARParseLongitudeDMS+0x584>
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 <SARParseLongitudeDMS+0x2da>
mov    -0x38(%rbp),%rdi
mov    $0x27,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     13e5 <SARParseLongitudeDMS+0x295>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     13bb <SARParseLongitudeDMS+0x26b>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xc4(%rbp)
jmp    13c8 <SARParseLongitudeDMS+0x278>
xor    %eax,%eax
mov    %eax,-0xc4(%rbp)
jmp    13c8 <SARParseLongitudeDMS+0x278>
mov    -0xc4(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1425 <SARParseLongitudeDMS+0x2d5>
cmpq   $0x0,-0x38(%rbp)
je     1404 <SARParseLongitudeDMS+0x2b4>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xc8(%rbp)
jmp    1411 <SARParseLongitudeDMS+0x2c1>
xor    %eax,%eax
mov    %eax,-0xc8(%rbp)
jmp    1411 <SARParseLongitudeDMS+0x2c1>
mov    -0xc8(%rbp),%eax
mov    %eax,-0x94(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    142a <SARParseLongitudeDMS+0x2da>
cmpq   $0x0,-0x38(%rbp)
je     14e7 <SARParseLongitudeDMS+0x397>
mov    -0x38(%rbp),%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     14a2 <SARParseLongitudeDMS+0x352>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     1478 <SARParseLongitudeDMS+0x328>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xcc(%rbp)
jmp    1485 <SARParseLongitudeDMS+0x335>
xor    %eax,%eax
mov    %eax,-0xcc(%rbp)
jmp    1485 <SARParseLongitudeDMS+0x335>
mov    -0xcc(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    14e2 <SARParseLongitudeDMS+0x392>
cmpq   $0x0,-0x38(%rbp)
je     14c1 <SARParseLongitudeDMS+0x371>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd0(%rbp)
jmp    14ce <SARParseLongitudeDMS+0x37e>
xor    %eax,%eax
mov    %eax,-0xd0(%rbp)
jmp    14ce <SARParseLongitudeDMS+0x37e>
mov    -0xd0(%rbp),%eax
mov    %eax,-0x98(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    14e7 <SARParseLongitudeDMS+0x397>
cmpq   $0x0,-0x38(%rbp)
je     15a4 <SARParseLongitudeDMS+0x454>
mov    -0x38(%rbp),%rdi
mov    $0x22,%esi
call   1060 <strchr@plt>
mov    %rax,-0x40(%rbp)
cmpq   $0x0,-0x40(%rbp)
je     155f <SARParseLongitudeDMS+0x40f>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     1535 <SARParseLongitudeDMS+0x3e5>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd4(%rbp)
jmp    1542 <SARParseLongitudeDMS+0x3f2>
xor    %eax,%eax
mov    %eax,-0xd4(%rbp)
jmp    1542 <SARParseLongitudeDMS+0x3f2>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    159f <SARParseLongitudeDMS+0x44f>
cmpq   $0x0,-0x38(%rbp)
je     157e <SARParseLongitudeDMS+0x42e>
mov    -0x38(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,-0xd8(%rbp)
jmp    158b <SARParseLongitudeDMS+0x43b>
xor    %eax,%eax
mov    %eax,-0xd8(%rbp)
jmp    158b <SARParseLongitudeDMS+0x43b>
mov    -0xd8(%rbp),%eax
mov    %eax,-0x9c(%rbp)
movq   $0x0,-0x38(%rbp)
jmp    15a4 <SARParseLongitudeDMS+0x454>
cmpq   $0x0,-0x18(%rbp)
je     16cf <SARParseLongitudeDMS+0x57f>
cmpl   $0x0,-0x2c(%rbp)
je     161b <SARParseLongitudeDMS+0x4cb>
cmpl   $0x0,-0x94(%rbp)
jle    161b <SARParseLongitudeDMS+0x4cb>
xor    %eax,%eax
sub    -0x94(%rbp),%eax
cvtsi2ss %eax,%xmm0
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0xa22(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0xa0a(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x9fa(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16ca <SARParseLongitudeDMS+0x57a>
cmpl   $0x0,-0x94(%rbp)
jge    1679 <SARParseLongitudeDMS+0x529>
cvtsi2ssl -0x94(%rbp),%xmm0
ff
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0x9c4(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0x9ac(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x99c(%rip),%xmm2
divss  %xmm2,%xmm1
subss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16c5 <SARParseLongitudeDMS+0x575>
cvtsi2ssl -0x94(%rbp),%xmm0
ff
cvtsi2ssl -0x98(%rbp),%xmm1
ff
movss  0x973(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
cvtsi2ssl -0x9c(%rbp),%xmm1
ff
movss  0x95b(%rip),%xmm2
divss  %xmm2,%xmm1
movss  0x94b(%rip),%xmm2
divss  %xmm2,%xmm1
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    16ca <SARParseLongitudeDMS+0x57a>
jmp    16cf <SARParseLongitudeDMS+0x57f>
jmp    1785 <SARParseLongitudeDMS+0x635>
lea    -0x90(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x18(%rbp)
je     1780 <SARParseLongitudeDMS+0x630>
cmpq   $0x0,-0x38(%rbp)
je     170b <SARParseLongitudeDMS+0x5bb>
mov    -0x38(%rbp),%rdi
call   1050 <atof@plt>
movss  %xmm0,-0xdc(%rbp)
ff
jmp    171b <SARParseLongitudeDMS+0x5cb>
xorps  %xmm0,%xmm0
movss  %xmm0,-0xdc(%rbp)
ff
jmp    171b <SARParseLongitudeDMS+0x5cb>
movss  -0xdc(%rbp),%xmm0
ff
movss  %xmm0,-0xa0(%rbp)
ff
cmpl   $0x0,-0x2c(%rbp)
je     176b <SARParseLongitudeDMS+0x61b>
movss  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    176b <SARParseLongitudeDMS+0x61b>
movss  -0xa0(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    177b <SARParseLongitudeDMS+0x62b>
movss  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
jmp    1780 <SARParseLongitudeDMS+0x630>
jmp    1785 <SARParseLongitudeDMS+0x635>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<SARParseLongitudeDMS>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rdi,%rbp
test   %rsi,%rsi
je     116c <SARParseLongitudeDMS+0x1c>
movl   $0x0,(%rsi)
mov    $0xffffffff,%eax
test   %rbp,%rbp
je     1399 <SARParseLongitudeDMS+0x249>
mov    0x0(%rbp),%cl
test   %cl,%cl
je     1399 <SARParseLongitudeDMS+0x249>
mov    %rsi,0x8(%rsp)
xor    %ebx,%ebx
mov    $0x1,%r13d
movabs $0x100000201,%r12
xor    %r15d,%r15d
xor    %r14d,%r14d
jmp    11d7 <SARParseLongitudeDMS+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    $0x57,%al
cmove  %r13d,%r14d
movzbl 0x1(%rbp,%rbx,1),%ecx
add    $0x1,%rbx
cmp    $0x20,%cl
ja     11b0 <SARParseLongitudeDMS+0x60>
movzbl %cl,%eax
bt     %rax,%r12
jae    11b0 <SARParseLongitudeDMS+0x60>
test   %ebx,%ebx
je     1203 <SARParseLongitudeDMS+0xb3>
cmp    $0x50,%ebx
mov    $0x50,%edx
cmovb  %ebx,%edx
lea    0x10(%rsp),%rdi
mov    %rbp,%rsi
call   1030 <strncpy@plt>
jmp    1208 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x156>
lea    0x10(%rsp),%rdi
mov    $0x27,%esi
call   1060 <strchr@plt>
test   %rax,%rax
je     12e5 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x144>
movb   $0x0,(%rax)
mov    %r13,%rdi
call   1070 <atoi@plt>
test   %r12,%r12
jne    130b <SARParseLongitudeDMS+0x1bb>
jmp    1397 <SARParseLongitudeDMS+0x247>
test   %r12,%r12
je     1397 <SARParseLongitudeDMS+0x247>
lea    0x10(%rsp),%rdi
call   1050 <atof@plt>
test   %r14d,%r14d
je     1391 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x241>
lea    0x10(%rsp),%rdi
call   1070 <atoi@plt>
mov    %eax,%r15d
xor    %ebx,%ebx
jmp    1300 <SARParseLongitudeDMS+0x1b0>
mov    %rbp,%rdi
call   1070 <atoi@plt>
mov    %eax,%ebx
xor    %eax,%eax
test   %r12,%r12
je     1397 <SARParseLongitudeDMS+0x247>
test   %r14d,%r14d
je     1345 <SARParseLongitudeDMS+0x1f5>
test   %r15d,%r15d
jle    1345 <SARParseLongitudeDMS+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 <SARParseLongitudeDMS+0x241>
cvtsi2ss %r15d,%xmm1
cvtsi2ss %ebx,%xmm2
divss  0xcaa(%rip),%xmm2
cvtsi2ss %eax,%xmm0
test   %r15d,%r15d
js     1379 <SARParseLongitudeDMS+0x229>
divss  0xc99(%rip),%xmm0
addss  %xmm1,%xmm2
divss  0xc91(%rip),%xmm0
addss  %xmm2,%xmm0
jmp    1391 <SARParseLongitudeDMS+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 @SARParseLongitudeDMS(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 %281
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, 87
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 %253
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 %252
201: ; preds = %198
%202 = load i32, i32* %9
%203 = icmp ne i32 %202, 0
br i1 %203, label %204, label %221
204: ; preds = %201
%205 = load i32, i32* %14
%206 = icmp sgt i32 %205, 0
br i1 %206, label %207, label %221
207: ; preds = %204
%208 = load i32, i32* %14
%209 = sub nsw i32 0, %208
%210 = sitofp i32 %209 to float
%211 = load i32, i32* %15
%212 = sitofp i32 %211 to float
%213 = fdiv float %212, 6.000000e+01
%214 = fsub float %210, %213
%215 = load i32, i32* %16
%216 = sitofp i32 %215 to float
%217 = fdiv float %216, 6.000000e+01
%218 = fdiv float %217, 1.000000e+02
%219 = fsub float %214, %218
%220 = load float*, float** %5
store float %219, float* %220
br label %251
221: ; preds = %204, %201
%222 = load i32, i32* %14
%223 = icmp slt i32 %222, 0
br i1 %223, label %224, label %237
224: ; preds = %221
%225 = load i32, i32* %14
%226 = sitofp i32 %225 to float
%227 = load i32, i32* %15
%228 = sitofp i32 %227 to float
%229 = fdiv float %228, 6.000000e+01
%230 = fsub float %226, %229
%231 = load i32, i32* %16
%232 = sitofp i32 %231 to float
%233 = fdiv float %232, 6.000000e+01
%234 = fdiv float %233, 1.000000e+02
%235 = fsub float %230, %234
%236 = load float*, float** %5
store float %235, float* %236
br label %250
237: ; preds = %221
%238 = load i32, i32* %14
%239 = sitofp i32 %238 to float
%240 = load i32, i32* %15
%241 = sitofp i32 %240 to float
%242 = fdiv float %241, 6.000000e+01
%243 = fadd float %239, %242
%244 = load i32, i32* %16
%245 = sitofp i32 %244 to float
%246 = fdiv float %245, 6.000000e+01
%247 = fdiv float %246, 1.000000e+02
%248 = fadd float %243, %247
%249 = load float*, float** %5
store float %248, float* %249
br label %250
250: ; preds = %237, %224
br label %251
251: ; preds = %250, %207
br label %252
252: ; preds = %251, %198
br label %280
253: ; preds = %101
%254 = getelementptr inbounds [80 x i8], [80 x i8]* %13, i64 0, i64 0
store i8* %254, i8** %11
%255 = load float*, float** %5
%256 = icmp ne float* %255, null
br i1 %256, label %257, label %279
257: ; preds = %253
%258 = load i8*, i8** %11
%259 = icmp ne i8* %258, null
br i1 %259, label %260, label %263
260: ; preds = %257
%261 = load i8*, i8** %11
%262 = call float @atof(i8* %261)
br label %264
263: ; preds = %257
br label %264
264: ; preds = %263, %260
%265 = phi float [ %262, %260 ], [ 0.000000e+00, %263 ]
store float %265, float* %17
%266 = load i32, i32* %9
%267 = icmp ne i32 %266, 0
br i1 %267, label %268, label %275
268: ; preds = %264
%269 = load float, float* %17
%270 = fcmp ogt float %269, 0.000000e+00
br i1 %270, label %271, label %275
271: ; preds = %268
%272 = load float, float* %17
%273 = fneg float %272
%274 = load float*, float** %5
store float %273, float* %274
br label %278
275: ; preds = %268, %264
%276 = load float, float* %17
%277 = load float*, float** %5
store float %276, float* %277
br label %278
278: ; preds = %275, %271
br label %279
279: ; preds = %278, %253
br label %280
280: ; preds = %279, %252
store i32 0, i32* %3
br label %281
281: ; preds = %280, %31
%282 = load i32, i32* %3
ret i32 %282
}

LLVM IR (-O2):
define i32 @SARParseLongitudeDMS(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, 87
%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
}