int endian(void) {
  long long foo = 0x0102030405060708LL;
  long foo1 = 0x012345678;
  unsigned char *c, c1, c2, c3, c4, c5, c6, c7, c8;
  c = (unsigned char *)&foo;
  c1 = *c++;
  c2 = *c++;
  c3 = *c++;
  c4 = *c++;
  c5 = *c++;
  c6 = *c++;
  c7 = *c++;
  c8 = *c;
  if ((c1 == 0x08) && (c2 == 0x07) && (c3 == 0x06) && (c4 == 0x05) &&
      (c5 == 0x04) && (c6 == 0x03) && (c7 == 0x02) && (c8 == 0x01))
    return (1);
  if ((c1 == 0x01) && (c2 == 0x02) && (c3 == 0x03) && (c4 == 0x04) &&
      (c5 == 0x05) && (c6 == 0x06) && (c7 == 0x07) && (c8 == 0x08))
    return (2);
  if ((c1 == 0x04) && (c2 == 0x03) && (c3 == 0x02) && (c4 == 0x01) &&
      (c5 == 0x08) && (c6 == 0x07) && (c7 == 0x06) && (c8 == 0x05))
    return (3);
  c = (unsigned char *)&foo1;
  c1 = *c++;
  c2 = *c++;
  c3 = *c++;
  c4 = *c++;
  if ((c1 == 0x34) && (c2 == 0x12) && (c3 == 0x78) && (c4 == 0x56))
    return (4);
  return (-1);
}


x86 assembly (clang, -O0):
<endian>:
push   %rbp
mov    %rsp,%rbp
movabs $0x102030405060708,%rax
03 02 01
mov    %rax,-0x10(%rbp)
movq   $0x12345678,-0x18(%rbp)
12
lea    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x21(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x22(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x23(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x25(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x26(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x27(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x28(%rbp)
movzbl -0x21(%rbp),%eax
cmp    $0x8,%eax
jne    122b <endian+0x12b>
movzbl -0x22(%rbp),%eax
cmp    $0x7,%eax
jne    122b <endian+0x12b>
movzbl -0x23(%rbp),%eax
cmp    $0x6,%eax
jne    122b <endian+0x12b>
movzbl -0x24(%rbp),%eax
cmp    $0x5,%eax
jne    122b <endian+0x12b>
movzbl -0x25(%rbp),%eax
cmp    $0x4,%eax
jne    122b <endian+0x12b>
movzbl -0x26(%rbp),%eax
cmp    $0x3,%eax
jne    122b <endian+0x12b>
movzbl -0x27(%rbp),%eax
cmp    $0x2,%eax
jne    122b <endian+0x12b>
movzbl -0x28(%rbp),%eax
cmp    $0x1,%eax
jne    122b <endian+0x12b>
movl   $0x1,-0x4(%rbp)
jmp    13b2 <endian+0x2b2>
movzbl -0x21(%rbp),%eax
cmp    $0x1,%eax
jne    129f <endian+0x19f>
movzbl -0x22(%rbp),%eax
cmp    $0x2,%eax
jne    129f <endian+0x19f>
movzbl -0x23(%rbp),%eax
cmp    $0x3,%eax
jne    129f <endian+0x19f>
movzbl -0x24(%rbp),%eax
cmp    $0x4,%eax
jne    129f <endian+0x19f>
movzbl -0x25(%rbp),%eax
cmp    $0x5,%eax
jne    129f <endian+0x19f>
movzbl -0x26(%rbp),%eax
cmp    $0x6,%eax
jne    129f <endian+0x19f>
movzbl -0x27(%rbp),%eax
cmp    $0x7,%eax
jne    129f <endian+0x19f>
movzbl -0x28(%rbp),%eax
cmp    $0x8,%eax
jne    129f <endian+0x19f>
movl   $0x2,-0x4(%rbp)
jmp    13b2 <endian+0x2b2>
movzbl -0x21(%rbp),%eax
cmp    $0x4,%eax
jne    1313 <endian+0x213>
movzbl -0x22(%rbp),%eax
cmp    $0x3,%eax
jne    1313 <endian+0x213>
movzbl -0x23(%rbp),%eax
cmp    $0x2,%eax
jne    1313 <endian+0x213>
movzbl -0x24(%rbp),%eax
cmp    $0x1,%eax
jne    1313 <endian+0x213>
movzbl -0x25(%rbp),%eax
cmp    $0x8,%eax
jne    1313 <endian+0x213>
movzbl -0x26(%rbp),%eax
cmp    $0x7,%eax
jne    1313 <endian+0x213>
movzbl -0x27(%rbp),%eax
cmp    $0x6,%eax
jne    1313 <endian+0x213>
movzbl -0x28(%rbp),%eax
cmp    $0x5,%eax
jne    1313 <endian+0x213>
movl   $0x3,-0x4(%rbp)
jmp    13b2 <endian+0x2b2>
lea    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x21(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x22(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x23(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    %al,-0x24(%rbp)
movzbl -0x21(%rbp),%eax
cmp    $0x34,%eax
jne    13ab <endian+0x2ab>
movzbl -0x22(%rbp),%eax
cmp    $0x12,%eax
jne    13ab <endian+0x2ab>
movzbl -0x23(%rbp),%eax
cmp    $0x78,%eax
jne    13ab <endian+0x2ab>
movzbl -0x24(%rbp),%eax
cmp    $0x56,%eax
jne    13ab <endian+0x2ab>
movl   $0x4,-0x4(%rbp)
jmp    13b2 <endian+0x2b2>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<endian>:
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @endian() {
%1 = alloca i32
%2 = alloca i64
%3 = alloca i64
%4 = alloca i8*
%5 = alloca i8
%6 = alloca i8
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca i8
%12 = alloca i8
store i64 72623859790382856, i64* %2
store i64 305419896, i64* %3
%13 = bitcast i64* %2 to i8*
store i8* %13, i8** %4
%14 = load i8*, i8** %4
%15 = getelementptr inbounds i8, i8* %14, i32 1
store i8* %15, i8** %4
%16 = load i8, i8* %14
store i8 %16, i8* %5
%17 = load i8*, i8** %4
%18 = getelementptr inbounds i8, i8* %17, i32 1
store i8* %18, i8** %4
%19 = load i8, i8* %17
store i8 %19, i8* %6
%20 = load i8*, i8** %4
%21 = getelementptr inbounds i8, i8* %20, i32 1
store i8* %21, i8** %4
%22 = load i8, i8* %20
store i8 %22, i8* %7
%23 = load i8*, i8** %4
%24 = getelementptr inbounds i8, i8* %23, i32 1
store i8* %24, i8** %4
%25 = load i8, i8* %23
store i8 %25, i8* %8
%26 = load i8*, i8** %4
%27 = getelementptr inbounds i8, i8* %26, i32 1
store i8* %27, i8** %4
%28 = load i8, i8* %26
store i8 %28, i8* %9
%29 = load i8*, i8** %4
%30 = getelementptr inbounds i8, i8* %29, i32 1
store i8* %30, i8** %4
%31 = load i8, i8* %29
store i8 %31, i8* %10
%32 = load i8*, i8** %4
%33 = getelementptr inbounds i8, i8* %32, i32 1
store i8* %33, i8** %4
%34 = load i8, i8* %32
store i8 %34, i8* %11
%35 = load i8*, i8** %4
%36 = load i8, i8* %35
store i8 %36, i8* %12
%37 = load i8, i8* %5
%38 = zext i8 %37 to i32
%39 = icmp eq i32 %38, 8
br i1 %39, label %40, label %69
40: ; preds = %0
%41 = load i8, i8* %6
%42 = zext i8 %41 to i32
%43 = icmp eq i32 %42, 7
br i1 %43, label %44, label %69
44: ; preds = %40
%45 = load i8, i8* %7
%46 = zext i8 %45 to i32
%47 = icmp eq i32 %46, 6
br i1 %47, label %48, label %69
48: ; preds = %44
%49 = load i8, i8* %8
%50 = zext i8 %49 to i32
%51 = icmp eq i32 %50, 5
br i1 %51, label %52, label %69
52: ; preds = %48
%53 = load i8, i8* %9
%54 = zext i8 %53 to i32
%55 = icmp eq i32 %54, 4
br i1 %55, label %56, label %69
56: ; preds = %52
%57 = load i8, i8* %10
%58 = zext i8 %57 to i32
%59 = icmp eq i32 %58, 3
br i1 %59, label %60, label %69
60: ; preds = %56
%61 = load i8, i8* %11
%62 = zext i8 %61 to i32
%63 = icmp eq i32 %62, 2
br i1 %63, label %64, label %69
64: ; preds = %60
%65 = load i8, i8* %12
%66 = zext i8 %65 to i32
%67 = icmp eq i32 %66, 1
br i1 %67, label %68, label %69
68: ; preds = %64
store i32 1, i32* %1
br label %166
69: ; preds = %64, %60, %56, %52, %48, %44, %40, %0
%70 = load i8, i8* %5
%71 = zext i8 %70 to i32
%72 = icmp eq i32 %71, 1
br i1 %72, label %73, label %102
73: ; preds = %69
%74 = load i8, i8* %6
%75 = zext i8 %74 to i32
%76 = icmp eq i32 %75, 2
br i1 %76, label %77, label %102
77: ; preds = %73
%78 = load i8, i8* %7
%79 = zext i8 %78 to i32
%80 = icmp eq i32 %79, 3
br i1 %80, label %81, label %102
81: ; preds = %77
%82 = load i8, i8* %8
%83 = zext i8 %82 to i32
%84 = icmp eq i32 %83, 4
br i1 %84, label %85, label %102
85: ; preds = %81
%86 = load i8, i8* %9
%87 = zext i8 %86 to i32
%88 = icmp eq i32 %87, 5
br i1 %88, label %89, label %102
89: ; preds = %85
%90 = load i8, i8* %10
%91 = zext i8 %90 to i32
%92 = icmp eq i32 %91, 6
br i1 %92, label %93, label %102
93: ; preds = %89
%94 = load i8, i8* %11
%95 = zext i8 %94 to i32
%96 = icmp eq i32 %95, 7
br i1 %96, label %97, label %102
97: ; preds = %93
%98 = load i8, i8* %12
%99 = zext i8 %98 to i32
%100 = icmp eq i32 %99, 8
br i1 %100, label %101, label %102
101: ; preds = %97
store i32 2, i32* %1
br label %166
102: ; preds = %97, %93, %89, %85, %81, %77, %73, %69
%103 = load i8, i8* %5
%104 = zext i8 %103 to i32
%105 = icmp eq i32 %104, 4
br i1 %105, label %106, label %135
106: ; preds = %102
%107 = load i8, i8* %6
%108 = zext i8 %107 to i32
%109 = icmp eq i32 %108, 3
br i1 %109, label %110, label %135
110: ; preds = %106
%111 = load i8, i8* %7
%112 = zext i8 %111 to i32
%113 = icmp eq i32 %112, 2
br i1 %113, label %114, label %135
114: ; preds = %110
%115 = load i8, i8* %8
%116 = zext i8 %115 to i32
%117 = icmp eq i32 %116, 1
br i1 %117, label %118, label %135
118: ; preds = %114
%119 = load i8, i8* %9
%120 = zext i8 %119 to i32
%121 = icmp eq i32 %120, 8
br i1 %121, label %122, label %135
122: ; preds = %118
%123 = load i8, i8* %10
%124 = zext i8 %123 to i32
%125 = icmp eq i32 %124, 7
br i1 %125, label %126, label %135
126: ; preds = %122
%127 = load i8, i8* %11
%128 = zext i8 %127 to i32
%129 = icmp eq i32 %128, 6
br i1 %129, label %130, label %135
130: ; preds = %126
%131 = load i8, i8* %12
%132 = zext i8 %131 to i32
%133 = icmp eq i32 %132, 5
br i1 %133, label %134, label %135
134: ; preds = %130
store i32 3, i32* %1
br label %166
135: ; preds = %130, %126, %122, %118, %114, %110, %106, %102
%136 = bitcast i64* %3 to i8*
store i8* %136, i8** %4
%137 = load i8*, i8** %4
%138 = getelementptr inbounds i8, i8* %137, i32 1
store i8* %138, i8** %4
%139 = load i8, i8* %137
store i8 %139, i8* %5
%140 = load i8*, i8** %4
%141 = getelementptr inbounds i8, i8* %140, i32 1
store i8* %141, i8** %4
%142 = load i8, i8* %140
store i8 %142, i8* %6
%143 = load i8*, i8** %4
%144 = getelementptr inbounds i8, i8* %143, i32 1
store i8* %144, i8** %4
%145 = load i8, i8* %143
store i8 %145, i8* %7
%146 = load i8*, i8** %4
%147 = getelementptr inbounds i8, i8* %146, i32 1
store i8* %147, i8** %4
%148 = load i8, i8* %146
store i8 %148, i8* %8
%149 = load i8, i8* %5
%150 = zext i8 %149 to i32
%151 = icmp eq i32 %150, 52
br i1 %151, label %152, label %165
152: ; preds = %135
%153 = load i8, i8* %6
%154 = zext i8 %153 to i32
%155 = icmp eq i32 %154, 18
br i1 %155, label %156, label %165
156: ; preds = %152
%157 = load i8, i8* %7
%158 = zext i8 %157 to i32
%159 = icmp eq i32 %158, 120
br i1 %159, label %160, label %165
160: ; preds = %156
%161 = load i8, i8* %8
%162 = zext i8 %161 to i32
%163 = icmp eq i32 %162, 86
br i1 %163, label %164, label %165
164: ; preds = %160
store i32 4, i32* %1
br label %166
165: ; preds = %160, %156, %152, %135
store i32 -1, i32* %1
br label %166
166: ; preds = %165, %164, %134, %101, %68
%167 = load i32, i32* %1
ret i32 %167
}

LLVM IR (-O2):
define i32 @endian() {
ret i32 1
}