#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*/ mulredc10(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc11(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc12(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc13(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc14(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc15(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc16(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc17(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc18(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc19(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc2(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc20(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const *,
                             int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc3(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc4(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc5(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc6(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc7(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc8(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
int /*<<< orphan*/ mulredc9(int /*<<< orphan*/ *, int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const *,
                            int /*<<< orphan*/ const);
mp_limb_t call_mulredc(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[0], y[0], m[0], invm);
    break;
  case 2:
    cy = mulredc2(z, x, y, m, invm);
    break;
  case 3:
    cy = mulredc3(z, x, y, m, invm);
    break;
  case 4:
    cy = mulredc4(z, x, y, m, invm);
    break;
  case 5:
    cy = mulredc5(z, x, y, m, invm);
    break;
  case 6:
    cy = mulredc6(z, x, y, m, invm);
    break;
  case 7:
    cy = mulredc7(z, x, y, m, invm);
    break;
  case 8:
    cy = mulredc8(z, x, y, m, invm);
    break;
  case 9:
    cy = mulredc9(z, x, y, m, invm);
    break;
  case 10:
    cy = mulredc10(z, x, y, m, invm);
    break;
  case 11:
    cy = mulredc11(z, x, y, m, invm);
    break;
  case 12:
    cy = mulredc12(z, x, y, m, invm);
    break;
  case 13:
    cy = mulredc13(z, x, y, m, invm);
    break;
  case 14:
    cy = mulredc14(z, x, y, m, invm);
    break;
  case 15:
    cy = mulredc15(z, x, y, m, invm);
    break;
  case 16:
    cy = mulredc16(z, x, y, m, invm);
    break;
  case 17:
    cy = mulredc17(z, x, y, m, invm);
    break;
  case 18:
    cy = mulredc18(z, x, y, m, invm);
    break;
  case 19:
    cy = mulredc19(z, x, y, m, invm);
    break;
  case 20:
    cy = mulredc20(z, x, y, m, invm);
    break;
  default:
    cy = mulredc20(z, x, y, m, invm);
  }
  return cy;
}


x86 assembly (clang, -O0):
<call_mulredc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%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     1522 <call_mulredc+0x2e2>
mov    -0x38(%rbp),%rax
lea    0xd81(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rax
mov    (%rax),%esi
mov    -0x20(%rbp),%rax
mov    (%rax),%edx
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
mov    -0x2c(%rbp),%r8d
call   10a0 <mulredc1@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1120 <mulredc2@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1080 <mulredc3@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1130 <mulredc4@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1090 <mulredc5@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10e0 <mulredc6@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1030 <mulredc7@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10f0 <mulredc8@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1040 <mulredc9@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1050 <mulredc10@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1100 <mulredc11@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1060 <mulredc12@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1110 <mulredc13@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1070 <mulredc14@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1160 <mulredc15@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10c0 <mulredc16@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1150 <mulredc17@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10b0 <mulredc18@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   1140 <mulredc19@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10d0 <mulredc20@plt>
mov    %eax,-0x30(%rbp)
jmp    153e <call_mulredc+0x2fe>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x2c(%rbp),%r8d
call   10d0 <mulredc20@plt>
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<call_mulredc>:
mov    %rsi,%rax
add    $0xffffffff,%edi
cmp    $0x13,%edi
ja     126d <call_mulredc+0x2d>
lea    0xdae(%rip),%rsi
movslq (%rsi,%rdi,4),%rdi
add    %rsi,%rdi
jmp    *%rdi
mov    (%rdx),%esi
mov    (%rcx),%edx
mov    (%r8),%ecx
mov    %rax,%rdi
mov    %r9d,%r8d
jmp    10a0 <mulredc1@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10d0 <mulredc20@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1120 <mulredc2@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1080 <mulredc3@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1130 <mulredc4@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1090 <mulredc5@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10e0 <mulredc6@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1030 <mulredc7@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10f0 <mulredc8@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1040 <mulredc9@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1050 <mulredc10@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1100 <mulredc11@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1060 <mulredc12@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1110 <mulredc13@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1070 <mulredc14@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1160 <mulredc15@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10c0 <mulredc16@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1150 <mulredc17@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    10b0 <mulredc18@plt>
mov    %rax,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %r8,%rcx
mov    %r9d,%r8d
jmp    1140 <mulredc19@plt>

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

LLVM IR (-O2):
define i32 @call_mulredc(i32 %0, i32* %1, i32* %2, i32* %3, i32* %4, i32 %5) {
switch i32 %0, label %50 [
i32 1, label %7
i32 2, label %12
i32 3, label %14
i32 4, label %16
i32 5, label %18
i32 6, label %20
i32 7, label %22
i32 8, label %24
i32 9, label %26
i32 10, label %28
i32 11, label %30
i32 12, label %32
i32 13, label %34
i32 14, label %36
i32 15, label %38
i32 16, label %40
i32 17, label %42
i32 18, label %44
i32 19, label %46
i32 20, label %48
]
7: ; preds = %6
%8 = load i32, i32* %2
%9 = load i32, i32* %3
%10 = load i32, i32* %4
%11 = tail call i32 @mulredc1(i32* %1, i32 %8, i32 %9, i32 %10, i32 %5)
br label %52
12: ; preds = %6
%13 = tail call i32 @mulredc2(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
14: ; preds = %6
%15 = tail call i32 @mulredc3(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
16: ; preds = %6
%17 = tail call i32 @mulredc4(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
18: ; preds = %6
%19 = tail call i32 @mulredc5(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
20: ; preds = %6
%21 = tail call i32 @mulredc6(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
22: ; preds = %6
%23 = tail call i32 @mulredc7(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
24: ; preds = %6
%25 = tail call i32 @mulredc8(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
26: ; preds = %6
%27 = tail call i32 @mulredc9(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
28: ; preds = %6
%29 = tail call i32 @mulredc10(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
30: ; preds = %6
%31 = tail call i32 @mulredc11(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
32: ; preds = %6
%33 = tail call i32 @mulredc12(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
34: ; preds = %6
%35 = tail call i32 @mulredc13(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
36: ; preds = %6
%37 = tail call i32 @mulredc14(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
38: ; preds = %6
%39 = tail call i32 @mulredc15(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
40: ; preds = %6
%41 = tail call i32 @mulredc16(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
42: ; preds = %6
%43 = tail call i32 @mulredc17(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
44: ; preds = %6
%45 = tail call i32 @mulredc18(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
46: ; preds = %6
%47 = tail call i32 @mulredc19(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
48: ; preds = %6
%49 = tail call i32 @mulredc20(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
50: ; preds = %6
%51 = tail call i32 @mulredc20(i32* %1, i32* %2, i32* %3, i32* %4, i32 %5)
br label %52
52: ; preds = %50, %48, %46, %44, %42, %40, %38, %36, %34, %32, %30, %28, %26, %24, %22, %20, %18, %16, %14, %12, %7
%53 = phi i32 [ %51, %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, %7 ]
ret i32 %53
}