#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 /*<<< orphan*/ mp_limb_t;

/* Variables and functions */
int /*<<< orphan*/ mulredc1(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                            int /*<<< orphan*/ const, int /*<<< orphan*/ const,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_10(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_11(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_12(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_13(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_14(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_15(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_16(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_17(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_18(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_19(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_2(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_20(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const *,
                               int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_3(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_4(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_5(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_6(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_7(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_8(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc1_9(int /*<<< orphan*/ *, int /*<<< orphan*/ const,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const *,
                              int /*<<< orphan*/ const);
mp_limb_t call_mulredc1(const int N, mp_limb_t *z, const mp_limb_t x,
                        const mp_limb_t *y, const mp_limb_t *m,
                        const mp_limb_t invm) {
  mp_limb_t cy;
  switch (N) {
  case 1:
    cy = mulredc1(z, x, y[0], m[0], invm);
    break;
  case 2:
    cy = mulredc1_2(z, x, y, m, invm);
    break;
  case 3:
    cy = mulredc1_3(z, x, y, m, invm);
    break;
  case 4:
    cy = mulredc1_4(z, x, y, m, invm);
    break;
  case 5:
    cy = mulredc1_5(z, x, y, m, invm);
    break;
  case 6:
    cy = mulredc1_6(z, x, y, m, invm);
    break;
  case 7:
    cy = mulredc1_7(z, x, y, m, invm);
    break;
  case 8:
    cy = mulredc1_8(z, x, y, m, invm);
    break;
  case 9:
    cy = mulredc1_9(z, x, y, m, invm);
    break;
  case 10:
    cy = mulredc1_10(z, x, y, m, invm);
    break;
  case 11:
    cy = mulredc1_11(z, x, y, m, invm);
    break;
  case 12:
    cy = mulredc1_12(z, x, y, m, invm);
    break;
  case 13:
    cy = mulredc1_13(z, x, y, m, invm);
    break;
  case 14:
    cy = mulredc1_14(z, x, y, m, invm);
    break;
  case 15:
    cy = mulredc1_15(z, x, y, m, invm);
    break;
  case 16:
    cy = mulredc1_16(z, x, y, m, invm);
    break;
  case 17:
    cy = mulredc1_17(z, x, y, m, invm);
    break;
  case 18:
    cy = mulredc1_18(z, x, y, m, invm);
    break;
  case 19:
    cy = mulredc1_19(z, x, y, m, invm);
    break;
  case 20:
    cy = mulredc1_20(z, x, y, m, invm);
    break;
  default:
    cy = mulredc1_20(z, x, y, m, invm);
  }
  return cy;
}


x86 assembly (clang, -O0):
<call_mulredc1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x13,%eax
ja     150b <call_mulredc1+0x2cb>
mov    -0x38(%rbp),%rax
lea    0xd82(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rax
mov    (%rax),%edx
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
mov    -0x2c(%rbp),%r8d
call   1030 <mulredc1@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1090 <mulredc1_2@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1130 <mulredc1_3@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10b0 <mulredc1_4@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1140 <mulredc1_5@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10a0 <mulredc1_6@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1120 <mulredc1_7@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10c0 <mulredc1_8@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1150 <mulredc1_9@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1040 <mulredc1_10@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10d0 <mulredc1_11@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1050 <mulredc1_12@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10f0 <mulredc1_13@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1070 <mulredc1_14@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10e0 <mulredc1_15@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1060 <mulredc1_16@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1110 <mulredc1_17@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1080 <mulredc1_18@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1100 <mulredc1_19@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1160 <mulredc1_20@plt>
mov    %eax,-0x30(%rbp)
jmp    1526 <call_mulredc1+0x2e6>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1160 <mulredc1_20@plt>
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<call_mulredc1>:
add    $0xffffffff,%edi
cmp    $0x13,%edi
ja     126c <call_mulredc1+0x2c>
lea    0xdb1(%rip),%rax
movslq (%rax,%rdi,4),%rdi
add    %rax,%rdi
jmp    *%rdi
mov    (%rcx),%eax
mov    (%r8),%ecx
mov    %rsi,%rdi
mov    %edx,%esi
mov    %eax,%edx
mov    %r9d,%r8d
jmp    1030 <mulredc1@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1160 <mulredc1_20@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1090 <mulredc1_2@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1130 <mulredc1_3@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10b0 <mulredc1_4@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1140 <mulredc1_5@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10a0 <mulredc1_6@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1120 <mulredc1_7@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10c0 <mulredc1_8@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1150 <mulredc1_9@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1040 <mulredc1_10@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10d0 <mulredc1_11@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1050 <mulredc1_12@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10f0 <mulredc1_13@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1070 <mulredc1_14@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10e0 <mulredc1_15@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1060 <mulredc1_16@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1110 <mulredc1_17@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1080 <mulredc1_18@plt>
mov    %rsi,%rdi
mov    %edx,%esi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1100 <mulredc1_19@plt>

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

LLVM IR (-O2):
define i32 @call_mulredc1(i32 %0, i32* %1, i32 %2, i32* %3, i32* %4, i32 %5) {
switch i32 %0, label %49 [
i32 1, label %7
i32 2, label %11
i32 3, label %13
i32 4, label %15
i32 5, label %17
i32 6, label %19
i32 7, label %21
i32 8, label %23
i32 9, label %25
i32 10, label %27
i32 11, label %29
i32 12, label %31
i32 13, label %33
i32 14, label %35
i32 15, label %37
i32 16, label %39
i32 17, label %41
i32 18, label %43
i32 19, label %45
i32 20, label %47
]
7: ; preds = %6
%8 = load i32, i32* %3
%9 = load i32, i32* %4
%10 = tail call i32 @mulredc1(i32* %1, i32 %2, i32 %8, i32 %9, i32 %5)
br label %51
11: ; preds = %6
%12 = tail call i32 @mulredc1_2(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
13: ; preds = %6
%14 = tail call i32 @mulredc1_3(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
15: ; preds = %6
%16 = tail call i32 @mulredc1_4(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
17: ; preds = %6
%18 = tail call i32 @mulredc1_5(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
19: ; preds = %6
%20 = tail call i32 @mulredc1_6(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
21: ; preds = %6
%22 = tail call i32 @mulredc1_7(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
23: ; preds = %6
%24 = tail call i32 @mulredc1_8(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
25: ; preds = %6
%26 = tail call i32 @mulredc1_9(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
27: ; preds = %6
%28 = tail call i32 @mulredc1_10(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
29: ; preds = %6
%30 = tail call i32 @mulredc1_11(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
31: ; preds = %6
%32 = tail call i32 @mulredc1_12(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
33: ; preds = %6
%34 = tail call i32 @mulredc1_13(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
35: ; preds = %6
%36 = tail call i32 @mulredc1_14(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
37: ; preds = %6
%38 = tail call i32 @mulredc1_15(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
39: ; preds = %6
%40 = tail call i32 @mulredc1_16(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
41: ; preds = %6
%42 = tail call i32 @mulredc1_17(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
43: ; preds = %6
%44 = tail call i32 @mulredc1_18(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
45: ; preds = %6
%46 = tail call i32 @mulredc1_19(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
47: ; preds = %6
%48 = tail call i32 @mulredc1_20(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
49: ; preds = %6
%50 = tail call i32 @mulredc1_20(i32* %1, i32 %2, i32* %3, i32* %4, i32 %5)
br label %51
51: ; preds = %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %7
%52 = phi i32 [ %50, %49 ], [ %48, %47 ], [ %46, %45 ], [ %44, %43 ], [ %42, %41 ], [ %40, %39 ], [ %38, %37 ], [ %36, %35 ], [ %34, %33 ], [ %32, %31 ], [ %30, %29 ], [ %28, %27 ], [ %26, %25 ], [ %24, %23 ], [ %22, %21 ], [ %20, %19 ], [ %18, %17 ], [ %16, %15 ], [ %14, %13 ], [ %12, %11 ], [ %10, %7 ]
ret i32 %52
}