#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) {
  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    %dil,%al
mov    %al,-0x1(%rbp)
movzbl -0x1(%rbp),%eax
sar    $0x7,%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     116d <Send1+0x2d>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1174 <Send1+0x34>
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     11a1 <Send1+0x61>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    11a8 <Send1+0x68>
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     11d5 <Send1+0x95>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    11dc <Send1+0x9c>
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     1209 <Send1+0xc9>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1210 <Send1+0xd0>
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     123d <Send1+0xfd>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1244 <Send1+0x104>
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     1271 <Send1+0x131>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    1278 <Send1+0x138>
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     12a5 <Send1+0x165>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    12ac <Send1+0x16c>
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     12d9 <Send1+0x199>
mov    $0x0,%al
call   1050 <LCD_SET_DATA@plt>
jmp    12e0 <Send1+0x1a0>
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   %bl,%bl
js     1150 <Send1+0x10>
call   1040 <LCD_CLR_DATA@plt>
jmp    1155 <Send1+0x15>
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    1171 <Send1+0x31>
call   1040 <LCD_CLR_DATA@plt>
jmp    1176 <Send1+0x36>
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    1192 <Send1+0x52>
call   1040 <LCD_CLR_DATA@plt>
jmp    1197 <Send1+0x57>
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    11b3 <Send1+0x73>
call   1040 <LCD_CLR_DATA@plt>
jmp    11b8 <Send1+0x78>
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    11d4 <Send1+0x94>
call   1040 <LCD_CLR_DATA@plt>
jmp    11d9 <Send1+0x99>
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    11f5 <Send1+0xb5>
call   1040 <LCD_CLR_DATA@plt>
jmp    11fa <Send1+0xba>
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    1216 <Send1+0xd6>
call   1040 <LCD_CLR_DATA@plt>
jmp    121b <Send1+0xdb>
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    1237 <Send1+0xf7>
call   1040 <LCD_CLR_DATA@plt>
jmp    123c <Send1+0xfc>
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) {
%2 = alloca i8
store i8 %0, i8* %2
%3 = load i8, i8* %2
%4 = zext i8 %3 to i32
%5 = ashr i32 %4, 7
%6 = and i32 %5, 1
%7 = icmp ne i32 %6, 0
br i1 %7, label %8, label %10
8: ; preds = %1
%9 = call i32 (...) @LCD_SET_DATA()
br label %12
10: ; preds = %1
%11 = call i32 (...) @LCD_CLR_DATA()
br label %12
12: ; preds = %10, %8
%13 = call i32 (...) @LCD_CLR_CLK()
%14 = call i32 (...) @LCD_SET_CLK()
%15 = load i8, i8* %2
%16 = zext i8 %15 to i32
%17 = ashr i32 %16, 6
%18 = and i32 %17, 1
%19 = icmp ne i32 %18, 0
br i1 %19, label %20, label %22
20: ; preds = %12
%21 = call i32 (...) @LCD_SET_DATA()
br label %24
22: ; preds = %12
%23 = call i32 (...) @LCD_CLR_DATA()
br label %24
24: ; preds = %22, %20
%25 = call i32 (...) @LCD_CLR_CLK()
%26 = call i32 (...) @LCD_SET_CLK()
%27 = load i8, i8* %2
%28 = zext i8 %27 to i32
%29 = ashr i32 %28, 5
%30 = and i32 %29, 1
%31 = icmp ne i32 %30, 0
br i1 %31, label %32, label %34
32: ; preds = %24
%33 = call i32 (...) @LCD_SET_DATA()
br label %36
34: ; preds = %24
%35 = call i32 (...) @LCD_CLR_DATA()
br label %36
36: ; preds = %34, %32
%37 = call i32 (...) @LCD_CLR_CLK()
%38 = call i32 (...) @LCD_SET_CLK()
%39 = load i8, i8* %2
%40 = zext i8 %39 to i32
%41 = ashr i32 %40, 4
%42 = and i32 %41, 1
%43 = icmp ne i32 %42, 0
br i1 %43, label %44, label %46
44: ; preds = %36
%45 = call i32 (...) @LCD_SET_DATA()
br label %48
46: ; preds = %36
%47 = call i32 (...) @LCD_CLR_DATA()
br label %48
48: ; preds = %46, %44
%49 = call i32 (...) @LCD_CLR_CLK()
%50 = call i32 (...) @LCD_SET_CLK()
%51 = load i8, i8* %2
%52 = zext i8 %51 to i32
%53 = ashr i32 %52, 3
%54 = and i32 %53, 1
%55 = icmp ne i32 %54, 0
br i1 %55, label %56, label %58
56: ; preds = %48
%57 = call i32 (...) @LCD_SET_DATA()
br label %60
58: ; preds = %48
%59 = call i32 (...) @LCD_CLR_DATA()
br label %60
60: ; preds = %58, %56
%61 = call i32 (...) @LCD_CLR_CLK()
%62 = call i32 (...) @LCD_SET_CLK()
%63 = load i8, i8* %2
%64 = zext i8 %63 to i32
%65 = ashr i32 %64, 2
%66 = and i32 %65, 1
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %70
68: ; preds = %60
%69 = call i32 (...) @LCD_SET_DATA()
br label %72
70: ; preds = %60
%71 = call i32 (...) @LCD_CLR_DATA()
br label %72
72: ; preds = %70, %68
%73 = call i32 (...) @LCD_CLR_CLK()
%74 = call i32 (...) @LCD_SET_CLK()
%75 = load i8, i8* %2
%76 = zext i8 %75 to i32
%77 = ashr i32 %76, 1
%78 = and i32 %77, 1
%79 = icmp ne i32 %78, 0
br i1 %79, label %80, label %82
80: ; preds = %72
%81 = call i32 (...) @LCD_SET_DATA()
br label %84
82: ; preds = %72
%83 = call i32 (...) @LCD_CLR_DATA()
br label %84
84: ; preds = %82, %80
%85 = call i32 (...) @LCD_CLR_CLK()
%86 = call i32 (...) @LCD_SET_CLK()
%87 = load i8, i8* %2
%88 = zext i8 %87 to i32
%89 = ashr i32 %88, 0
%90 = and i32 %89, 1
%91 = icmp ne i32 %90, 0
br i1 %91, label %92, label %94
92: ; preds = %84
%93 = call i32 (...) @LCD_SET_DATA()
br label %96
94: ; preds = %84
%95 = call i32 (...) @LCD_CLR_DATA()
br label %96
96: ; preds = %94, %92
%97 = call i32 (...) @LCD_CLR_CLK()
%98 = call i32 (...) @LCD_SET_CLK()
ret void
}

LLVM IR (-O2):
define void @Send1(i8 zeroext %0) {
%2 = zext i8 %0 to i32
%3 = icmp sgt i8 %0, -1
br i1 %3, label %6, label %4
4: ; preds = %1
%5 = tail call i32 (...) @LCD_SET_DATA()
br label %8
6: ; preds = %1
%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 = and i32 %2, 64
%12 = icmp eq i32 %11, 0
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 %2, 32
%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 %2, 16
%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 %2, 8
%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 %2, 4
%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 %2, 2
%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 %2, 1
%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()
ret void
}