#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*/ y;
typedef int /*<<< orphan*/ x;
typedef int /*<<< orphan*/ a;

/* Variables and functions */
int dgbmv(char, int, int, int, int, double *, double **, int, double **, int,
          double *, double **, int);
int /*<<< orphan*/ printe(int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ printv(char, double *, int);
int main(int argc, char *argv[]) {
  char trans = 'T';
  int m = 9;
  int n = 9;
  int kl = 1;
  int ku = 3;
  double alpha = 2.0;
  double a[] = {-0.0, 0.0,  0.0,  1.4,  2.5, 3.6,  6.5, -4.3, 3.2,  -0.0,
                -0.0, 1.3,  2.4,  -3.5, 4.6, 6.5,  4.2, -0.0, 0.0,  1.2,
                12.3, -3.4, 4.5,  -1.6, 7.7, -5.1, 9.8, -1.1, 2.2,  -13.3,
                4.4,  5.5,  -9.6, -1.8, 0.0, 3.6,  2.1, 3.2,  4.3,  5.1,
                6.5,  4.13, -0.0, 5.1,  0.0, 1.1,  2.2, 3.3,  -4.4, 55.5};
  int lda = 5;
  double x[] = {1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 4.0, 0.0, 5.0, 0.0, 6.0, 0.0,
                7.0, 0.0, 8.0, 0.0, 9.0, 0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6};
  int incx = 2;
  double beta = -3.0;
  double y[] = {-1.0, 0.0, -4.0, 0.0, 15.0, 0.0,  -19.3, 0.0, 0.0, 0.0, -3.0,
                0.0,  3.5, 0.0,  5.1, 0.0,  -7.1, 0.0,   0.0, 3.0, 2.3, 3.2};
  int incy = 2;
  printf("*********************************************************************"
         "***********\n");
  printf("*                                    DGBMV                           "
         "          *\n");
  printf("*********************************************************************"
         "***********\n");
  printf("INPUT Parameters:\n");
  printf("TRANS: %c\n", trans);
  printf("M    : %i\n", m);
  printf("N    : %i\n", n);
  printf("KL   : %i\n", kl);
  printf("KU   : %i\n", ku);
  printf("ALPHA: %f\n", alpha);
  printv('A', a, sizeof(a));
  printf("LDA  : %i\n", lda);
  printv('X', x, sizeof(x));
  printf("INCX : %i\n", incx);
  printf("BETA : %f\n", beta);
  printv('Y', y, sizeof(y));
  printf("INCY : %i\n", incy);
  printf("\n");
  int result =
      dgbmv(trans, m, n, kl, ku, &alpha, &a, lda, &x, incx, &beta, &y, incy);
  if (result >= 0) {
    printf("OUTPUT Result:\n");
    printv('Y', y, sizeof(y));
  } else {
    printf("OUTPUT Error:\n");
    printe(result);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x390,%rsp
movl   $0x0,-0x24(%rbp)
mov    %edi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
movb   $0x54,-0x31(%rbp)
movl   $0x9,-0x38(%rbp)
movl   $0x9,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
movl   $0x3,-0x44(%rbp)
movsd  0xe70(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    -0x1e0(%rbp),%rdi
lea    0xe65(%rip),%rsi
mov    $0x190,%edx
call   1050 <memcpy@plt>
movl   $0x5,-0x1e4(%rbp)
lea    -0x2b0(%rbp),%rdi
lea    0xfd3(%rip),%rsi
mov    $0xc0,%edx
call   1050 <memcpy@plt>
movl   $0x2,-0x2b4(%rbp)
movsd  0xe17(%rip),%xmm0
movsd  %xmm0,-0x2c0(%rbp)
ff
lea    -0x370(%rbp),%rdi
lea    0x1061(%rip),%rsi
mov    $0xb0,%edx
call   1050 <memcpy@plt>
movl   $0x2,-0x374(%rbp)
lea    0x10f6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x113a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x10da(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1170(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsbl -0x31(%rbp),%esi
lea    0x1171(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x38(%rbp),%esi
lea    0x116b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x3c(%rbp),%esi
lea    0x1165(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x40(%rbp),%esi
lea    0x115f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x44(%rbp),%esi
lea    0x1159(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  -0x50(%rbp),%xmm0
lea    0x1151(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    -0x1e0(%rbp),%rsi
mov    $0x41,%edi
mov    $0x190,%edx
call   1030 <printv@plt>
mov    -0x1e4(%rbp),%esi
lea    0x1132(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x2b0(%rbp),%rsi
mov    $0x58,%edi
mov    $0xc0,%edx
call   1030 <printv@plt>
mov    -0x2b4(%rbp),%esi
lea    0x1113(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  -0x2c0(%rbp),%xmm0
ff
lea    0x1108(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    -0x370(%rbp),%rsi
mov    $0x59,%edi
mov    $0xb0,%edx
call   1030 <printv@plt>
mov    -0x374(%rbp),%esi
lea    0x10e9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1063(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x31(%rbp),%dil
mov    -0x38(%rbp),%esi
mov    -0x3c(%rbp),%edx
mov    -0x40(%rbp),%ecx
mov    -0x44(%rbp),%r8d
lea    -0x1e0(%rbp),%r12
mov    -0x1e4(%rbp),%r15d
lea    -0x2b0(%rbp),%r14
mov    -0x2b4(%rbp),%ebx
lea    -0x370(%rbp),%r10
mov    -0x374(%rbp),%eax
lea    -0x50(%rbp),%r9
lea    -0x2c0(%rbp),%r11
movsbl %dil,%edi
mov    %r12,(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r14,0x10(%rsp)
mov    %ebx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10,0x28(%rsp)
mov    %eax,0x30(%rsp)
call   1060 <dgbmv@plt>
mov    %eax,-0x378(%rbp)
cmpl   $0x0,-0x378(%rbp)
jl     13ff <main+0x2af>
lea    0x1058(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x370(%rbp),%rsi
mov    $0x59,%edi
mov    $0xb0,%edx
call   1030 <printv@plt>
jmp    1418 <main+0x2c8>
lea    0x103f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x378(%rbp),%edi
call   1070 <printe@plt>
xor    %eax,%eax
add    $0x390,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x318,%rsp
movabs $0x4000000000000000,%rax
mov    %rax,0x8(%rsp)
lea    0xe7c(%rip),%rsi
lea    0x180(%rsp),%r14
mov    $0x190,%edx
mov    %r14,%rdi
call   1070 <memcpy@plt>
lea    0xff0(%rip),%rsi
lea    0xc0(%rsp),%r15
mov    $0xc0,%edx
mov    %r15,%rdi
call   1070 <memcpy@plt>
movabs $0xc008000000000000,%rax
mov    %rax,(%rsp)
lea    0x1086(%rip),%rsi
lea    0x10(%rsp),%r12
mov    $0xb0,%edx
mov    %r12,%rdi
call   1070 <memcpy@plt>
lea    0x11dc(%rip),%rbx
mov    %rbx,%rdi
call   1050 <puts@plt>
lea    0x117c(%rip),%rdi
call   1050 <puts@plt>
mov    %rbx,%rdi
call   1050 <puts@plt>
lea    0x120a(%rip),%rdi
call   1050 <puts@plt>
lea    0x10ee(%rip),%rdi
mov    $0x54,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x10e6(%rip),%rdi
mov    $0x9,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x10de(%rip),%rdi
mov    $0x9,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x10d6(%rip),%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x10ce(%rip),%rdi
mov    $0x3,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x10c6(%rip),%rdi
movsd  0xd77(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
mov    $0x41,%edi
mov    %r14,%rsi
mov    $0x190,%edx
call   1030 <printv@plt>
lea    0x10a9(%rip),%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0x58,%edi
mov    %r15,%rsi
mov    $0xc0,%edx
call   1030 <printv@plt>
lea    0x108f(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x1087(%rip),%rdi
movsd  0xd1f(%rip),%xmm0
mov    $0x1,%al
call   1060 <printf@plt>
mov    $0x59,%edi
mov    %r12,%rsi
mov    $0xb0,%edx
call   1030 <printv@plt>
lea    0x106a(%rip),%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
sub    $0x8,%rsp
lea    0x8(%rsp),%rax
lea    0x10(%rsp),%r9
mov    $0x54,%edi
mov    $0x9,%esi
mov    $0x9,%edx
mov    $0x1,%ecx
mov    $0x3,%r8d
push   $0x2
push   %r12
push   %rax
push   $0x2
push   %r15
push   $0x5
push   %r14
call   1080 <dgbmv@plt>
add    $0x40,%rsp
test   %eax,%eax
js     1383 <main+0x213>
lea    0x10d8(%rip),%rdi
call   1050 <puts@plt>
lea    0x10(%rsp),%rsi
mov    $0x59,%edi
mov    $0xb0,%edx
call   1030 <printv@plt>
jmp    1398 <main+0x228>
mov    %eax,%ebx
lea    0x10a6(%rip),%rdi
call   1050 <puts@plt>
mov    %ebx,%edi
call   1090 <printe@plt>
xor    %eax,%eax
add    $0x318,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const.main.a = [50 x double] [double -0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.400000e+00, double 2.500000e+00, double 3.600000e+00, double 6.500000e+00, double -4.300000e+00, double 3.200000e+00, double -0.000000e+00, double -0.000000e+00, double 1.300000e+00, double 2.400000e+00, double -3.500000e+00, double 4.600000e+00, double 6.500000e+00, double 4.200000e+00, double -0.000000e+00, double 0.000000e+00, double 1.200000e+00, double 1.230000e+01, double -3.400000e+00, double 4.500000e+00, double -1.600000e+00, double 7.700000e+00, double -5.100000e+00, double 9.800000e+00, double -1.100000e+00, double 2.200000e+00, double -1.330000e+01, double 4.400000e+00, double 5.500000e+00, double 0xC023333333333333, double -1.800000e+00, double 0.000000e+00, double 3.600000e+00, double 2.100000e+00, double 3.200000e+00, double 4.300000e+00, double 5.100000e+00, double 6.500000e+00, double 4.130000e+00, double -0.000000e+00, double 5.100000e+00, double 0.000000e+00, double 1.100000e+00, double 2.200000e+00, double 3.300000e+00, double -4.400000e+00, double 5.550000e+01]
@__const.main.x = [24 x double] [double 1.000000e+00, double 0.000000e+00, double 2.000000e+00, double 0.000000e+00, double 3.000000e+00, double 0.000000e+00, double 4.000000e+00, double 0.000000e+00, double 5.000000e+00, double 0.000000e+00, double 6.000000e+00, double 0.000000e+00, double 7.000000e+00, double 0.000000e+00, double 8.000000e+00, double 0.000000e+00, double 9.000000e+00, double 0.000000e+00, double 1.100000e+00, double 2.200000e+00, double 3.300000e+00, double 4.400000e+00, double 5.500000e+00, double 6.600000e+00]
@__const.main.y = [22 x double] [double -1.000000e+00, double 0.000000e+00, double -4.000000e+00, double 0.000000e+00, double 1.500000e+01, double 0.000000e+00, double -1.930000e+01, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double -3.000000e+00, double 0.000000e+00, double 3.500000e+00, double 0.000000e+00, double 5.100000e+00, double 0.000000e+00, double -7.100000e+00, double 0.000000e+00, double 0.000000e+00, double 3.000000e+00, double 2.300000e+00, double 3.200000e+00]
@.str = [82 x i8] c"********************************************************************************\0A\00"
@.str.1 = [82 x i8] c"* DGBMV *\0A\00"
@.str.2 = [19 x i8] c"INPUT Parameters:\0A\00"
@.str.3 = [11 x i8] c"TRANS: %c\0A\00"
@.str.4 = [11 x i8] c"M : %i\0A\00"
@.str.5 = [11 x i8] c"N : %i\0A\00"
@.str.6 = [11 x i8] c"KL : %i\0A\00"
@.str.7 = [11 x i8] c"KU : %i\0A\00"
@.str.8 = [11 x i8] c"ALPHA: %f\0A\00"
@.str.9 = [11 x i8] c"LDA : %i\0A\00"
@.str.10 = [11 x i8] c"INCX : %i\0A\00"
@.str.11 = [11 x i8] c"BETA : %f\0A\00"
@.str.12 = [11 x i8] c"INCY : %i\0A\00"
@.str.13 = [2 x i8] c"\0A\00"
@.str.14 = [16 x i8] c"OUTPUT Result:\0A\00"
@.str.15 = [15 x i8] c"OUTPUT Error:\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i8
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca double
%12 = alloca [50 x double]
%13 = alloca i32
%14 = alloca [24 x double]
%15 = alloca i32
%16 = alloca double
%17 = alloca [22 x double]
%18 = alloca i32
%19 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i8 84, i8* %6
store i32 9, i32* %7
store i32 9, i32* %8
store i32 1, i32* %9
store i32 3, i32* %10
store double 2.000000e+00, double* %11
%20 = bitcast [50 x double]* %12 to i8*
store i32 5, i32* %13
%21 = bitcast [24 x double]* %14 to i8*
store i32 2, i32* %15
store double -3.000000e+00, double* %16
%22 = bitcast [22 x double]* %17 to i8*
store i32 2, i32* %18
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.1, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%27 = load i8, i8* %6
%28 = sext i8 %27 to i32
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), i32 %28)
%30 = load i32, i32* %7
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0), i32 %30)
%32 = load i32, i32* %8
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i32 %32)
%34 = load i32, i32* %9
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i32 %34)
%36 = load i32, i32* %10
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), i32 %36)
%38 = load double, double* %11
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0), double %38)
%40 = getelementptr inbounds [50 x double], [50 x double]* %12, i64 0, i64 0
%41 = call i32 @printv(i8 signext 65, double* %40, i32 400)
%42 = load i32, i32* %13
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.9, i64 0, i64 0), i32 %42)
%44 = getelementptr inbounds [24 x double], [24 x double]* %14, i64 0, i64 0
%45 = call i32 @printv(i8 signext 88, double* %44, i32 192)
%46 = load i32, i32* %15
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.10, i64 0, i64 0), i32 %46)
%48 = load double, double* %16
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0), double %48)
%50 = getelementptr inbounds [22 x double], [22 x double]* %17, i64 0, i64 0
%51 = call i32 @printv(i8 signext 89, double* %50, i32 176)
%52 = load i32, i32* %18
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.12, i64 0, i64 0), i32 %52)
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
%55 = load i8, i8* %6
%56 = load i32, i32* %7
%57 = load i32, i32* %8
%58 = load i32, i32* %9
%59 = load i32, i32* %10
%60 = bitcast [50 x double]* %12 to double**
%61 = load i32, i32* %13
%62 = bitcast [24 x double]* %14 to double**
%63 = load i32, i32* %15
%64 = bitcast [22 x double]* %17 to double**
%65 = load i32, i32* %18
%66 = call i32 @dgbmv(i8 signext %55, i32 %56, i32 %57, i32 %58, i32 %59, double* %11, double** %60, i32 %61, double** %62, i32 %63, double* %16, double** %64, i32 %65)
store i32 %66, i32* %19
%67 = load i32, i32* %19
%68 = icmp sge i32 %67, 0
br i1 %68, label %69, label %73
69: ; preds = %2
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.14, i64 0, i64 0))
%71 = getelementptr inbounds [22 x double], [22 x double]* %17, i64 0, i64 0
%72 = call i32 @printv(i8 signext 89, double* %71, i32 176)
br label %77
73: ; preds = %2
%74 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.15, i64 0, i64 0))
%75 = load i32, i32* %19
%76 = call i32 @printe(i32 %75)
br label %77
77: ; preds = %73, %69
ret i32 0
}

LLVM IR (-O2):
@__const.main.a = [50 x double] [double -0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 1.400000e+00, double 2.500000e+00, double 3.600000e+00, double 6.500000e+00, double -4.300000e+00, double 3.200000e+00, double -0.000000e+00, double -0.000000e+00, double 1.300000e+00, double 2.400000e+00, double -3.500000e+00, double 4.600000e+00, double 6.500000e+00, double 4.200000e+00, double -0.000000e+00, double 0.000000e+00, double 1.200000e+00, double 1.230000e+01, double -3.400000e+00, double 4.500000e+00, double -1.600000e+00, double 7.700000e+00, double -5.100000e+00, double 9.800000e+00, double -1.100000e+00, double 2.200000e+00, double -1.330000e+01, double 4.400000e+00, double 5.500000e+00, double 0xC023333333333333, double -1.800000e+00, double 0.000000e+00, double 3.600000e+00, double 2.100000e+00, double 3.200000e+00, double 4.300000e+00, double 5.100000e+00, double 6.500000e+00, double 4.130000e+00, double -0.000000e+00, double 5.100000e+00, double 0.000000e+00, double 1.100000e+00, double 2.200000e+00, double 3.300000e+00, double -4.400000e+00, double 5.550000e+01]
@__const.main.x = [24 x double] [double 1.000000e+00, double 0.000000e+00, double 2.000000e+00, double 0.000000e+00, double 3.000000e+00, double 0.000000e+00, double 4.000000e+00, double 0.000000e+00, double 5.000000e+00, double 0.000000e+00, double 6.000000e+00, double 0.000000e+00, double 7.000000e+00, double 0.000000e+00, double 8.000000e+00, double 0.000000e+00, double 9.000000e+00, double 0.000000e+00, double 1.100000e+00, double 2.200000e+00, double 3.300000e+00, double 4.400000e+00, double 5.500000e+00, double 6.600000e+00]
@__const.main.y = [22 x double] [double -1.000000e+00, double 0.000000e+00, double -4.000000e+00, double 0.000000e+00, double 1.500000e+01, double 0.000000e+00, double -1.930000e+01, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double -3.000000e+00, double 0.000000e+00, double 3.500000e+00, double 0.000000e+00, double 5.100000e+00, double 0.000000e+00, double -7.100000e+00, double 0.000000e+00, double 0.000000e+00, double 3.000000e+00, double 2.300000e+00, double 3.200000e+00]
@.str.3 = [11 x i8] c"TRANS: %c\0A\00"
@.str.4 = [11 x i8] c"M : %i\0A\00"
@.str.5 = [11 x i8] c"N : %i\0A\00"
@.str.6 = [11 x i8] c"KL : %i\0A\00"
@.str.7 = [11 x i8] c"KU : %i\0A\00"
@.str.8 = [11 x i8] c"ALPHA: %f\0A\00"
@.str.9 = [11 x i8] c"LDA : %i\0A\00"
@.str.10 = [11 x i8] c"INCX : %i\0A\00"
@.str.11 = [11 x i8] c"BETA : %f\0A\00"
@.str.12 = [11 x i8] c"INCY : %i\0A\00"
@str.16 = [81 x i8] c"* DGBMV *\00"
@str.17 = [81 x i8] c"********************************************************************************\00"
@str.18 = [18 x i8] c"INPUT Parameters:\00"
@str.19 = [14 x i8] c"OUTPUT Error:\00"
@str.20 = [15 x i8] c"OUTPUT Result:\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca double
%4 = alloca [50 x double]
%5 = alloca [24 x double]
%6 = alloca double
%7 = alloca [22 x double]
%8 = bitcast double* %3 to i8*
store double 2.000000e+00, double* %3
%9 = bitcast [50 x double]* %4 to i8*
%10 = bitcast [24 x double]* %5 to i8*
%11 = bitcast double* %6 to i8*
store double -3.000000e+00, double* %6
%12 = bitcast [22 x double]* %7 to i8*
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.17, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.16, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.17, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.18, i64 0, i64 0))
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), i32 84)
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0), i32 9)
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i32 9)
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i32 1)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0), i32 3)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0), double 2.000000e+00)
%23 = getelementptr inbounds [50 x double], [50 x double]* %4, i64 0, i64 0
%24 = call i32 @printv(i8 signext 65, double* %23, i32 400)
%25 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.9, i64 0, i64 0), i32 5)
%26 = getelementptr inbounds [24 x double], [24 x double]* %5, i64 0, i64 0
%27 = call i32 @printv(i8 signext 88, double* %26, i32 192)
%28 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.10, i64 0, i64 0), i32 2)
%29 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.11, i64 0, i64 0), double -3.000000e+00)
%30 = getelementptr inbounds [22 x double], [22 x double]* %7, i64 0, i64 0
%31 = call i32 @printv(i8 signext 89, double* %30, i32 176)
%32 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.12, i64 0, i64 0), i32 2)
%33 = call i32 @putchar(i32 10)
%34 = bitcast [50 x double]* %4 to double**
%35 = bitcast [24 x double]* %5 to double**
%36 = bitcast [22 x double]* %7 to double**
%37 = call i32 @dgbmv(i8 signext 84, i32 9, i32 9, i32 1, i32 3, double* %3, double** %34, i32 5, double** %35, i32 2, double* %6, double** %36, i32 2)
%38 = icmp sgt i32 %37, -1
br i1 %38, label %39, label %42
39: ; preds = %2
%40 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.20, i64 0, i64 0))
%41 = call i32 @printv(i8 signext 89, double* %30, i32 176)
br label %45
42: ; preds = %2
%43 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.19, i64 0, i64 0))
%44 = call i32 @printe(i32 %37)
br label %45
45: ; preds = %42, %39
ret i32 0
}