many_par(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {
  char *x;
  int aa, ba, ca, da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa;
  aa = bar();
  ba = bar();
  ca = bar();
  da = bar();
  ea = bar();
  fa = bar();
  ga = bar();
  ha = bar();
  ia = bar();
  ja = bar();
  ka = bar();
  la = bar();
  ma = bar();
  na = bar();
  oa = bar();
  pa = bar();
  foobar(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, aa, ba, ca, da, ea, fa,
         ga, ha, ia, ja, ka, la, ma, na, oa, pa);
}


x86 assembly (clang, -O0):
<many_par>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x188,%rsp
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x30(%rbp)
mov    %esi,-0x34(%rbp)
mov    %edx,-0x38(%rbp)
mov    %ecx,-0x3c(%rbp)
mov    %r8d,-0x40(%rbp)
mov    %r9d,-0x44(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x54(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x58(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x5c(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x60(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x64(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x68(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x6c(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x70(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x74(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x78(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x7c(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x80(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x84(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x88(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x8c(%rbp)
mov    $0x0,%al
call   1030 <bar@plt>
mov    %eax,-0x90(%rbp)
mov    -0x30(%rbp),%edi
mov    -0x34(%rbp),%esi
mov    -0x38(%rbp),%edx
mov    -0x3c(%rbp),%ecx
mov    -0x40(%rbp),%r8d
mov    -0x44(%rbp),%r9d
mov    0x10(%rbp),%eax
mov    %eax,-0xdc(%rbp)
mov    0x18(%rbp),%eax
mov    %eax,-0xd8(%rbp)
mov    0x20(%rbp),%eax
mov    %eax,-0xd4(%rbp)
mov    0x28(%rbp),%eax
mov    %eax,-0xd0(%rbp)
mov    0x30(%rbp),%eax
mov    %eax,-0xcc(%rbp)
mov    0x38(%rbp),%eax
mov    %eax,-0xc8(%rbp)
mov    0x40(%rbp),%eax
mov    %eax,-0xc4(%rbp)
mov    0x48(%rbp),%eax
mov    %eax,-0xc0(%rbp)
mov    0x50(%rbp),%eax
mov    %eax,-0xbc(%rbp)
mov    0x58(%rbp),%eax
mov    %eax,-0xb8(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0xb0(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0xa8(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x9c(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x74(%rbp),%r13d
mov    -0x78(%rbp),%r12d
mov    -0x7c(%rbp),%r15d
mov    -0x80(%rbp),%r14d
mov    -0x84(%rbp),%ebx
mov    -0x88(%rbp),%r11d
mov    -0x8c(%rbp),%r10d
mov    -0x90(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0xdc(%rbp),%eax
mov    %eax,(%rsp)
mov    -0xd8(%rbp),%eax
mov    %eax,0x8(%rsp)
mov    -0xd4(%rbp),%eax
mov    %eax,0x10(%rsp)
mov    -0xd0(%rbp),%eax
mov    %eax,0x18(%rsp)
mov    -0xcc(%rbp),%eax
mov    %eax,0x20(%rsp)
mov    -0xc8(%rbp),%eax
mov    %eax,0x28(%rsp)
mov    -0xc4(%rbp),%eax
mov    %eax,0x30(%rsp)
mov    -0xc0(%rbp),%eax
mov    %eax,0x38(%rsp)
mov    -0xbc(%rbp),%eax
mov    %eax,0x40(%rsp)
mov    -0xb8(%rbp),%eax
mov    %eax,0x48(%rsp)
mov    -0xb4(%rbp),%eax
mov    %eax,0x50(%rsp)
mov    -0xb0(%rbp),%eax
mov    %eax,0x58(%rsp)
mov    -0xac(%rbp),%eax
mov    %eax,0x60(%rsp)
mov    -0xa8(%rbp),%eax
mov    %eax,0x68(%rsp)
mov    -0xa4(%rbp),%eax
mov    %eax,0x70(%rsp)
mov    -0xa0(%rbp),%eax
mov    %eax,0x78(%rsp)
mov    -0x9c(%rbp),%eax
mov    %eax,0x80(%rsp)
mov    -0x98(%rbp),%eax
mov    %eax,0x88(%rsp)
mov    -0x94(%rbp),%eax
mov    %r13d,0x90(%rsp)
mov    %r12d,0x98(%rsp)
mov    %r15d,0xa0(%rsp)
mov    %r14d,0xa8(%rsp)
mov    %ebx,0xb0(%rsp)
mov    %r11d,0xb8(%rsp)
mov    %r10d,0xc0(%rsp)
mov    %eax,0xc8(%rsp)
mov    $0x0,%al
call   1040 <foobar@plt>
mov    -0x2c(%rbp),%eax
add    $0x188,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<many_par>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r9d,0x14(%rsp)
mov    %r8d,0x10(%rsp)
mov    %ecx,0xc(%rsp)
mov    %edx,0x8(%rsp)
mov    %esi,0x4(%rsp)
mov    %edi,(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x60(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x58(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x50(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x48(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x40(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x38(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x30(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x28(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x20(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %rax,0x18(%rsp)
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%r13d
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%ebx
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%r14d
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%r15d
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%r12d
xor    %eax,%eax
call   1030 <bar@plt>
mov    %eax,%ebp
mov    (%rsp),%edi
mov    0x4(%rsp),%esi
mov    0x8(%rsp),%edx
mov    0xc(%rsp),%ecx
mov    0x10(%rsp),%r8d
mov    0x14(%rsp),%r9d
xor    %eax,%eax
push   %rbp
push   %r12
push   %r15
push   %r14
push   %rbx
push   %r13
push   0x48(%rsp)
push   0x58(%rsp)
push   0x68(%rsp)
push   0x78(%rsp)
push   0x88(%rsp)
push   0x98(%rsp)
push   0xa8(%rsp)
push   0xb8(%rsp)
push   0xc8(%rsp)
push   0xd8(%rsp)
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
mov    0x168(%rsp),%ebp
push   %rbp
call   1040 <foobar@plt>
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @many_par(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15) {
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i8*
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
store i32 %0, i32* %18
store i32 %1, i32* %19
store i32 %2, i32* %20
store i32 %3, i32* %21
store i32 %4, i32* %22
store i32 %5, i32* %23
store i32 %6, i32* %24
store i32 %7, i32* %25
store i32 %8, i32* %26
store i32 %9, i32* %27
store i32 %10, i32* %28
store i32 %11, i32* %29
store i32 %12, i32* %30
store i32 %13, i32* %31
store i32 %14, i32* %32
store i32 %15, i32* %33
%51 = call i32 (...) @bar()
store i32 %51, i32* %35
%52 = call i32 (...) @bar()
store i32 %52, i32* %36
%53 = call i32 (...) @bar()
store i32 %53, i32* %37
%54 = call i32 (...) @bar()
store i32 %54, i32* %38
%55 = call i32 (...) @bar()
store i32 %55, i32* %39
%56 = call i32 (...) @bar()
store i32 %56, i32* %40
%57 = call i32 (...) @bar()
store i32 %57, i32* %41
%58 = call i32 (...) @bar()
store i32 %58, i32* %42
%59 = call i32 (...) @bar()
store i32 %59, i32* %43
%60 = call i32 (...) @bar()
store i32 %60, i32* %44
%61 = call i32 (...) @bar()
store i32 %61, i32* %45
%62 = call i32 (...) @bar()
store i32 %62, i32* %46
%63 = call i32 (...) @bar()
store i32 %63, i32* %47
%64 = call i32 (...) @bar()
store i32 %64, i32* %48
%65 = call i32 (...) @bar()
store i32 %65, i32* %49
%66 = call i32 (...) @bar()
store i32 %66, i32* %50
%67 = load i32, i32* %18
%68 = load i32, i32* %19
%69 = load i32, i32* %20
%70 = load i32, i32* %21
%71 = load i32, i32* %22
%72 = load i32, i32* %23
%73 = load i32, i32* %24
%74 = load i32, i32* %25
%75 = load i32, i32* %26
%76 = load i32, i32* %27
%77 = load i32, i32* %28
%78 = load i32, i32* %29
%79 = load i32, i32* %30
%80 = load i32, i32* %31
%81 = load i32, i32* %32
%82 = load i32, i32* %33
%83 = load i32, i32* %35
%84 = load i32, i32* %36
%85 = load i32, i32* %37
%86 = load i32, i32* %38
%87 = load i32, i32* %39
%88 = load i32, i32* %40
%89 = load i32, i32* %41
%90 = load i32, i32* %42
%91 = load i32, i32* %43
%92 = load i32, i32* %44
%93 = load i32, i32* %45
%94 = load i32, i32* %46
%95 = load i32, i32* %47
%96 = load i32, i32* %48
%97 = load i32, i32* %49
%98 = load i32, i32* %50
%99 = call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @foobar to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ...)*)(i32 %67, i32 %68, i32 %69, i32 %70, i32 %71, i32 %72, i32 %73, i32 %74, i32 %75, i32 %76, i32 %77, i32 %78, i32 %79, i32 %80, i32 %81, i32 %82, i32 %83, i32 %84, i32 %85, i32 %86, i32 %87, i32 %88, i32 %89, i32 %90, i32 %91, i32 %92, i32 %93, i32 %94, i32 %95, i32 %96, i32 %97, i32 %98)
%100 = load i32, i32* %17
ret i32 %100
}

LLVM IR (-O2):
define i32 @many_par(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15) {
%17 = tail call i32 (...) @bar()
%18 = tail call i32 (...) @bar()
%19 = tail call i32 (...) @bar()
%20 = tail call i32 (...) @bar()
%21 = tail call i32 (...) @bar()
%22 = tail call i32 (...) @bar()
%23 = tail call i32 (...) @bar()
%24 = tail call i32 (...) @bar()
%25 = tail call i32 (...) @bar()
%26 = tail call i32 (...) @bar()
%27 = tail call i32 (...) @bar()
%28 = tail call i32 (...) @bar()
%29 = tail call i32 (...) @bar()
%30 = tail call i32 (...) @bar()
%31 = tail call i32 (...) @bar()
%32 = tail call i32 (...) @bar()
%33 = tail call i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @foobar to i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ...)*)(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %17, i32 %18, i32 %19, i32 %20, i32 %21, i32 %22, i32 %23, i32 %24, i32 %25, i32 %26, i32 %27, i32 %28, i32 %29, i32 %30, i32 %31, i32 %32)
ret i32 undef
}