int main() {
  unsigned int a, b;
  unsigned long long int c;
  a = 0x00000002;
  b = 0x00000004;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFFFFF;
  b = 0xFFFFFFFF;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFFFFF;
  b = 0x00000001;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFFFFF;
  b = 0x0000000A;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFFFFE;
  b = 0xFFFFFFFC;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x0000000A;
  b = 0x0000000B;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFFFF6;
  b = 0x0000000B;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x0000F000;
  b = 0x0000F001;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x55555555;
  b = 0x33333333;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x00005353;
  b = 0x00008000;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0xFFFFF000;
  b = 0xFFFFF001;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x00005555;
  b = 0x33330000;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  a = 0x53535353;
  b = 0x80008000;
  c = (unsigned long long int)(a) * (unsigned long long int)(b);
  c = 0;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x2,-0x8(%rbp)
movl   $0x4,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xffffffff,-0x8(%rbp)
movl   $0xffffffff,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xffffffff,-0x8(%rbp)
movl   $0x1,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xffffffff,-0x8(%rbp)
movl   $0xa,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xfffffffe,-0x8(%rbp)
movl   $0xfffffffc,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xa,-0x8(%rbp)
movl   $0xb,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xfffffff6,-0x8(%rbp)
movl   $0xb,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xf000,-0x8(%rbp)
movl   $0xf001,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x55555555,-0x8(%rbp)
movl   $0x33333333,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x5353,-0x8(%rbp)
movl   $0x8000,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0xfffff000,-0x8(%rbp)
movl   $0xfffff001,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x5555,-0x8(%rbp)
movl   $0x33330000,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x53535353,-0x8(%rbp)
movl   $0x80008000,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   %rcx,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x18(%rbp)
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i64
store i32 0, i32* %1
store i32 2, i32* %2
store i32 4, i32* %3
%5 = load i32, i32* %2
%6 = zext i32 %5 to i64
%7 = load i32, i32* %3
%8 = zext i32 %7 to i64
%9 = mul i64 %6, %8
store i64 %9, i64* %4
store i64 0, i64* %4
store i32 -1, i32* %2
store i32 -1, i32* %3
%10 = load i32, i32* %2
%11 = zext i32 %10 to i64
%12 = load i32, i32* %3
%13 = zext i32 %12 to i64
%14 = mul i64 %11, %13
store i64 %14, i64* %4
store i64 0, i64* %4
store i32 -1, i32* %2
store i32 1, i32* %3
%15 = load i32, i32* %2
%16 = zext i32 %15 to i64
%17 = load i32, i32* %3
%18 = zext i32 %17 to i64
%19 = mul i64 %16, %18
store i64 %19, i64* %4
store i64 0, i64* %4
store i32 -1, i32* %2
store i32 10, i32* %3
%20 = load i32, i32* %2
%21 = zext i32 %20 to i64
%22 = load i32, i32* %3
%23 = zext i32 %22 to i64
%24 = mul i64 %21, %23
store i64 %24, i64* %4
store i64 0, i64* %4
store i32 -2, i32* %2
store i32 -4, i32* %3
%25 = load i32, i32* %2
%26 = zext i32 %25 to i64
%27 = load i32, i32* %3
%28 = zext i32 %27 to i64
%29 = mul i64 %26, %28
store i64 %29, i64* %4
store i64 0, i64* %4
store i32 10, i32* %2
store i32 11, i32* %3
%30 = load i32, i32* %2
%31 = zext i32 %30 to i64
%32 = load i32, i32* %3
%33 = zext i32 %32 to i64
%34 = mul i64 %31, %33
store i64 %34, i64* %4
store i64 0, i64* %4
store i32 -10, i32* %2
store i32 11, i32* %3
%35 = load i32, i32* %2
%36 = zext i32 %35 to i64
%37 = load i32, i32* %3
%38 = zext i32 %37 to i64
%39 = mul i64 %36, %38
store i64 %39, i64* %4
store i64 0, i64* %4
store i32 61440, i32* %2
store i32 61441, i32* %3
%40 = load i32, i32* %2
%41 = zext i32 %40 to i64
%42 = load i32, i32* %3
%43 = zext i32 %42 to i64
%44 = mul i64 %41, %43
store i64 %44, i64* %4
store i64 0, i64* %4
store i32 1431655765, i32* %2
store i32 858993459, i32* %3
%45 = load i32, i32* %2
%46 = zext i32 %45 to i64
%47 = load i32, i32* %3
%48 = zext i32 %47 to i64
%49 = mul i64 %46, %48
store i64 %49, i64* %4
store i64 0, i64* %4
store i32 21331, i32* %2
store i32 32768, i32* %3
%50 = load i32, i32* %2
%51 = zext i32 %50 to i64
%52 = load i32, i32* %3
%53 = zext i32 %52 to i64
%54 = mul i64 %51, %53
store i64 %54, i64* %4
store i64 0, i64* %4
store i32 -4096, i32* %2
store i32 -4095, i32* %3
%55 = load i32, i32* %2
%56 = zext i32 %55 to i64
%57 = load i32, i32* %3
%58 = zext i32 %57 to i64
%59 = mul i64 %56, %58
store i64 %59, i64* %4
store i64 0, i64* %4
store i32 21845, i32* %2
store i32 858980352, i32* %3
%60 = load i32, i32* %2
%61 = zext i32 %60 to i64
%62 = load i32, i32* %3
%63 = zext i32 %62 to i64
%64 = mul i64 %61, %63
store i64 %64, i64* %4
store i64 0, i64* %4
store i32 1397969747, i32* %2
store i32 -2147450880, i32* %3
%65 = load i32, i32* %2
%66 = zext i32 %65 to i64
%67 = load i32, i32* %3
%68 = zext i32 %67 to i64
%69 = mul i64 %66, %68
store i64 %69, i64* %4
store i64 0, i64* %4
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}