#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 */
typedef int tcflag_t;

/* Variables and functions */
int CLOCAL;
int CRTSCTS;
int CS5;
int CS6;
int CS7;
int CS8;
int CSIZE;
int CSTOPB;
int PARENB;
int PARODD;
int strlen(char *);
int tolower(char);
int /*<<< orphan*/ warnx(char *, ...);
int parseparms(tcflag_t *c, char *p, int f, int m) {
  if (strlen(p) != 3) {
    warnx("Invalid parameter specification \"%s\"", p);
    return 1;
  }
  *c &= ~CSIZE;
  switch (p[0]) {
  case '5':
    *c |= CS5;
    break;
  case '6':
    *c |= CS6;
    break;
  case '7':
    *c |= CS7;
    break;
  case '8':
    *c |= CS8;
    break;
  default:
    warnx("Invalid character size \"%c\": must be 5, 6, 7, or 8", p[0]);
    return 1;
  }
  switch (tolower(p[1])) {
  case 'e':
    *c |= PARENB;
    *c &= ~PARODD;
    break;
  case 'n':
    *c &= ~PARENB;
    break;
  case 'o':
    *c |= PARENB | PARODD;
    break;
  default:
    warnx("Invalid parity \"%c\": must be E, N, or O", p[1]);
    return 1;
  }
  switch (p[2]) {
  case '1':
    *c &= ~CSTOPB;
    break;
  case '2':
    *c |= CSTOPB;
    break;
  default:
    warnx("Invalid stop bit \"%c\": must be 1 or 2", p[2]);
    return 1;
  }
  *c &= ~CRTSCTS;
  if (f)
    *c |= CRTSCTS;
  *c |= CLOCAL;
  if (m)
    *c &= ~CLOCAL;
  return 0;
}


x86 assembly (clang, -O0):
<parseparms>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <strlen@plt>
cmp    $0x3,%eax
je     1176 <parseparms+0x46>
mov    -0x18(%rbp),%rsi
lea    0xead(%rip),%rdi
mov    $0x0,%al
call   1040 <warnx@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d7 <parseparms+0x2a7>
mov    0x2e4b(%rip),%rax
mov    (%rax),%edx
not    %edx
mov    -0x10(%rbp),%rax
mov    (%rax),%ecx
and    %edx,%ecx
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
add    $0xffffffcb,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x3,%eax
ja     1210 <parseparms+0xe0>
mov    -0x28(%rbp),%rax
lea    0xe51(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    0x2de1(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    1231 <parseparms+0x101>
mov    0x2e03(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    1231 <parseparms+0x101>
mov    0x2dad(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    1231 <parseparms+0x101>
mov    0x2dcf(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    1231 <parseparms+0x101>
mov    -0x18(%rbp),%rax
movsbl (%rax),%esi
lea    0xe17(%rip),%rdi
mov    $0x0,%al
call   1040 <warnx@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d7 <parseparms+0x2a7>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <tolower@plt>
mov    %eax,%ecx
mov    %ecx,-0x2c(%rbp)
sub    $0x65,%eax
je     1273 <parseparms+0x143>
jmp    1251 <parseparms+0x121>
mov    -0x2c(%rbp),%eax
sub    $0x6e,%eax
je     129d <parseparms+0x16d>
jmp    1262 <parseparms+0x132>
mov    -0x2c(%rbp),%eax
sub    $0x6f,%eax
je     12b6 <parseparms+0x186>
jmp    12d5 <parseparms+0x1a5>
mov    0x2d6e(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
mov    0x2d55(%rip),%rax
mov    (%rax),%ecx
xor    $0xffffffff,%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    %ecx,(%rax)
jmp    12f7 <parseparms+0x1c7>
mov    0x2d44(%rip),%rax
mov    (%rax),%ecx
xor    $0xffffffff,%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    %ecx,(%rax)
jmp    12f7 <parseparms+0x1c7>
mov    0x2d2b(%rip),%rax
mov    (%rax),%ecx
mov    0x2d1a(%rip),%rax
or     (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    12f7 <parseparms+0x1c7>
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%esi
lea    0xd84(%rip),%rdi
mov    $0x0,%al
call   1040 <warnx@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d7 <parseparms+0x2a7>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
mov    %eax,-0x30(%rbp)
sub    $0x31,%eax
je     1321 <parseparms+0x1f1>
jmp    1310 <parseparms+0x1e0>
mov    -0x30(%rbp),%eax
sub    $0x32,%eax
je     133a <parseparms+0x20a>
jmp    1350 <parseparms+0x220>
mov    0x2c80(%rip),%rax
mov    (%rax),%ecx
xor    $0xffffffff,%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    %ecx,(%rax)
jmp    1372 <parseparms+0x242>
mov    0x2c67(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
jmp    1372 <parseparms+0x242>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%esi
lea    0xd31(%rip),%rdi
mov    $0x0,%al
call   1040 <warnx@plt>
movl   $0x1,-0x4(%rbp)
jmp    13d7 <parseparms+0x2a7>
mov    0x2c37(%rip),%rax
mov    (%rax),%ecx
xor    $0xffffffff,%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    %ecx,(%rax)
cmpl   $0x0,-0x1c(%rbp)
je     13a1 <parseparms+0x271>
mov    0x2c19(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
mov    0x2be8(%rip),%rax
mov    (%rax),%ecx
mov    -0x10(%rbp),%rax
or     (%rax),%ecx
mov    %ecx,(%rax)
cmpl   $0x0,-0x20(%rbp)
je     13d0 <parseparms+0x2a0>
mov    0x2bcd(%rip),%rax
mov    (%rax),%ecx
xor    $0xffffffff,%ecx
mov    -0x10(%rbp),%rax
and    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parseparms>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %ecx,%r14d
mov    %edx,%r15d
mov    %rsi,%rbp
mov    %rdi,%rbx
mov    %rsi,%rdi
call   1030 <strlen@plt>
cmp    $0x3,%eax
jne    11b9 <parseparms+0x89>
mov    0x2e81(%rip),%rax
mov    (%rax),%eax
not    %eax
and    (%rbx),%eax
mov    %eax,(%rbx)
movsbl 0x0(%rbp),%esi
lea    -0x35(%rsi),%ecx
cmp    $0x4,%ecx
jae    11cf <parseparms+0x9f>
movslq %esi,%rcx
lea    0x2c5b(%rip),%rdx
mov    -0x1a8(%rdx,%rcx,8),%rcx
ff
or     (%rcx),%eax
mov    %eax,(%rbx)
movsbl 0x1(%rbp),%edi
call   1050 <tolower@plt>
cmp    $0x6f,%eax
je     11db <parseparms+0xab>
cmp    $0x6e,%eax
je     11f1 <parseparms+0xc1>
cmp    $0x65,%eax
jne    121d <parseparms+0xed>
mov    0x2e44(%rip),%rax
mov    (%rbx),%ecx
or     (%rax),%ecx
mov    %ecx,(%rbx)
mov    0x2e2f(%rip),%rax
mov    (%rax),%eax
not    %eax
and    %ecx,%eax
jmp    11fe <parseparms+0xce>
lea    0xe40(%rip),%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1040 <warnx@plt>
jmp    1277 <parseparms+0x147>
lea    0xe4f(%rip),%rdi
jmp    1270 <parseparms+0x140>
mov    0x2e06(%rip),%rcx
mov    0x2df7(%rip),%rax
mov    (%rax),%eax
or     (%rcx),%eax
or     (%rbx),%eax
jmp    11fe <parseparms+0xce>
mov    0x2df0(%rip),%rax
mov    (%rax),%eax
not    %eax
and    (%rbx),%eax
mov    %eax,(%rbx)
movsbl 0x2(%rbp),%esi
cmp    $0x32,%esi
je     122a <parseparms+0xfa>
cmp    $0x31,%esi
jne    1269 <parseparms+0x139>
mov    0x2da3(%rip),%rcx
mov    (%rcx),%ecx
not    %ecx
and    %ecx,%eax
jmp    1233 <parseparms+0x103>
movsbl 0x1(%rbp),%esi
lea    0xe30(%rip),%rdi
jmp    1270 <parseparms+0x140>
mov    0x2d87(%rip),%rcx
or     (%rcx),%eax
mov    %eax,(%rbx)
mov    0x2d84(%rip),%rdx
mov    (%rdx),%ecx
not    %ecx
and    %eax,%ecx
mov    %ecx,(%rbx)
test   %r15d,%r15d
je     124d <parseparms+0x11d>
or     (%rdx),%ecx
mov    %ecx,(%rbx)
mov    0x2d5c(%rip),%rdx
or     (%rdx),%ecx
mov    %ecx,(%rbx)
xor    %eax,%eax
test   %r14d,%r14d
je     127c <parseparms+0x14c>
mov    (%rdx),%edx
not    %edx
and    %edx,%ecx
mov    %ecx,(%rbx)
jmp    127c <parseparms+0x14c>
lea    0xe10(%rip),%rdi
xor    %eax,%eax
call   1040 <warnx@plt>
mov    $0x1,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [37 x i8] c"Invalid parameter specification \22%s\22\00"
@CSIZE = global i32 0
@CS5 = global i32 0
@CS6 = global i32 0
@CS7 = global i32 0
@CS8 = global i32 0
@.str.1 = [51 x i8] c"Invalid character size \22%c\22: must be 5, 6, 7, or 8\00"
@PARENB = global i32 0
@PARODD = global i32 0
@.str.2 = [40 x i8] c"Invalid parity \22%c\22: must be E, N, or O\00"
@CSTOPB = global i32 0
@.str.3 = [38 x i8] c"Invalid stop bit \22%c\22: must be 1 or 2\00"
@CRTSCTS = global i32 0
@CLOCAL = global i32 0
define i32 @parseparms(i32* %0, i8* %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
store i32* %0, i32** %6
store i8* %1, i8** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
%10 = load i8*, i8** %7
%11 = call i32 @strlen(i8* %10)
%12 = icmp ne i32 %11, 3
br i1 %12, label %13, label %16
13: ; preds = %4
%14 = load i8*, i8** %7
%15 = call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* %14)
store i32 1, i32* %5
br label %135
16: ; preds = %4
%17 = load i32, i32* @CSIZE
%18 = xor i32 %17, -1
%19 = load i32*, i32** %6
%20 = load i32, i32* %19
%21 = and i32 %20, %18
store i32 %21, i32* %19
%22 = load i8*, i8** %7
%23 = getelementptr inbounds i8, i8* %22, i64 0
%24 = load i8, i8* %23
%25 = sext i8 %24 to i32
switch i32 %25, label %46 [
i32 53, label %26
i32 54, label %31
i32 55, label %36
i32 56, label %41
]
26: ; preds = %16
%27 = load i32, i32* @CS5
%28 = load i32*, i32** %6
%29 = load i32, i32* %28
%30 = or i32 %29, %27
store i32 %30, i32* %28
br label %52
31: ; preds = %16
%32 = load i32, i32* @CS6
%33 = load i32*, i32** %6
%34 = load i32, i32* %33
%35 = or i32 %34, %32
store i32 %35, i32* %33
br label %52
36: ; preds = %16
%37 = load i32, i32* @CS7
%38 = load i32*, i32** %6
%39 = load i32, i32* %38
%40 = or i32 %39, %37
store i32 %40, i32* %38
br label %52
41: ; preds = %16
%42 = load i32, i32* @CS8
%43 = load i32*, i32** %6
%44 = load i32, i32* %43
%45 = or i32 %44, %42
store i32 %45, i32* %43
br label %52
46: ; preds = %16
%47 = load i8*, i8** %7
%48 = getelementptr inbounds i8, i8* %47, i64 0
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %50)
store i32 1, i32* %5
br label %135
52: ; preds = %41, %36, %31, %26
%53 = load i8*, i8** %7
%54 = getelementptr inbounds i8, i8* %53, i64 1
%55 = load i8, i8* %54
%56 = call i32 @tolower(i8 signext %55)
switch i32 %56, label %80 [
i32 101, label %57
i32 110, label %67
i32 111, label %73
]
57: ; preds = %52
%58 = load i32, i32* @PARENB
%59 = load i32*, i32** %6
%60 = load i32, i32* %59
%61 = or i32 %60, %58
store i32 %61, i32* %59
%62 = load i32, i32* @PARODD
%63 = xor i32 %62, -1
%64 = load i32*, i32** %6
%65 = load i32, i32* %64
%66 = and i32 %65, %63
store i32 %66, i32* %64
br label %86
67: ; preds = %52
%68 = load i32, i32* @PARENB
%69 = xor i32 %68, -1
%70 = load i32*, i32** %6
%71 = load i32, i32* %70
%72 = and i32 %71, %69
store i32 %72, i32* %70
br label %86
73: ; preds = %52
%74 = load i32, i32* @PARENB
%75 = load i32, i32* @PARODD
%76 = or i32 %74, %75
%77 = load i32*, i32** %6
%78 = load i32, i32* %77
%79 = or i32 %78, %76
store i32 %79, i32* %77
br label %86
80: ; preds = %52
%81 = load i8*, i8** %7
%82 = getelementptr inbounds i8, i8* %81, i64 1
%83 = load i8, i8* %82
%84 = sext i8 %83 to i32
%85 = call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.2, i64 0, i64 0), i32 %84)
store i32 1, i32* %5
br label %135
86: ; preds = %73, %67, %57
%87 = load i8*, i8** %7
%88 = getelementptr inbounds i8, i8* %87, i64 2
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
switch i32 %90, label %102 [
i32 49, label %91
i32 50, label %97
]
91: ; preds = %86
%92 = load i32, i32* @CSTOPB
%93 = xor i32 %92, -1
%94 = load i32*, i32** %6
%95 = load i32, i32* %94
%96 = and i32 %95, %93
store i32 %96, i32* %94
br label %108
97: ; preds = %86
%98 = load i32, i32* @CSTOPB
%99 = load i32*, i32** %6
%100 = load i32, i32* %99
%101 = or i32 %100, %98
store i32 %101, i32* %99
br label %108
102: ; preds = %86
%103 = load i8*, i8** %7
%104 = getelementptr inbounds i8, i8* %103, i64 2
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.3, i64 0, i64 0), i32 %106)
store i32 1, i32* %5
br label %135
108: ; preds = %97, %91
%109 = load i32, i32* @CRTSCTS
%110 = xor i32 %109, -1
%111 = load i32*, i32** %6
%112 = load i32, i32* %111
%113 = and i32 %112, %110
store i32 %113, i32* %111
%114 = load i32, i32* %8
%115 = icmp ne i32 %114, 0
br i1 %115, label %116, label %121
116: ; preds = %108
%117 = load i32, i32* @CRTSCTS
%118 = load i32*, i32** %6
%119 = load i32, i32* %118
%120 = or i32 %119, %117
store i32 %120, i32* %118
br label %121
121: ; preds = %116, %108
%122 = load i32, i32* @CLOCAL
%123 = load i32*, i32** %6
%124 = load i32, i32* %123
%125 = or i32 %124, %122
store i32 %125, i32* %123
%126 = load i32, i32* %9
%127 = icmp ne i32 %126, 0
br i1 %127, label %128, label %134
128: ; preds = %121
%129 = load i32, i32* @CLOCAL
%130 = xor i32 %129, -1
%131 = load i32*, i32** %6
%132 = load i32, i32* %131
%133 = and i32 %132, %130
store i32 %133, i32* %131
br label %134
134: ; preds = %128, %121
store i32 0, i32* %5
br label %135
135: ; preds = %134, %102, %80, %46, %13
%136 = load i32, i32* %5
ret i32 %136
}

LLVM IR (-O2):
@.str = [37 x i8] c"Invalid parameter specification \22%s\22\00"
@CSIZE = global i32 0
@CS5 = global i32 0
@CS6 = global i32 0
@CS7 = global i32 0
@CS8 = global i32 0
@.str.1 = [51 x i8] c"Invalid character size \22%c\22: must be 5, 6, 7, or 8\00"
@PARENB = global i32 0
@PARODD = global i32 0
@.str.2 = [40 x i8] c"Invalid parity \22%c\22: must be E, N, or O\00"
@CSTOPB = global i32 0
@.str.3 = [38 x i8] c"Invalid stop bit \22%c\22: must be 1 or 2\00"
@CRTSCTS = global i32 0
@CLOCAL = global i32 0
@switch.table.parseparms = [4 x i32*] [i32* @CS5, i32* @CS6, i32* @CS7, i32* @CS8]
define i32 @parseparms(i32* %0, i8* %1, i32 %2, i32 %3) {
%5 = tail call i32 @strlen(i8* %1)
%6 = icmp eq i32 %5, 3
br i1 %6, label %9, label %7
7: ; preds = %4
%8 = tail call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* %1)
br label %83
9: ; preds = %4
%10 = load i32, i32* @CSIZE
%11 = xor i32 %10, -1
%12 = load i32, i32* %0
%13 = and i32 %12, %11
store i32 %13, i32* %0
%14 = load i8, i8* %1
%15 = sext i8 %14 to i32
%16 = add nsw i32 %15, -53
%17 = icmp ult i32 %16, 4
br i1 %17, label %20, label %18
18: ; preds = %9
%19 = tail call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %15)
br label %83
20: ; preds = %9
%21 = sext i32 %16 to i64
%22 = getelementptr inbounds [4 x i32*], [4 x i32*]* @switch.table.parseparms, i64 0, i64 %21
%23 = load i32*, i32** %22
%24 = load i32, i32* %23
%25 = or i32 %24, %13
store i32 %25, i32* %0
%26 = getelementptr inbounds i8, i8* %1, i64 1
%27 = load i8, i8* %26
%28 = tail call i32 @tolower(i8 signext %27)
switch i32 %28, label %47 [
i32 101, label %29
i32 110, label %36
i32 111, label %41
]
29: ; preds = %20
%30 = load i32, i32* @PARENB
%31 = load i32, i32* %0
%32 = or i32 %31, %30
store i32 %32, i32* %0
%33 = load i32, i32* @PARODD
%34 = xor i32 %33, -1
%35 = and i32 %32, %34
br label %51
36: ; preds = %20
%37 = load i32, i32* @PARENB
%38 = xor i32 %37, -1
%39 = load i32, i32* %0
%40 = and i32 %39, %38
br label %51
41: ; preds = %20
%42 = load i32, i32* @PARENB
%43 = load i32, i32* @PARODD
%44 = or i32 %43, %42
%45 = load i32, i32* %0
%46 = or i32 %44, %45
br label %51
47: ; preds = %20
%48 = load i8, i8* %26
%49 = sext i8 %48 to i32
%50 = tail call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.2, i64 0, i64 0), i32 %49)
br label %83
51: ; preds = %41, %36, %29
%52 = phi i32 [ %46, %41 ], [ %40, %36 ], [ %35, %29 ]
store i32 %52, i32* %0
%53 = getelementptr inbounds i8, i8* %1, i64 2
%54 = load i8, i8* %53
%55 = sext i8 %54 to i32
switch i32 %55, label %63 [
i32 49, label %56
i32 50, label %60
]
56: ; preds = %51
%57 = load i32, i32* @CSTOPB
%58 = xor i32 %57, -1
%59 = and i32 %52, %58
br label %65
60: ; preds = %51
%61 = load i32, i32* @CSTOPB
%62 = or i32 %52, %61
br label %65
63: ; preds = %51
%64 = tail call i32 (i8*, ...) @warnx(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.3, i64 0, i64 0), i32 %55)
br label %83
65: ; preds = %60, %56
%66 = phi i32 [ %62, %60 ], [ %59, %56 ]
store i32 %66, i32* %0
%67 = load i32, i32* @CRTSCTS
%68 = xor i32 %67, -1
%69 = and i32 %66, %68
store i32 %69, i32* %0
%70 = icmp eq i32 %2, 0
br i1 %70, label %74, label %71
71: ; preds = %65
%72 = load i32, i32* @CRTSCTS
%73 = or i32 %72, %69
store i32 %73, i32* %0
br label %74
74: ; preds = %71, %65
%75 = phi i32 [ %73, %71 ], [ %69, %65 ]
%76 = load i32, i32* @CLOCAL
%77 = or i32 %75, %76
store i32 %77, i32* %0
%78 = icmp eq i32 %3, 0
br i1 %78, label %83, label %79
79: ; preds = %74
%80 = load i32, i32* @CLOCAL
%81 = xor i32 %80, -1
%82 = and i32 %77, %81
store i32 %82, i32* %0
br label %83
83: ; preds = %74, %79, %63, %47, %18, %7
%84 = phi i32 [ 1, %7 ], [ 1, %18 ], [ 1, %47 ], [ 1, %63 ], [ 0, %79 ], [ 0, %74 ]
ret i32 %84
}