void foo(signed char sc, unsigned char uc, signed long long sll,
         unsigned long long ull, _Complex signed char csc,
         _Complex unsigned char cuc, _Complex signed long long csll,
         _Complex unsigned long long cull) {
  signed char sc1;
  unsigned char uc1;
  signed long long sll1;
  unsigned long long ull1;
  _Complex signed char csc1;
  _Complex unsigned char cuc1;
  _Complex signed long long csll1;
  _Complex unsigned long long cull1;
  sc1 = csc;
  sc1 = cuc;
  sc1 = csll;
  sc1 = cull;
  uc1 = csc;
  uc1 = cuc;
  uc1 = csll;
  uc1 = cull;
  sll1 = csc;
  sll1 = cuc;
  sll1 = csll;
  sll1 = cull;
  ull1 = csc;
  ull1 = cuc;
  ull1 = csll;
  ull1 = cull;
  csc1 = sc;
  csc1 = uc;
  csc1 = sll;
  csc1 = ull;
  cuc1 = sc;
  cuc1 = uc;
  cuc1 = sll;
  cuc1 = ull;
  csll1 = sc;
  csll1 = uc;
  csll1 = sll;
  csll1 = ull;
  cull1 = sc;
  cull1 = uc;
  cull1 = sll;
  cull1 = ull;
  csc1 = sc + csc;
  cuc1 = sc + cuc;
  csll1 = sc + csll;
  cull1 = sc + cull;
  csc1 = uc + csc;
  cuc1 = uc + cuc;
  csll1 = uc + csll;
  cull1 = uc + cull;
  csll1 = sll + csc;
  csll1 = sll + cuc;
  csll1 = sll + csll;
  csll1 = sll + cull;
  csll1 = ull + csc;
  cull1 = ull + cuc;
  csll1 = ull + csll;
  cull1 = ull + cull;
  csc1 = csc + sc;
  csc1 = csc + uc;
  csll1 = csc + sll;
  csll1 = csc + ull;
  csc1 = cuc + sc;
  cuc1 = cuc + uc;
  csll1 = cuc + sll;
  cull1 = cuc + ull;
  csll1 = csll + sc;
  csll1 = csll + uc;
  csll1 = csll + sll;
  csll1 = csll + ull;
  csll1 = cull + sc;
  cull1 = cull + uc;
  csll1 = cull + sll;
  cull1 = cull + ull;
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
mov    %rcx,-0x80(%rbp)
mov    %rdx,%rax
mov    -0x80(%rbp),%rdx
mov    %rax,-0x78(%rbp)
mov    %esi,%ecx
mov    -0x78(%rbp),%rsi
mov    %edi,%eax
mov    %r8w,%r10w
mov    %cl,%dil
mov    %al,%r8b
lea    0x20(%rbp),%rax
lea    0x10(%rbp),%rcx
mov    %r10w,-0x8(%rbp)
mov    %r9w,-0x10(%rbp)
mov    %r8b,-0x11(%rbp)
mov    %dil,-0x12(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    -0x8(%rbp),%dl
mov    %dl,-0x29(%rbp)
mov    -0x10(%rbp),%dl
mov    %dl,-0x29(%rbp)
mov    (%rcx),%rdx
mov    %dl,-0x29(%rbp)
mov    (%rax),%rdx
mov    %dl,-0x29(%rbp)
mov    -0x8(%rbp),%dl
mov    %dl,-0x2a(%rbp)
mov    -0x10(%rbp),%dl
mov    %dl,-0x2a(%rbp)
mov    (%rcx),%rdx
mov    %dl,-0x2a(%rbp)
mov    (%rax),%rdx
mov    %dl,-0x2a(%rbp)
movsbq -0x8(%rbp),%rdx
mov    %rdx,-0x38(%rbp)
movzbl -0x10(%rbp),%edx
mov    %rdx,-0x38(%rbp)
mov    (%rcx),%rdx
mov    %rdx,-0x38(%rbp)
mov    (%rax),%rdx
mov    %rdx,-0x38(%rbp)
movsbq -0x8(%rbp),%rdx
mov    %rdx,-0x40(%rbp)
movzbl -0x10(%rbp),%edx
mov    %rdx,-0x40(%rbp)
mov    (%rcx),%rdx
mov    %rdx,-0x40(%rbp)
mov    (%rax),%rdx
mov    %rdx,-0x40(%rbp)
mov    -0x11(%rbp),%dl
mov    %dl,-0x48(%rbp)
movb   $0x0,-0x47(%rbp)
mov    -0x12(%rbp),%dl
mov    %dl,-0x48(%rbp)
movb   $0x0,-0x47(%rbp)
mov    -0x20(%rbp),%rdx
mov    %dl,-0x48(%rbp)
movb   $0x0,-0x47(%rbp)
mov    -0x28(%rbp),%rdx
mov    %dl,-0x48(%rbp)
movb   $0x0,-0x47(%rbp)
mov    -0x11(%rbp),%dl
mov    %dl,-0x50(%rbp)
movb   $0x0,-0x4f(%rbp)
mov    -0x12(%rbp),%dl
mov    %dl,-0x50(%rbp)
movb   $0x0,-0x4f(%rbp)
mov    -0x20(%rbp),%rdx
mov    %dl,-0x50(%rbp)
movb   $0x0,-0x4f(%rbp)
mov    -0x28(%rbp),%rdx
mov    %dl,-0x50(%rbp)
movb   $0x0,-0x4f(%rbp)
movsbq -0x11(%rbp),%rdx
mov    %rdx,-0x60(%rbp)
movq   $0x0,-0x58(%rbp)
movzbl -0x12(%rbp),%edx
mov    %rdx,-0x60(%rbp)
movq   $0x0,-0x58(%rbp)
mov    -0x20(%rbp),%rdx
mov    %rdx,-0x60(%rbp)
movq   $0x0,-0x58(%rbp)
mov    -0x28(%rbp),%rdx
mov    %rdx,-0x60(%rbp)
movq   $0x0,-0x58(%rbp)
movsbq -0x11(%rbp),%rdx
mov    %rdx,-0x70(%rbp)
movq   $0x0,-0x68(%rbp)
movzbl -0x12(%rbp),%edx
mov    %rdx,-0x70(%rbp)
movq   $0x0,-0x68(%rbp)
mov    -0x20(%rbp),%rdx
mov    %rdx,-0x70(%rbp)
movq   $0x0,-0x68(%rbp)
mov    -0x28(%rbp),%rdx
mov    %rdx,-0x70(%rbp)
movq   $0x0,-0x68(%rbp)
movsbl -0x11(%rbp),%esi
mov    -0x8(%rbp),%dil
mov    -0x7(%rbp),%dl
movsbl %dil,%edi
movsbl %dl,%edx
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x48(%rbp)
mov    %dl,-0x47(%rbp)
movsbl -0x11(%rbp),%esi
mov    -0x10(%rbp),%dil
mov    -0xf(%rbp),%dl
movzbl %dil,%edi
movzbl %dl,%edx
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x50(%rbp)
mov    %dl,-0x4f(%rbp)
movsbq -0x11(%rbp),%rsi
mov    (%rcx),%rdi
mov    0x8(%rcx),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
movsbq -0x11(%rbp),%rsi
mov    (%rax),%rdi
mov    0x8(%rax),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x70(%rbp)
mov    %rdx,-0x68(%rbp)
movzbl -0x12(%rbp),%esi
mov    -0x8(%rbp),%dil
mov    -0x7(%rbp),%dl
movsbl %dil,%edi
movsbl %dl,%edx
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x48(%rbp)
mov    %dl,-0x47(%rbp)
movzbl -0x12(%rbp),%esi
mov    -0x10(%rbp),%dil
mov    -0xf(%rbp),%dl
movzbl %dil,%edi
movzbl %dl,%edx
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x50(%rbp)
mov    %dl,-0x4f(%rbp)
movzbl -0x12(%rbp),%edx
mov    %edx,%esi
mov    (%rcx),%rdi
mov    0x8(%rcx),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
movzbl -0x12(%rbp),%edx
mov    %edx,%esi
mov    (%rax),%rdi
mov    0x8(%rax),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x70(%rbp)
mov    %rdx,-0x68(%rbp)
mov    -0x20(%rbp),%rsi
mov    -0x8(%rbp),%dil
mov    -0x7(%rbp),%dl
movsbq %dil,%rdi
movsbq %dl,%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x20(%rbp),%rsi
mov    -0x10(%rbp),%dil
mov    -0xf(%rbp),%dl
movzbl %dil,%edi
movzbl %dl,%edx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x20(%rbp),%rsi
mov    (%rcx),%rdi
mov    0x8(%rcx),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x20(%rbp),%rsi
mov    (%rax),%rdi
mov    0x8(%rax),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x28(%rbp),%rsi
mov    -0x8(%rbp),%dil
mov    -0x7(%rbp),%dl
movsbq %dil,%rdi
movsbq %dl,%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x28(%rbp),%rsi
mov    -0x10(%rbp),%dil
mov    -0xf(%rbp),%dl
movzbl %dil,%edi
movzbl %dl,%edx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x70(%rbp)
mov    %rdx,-0x68(%rbp)
mov    -0x28(%rbp),%rsi
mov    (%rcx),%rdi
mov    0x8(%rcx),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x28(%rbp),%rsi
mov    (%rax),%rdi
mov    0x8(%rax),%rdx
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x70(%rbp)
mov    %rdx,-0x68(%rbp)
mov    -0x8(%rbp),%sil
mov    -0x7(%rbp),%dl
movsbl %sil,%esi
movsbl %dl,%edx
movsbl -0x11(%rbp),%edi
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x48(%rbp)
mov    %dl,-0x47(%rbp)
mov    -0x8(%rbp),%sil
mov    -0x7(%rbp),%dl
movsbl %sil,%esi
movsbl %dl,%edx
movzbl -0x12(%rbp),%edi
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x48(%rbp)
mov    %dl,-0x47(%rbp)
mov    -0x8(%rbp),%sil
mov    -0x7(%rbp),%dl
movsbq %sil,%rsi
movsbq %dl,%rdx
add    -0x20(%rbp),%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x8(%rbp),%sil
mov    -0x7(%rbp),%dl
movsbq %sil,%rsi
movsbq %dl,%rdx
add    -0x28(%rbp),%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x10(%rbp),%sil
mov    -0xf(%rbp),%dl
movzbl %sil,%esi
movzbl %dl,%edx
movsbl -0x11(%rbp),%edi
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x48(%rbp)
mov    %dl,-0x47(%rbp)
mov    -0x10(%rbp),%sil
mov    -0xf(%rbp),%dl
movzbl %sil,%esi
movzbl %dl,%edx
movzbl -0x12(%rbp),%edi
add    %edi,%esi
add    $0x0,%edx
mov    %sil,-0x50(%rbp)
mov    %dl,-0x4f(%rbp)
mov    -0x10(%rbp),%sil
mov    -0xf(%rbp),%dl
movzbl %sil,%esi
movzbl %dl,%edx
add    -0x20(%rbp),%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    -0x10(%rbp),%sil
mov    -0xf(%rbp),%dl
movzbl %sil,%esi
movzbl %dl,%edx
add    -0x28(%rbp),%rsi
add    $0x0,%rdx
mov    %rsi,-0x70(%rbp)
mov    %rdx,-0x68(%rbp)
mov    (%rcx),%rsi
mov    0x8(%rcx),%rdx
movsbq -0x11(%rbp),%rdi
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    (%rcx),%rsi
mov    0x8(%rcx),%rdx
movzbl -0x12(%rbp),%edi
add    %rdi,%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    (%rcx),%rsi
mov    0x8(%rcx),%rdx
add    -0x20(%rbp),%rsi
add    $0x0,%rdx
mov    %rsi,-0x60(%rbp)
mov    %rdx,-0x58(%rbp)
mov    (%rcx),%rdx
mov    0x8(%rcx),%rcx
add    -0x28(%rbp),%rdx
add    $0x0,%rcx
mov    %rdx,-0x60(%rbp)
mov    %rcx,-0x58(%rbp)
mov    (%rax),%rdx
mov    0x8(%rax),%rcx
movsbq -0x11(%rbp),%rsi
add    %rsi,%rdx
add    $0x0,%rcx
mov    %rdx,-0x60(%rbp)
mov    %rcx,-0x58(%rbp)
mov    (%rax),%rdx
mov    0x8(%rax),%rcx
movzbl -0x12(%rbp),%esi
add    %rsi,%rdx
add    $0x0,%rcx
mov    %rdx,-0x70(%rbp)
mov    %rcx,-0x68(%rbp)
mov    (%rax),%rdx
mov    0x8(%rax),%rcx
add    -0x20(%rbp),%rdx
add    $0x0,%rcx
mov    %rdx,-0x60(%rbp)
mov    %rcx,-0x58(%rbp)
mov    (%rax),%rcx
mov    0x8(%rax),%rax
add    -0x28(%rbp),%rcx
add    $0x0,%rax
mov    %rcx,-0x70(%rbp)
mov    %rax,-0x68(%rbp)
pop    %rbp
ret

x86 assembly (clang, -O2):
<foo>:
ret

LLVM IR (-O0):
define void @foo(i8 signext %0, i8 zeroext %1, i64 %2, i64 %3, i16 %4, i16 %5, { i64, i64 }* byval({ i64, i64 }) align 8 %6, { i64, i64 }* byval({ i64, i64 }) align 8 %7) {
%9 = alloca { i8, i8 }
%10 = alloca { i8, i8 }
%11 = alloca i8
%12 = alloca i8
%13 = alloca i64
%14 = alloca i64
%15 = alloca i8
%16 = alloca i8
%17 = alloca i64
%18 = alloca i64
%19 = alloca { i8, i8 }
%20 = alloca { i8, i8 }
%21 = alloca { i64, i64 }
%22 = alloca { i64, i64 }
%23 = bitcast { i8, i8 }* %9 to i16*
store i16 %4, i16* %23
%24 = bitcast { i8, i8 }* %10 to i16*
store i16 %5, i16* %24
store i8 %0, i8* %11
store i8 %1, i8* %12
store i64 %2, i64* %13
store i64 %3, i64* %14
%25 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%26 = load i8, i8* %25
store i8 %26, i8* %15
%27 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%28 = load i8, i8* %27
store i8 %28, i8* %15
%29 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%30 = load i64, i64* %29
%31 = trunc i64 %30 to i8
store i8 %31, i8* %15
%32 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%33 = load i64, i64* %32
%34 = trunc i64 %33 to i8
store i8 %34, i8* %15
%35 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%36 = load i8, i8* %35
store i8 %36, i8* %16
%37 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%38 = load i8, i8* %37
store i8 %38, i8* %16
%39 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%40 = load i64, i64* %39
%41 = trunc i64 %40 to i8
store i8 %41, i8* %16
%42 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%43 = load i64, i64* %42
%44 = trunc i64 %43 to i8
store i8 %44, i8* %16
%45 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%46 = load i8, i8* %45
%47 = sext i8 %46 to i64
store i64 %47, i64* %17
%48 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%49 = load i8, i8* %48
%50 = zext i8 %49 to i64
store i64 %50, i64* %17
%51 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%52 = load i64, i64* %51
store i64 %52, i64* %17
%53 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%54 = load i64, i64* %53
store i64 %54, i64* %17
%55 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%56 = load i8, i8* %55
%57 = sext i8 %56 to i64
store i64 %57, i64* %18
%58 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%59 = load i8, i8* %58
%60 = zext i8 %59 to i64
store i64 %60, i64* %18
%61 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%62 = load i64, i64* %61
store i64 %62, i64* %18
%63 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%64 = load i64, i64* %63
store i64 %64, i64* %18
%65 = load i8, i8* %11
%66 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%67 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %65, i8* %66
store i8 0, i8* %67
%68 = load i8, i8* %12
%69 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%70 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %68, i8* %69
store i8 0, i8* %70
%71 = load i64, i64* %13
%72 = trunc i64 %71 to i8
%73 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%74 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %72, i8* %73
store i8 0, i8* %74
%75 = load i64, i64* %14
%76 = trunc i64 %75 to i8
%77 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%78 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %76, i8* %77
store i8 0, i8* %78
%79 = load i8, i8* %11
%80 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%81 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %79, i8* %80
store i8 0, i8* %81
%82 = load i8, i8* %12
%83 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%84 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %82, i8* %83
store i8 0, i8* %84
%85 = load i64, i64* %13
%86 = trunc i64 %85 to i8
%87 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%88 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %86, i8* %87
store i8 0, i8* %88
%89 = load i64, i64* %14
%90 = trunc i64 %89 to i8
%91 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%92 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %90, i8* %91
store i8 0, i8* %92
%93 = load i8, i8* %11
%94 = sext i8 %93 to i64
%95 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%96 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %94, i64* %95
store i64 0, i64* %96
%97 = load i8, i8* %12
%98 = zext i8 %97 to i64
%99 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%100 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %98, i64* %99
store i64 0, i64* %100
%101 = load i64, i64* %13
%102 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%103 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %101, i64* %102
store i64 0, i64* %103
%104 = load i64, i64* %14
%105 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%106 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %104, i64* %105
store i64 0, i64* %106
%107 = load i8, i8* %11
%108 = sext i8 %107 to i64
%109 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%110 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %108, i64* %109
store i64 0, i64* %110
%111 = load i8, i8* %12
%112 = zext i8 %111 to i64
%113 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%114 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %112, i64* %113
store i64 0, i64* %114
%115 = load i64, i64* %13
%116 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%117 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %115, i64* %116
store i64 0, i64* %117
%118 = load i64, i64* %14
%119 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%120 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %118, i64* %119
store i64 0, i64* %120
%121 = load i8, i8* %11
%122 = sext i8 %121 to i32
%123 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%124 = load i8, i8* %123
%125 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%126 = load i8, i8* %125
%127 = sext i8 %124 to i32
%128 = sext i8 %126 to i32
%129 = add i32 %122, %127
%130 = add i32 0, %128
%131 = trunc i32 %129 to i8
%132 = trunc i32 %130 to i8
%133 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%134 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %131, i8* %133
store i8 %132, i8* %134
%135 = load i8, i8* %11
%136 = sext i8 %135 to i32
%137 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%138 = load i8, i8* %137
%139 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%140 = load i8, i8* %139
%141 = zext i8 %138 to i32
%142 = zext i8 %140 to i32
%143 = add i32 %136, %141
%144 = add i32 0, %142
%145 = trunc i32 %143 to i8
%146 = trunc i32 %144 to i8
%147 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%148 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %145, i8* %147
store i8 %146, i8* %148
%149 = load i8, i8* %11
%150 = sext i8 %149 to i64
%151 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%152 = load i64, i64* %151
%153 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%154 = load i64, i64* %153
%155 = add i64 %150, %152
%156 = add i64 0, %154
%157 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%158 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %155, i64* %157
store i64 %156, i64* %158
%159 = load i8, i8* %11
%160 = sext i8 %159 to i64
%161 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%162 = load i64, i64* %161
%163 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%164 = load i64, i64* %163
%165 = add i64 %160, %162
%166 = add i64 0, %164
%167 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%168 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %165, i64* %167
store i64 %166, i64* %168
%169 = load i8, i8* %12
%170 = zext i8 %169 to i32
%171 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%172 = load i8, i8* %171
%173 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%174 = load i8, i8* %173
%175 = sext i8 %172 to i32
%176 = sext i8 %174 to i32
%177 = add i32 %170, %175
%178 = add i32 0, %176
%179 = trunc i32 %177 to i8
%180 = trunc i32 %178 to i8
%181 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%182 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %179, i8* %181
store i8 %180, i8* %182
%183 = load i8, i8* %12
%184 = zext i8 %183 to i32
%185 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%186 = load i8, i8* %185
%187 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%188 = load i8, i8* %187
%189 = zext i8 %186 to i32
%190 = zext i8 %188 to i32
%191 = add i32 %184, %189
%192 = add i32 0, %190
%193 = trunc i32 %191 to i8
%194 = trunc i32 %192 to i8
%195 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%196 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %193, i8* %195
store i8 %194, i8* %196
%197 = load i8, i8* %12
%198 = zext i8 %197 to i64
%199 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%200 = load i64, i64* %199
%201 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%202 = load i64, i64* %201
%203 = add i64 %198, %200
%204 = add i64 0, %202
%205 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%206 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %203, i64* %205
store i64 %204, i64* %206
%207 = load i8, i8* %12
%208 = zext i8 %207 to i64
%209 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%210 = load i64, i64* %209
%211 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%212 = load i64, i64* %211
%213 = add i64 %208, %210
%214 = add i64 0, %212
%215 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%216 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %213, i64* %215
store i64 %214, i64* %216
%217 = load i64, i64* %13
%218 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%219 = load i8, i8* %218
%220 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%221 = load i8, i8* %220
%222 = sext i8 %219 to i64
%223 = sext i8 %221 to i64
%224 = add i64 %217, %222
%225 = add i64 0, %223
%226 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%227 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %224, i64* %226
store i64 %225, i64* %227
%228 = load i64, i64* %13
%229 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%230 = load i8, i8* %229
%231 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%232 = load i8, i8* %231
%233 = zext i8 %230 to i64
%234 = zext i8 %232 to i64
%235 = add i64 %228, %233
%236 = add i64 0, %234
%237 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%238 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %235, i64* %237
store i64 %236, i64* %238
%239 = load i64, i64* %13
%240 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%241 = load i64, i64* %240
%242 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%243 = load i64, i64* %242
%244 = add i64 %239, %241
%245 = add i64 0, %243
%246 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%247 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %244, i64* %246
store i64 %245, i64* %247
%248 = load i64, i64* %13
%249 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%250 = load i64, i64* %249
%251 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%252 = load i64, i64* %251
%253 = add i64 %248, %250
%254 = add i64 0, %252
%255 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%256 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %253, i64* %255
store i64 %254, i64* %256
%257 = load i64, i64* %14
%258 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%259 = load i8, i8* %258
%260 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%261 = load i8, i8* %260
%262 = sext i8 %259 to i64
%263 = sext i8 %261 to i64
%264 = add i64 %257, %262
%265 = add i64 0, %263
%266 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%267 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %264, i64* %266
store i64 %265, i64* %267
%268 = load i64, i64* %14
%269 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%270 = load i8, i8* %269
%271 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%272 = load i8, i8* %271
%273 = zext i8 %270 to i64
%274 = zext i8 %272 to i64
%275 = add i64 %268, %273
%276 = add i64 0, %274
%277 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%278 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %275, i64* %277
store i64 %276, i64* %278
%279 = load i64, i64* %14
%280 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%281 = load i64, i64* %280
%282 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%283 = load i64, i64* %282
%284 = add i64 %279, %281
%285 = add i64 0, %283
%286 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%287 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %284, i64* %286
store i64 %285, i64* %287
%288 = load i64, i64* %14
%289 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%290 = load i64, i64* %289
%291 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%292 = load i64, i64* %291
%293 = add i64 %288, %290
%294 = add i64 0, %292
%295 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%296 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %293, i64* %295
store i64 %294, i64* %296
%297 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%298 = load i8, i8* %297
%299 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%300 = load i8, i8* %299
%301 = sext i8 %298 to i32
%302 = sext i8 %300 to i32
%303 = load i8, i8* %11
%304 = sext i8 %303 to i32
%305 = add i32 %301, %304
%306 = add i32 %302, 0
%307 = trunc i32 %305 to i8
%308 = trunc i32 %306 to i8
%309 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%310 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %307, i8* %309
store i8 %308, i8* %310
%311 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%312 = load i8, i8* %311
%313 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%314 = load i8, i8* %313
%315 = sext i8 %312 to i32
%316 = sext i8 %314 to i32
%317 = load i8, i8* %12
%318 = zext i8 %317 to i32
%319 = add i32 %315, %318
%320 = add i32 %316, 0
%321 = trunc i32 %319 to i8
%322 = trunc i32 %320 to i8
%323 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%324 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %321, i8* %323
store i8 %322, i8* %324
%325 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%326 = load i8, i8* %325
%327 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%328 = load i8, i8* %327
%329 = sext i8 %326 to i64
%330 = sext i8 %328 to i64
%331 = load i64, i64* %13
%332 = add i64 %329, %331
%333 = add i64 %330, 0
%334 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%335 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %332, i64* %334
store i64 %333, i64* %335
%336 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 0
%337 = load i8, i8* %336
%338 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %9, i32 0, i32 1
%339 = load i8, i8* %338
%340 = sext i8 %337 to i64
%341 = sext i8 %339 to i64
%342 = load i64, i64* %14
%343 = add i64 %340, %342
%344 = add i64 %341, 0
%345 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%346 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %343, i64* %345
store i64 %344, i64* %346
%347 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%348 = load i8, i8* %347
%349 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%350 = load i8, i8* %349
%351 = zext i8 %348 to i32
%352 = zext i8 %350 to i32
%353 = load i8, i8* %11
%354 = sext i8 %353 to i32
%355 = add i32 %351, %354
%356 = add i32 %352, 0
%357 = trunc i32 %355 to i8
%358 = trunc i32 %356 to i8
%359 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 0
%360 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %19, i32 0, i32 1
store i8 %357, i8* %359
store i8 %358, i8* %360
%361 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%362 = load i8, i8* %361
%363 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%364 = load i8, i8* %363
%365 = zext i8 %362 to i32
%366 = zext i8 %364 to i32
%367 = load i8, i8* %12
%368 = zext i8 %367 to i32
%369 = add i32 %365, %368
%370 = add i32 %366, 0
%371 = trunc i32 %369 to i8
%372 = trunc i32 %370 to i8
%373 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 0
%374 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %20, i32 0, i32 1
store i8 %371, i8* %373
store i8 %372, i8* %374
%375 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%376 = load i8, i8* %375
%377 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%378 = load i8, i8* %377
%379 = zext i8 %376 to i64
%380 = zext i8 %378 to i64
%381 = load i64, i64* %13
%382 = add i64 %379, %381
%383 = add i64 %380, 0
%384 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%385 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %382, i64* %384
store i64 %383, i64* %385
%386 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 0
%387 = load i8, i8* %386
%388 = getelementptr inbounds { i8, i8 }, { i8, i8 }* %10, i32 0, i32 1
%389 = load i8, i8* %388
%390 = zext i8 %387 to i64
%391 = zext i8 %389 to i64
%392 = load i64, i64* %14
%393 = add i64 %390, %392
%394 = add i64 %391, 0
%395 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%396 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %393, i64* %395
store i64 %394, i64* %396
%397 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%398 = load i64, i64* %397
%399 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%400 = load i64, i64* %399
%401 = load i8, i8* %11
%402 = sext i8 %401 to i64
%403 = add i64 %398, %402
%404 = add i64 %400, 0
%405 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%406 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %403, i64* %405
store i64 %404, i64* %406
%407 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%408 = load i64, i64* %407
%409 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%410 = load i64, i64* %409
%411 = load i8, i8* %12
%412 = zext i8 %411 to i64
%413 = add i64 %408, %412
%414 = add i64 %410, 0
%415 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%416 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %413, i64* %415
store i64 %414, i64* %416
%417 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%418 = load i64, i64* %417
%419 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%420 = load i64, i64* %419
%421 = load i64, i64* %13
%422 = add i64 %418, %421
%423 = add i64 %420, 0
%424 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%425 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %422, i64* %424
store i64 %423, i64* %425
%426 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
%427 = load i64, i64* %426
%428 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
%429 = load i64, i64* %428
%430 = load i64, i64* %14
%431 = add i64 %427, %430
%432 = add i64 %429, 0
%433 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%434 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %431, i64* %433
store i64 %432, i64* %434
%435 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%436 = load i64, i64* %435
%437 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%438 = load i64, i64* %437
%439 = load i8, i8* %11
%440 = sext i8 %439 to i64
%441 = add i64 %436, %440
%442 = add i64 %438, 0
%443 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%444 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %441, i64* %443
store i64 %442, i64* %444
%445 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%446 = load i64, i64* %445
%447 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%448 = load i64, i64* %447
%449 = load i8, i8* %12
%450 = zext i8 %449 to i64
%451 = add i64 %446, %450
%452 = add i64 %448, 0
%453 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%454 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %451, i64* %453
store i64 %452, i64* %454
%455 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%456 = load i64, i64* %455
%457 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%458 = load i64, i64* %457
%459 = load i64, i64* %13
%460 = add i64 %456, %459
%461 = add i64 %458, 0
%462 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 0
%463 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %21, i32 0, i32 1
store i64 %460, i64* %462
store i64 %461, i64* %463
%464 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
%465 = load i64, i64* %464
%466 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
%467 = load i64, i64* %466
%468 = load i64, i64* %14
%469 = add i64 %465, %468
%470 = add i64 %467, 0
%471 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 0
%472 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %22, i32 0, i32 1
store i64 %469, i64* %471
store i64 %470, i64* %472
ret void
}

LLVM IR (-O2):
define void @foo(i8 signext %0, i8 zeroext %1, i64 %2, i64 %3, i16 %4, i16 %5, { i64, i64 }* nocapture byval({ i64, i64 }) align 8 %6, { i64, i64 }* nocapture byval({ i64, i64 }) align 8 %7) {
ret void
}