int _nl_explode_name(name, language, modifier, territory, codeset,
                     normalized_codeset)
char *name;
const char **language;
const char **modifier;
const char **territory;
const char **codeset;
const char **normalized_codeset;
{
  char *cp;
  int mask;
  *modifier = ((void *)0);
  *territory = ((void *)0);
  *codeset = ((void *)0);
  *normalized_codeset = ((void *)0);
  mask = 0;
  *language = cp = name;
  cp = _nl_find_language(*language);
  if (*language == cp)
    cp = __rawmemchr(*language, '\0');
  else if (cp[0] != '@') {
    if (cp[0] == '_') {
      cp[0] = '\0';
      *territory = ++cp;
      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@')
        ++cp;
      mask |= 4;
    }
    if (cp[0] == '.') {
      cp[0] = '\0';
      *codeset = ++cp;
      while (cp[0] != '\0' && cp[0] != '@')
        ++cp;
      mask |= 2;
      if (*codeset != cp && (*codeset)[0] != '\0') {
        *normalized_codeset = _nl_normalize_codeset(*codeset, cp - *codeset);
        if (*normalized_codeset == ((void *)0))
          return -1;
        else if (strcmp(*codeset, *normalized_codeset) == 0)
          free((char *)*normalized_codeset);
        else
          mask |= 1;
      }
    }
  }
  if (cp[0] == '@') {
    cp[0] = '\0';
    *modifier = ++cp;
    if (cp[0] != '\0')
      mask |= 8;
  }
  if (*territory != ((void *)0) && (*territory)[0] == '\0')
    mask &= ~4;
  if (*codeset != ((void *)0) && (*codeset)[0] == '\0')
    mask &= ~2;
  return mask;
}


x86 assembly (clang, -O0):
<_nl_explode_name>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x28(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x30(%rbp),%rax
movq   $0x0,(%rax)
mov    -0x38(%rbp),%rax
movq   $0x0,(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x10(%rbp),%rcx
mov    %rcx,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%rdi
mov    $0x0,%al
call   1040 <_nl_find_language@plt>
cltq
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
cmp    -0x40(%rbp),%rax
jne    11f2 <_nl_explode_name+0xa2>
mov    -0x18(%rbp),%rax
mov    (%rax),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1070 <__rawmemchr@plt>
cltq
mov    %rax,-0x40(%rbp)
jmp    13bc <_nl_explode_name+0x26c>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
je     13b7 <_nl_explode_name+0x267>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
jne    1290 <_nl_explode_name+0x140>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x45(%rbp)
je     1266 <_nl_explode_name+0x116>
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2e,%ecx
mov    %al,-0x45(%rbp)
je     1266 <_nl_explode_name+0x116>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
setne  %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
test   $0x1,%al
jne    1276 <_nl_explode_name+0x126>
jmp    1287 <_nl_explode_name+0x137>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    122c <_nl_explode_name+0xdc>
mov    -0x44(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    13b2 <_nl_explode_name+0x262>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
mov    -0x30(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x40(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x46(%rbp)
je     12df <_nl_explode_name+0x18f>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
setne  %al
mov    %al,-0x46(%rbp)
mov    -0x46(%rbp),%al
test   $0x1,%al
jne    12ef <_nl_explode_name+0x19f>
jmp    1300 <_nl_explode_name+0x1b0>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    12ba <_nl_explode_name+0x16a>
mov    -0x44(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
cmp    -0x40(%rbp),%rax
je     13ad <_nl_explode_name+0x25d>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13ad <_nl_explode_name+0x25d>
mov    -0x30(%rbp),%rax
mov    (%rax),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rsi
mov    $0x0,%al
call   1050 <_nl_normalize_codeset@plt>
movslq %eax,%rcx
mov    -0x38(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x38(%rbp),%rax
cmpq   $0x0,(%rax)
jne    136d <_nl_explode_name+0x21d>
movl   $0xffffffff,-0x4(%rbp)
jmp    145e <_nl_explode_name+0x30e>
mov    -0x30(%rbp),%rax
mov    (%rax),%rdi
mov    -0x38(%rbp),%rax
mov    (%rax),%rsi
call   1060 <strcmp@plt>
cmp    $0x0,%eax
jne    139a <_nl_explode_name+0x24a>
mov    -0x38(%rbp),%rax
mov    (%rax),%rdi
call   1030 <free@plt>
jmp    13a3 <_nl_explode_name+0x253>
mov    -0x44(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13a8 <_nl_explode_name+0x258>
jmp    13ad <_nl_explode_name+0x25d>
jmp    13b2 <_nl_explode_name+0x262>
jmp    13b7 <_nl_explode_name+0x267>
jmp    13bc <_nl_explode_name+0x26c>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
jne    1404 <_nl_explode_name+0x2b4>
mov    -0x40(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x40(%rbp),%rcx
add    $0x1,%rcx
mov    %rcx,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     13ff <_nl_explode_name+0x2af>
mov    -0x44(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x44(%rbp)
jmp    1404 <_nl_explode_name+0x2b4>
mov    -0x28(%rbp),%rax
cmpq   $0x0,(%rax)
je     142e <_nl_explode_name+0x2de>
mov    -0x28(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    142e <_nl_explode_name+0x2de>
mov    -0x44(%rbp),%eax
and    $0xfffffffb,%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%rax
cmpq   $0x0,(%rax)
je     1458 <_nl_explode_name+0x308>
mov    -0x30(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1458 <_nl_explode_name+0x308>
mov    -0x44(%rbp),%eax
and    $0xfffffffd,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<_nl_explode_name>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%r13
mov    %r8,%r14
mov    %rcx,%r12
mov    %rsi,%rbp
mov    %rdx,(%rsp)
movq   $0x0,(%rdx)
movq   $0x0,(%rcx)
movq   $0x0,(%r8)
movq   $0x0,(%r9)
mov    %rdi,(%rsi)
xor    %r15d,%r15d
xor    %eax,%eax
call   1040 <_nl_find_language@plt>
movslq %eax,%rbx
cmp    %rbx,0x0(%rbp)
je     11d5 <_nl_explode_name+0x85>
mov    (%rbx),%al
cmp    $0x40,%al
je     1262 <_nl_explode_name+0x112>
cmp    $0x5f,%al
jne    11ee <_nl_explode_name+0x9e>
movb   $0x0,(%rbx)
add    $0x1,%rbx
mov    %rbx,(%r12)
cs nopw 0x0(%rax,%rax,1)
movzbl (%rbx),%eax
test   %al,%al
je     11e8 <_nl_explode_name+0x98>
cmp    $0x2e,%al
je     11e8 <_nl_explode_name+0x98>
cmp    $0x40,%al
je     11e8 <_nl_explode_name+0x98>
add    $0x1,%rbx
jmp    11c0 <_nl_explode_name+0x70>
xor    %ebp,%ebp
mov    %rbx,%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1070 <__rawmemchr@plt>
movslq %eax,%rbx
jmp    125a <_nl_explode_name+0x10a>
mov    $0x4,%r15d
cmp    $0x2e,%al
jne    1257 <_nl_explode_name+0x107>
movb   $0x0,(%rbx)
lea    0x1(%rbx),%rdi
mov    %rdi,(%r14)
xor    %esi,%esi
testb  $0xbf,0x1(%rbx,%rsi,1)
je     121b <_nl_explode_name+0xcb>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rsi
testb  $0xbf,0x1(%rbx,%rsi,1)
jne    1210 <_nl_explode_name+0xc0>
add    %rsi,%rbx
add    $0x1,%rbx
mov    %r15d,%ebp
or     $0x2,%ebp
test   %rsi,%rsi
je     125a <_nl_explode_name+0x10a>
cmpb   $0x0,(%rdi)
je     125a <_nl_explode_name+0x10a>
xor    %eax,%eax
call   1050 <_nl_normalize_codeset@plt>
movslq %eax,%rsi
mov    %rsi,0x0(%r13)
test   %esi,%esi
je     12b4 <_nl_explode_name+0x164>
mov    (%r14),%rdi
mov    %rsi,%r13
call   1060 <strcmp@plt>
test   %eax,%eax
je     12bb <_nl_explode_name+0x16b>
or     $0x3,%r15d
mov    %r15d,%ebp
cmpb   $0x40,(%rbx)
mov    %ebp,%r15d
jne    127c <_nl_explode_name+0x12c>
movb   $0x0,(%rbx)
lea    0x1(%rbx),%rax
mov    (%rsp),%rcx
mov    %rax,(%rcx)
lea    0x8(%r15),%ebp
cmpb   $0x0,0x1(%rbx)
cmove  %r15d,%ebp
mov    (%r12),%rax
test   %rax,%rax
je     1290 <_nl_explode_name+0x140>
mov    %ebp,%ecx
and    $0xfffffffb,%ecx
cmpb   $0x0,(%rax)
cmove  %ecx,%ebp
mov    (%r14),%rax
test   %rax,%rax
je     12a3 <_nl_explode_name+0x153>
mov    %ebp,%ecx
and    $0xfffffffd,%ecx
cmpb   $0x0,(%rax)
cmove  %ecx,%ebp
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xffffffff,%ebp
jmp    12a3 <_nl_explode_name+0x153>
mov    %r13,%rdi
call   1030 <free@plt>
jmp    125a <_nl_explode_name+0x10a>

LLVM IR (-O0):
define i32 @_nl_explode_name(i8* %0, i8** %1, i8** %2, i8** %3, i8** %4, i8** %5) {
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8**
%10 = alloca i8**
%11 = alloca i8**
%12 = alloca i8**
%13 = alloca i8**
%14 = alloca i8*
%15 = alloca i32
store i8* %0, i8** %8
store i8** %1, i8*** %9
store i8** %2, i8*** %10
store i8** %3, i8*** %11
store i8** %4, i8*** %12
store i8** %5, i8*** %13
%16 = load i8**, i8*** %10
store i8* null, i8** %16
%17 = load i8**, i8*** %11
store i8* null, i8** %17
%18 = load i8**, i8*** %12
store i8* null, i8** %18
%19 = load i8**, i8*** %13
store i8* null, i8** %19
store i32 0, i32* %15
%20 = load i8*, i8** %8
store i8* %20, i8** %14
%21 = load i8**, i8*** %9
store i8* %20, i8** %21
%22 = load i8**, i8*** %9
%23 = load i8*, i8** %22
%24 = call i32 (i8*, ...) bitcast (i32 (...)* @_nl_find_language to i32 (i8*, ...)*)(i8* %23)
%25 = sext i32 %24 to i64
%26 = inttoptr i64 %25 to i8*
store i8* %26, i8** %14
%27 = load i8**, i8*** %9
%28 = load i8*, i8** %27
%29 = load i8*, i8** %14
%30 = icmp eq i8* %28, %29
br i1 %30, label %31, label %37
31: ; preds = %6
%32 = load i8**, i8*** %9
%33 = load i8*, i8** %32
%34 = call i32 (i8*, i32, ...) bitcast (i32 (...)* @__rawmemchr to i32 (i8*, i32, ...)*)(i8* %33, i32 0)
%35 = sext i32 %34 to i64
%36 = inttoptr i64 %35 to i8*
store i8* %36, i8** %14
br label %159
37: ; preds = %6
%38 = load i8*, i8** %14
%39 = getelementptr inbounds i8, i8* %38, i64 0
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp ne i32 %41, 64
br i1 %42, label %43, label %158
43: ; preds = %37
%44 = load i8*, i8** %14
%45 = getelementptr inbounds i8, i8* %44, i64 0
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 95
br i1 %48, label %49, label %81
49: ; preds = %43
%50 = load i8*, i8** %14
%51 = getelementptr inbounds i8, i8* %50, i64 0
store i8 0, i8* %51
%52 = load i8*, i8** %14
%53 = getelementptr inbounds i8, i8* %52, i32 1
store i8* %53, i8** %14
%54 = load i8**, i8*** %11
store i8* %53, i8** %54
br label %55
55: ; preds = %75, %49
%56 = load i8*, i8** %14
%57 = getelementptr inbounds i8, i8* %56, i64 0
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = icmp ne i32 %59, 0
br i1 %60, label %61, label %73
61: ; preds = %55
%62 = load i8*, i8** %14
%63 = getelementptr inbounds i8, i8* %62, i64 0
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp ne i32 %65, 46
br i1 %66, label %67, label %73
67: ; preds = %61
%68 = load i8*, i8** %14
%69 = getelementptr inbounds i8, i8* %68, i64 0
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp ne i32 %71, 64
br label %73
73: ; preds = %67, %61, %55
%74 = phi i1 [ false, %61 ], [ false, %55 ], [ %72, %67 ]
br i1 %74, label %75, label %78
75: ; preds = %73
%76 = load i8*, i8** %14
%77 = getelementptr inbounds i8, i8* %76, i32 1
store i8* %77, i8** %14
br label %55
78: ; preds = %73
%79 = load i32, i32* %15
%80 = or i32 %79, 4
store i32 %80, i32* %15
br label %81
81: ; preds = %78, %43
%82 = load i8*, i8** %14
%83 = getelementptr inbounds i8, i8* %82, i64 0
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = icmp eq i32 %85, 46
br i1 %86, label %87, label %157
87: ; preds = %81
%88 = load i8*, i8** %14
%89 = getelementptr inbounds i8, i8* %88, i64 0
store i8 0, i8* %89
%90 = load i8*, i8** %14
%91 = getelementptr inbounds i8, i8* %90, i32 1
store i8* %91, i8** %14
%92 = load i8**, i8*** %12
store i8* %91, i8** %92
br label %93
93: ; preds = %107, %87
%94 = load i8*, i8** %14
%95 = getelementptr inbounds i8, i8* %94, i64 0
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp ne i32 %97, 0
br i1 %98, label %99, label %105
99: ; preds = %93
%100 = load i8*, i8** %14
%101 = getelementptr inbounds i8, i8* %100, i64 0
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = icmp ne i32 %103, 64
br label %105
105: ; preds = %99, %93
%106 = phi i1 [ false, %93 ], [ %104, %99 ]
br i1 %106, label %107, label %110
107: ; preds = %105
%108 = load i8*, i8** %14
%109 = getelementptr inbounds i8, i8* %108, i32 1
store i8* %109, i8** %14
br label %93
110: ; preds = %105
%111 = load i32, i32* %15
%112 = or i32 %111, 2
store i32 %112, i32* %15
%113 = load i8**, i8*** %12
%114 = load i8*, i8** %113
%115 = load i8*, i8** %14
%116 = icmp ne i8* %114, %115
br i1 %116, label %117, label %156
117: ; preds = %110
%118 = load i8**, i8*** %12
%119 = load i8*, i8** %118
%120 = getelementptr inbounds i8, i8* %119, i64 0
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp ne i32 %122, 0
br i1 %123, label %124, label %156
124: ; preds = %117
%125 = load i8**, i8*** %12
%126 = load i8*, i8** %125
%127 = load i8*, i8** %14
%128 = load i8**, i8*** %12
%129 = load i8*, i8** %128
%130 = ptrtoint i8* %127 to i64
%131 = ptrtoint i8* %129 to i64
%132 = sub i64 %130, %131
%133 = call i32 (i8*, i64, ...) bitcast (i32 (...)* @_nl_normalize_codeset to i32 (i8*, i64, ...)*)(i8* %126, i64 %132)
%134 = sext i32 %133 to i64
%135 = inttoptr i64 %134 to i8*
%136 = load i8**, i8*** %13
store i8* %135, i8** %136
%137 = load i8**, i8*** %13
%138 = load i8*, i8** %137
%139 = icmp eq i8* %138, null
br i1 %139, label %140, label %141
140: ; preds = %124
store i32 -1, i32* %7
br label %210
141: ; preds = %124
%142 = load i8**, i8*** %12
%143 = load i8*, i8** %142
%144 = load i8**, i8*** %13
%145 = load i8*, i8** %144
%146 = call i32 @strcmp(i8* %143, i8* %145)
%147 = icmp eq i32 %146, 0
br i1 %147, label %148, label %151
148: ; preds = %141
%149 = load i8**, i8*** %13
%150 = load i8*, i8** %149
br label %154
151: ; preds = %141
%152 = load i32, i32* %15
%153 = or i32 %152, 1
store i32 %153, i32* %15
br label %154
154: ; preds = %151, %148
br label %155
155: ; preds = %154
br label %156
156: ; preds = %155, %117, %110
br label %157
157: ; preds = %156, %81
br label %158
158: ; preds = %157, %37
br label %159
159: ; preds = %158, %31
%160 = load i8*, i8** %14
%161 = getelementptr inbounds i8, i8* %160, i64 0
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = icmp eq i32 %163, 64
br i1 %164, label %165, label %180
165: ; preds = %159
%166 = load i8*, i8** %14
%167 = getelementptr inbounds i8, i8* %166, i64 0
store i8 0, i8* %167
%168 = load i8*, i8** %14
%169 = getelementptr inbounds i8, i8* %168, i32 1
store i8* %169, i8** %14
%170 = load i8**, i8*** %10
store i8* %169, i8** %170
%171 = load i8*, i8** %14
%172 = getelementptr inbounds i8, i8* %171, i64 0
%173 = load i8, i8* %172
%174 = sext i8 %173 to i32
%175 = icmp ne i32 %174, 0
br i1 %175, label %176, label %179
176: ; preds = %165
%177 = load i32, i32* %15
%178 = or i32 %177, 8
store i32 %178, i32* %15
br label %179
179: ; preds = %176, %165
br label %180
180: ; preds = %179, %159
%181 = load i8**, i8*** %11
%182 = load i8*, i8** %181
%183 = icmp ne i8* %182, null
br i1 %183, label %184, label %194
184: ; preds = %180
%185 = load i8**, i8*** %11
%186 = load i8*, i8** %185
%187 = getelementptr inbounds i8, i8* %186, i64 0
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = icmp eq i32 %189, 0
br i1 %190, label %191, label %194
191: ; preds = %184
%192 = load i32, i32* %15
%193 = and i32 %192, -5
store i32 %193, i32* %15
br label %194
194: ; preds = %191, %184, %180
%195 = load i8**, i8*** %12
%196 = load i8*, i8** %195
%197 = icmp ne i8* %196, null
br i1 %197, label %198, label %208
198: ; preds = %194
%199 = load i8**, i8*** %12
%200 = load i8*, i8** %199
%201 = getelementptr inbounds i8, i8* %200, i64 0
%202 = load i8, i8* %201
%203 = sext i8 %202 to i32
%204 = icmp eq i32 %203, 0
br i1 %204, label %205, label %208
205: ; preds = %198
%206 = load i32, i32* %15
%207 = and i32 %206, -3
store i32 %207, i32* %15
br label %208
208: ; preds = %205, %198, %194
%209 = load i32, i32* %15
store i32 %209, i32* %7
br label %210
210: ; preds = %208, %140
%211 = load i32, i32* %7
ret i32 %211
}

LLVM IR (-O2):
define i32 @_nl_explode_name(i8* %0, i8** nocapture %1, i8** nocapture writeonly %2, i8** nocapture %3, i8** nocapture %4, i8** nocapture writeonly %5) {
store i8* null, i8** %2
store i8* null, i8** %3
store i8* null, i8** %4
store i8* null, i8** %5
store i8* %0, i8** %1
%7 = tail call i32 (i8*, ...) bitcast (i32 (...)* @_nl_find_language to i32 (i8*, ...)*)(i8* %0)
%8 = sext i32 %7 to i64
%9 = inttoptr i64 %8 to i8*
%10 = load i8*, i8** %1
%11 = icmp eq i8* %10, %9
br i1 %11, label %12, label %16
12: ; preds = %6
%13 = tail call i32 (i8*, i32, ...) bitcast (i32 (...)* @__rawmemchr to i32 (i8*, i32, ...)*)(i8* %9, i32 0)
%14 = sext i32 %13 to i64
%15 = inttoptr i64 %14 to i8*
br label %58
16: ; preds = %6
%17 = load i8, i8* %9
switch i8 %17, label %25 [
i8 64, label %63
i8 95, label %18
]
18: ; preds = %16
store i8 0, i8* %9
%19 = getelementptr inbounds i8, i8* %9, i64 1
store i8* %19, i8** %3
br label %20
20: ; preds = %23, %18
%21 = phi i8* [ %19, %18 ], [ %24, %23 ]
%22 = load i8, i8* %21
switch i8 %22, label %23 [
i8 0, label %25
i8 46, label %25
i8 64, label %25
]
23: ; preds = %20
%24 = getelementptr inbounds i8, i8* %21, i64 1
br label %20
25: ; preds = %20, %20, %20, %16
%26 = phi i8 [ %17, %16 ], [ %22, %20 ], [ %22, %20 ], [ %22, %20 ]
%27 = phi i8* [ %9, %16 ], [ %21, %20 ], [ %21, %20 ], [ %21, %20 ]
%28 = phi i32 [ 0, %16 ], [ 4, %20 ], [ 4, %20 ], [ 4, %20 ]
%29 = icmp eq i8 %26, 46
br i1 %29, label %30, label %58
30: ; preds = %25
store i8 0, i8* %27
%31 = getelementptr inbounds i8, i8* %27, i64 1
store i8* %31, i8** %4
br label %32
32: ; preds = %36, %30
%33 = phi i64 [ 1, %30 ], [ %37, %36 ]
%34 = getelementptr inbounds i8, i8* %27, i64 %33
%35 = load i8, i8* %34
switch i8 %35, label %36 [
i8 0, label %38
i8 64, label %38
]
36: ; preds = %32
%37 = add nuw nsw i64 %33, 1
br label %32
38: ; preds = %32, %32
%39 = getelementptr inbounds i8, i8* %27, i64 %33
%40 = or i32 %28, 2
%41 = icmp eq i64 %33, 1
br i1 %41, label %58, label %42
42: ; preds = %38
%43 = load i8, i8* %31
%44 = icmp eq i8 %43, 0
br i1 %44, label %58, label %45
45: ; preds = %42
%46 = add nsw i64 %33, -1
%47 = tail call i32 (i8*, i64, ...) bitcast (i32 (...)* @_nl_normalize_codeset to i32 (i8*, i64, ...)*)(i8* %31, i64 %46)
%48 = sext i32 %47 to i64
%49 = inttoptr i64 %48 to i8*
store i8* %49, i8** %5
%50 = icmp eq i32 %47, 0
br i1 %50, label %89, label %51
51: ; preds = %45
%52 = load i8*, i8** %4
%53 = tail call i32 @strcmp(i8* dereferenceable(1) %52, i8* %49)
%54 = icmp eq i32 %53, 0
br i1 %54, label %55, label %56
55: ; preds = %51
tail call void @free(i8* %49)
br label %58
56: ; preds = %51
%57 = or i32 %28, 3
br label %58
58: ; preds = %38, %42, %55, %56, %25, %12
%59 = phi i8* [ %27, %25 ], [ %39, %38 ], [ %39, %42 ], [ %39, %56 ], [ %39, %55 ], [ %15, %12 ]
%60 = phi i32 [ %28, %25 ], [ %40, %38 ], [ %40, %42 ], [ %57, %56 ], [ %40, %55 ], [ 0, %12 ]
%61 = load i8, i8* %59
%62 = icmp eq i8 %61, 64
br i1 %62, label %63, label %71
63: ; preds = %16, %58
%64 = phi i32 [ %60, %58 ], [ 0, %16 ]
%65 = phi i8* [ %59, %58 ], [ %9, %16 ]
store i8 0, i8* %65
%66 = getelementptr inbounds i8, i8* %65, i64 1
store i8* %66, i8** %2
%67 = load i8, i8* %66
%68 = icmp eq i8 %67, 0
%69 = or i32 %64, 8
%70 = select i1 %68, i32 %64, i32 %69
br label %71
71: ; preds = %63, %58
%72 = phi i32 [ %60, %58 ], [ %70, %63 ]
%73 = load i8*, i8** %3
%74 = icmp eq i8* %73, null
br i1 %74, label %80, label %75
75: ; preds = %71
%76 = load i8, i8* %73
%77 = icmp eq i8 %76, 0
%78 = and i32 %72, -5
%79 = select i1 %77, i32 %78, i32 %72
br label %80
80: ; preds = %75, %71
%81 = phi i32 [ %72, %71 ], [ %79, %75 ]
%82 = load i8*, i8** %4
%83 = icmp eq i8* %82, null
br i1 %83, label %89, label %84
84: ; preds = %80
%85 = load i8, i8* %82
%86 = icmp eq i8 %85, 0
%87 = and i32 %81, -3
%88 = select i1 %86, i32 %87, i32 %81
br label %89
89: ; preds = %84, %80, %45
%90 = phi i32 [ -1, %45 ], [ %81, %80 ], [ %88, %84 ]
ret i32 %90
}