#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 uint8_t;

/* Variables and functions */
int /*<<< orphan*/ be64enc(int *, int);
int test_be64enc() {
  uint8_t buf[8];
  be64enc(buf, 0x0102030405060708ULL);
  if (buf[0] != 1 || buf[1] != 2 || buf[2] != 3 || buf[3] != 4 || buf[4] != 5 ||
      buf[5] != 6 || buf[6] != 7 || buf[7] != 8)
    return -1;
  be64enc(buf, 0xffefdfcfbfaf9f8fULL);
  if (buf[0] != 0xff || buf[1] != 0xef || buf[2] != 0xdf || buf[3] != 0xcf ||
      buf[4] != 0xbf || buf[5] != 0xaf || buf[6] != 0x9f || buf[7] != 0x8f)
    return -1;
  return 0;
}


x86 assembly (clang, -O0):
<test_be64enc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
lea    -0x30(%rbp),%rdi
mov    $0x5060708,%esi
call   1030 <be64enc@plt>
cmpl   $0x1,-0x30(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x2,-0x2c(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x3,-0x28(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x4,-0x24(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x5,-0x20(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x6,-0x1c(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x7,-0x18(%rbp)
jne    1176 <test_be64enc+0x66>
cmpl   $0x8,-0x14(%rbp)
je     1182 <test_be64enc+0x72>
movl   $0xffffffff,-0x4(%rbp)
jmp    120b <test_be64enc+0xfb>
lea    -0x30(%rbp),%rdi
mov    $0xbfaf9f8f,%esi
call   1030 <be64enc@plt>
cmpl   $0xff,-0x30(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0xef,-0x2c(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0xdf,-0x28(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0xcf,-0x24(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0xbf,-0x20(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0xaf,-0x1c(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0x9f,-0x18(%rbp)
jne    11f8 <test_be64enc+0xe8>
cmpl   $0x8f,-0x14(%rbp)
je     1204 <test_be64enc+0xf4>
movl   $0xffffffff,-0x4(%rbp)
jmp    120b <test_be64enc+0xfb>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_be64enc>:
sub    $0x28,%rsp
mov    %rsp,%rdi
mov    $0x5060708,%esi
call   1030 <be64enc@plt>
movdqa (%rsp),%xmm0
movdqa 0x10(%rsp),%xmm1
pcmpeqd 0xecc(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
pxor   %xmm2,%xmm1
pcmpeqd 0xecc(%rip),%xmm0
pxor   %xmm2,%xmm0
packssdw %xmm1,%xmm0
pmovmskb %xmm0,%ecx
mov    $0xffffffff,%eax
test   %ecx,%ecx
je     115e <test_be64enc+0x4e>
add    $0x28,%rsp
ret
mov    %rsp,%rdi
mov    $0xbfaf9f8f,%esi
call   1030 <be64enc@plt>
movdqa (%rsp),%xmm0
movdqa 0x10(%rsp),%xmm1
pcmpeqd 0xea2(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
pxor   %xmm2,%xmm1
pcmpeqd 0xea2(%rip),%xmm0
pxor   %xmm2,%xmm0
packssdw %xmm1,%xmm0
pmovmskb %xmm0,%eax
neg    %eax
sbb    %eax,%eax
add    $0x28,%rsp
ret

LLVM IR (-O0):
define i32 @test_be64enc() {
%1 = alloca i32
%2 = alloca [8 x i32]
%3 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0
%4 = call i32 @be64enc(i32* %3, i32 84281096)
%5 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0
%6 = load i32, i32* %5
%7 = icmp ne i32 %6, 1
br i1 %7, label %36, label %8
8: ; preds = %0
%9 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 1
%10 = load i32, i32* %9
%11 = icmp ne i32 %10, 2
br i1 %11, label %36, label %12
12: ; preds = %8
%13 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 2
%14 = load i32, i32* %13
%15 = icmp ne i32 %14, 3
br i1 %15, label %36, label %16
16: ; preds = %12
%17 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 3
%18 = load i32, i32* %17
%19 = icmp ne i32 %18, 4
br i1 %19, label %36, label %20
20: ; preds = %16
%21 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 4
%22 = load i32, i32* %21
%23 = icmp ne i32 %22, 5
br i1 %23, label %36, label %24
24: ; preds = %20
%25 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 5
%26 = load i32, i32* %25
%27 = icmp ne i32 %26, 6
br i1 %27, label %36, label %28
28: ; preds = %24
%29 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 6
%30 = load i32, i32* %29
%31 = icmp ne i32 %30, 7
br i1 %31, label %36, label %32
32: ; preds = %28
%33 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 7
%34 = load i32, i32* %33
%35 = icmp ne i32 %34, 8
br i1 %35, label %36, label %37
36: ; preds = %32, %28, %24, %20, %16, %12, %8, %0
store i32 -1, i32* %1
br label %73
37: ; preds = %32
%38 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0
%39 = call i32 @be64enc(i32* %38, i32 -1079009393)
%40 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 0
%41 = load i32, i32* %40
%42 = icmp ne i32 %41, 255
br i1 %42, label %71, label %43
43: ; preds = %37
%44 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 1
%45 = load i32, i32* %44
%46 = icmp ne i32 %45, 239
br i1 %46, label %71, label %47
47: ; preds = %43
%48 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 2
%49 = load i32, i32* %48
%50 = icmp ne i32 %49, 223
br i1 %50, label %71, label %51
51: ; preds = %47
%52 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 3
%53 = load i32, i32* %52
%54 = icmp ne i32 %53, 207
br i1 %54, label %71, label %55
55: ; preds = %51
%56 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 4
%57 = load i32, i32* %56
%58 = icmp ne i32 %57, 191
br i1 %58, label %71, label %59
59: ; preds = %55
%60 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 5
%61 = load i32, i32* %60
%62 = icmp ne i32 %61, 175
br i1 %62, label %71, label %63
63: ; preds = %59
%64 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 6
%65 = load i32, i32* %64
%66 = icmp ne i32 %65, 159
br i1 %66, label %71, label %67
67: ; preds = %63
%68 = getelementptr inbounds [8 x i32], [8 x i32]* %2, i64 0, i64 7
%69 = load i32, i32* %68
%70 = icmp ne i32 %69, 143
br i1 %70, label %71, label %72
71: ; preds = %67, %63, %59, %55, %51, %47, %43, %37
store i32 -1, i32* %1
br label %73
72: ; preds = %67
store i32 0, i32* %1
br label %73
73: ; preds = %72, %71, %36
%74 = load i32, i32* %1
ret i32 %74
}

LLVM IR (-O2):
define i32 @test_be64enc() {
%1 = alloca <8 x i32>
%2 = bitcast <8 x i32>* %1 to i8*
%3 = getelementptr inbounds <8 x i32>, <8 x i32>* %1, i64 0, i64 0
%4 = call i32 @be64enc(i32* %3, i32 84281096)
%5 = load <8 x i32>, <8 x i32>* %1
%6 = freeze <8 x i32> %5
%7 = icmp ne <8 x i32> %6, <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>
%8 = bitcast <8 x i1> %7 to i8
%9 = icmp eq i8 %8, 0
br i1 %9, label %10, label %18
10: ; preds = %0
%11 = call i32 @be64enc(i32* %3, i32 -1079009393)
%12 = load <8 x i32>, <8 x i32>* %1
%13 = freeze <8 x i32> %12
%14 = icmp ne <8 x i32> %13, <i32 255, i32 239, i32 223, i32 207, i32 191, i32 175, i32 159, i32 143>
%15 = bitcast <8 x i1> %14 to i8
%16 = icmp ne i8 %15, 0
%17 = sext i1 %16 to i32
br label %18
18: ; preds = %10, %0
%19 = phi i32 [ -1, %0 ], [ %17, %10 ]
ret i32 %19
}