#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 */
int /*<<< orphan*/ LCD_CLR_CLK();
int /*<<< orphan*/ LCD_CLR_DATA();
int /*<<< orphan*/ LCD_SET_CLK();
int /*<<< orphan*/ LCD_SET_DATA();
void Send1(unsigned char Data, unsigned char IsData) {
  if (IsData)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 7) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 6) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 5) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 4) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 3) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 2) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 1) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
  if ((Data >> 0) & 1)
    LCD_SET_DATA();
  else
    LCD_CLR_DATA();
  LCD_CLR_CLK();
  LCD_SET_CLK();
}


x86 assembly (clang, -O0):
<Send1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %sil,%al
mov    %dil,%cl
mov    %cl,-0x1(%rbp)
mov    %al,-0x2(%rbp)
cmpb   $0x0,-0x2(%rbp)
je     116a <Send1+0x2a>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1171 <Send1+0x31>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x7,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     119e <Send1+0x5e>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    11a5 <Send1+0x65>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x6,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     11d2 <Send1+0x92>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    11d9 <Send1+0x99>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x5,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1206 <Send1+0xc6>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    120d <Send1+0xcd>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x4,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     123a <Send1+0xfa>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1241 <Send1+0x101>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x3,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     126e <Send1+0x12e>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1275 <Send1+0x135>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x2,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     12a2 <Send1+0x162>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    12a9 <Send1+0x169>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x1,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     12d6 <Send1+0x196>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    12dd <Send1+0x19d>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
movzbl -0x1(%rbp),%eax
sar    $0x0,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     130a <Send1+0x1ca>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1311 <Send1+0x1d1>
mov    $0x0,%al
call   1040 <LCD_CLR_DATA@plt>
mov    $0x0,%al
call   1030 <LCD_CLR_CLK@plt>
mov    $0x0,%al
call   1060 <LCD_SET_CLK@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Send1>:
push   %rbx
mov    %edi,%ebx
xor    %eax,%eax
test   %esi,%esi
je     1150 <Send1+0x10>
call   1050 <LCD_SET_DATA@plt>
jmp    1155 <Send1+0x15>
call   1040 <LCD_CLR_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   %bl,%bl
js     1170 <Send1+0x30>
call   1040 <LCD_CLR_DATA@plt>
jmp    1175 <Send1+0x35>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x40,%bl
jne    1191 <Send1+0x51>
call   1040 <LCD_CLR_DATA@plt>
jmp    1196 <Send1+0x56>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x20,%bl
jne    11b2 <Send1+0x72>
call   1040 <LCD_CLR_DATA@plt>
jmp    11b7 <Send1+0x77>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x10,%bl
jne    11d3 <Send1+0x93>
call   1040 <LCD_CLR_DATA@plt>
jmp    11d8 <Send1+0x98>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x8,%bl
jne    11f4 <Send1+0xb4>
call   1040 <LCD_CLR_DATA@plt>
jmp    11f9 <Send1+0xb9>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x4,%bl
jne    1215 <Send1+0xd5>
call   1040 <LCD_CLR_DATA@plt>
jmp    121a <Send1+0xda>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x2,%bl
jne    1236 <Send1+0xf6>
call   1040 <LCD_CLR_DATA@plt>
jmp    123b <Send1+0xfb>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
call   1060 <LCD_SET_CLK@plt>
xor    %eax,%eax
test   $0x1,%bl
jne    1257 <Send1+0x117>
call   1040 <LCD_CLR_DATA@plt>
jmp    125c <Send1+0x11c>
call   1050 <LCD_SET_DATA@plt>
xor    %eax,%eax
call   1030 <LCD_CLR_CLK@plt>
xor    %eax,%eax
pop    %rbx
jmp    1060 <LCD_SET_CLK@plt>

LLVM IR (-O0):
define void @Send1(i8 zeroext %0, i8 zeroext %1) {
%3 = alloca i8
%4 = alloca i8
store i8 %0, i8* %3
store i8 %1, i8* %4
%5 = load i8, i8* %4
%6 = icmp ne i8 %5, 0
br i1 %6, label %7, label %9
7: ; preds = %2
%8 = call i32 (...) @LCD_SET_DATA()
br label %11
9: ; preds = %2
%10 = call i32 (...) @LCD_CLR_DATA()
br label %11
11: ; preds = %9, %7
%12 = call i32 (...) @LCD_CLR_CLK()
%13 = call i32 (...) @LCD_SET_CLK()
%14 = load i8, i8* %3
%15 = zext i8 %14 to i32
%16 = ashr i32 %15, 7
%17 = and i32 %16, 1
%18 = icmp ne i32 %17, 0
br i1 %18, label %19, label %21
19: ; preds = %11
%20 = call i32 (...) @LCD_SET_DATA()
br label %23
21: ; preds = %11
%22 = call i32 (...) @LCD_CLR_DATA()
br label %23
23: ; preds = %21, %19
%24 = call i32 (...) @LCD_CLR_CLK()
%25 = call i32 (...) @LCD_SET_CLK()
%26 = load i8, i8* %3
%27 = zext i8 %26 to i32
%28 = ashr i32 %27, 6
%29 = and i32 %28, 1
%30 = icmp ne i32 %29, 0
br i1 %30, label %31, label %33
31: ; preds = %23
%32 = call i32 (...) @LCD_SET_DATA()
br label %35
33: ; preds = %23
%34 = call i32 (...) @LCD_CLR_DATA()
br label %35
35: ; preds = %33, %31
%36 = call i32 (...) @LCD_CLR_CLK()
%37 = call i32 (...) @LCD_SET_CLK()
%38 = load i8, i8* %3
%39 = zext i8 %38 to i32
%40 = ashr i32 %39, 5
%41 = and i32 %40, 1
%42 = icmp ne i32 %41, 0
br i1 %42, label %43, label %45
43: ; preds = %35
%44 = call i32 (...) @LCD_SET_DATA()
br label %47
45: ; preds = %35
%46 = call i32 (...) @LCD_CLR_DATA()
br label %47
47: ; preds = %45, %43
%48 = call i32 (...) @LCD_CLR_CLK()
%49 = call i32 (...) @LCD_SET_CLK()
%50 = load i8, i8* %3
%51 = zext i8 %50 to i32
%52 = ashr i32 %51, 4
%53 = and i32 %52, 1
%54 = icmp ne i32 %53, 0
br i1 %54, label %55, label %57
55: ; preds = %47
%56 = call i32 (...) @LCD_SET_DATA()
br label %59
57: ; preds = %47
%58 = call i32 (...) @LCD_CLR_DATA()
br label %59
59: ; preds = %57, %55
%60 = call i32 (...) @LCD_CLR_CLK()
%61 = call i32 (...) @LCD_SET_CLK()
%62 = load i8, i8* %3
%63 = zext i8 %62 to i32
%64 = ashr i32 %63, 3
%65 = and i32 %64, 1
%66 = icmp ne i32 %65, 0
br i1 %66, label %67, label %69
67: ; preds = %59
%68 = call i32 (...) @LCD_SET_DATA()
br label %71
69: ; preds = %59
%70 = call i32 (...) @LCD_CLR_DATA()
br label %71
71: ; preds = %69, %67
%72 = call i32 (...) @LCD_CLR_CLK()
%73 = call i32 (...) @LCD_SET_CLK()
%74 = load i8, i8* %3
%75 = zext i8 %74 to i32
%76 = ashr i32 %75, 2
%77 = and i32 %76, 1
%78 = icmp ne i32 %77, 0
br i1 %78, label %79, label %81
79: ; preds = %71
%80 = call i32 (...) @LCD_SET_DATA()
br label %83
81: ; preds = %71
%82 = call i32 (...) @LCD_CLR_DATA()
br label %83
83: ; preds = %81, %79
%84 = call i32 (...) @LCD_CLR_CLK()
%85 = call i32 (...) @LCD_SET_CLK()
%86 = load i8, i8* %3
%87 = zext i8 %86 to i32
%88 = ashr i32 %87, 1
%89 = and i32 %88, 1
%90 = icmp ne i32 %89, 0
br i1 %90, label %91, label %93
91: ; preds = %83
%92 = call i32 (...) @LCD_SET_DATA()
br label %95
93: ; preds = %83
%94 = call i32 (...) @LCD_CLR_DATA()
br label %95
95: ; preds = %93, %91
%96 = call i32 (...) @LCD_CLR_CLK()
%97 = call i32 (...) @LCD_SET_CLK()
%98 = load i8, i8* %3
%99 = zext i8 %98 to i32
%100 = ashr i32 %99, 0
%101 = and i32 %100, 1
%102 = icmp ne i32 %101, 0
br i1 %102, label %103, label %105
103: ; preds = %95
%104 = call i32 (...) @LCD_SET_DATA()
br label %107
105: ; preds = %95
%106 = call i32 (...) @LCD_CLR_DATA()
br label %107
107: ; preds = %105, %103
%108 = call i32 (...) @LCD_CLR_CLK()
%109 = call i32 (...) @LCD_SET_CLK()
ret void
}

LLVM IR (-O2):
define void @Send1(i8 zeroext %0, i8 zeroext %1) {
%3 = icmp eq i8 %1, 0
br i1 %3, label %6, label %4
4: ; preds = %2
%5 = tail call i32 (...) @LCD_SET_DATA()
br label %8
6: ; preds = %2
%7 = tail call i32 (...) @LCD_CLR_DATA()
br label %8
8: ; preds = %6, %4
%9 = tail call i32 (...) @LCD_CLR_CLK()
%10 = tail call i32 (...) @LCD_SET_CLK()
%11 = zext i8 %0 to i32
%12 = icmp sgt i8 %0, -1
br i1 %12, label %15, label %13
13: ; preds = %8
%14 = tail call i32 (...) @LCD_SET_DATA()
br label %17
15: ; preds = %8
%16 = tail call i32 (...) @LCD_CLR_DATA()
br label %17
17: ; preds = %15, %13
%18 = tail call i32 (...) @LCD_CLR_CLK()
%19 = tail call i32 (...) @LCD_SET_CLK()
%20 = and i32 %11, 64
%21 = icmp eq i32 %20, 0
br i1 %21, label %24, label %22
22: ; preds = %17
%23 = tail call i32 (...) @LCD_SET_DATA()
br label %26
24: ; preds = %17
%25 = tail call i32 (...) @LCD_CLR_DATA()
br label %26
26: ; preds = %24, %22
%27 = tail call i32 (...) @LCD_CLR_CLK()
%28 = tail call i32 (...) @LCD_SET_CLK()
%29 = and i32 %11, 32
%30 = icmp eq i32 %29, 0
br i1 %30, label %33, label %31
31: ; preds = %26
%32 = tail call i32 (...) @LCD_SET_DATA()
br label %35
33: ; preds = %26
%34 = tail call i32 (...) @LCD_CLR_DATA()
br label %35
35: ; preds = %33, %31
%36 = tail call i32 (...) @LCD_CLR_CLK()
%37 = tail call i32 (...) @LCD_SET_CLK()
%38 = and i32 %11, 16
%39 = icmp eq i32 %38, 0
br i1 %39, label %42, label %40
40: ; preds = %35
%41 = tail call i32 (...) @LCD_SET_DATA()
br label %44
42: ; preds = %35
%43 = tail call i32 (...) @LCD_CLR_DATA()
br label %44
44: ; preds = %42, %40
%45 = tail call i32 (...) @LCD_CLR_CLK()
%46 = tail call i32 (...) @LCD_SET_CLK()
%47 = and i32 %11, 8
%48 = icmp eq i32 %47, 0
br i1 %48, label %51, label %49
49: ; preds = %44
%50 = tail call i32 (...) @LCD_SET_DATA()
br label %53
51: ; preds = %44
%52 = tail call i32 (...) @LCD_CLR_DATA()
br label %53
53: ; preds = %51, %49
%54 = tail call i32 (...) @LCD_CLR_CLK()
%55 = tail call i32 (...) @LCD_SET_CLK()
%56 = and i32 %11, 4
%57 = icmp eq i32 %56, 0
br i1 %57, label %60, label %58
58: ; preds = %53
%59 = tail call i32 (...) @LCD_SET_DATA()
br label %62
60: ; preds = %53
%61 = tail call i32 (...) @LCD_CLR_DATA()
br label %62
62: ; preds = %60, %58
%63 = tail call i32 (...) @LCD_CLR_CLK()
%64 = tail call i32 (...) @LCD_SET_CLK()
%65 = and i32 %11, 2
%66 = icmp eq i32 %65, 0
br i1 %66, label %69, label %67
67: ; preds = %62
%68 = tail call i32 (...) @LCD_SET_DATA()
br label %71
69: ; preds = %62
%70 = tail call i32 (...) @LCD_CLR_DATA()
br label %71
71: ; preds = %69, %67
%72 = tail call i32 (...) @LCD_CLR_CLK()
%73 = tail call i32 (...) @LCD_SET_CLK()
%74 = and i32 %11, 1
%75 = icmp eq i32 %74, 0
br i1 %75, label %78, label %76
76: ; preds = %71
%77 = tail call i32 (...) @LCD_SET_DATA()
br label %80
78: ; preds = %71
%79 = tail call i32 (...) @LCD_CLR_DATA()
br label %80
80: ; preds = %78, %76
%81 = tail call i32 (...) @LCD_CLR_CLK()
%82 = tail call i32 (...) @LCD_SET_CLK()
ret void
}