#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 */

/* Variables and functions */
int find_single_row(float **);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ substitute_variable(float **, int, float);
void assign_and_solve(float A[6][10 + 1], float rand) {
  int flag[10] = {0};
  int i, j, k;
  float X[10];
  j = 0;
  while (j < 10) {
    i = find_single_row(A);
    if (i != 6) {
      for (k = 0; k < 10 && ((A[i][k]) <= 0.00001 && (A[i][k]) >= -0.00001);
           k++)
        ;
      if (A[i][k] != 1) {
        printf("You should not be here!!!\n");
        return;
      }
      X[k] = A[i][10];
    } else {
      for (k = 10 - 1; k >= 0 && flag[k] == 1; k--)
        ;
      X[k] = rand;
    }
    flag[k] = 1;
    substitute_variable(A, k, X[k]);
    j++;
  }
  for (k = 0; k < 10; k++)
    printf("X%d = %.2f\n", k, X[k]);
}


x86 assembly (clang, -O0):
<assign_and_solve>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1040 <memset@plt>
movl   $0x0,-0x48(%rbp)
cmpl   $0xa,-0x48(%rbp)
jge    1337 <assign_and_solve+0x1f7>
mov    -0x8(%rbp),%rdi
call   1050 <find_single_row@plt>
mov    %eax,-0x44(%rbp)
cmpl   $0x6,-0x44(%rbp)
je     12a7 <assign_and_solve+0x167>
movl   $0x0,-0x4c(%rbp)
xor    %eax,%eax
cmpl   $0xa,-0x4c(%rbp)
mov    %al,-0x81(%rbp)
jge    1217 <assign_and_solve+0xd7>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x2c,%rcx,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm1
xor    %eax,%eax
movsd  0xe36(%rip),%xmm0
ucomisd %xmm1,%xmm0
mov    %al,-0x82(%rbp)
jb     120b <assign_and_solve+0xcb>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x2c,%rcx,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe0a(%rip),%xmm1
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0x82(%rbp)
mov    -0x82(%rbp),%al
mov    %al,-0x81(%rbp)
mov    -0x81(%rbp),%al
test   $0x1,%al
jne    122a <assign_and_solve+0xea>
jmp    123d <assign_and_solve+0xfd>
jmp    122f <assign_and_solve+0xef>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1192 <assign_and_solve+0x52>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x2c,%rcx,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0xdb3(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1271 <assign_and_solve+0x131>
jp     1271 <assign_and_solve+0x131>
jmp    1284 <assign_and_solve+0x144>
lea    0xd9c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1375 <assign_and_solve+0x235>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x2c,%rcx,%rcx
add    %rcx,%rax
movss  0x28(%rax),%xmm0
movslq -0x4c(%rbp),%rax
movss  %xmm0,-0x80(%rbp,%rax,4)
jmp    1307 <assign_and_solve+0x1c7>
movl   $0x9,-0x4c(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4c(%rbp)
mov    %al,-0x83(%rbp)
jl     12d2 <assign_and_solve+0x192>
movslq -0x4c(%rbp),%rax
cmpl   $0x1,-0x40(%rbp,%rax,4)
sete   %al
mov    %al,-0x83(%rbp)
mov    -0x83(%rbp),%al
test   $0x1,%al
jne    12e5 <assign_and_solve+0x1a5>
jmp    12f8 <assign_and_solve+0x1b8>
jmp    12ea <assign_and_solve+0x1aa>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
jmp    12ae <assign_and_solve+0x16e>
movss  -0xc(%rbp),%xmm0
movslq -0x4c(%rbp),%rax
movss  %xmm0,-0x80(%rbp,%rax,4)
movslq -0x4c(%rbp),%rax
movl   $0x1,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%rdi
mov    -0x4c(%rbp),%esi
movslq -0x4c(%rbp),%rax
movss  -0x80(%rbp,%rax,4),%xmm0
call   1060 <substitute_variable@plt>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    116b <assign_and_solve+0x2b>
movl   $0x0,-0x4c(%rbp)
cmpl   $0xa,-0x4c(%rbp)
jge    1375 <assign_and_solve+0x235>
mov    -0x4c(%rbp),%esi
movslq -0x4c(%rbp),%rax
movss  -0x80(%rbp,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xccf(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    133e <assign_and_solve+0x1fe>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<assign_and_solve>:
push   %rbp
push   %rbx
sub    $0x68,%rsp
movss  %xmm0,0xc(%rsp)
mov    %rdi,%rbx
xorps  %xmm0,%xmm0
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
movq   $0x0,0x30(%rsp)
mov    $0xa,%ebp
jmp    1198 <assign_and_solve+0x58>
nopl   0x0(%rax)
movslq %esi,%rcx
movss  0xc(%rsp),%xmm0
movss  %xmm0,0x40(%rsp,%rcx,4)
movl   $0x1,0x10(%rsp,%rcx,4)
mov    %rbx,%rdi
call   1060 <substitute_variable@plt>
add    $0xffffffff,%ebp
je     1400 <assign_and_solve+0x2c0>
mov    %rbx,%rdi
call   1050 <find_single_row@plt>
cmp    $0x6,%eax
jne    1240 <assign_and_solve+0x100>
mov    $0x9,%esi
cmpl   $0x1,0x34(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x8,%esi
cmpl   $0x1,0x30(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x7,%esi
cmpl   $0x1,0x2c(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x6,%esi
cmpl   $0x1,0x28(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x5,%esi
cmpl   $0x1,0x24(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x4,%esi
cmpl   $0x1,0x20(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x3,%esi
cmpl   $0x1,0x1c(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x2,%esi
cmpl   $0x1,0x18(%rsp)
jne    1170 <assign_and_solve+0x30>
mov    $0x1,%esi
cmpl   $0x1,0x14(%rsp)
jne    1170 <assign_and_solve+0x30>
xor    %esi,%esi
cmpl   $0x1,0x10(%rsp)
sete   %sil
neg    %esi
jmp    1170 <assign_and_solve+0x30>
nopw   0x0(%rax,%rax,1)
cltq
imul   $0x2c,%rax,%rax
movss  (%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
xor    %esi,%esi
movsd  0xda4(%rip),%xmm2
ucomisd %xmm1,%xmm2
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xd9a(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x4(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x1,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xd70(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x8(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x2,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xd46(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0xc(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x3,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xd1c(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x10(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x4,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xcf2(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x14(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x5,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xcc8(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x18(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x6,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xc9e(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x1c(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x7,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xc7c(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x20(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x8,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xc5a(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x24(%rbx,%rax,1),%xmm0
xorps  %xmm1,%xmm1
cvtss2sd %xmm0,%xmm1
ucomisd %xmm1,%xmm2
mov    $0x9,%esi
jb     13e0 <assign_and_solve+0x2a0>
ucomisd 0xc38(%rip),%xmm1
jb     13e0 <assign_and_solve+0x2a0>
movss  0x28(%rbx,%rax,1),%xmm0
mov    $0xa,%esi
nopl   (%rax)
ucomiss 0xc29(%rip),%xmm0
jne    1504 <assign_and_solve+0x3c4>
jp     1504 <assign_and_solve+0x3c4>
mov    %esi,%ecx
movss  0x28(%rbx,%rax,1),%xmm0
jmp    1179 <assign_and_solve+0x39>
movss  0x40(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xc03(%rip),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x44(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x48(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x2,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x4c(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x3,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x50(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x4,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x54(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x5,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x58(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x6,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x5c(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x7,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x60(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x8,%esi
mov    $0x1,%al
call   1040 <printf@plt>
movss  0x64(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x9,%esi
mov    $0x1,%al
add    $0x68,%rsp
pop    %rbx
pop    %rbp
jmp    1040 <printf@plt>
lea    0xb15(%rip),%rdi
add    $0x68,%rsp
pop    %rbx
pop    %rbp
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [27 x i8] c"You should not be here!!!\0A\00"
@.str.1 = [12 x i8] c"X%d = %.2f\0A\00"
define void @assign_and_solve([11 x float]* %0, float %1) {
%3 = alloca [11 x float]*
%4 = alloca float
%5 = alloca [10 x i32]
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca [10 x float]
store [11 x float]* %0, [11 x float]** %3
store float %1, float* %4
%10 = bitcast [10 x i32]* %5 to i8*
store i32 0, i32* %7
br label %11
11: ; preds = %97, %2
%12 = load i32, i32* %7
%13 = icmp slt i32 %12, 10
br i1 %13, label %14, label %111
14: ; preds = %11
%15 = load [11 x float]*, [11 x float]** %3
%16 = bitcast [11 x float]* %15 to float**
%17 = call i32 @find_single_row(float** %16)
store i32 %17, i32* %6
%18 = load i32, i32* %6
%19 = icmp ne i32 %18, 6
br i1 %19, label %20, label %76
20: ; preds = %14
store i32 0, i32* %8
br label %21
21: ; preds = %51, %20
%22 = load i32, i32* %8
%23 = icmp slt i32 %22, 10
br i1 %23, label %24, label %48
24: ; preds = %21
%25 = load [11 x float]*, [11 x float]** %3
%26 = load i32, i32* %6
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [11 x float], [11 x float]* %25, i64 %27
%29 = load i32, i32* %8
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [11 x float], [11 x float]* %28, i64 0, i64 %30
%32 = load float, float* %31
%33 = fpext float %32 to double
%34 = fcmp ole double %33, 1.000000e-05
br i1 %34, label %35, label %46
35: ; preds = %24
%36 = load [11 x float]*, [11 x float]** %3
%37 = load i32, i32* %6
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [11 x float], [11 x float]* %36, i64 %38
%40 = load i32, i32* %8
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [11 x float], [11 x float]* %39, i64 0, i64 %41
%43 = load float, float* %42
%44 = fpext float %43 to double
%45 = fcmp oge double %44, -1.000000e-05
br label %46
46: ; preds = %35, %24
%47 = phi i1 [ false, %24 ], [ %45, %35 ]
br label %48
48: ; preds = %46, %21
%49 = phi i1 [ false, %21 ], [ %47, %46 ]
br i1 %49, label %50, label %54
50: ; preds = %48
br label %51
51: ; preds = %50
%52 = load i32, i32* %8
%53 = add nsw i32 %52, 1
store i32 %53, i32* %8
br label %21
54: ; preds = %48
%55 = load [11 x float]*, [11 x float]** %3
%56 = load i32, i32* %6
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [11 x float], [11 x float]* %55, i64 %57
%59 = load i32, i32* %8
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [11 x float], [11 x float]* %58, i64 0, i64 %60
%62 = load float, float* %61
%63 = fcmp une float %62, 1.000000e+00
br i1 %63, label %64, label %66
64: ; preds = %54
%65 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str, i64 0, i64 0))
br label %126
66: ; preds = %54
%67 = load [11 x float]*, [11 x float]** %3
%68 = load i32, i32* %6
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [11 x float], [11 x float]* %67, i64 %69
%71 = getelementptr inbounds [11 x float], [11 x float]* %70, i64 0, i64 10
%72 = load float, float* %71
%73 = load i32, i32* %8
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [10 x float], [10 x float]* %9, i64 0, i64 %74
store float %72, float* %75
br label %97
76: ; preds = %14
store i32 9, i32* %8
br label %77
77: ; preds = %89, %76
%78 = load i32, i32* %8
%79 = icmp sge i32 %78, 0
br i1 %79, label %80, label %86
80: ; preds = %77
%81 = load i32, i32* %8
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [10 x i32], [10 x i32]* %5, i64 0, i64 %82
%84 = load i32, i32* %83
%85 = icmp eq i32 %84, 1
br label %86
86: ; preds = %80, %77
%87 = phi i1 [ false, %77 ], [ %85, %80 ]
br i1 %87, label %88, label %92
88: ; preds = %86
br label %89
89: ; preds = %88
%90 = load i32, i32* %8
%91 = add nsw i32 %90, -1
store i32 %91, i32* %8
br label %77
92: ; preds = %86
%93 = load float, float* %4
%94 = load i32, i32* %8
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [10 x float], [10 x float]* %9, i64 0, i64 %95
store float %93, float* %96
br label %97
97: ; preds = %92, %66
%98 = load i32, i32* %8
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [10 x i32], [10 x i32]* %5, i64 0, i64 %99
store i32 1, i32* %100
%101 = load [11 x float]*, [11 x float]** %3
%102 = bitcast [11 x float]* %101 to float**
%103 = load i32, i32* %8
%104 = load i32, i32* %8
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [10 x float], [10 x float]* %9, i64 0, i64 %105
%107 = load float, float* %106
%108 = call i32 @substitute_variable(float** %102, i32 %103, float %107)
%109 = load i32, i32* %7
%110 = add nsw i32 %109, 1
store i32 %110, i32* %7
br label %11
111: ; preds = %11
store i32 0, i32* %8
br label %112
112: ; preds = %123, %111
%113 = load i32, i32* %8
%114 = icmp slt i32 %113, 10
br i1 %114, label %115, label %126
115: ; preds = %112
%116 = load i32, i32* %8
%117 = load i32, i32* %8
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [10 x float], [10 x float]* %9, i64 0, i64 %118
%120 = load float, float* %119
%121 = fpext float %120 to double
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 %116, double %121)
br label %123
123: ; preds = %115
%124 = load i32, i32* %8
%125 = add nsw i32 %124, 1
store i32 %125, i32* %8
br label %112
126: ; preds = %64, %112
ret void
}

LLVM IR (-O2):
@.str.1 = [12 x i8] c"X%d = %.2f\0A\00"
@str = [26 x i8] c"You should not be here!!!\00"
define void @assign_and_solve([11 x float]* %0, float %1) {
%3 = alloca [10 x i32]
%4 = alloca [10 x float]
%5 = bitcast [10 x i32]* %3 to i8*
%6 = bitcast [10 x float]* %4 to i8*
%7 = bitcast [11 x float]* %0 to float**
%8 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 9
%9 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 8
%10 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 7
%11 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 6
%12 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 5
%13 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 4
%14 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 3
%15 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 2
%16 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 1
%17 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 0
br label %18
18: ; preds = %2, %145
%19 = phi i32 [ 0, %2 ], [ %151, %145 ]
%20 = tail call i32 @find_single_row(float** %7)
%21 = icmp eq i32 %20, 6
br i1 %21, label %22, label %25
22: ; preds = %18
%23 = load i32, i32* %8
%24 = icmp eq i32 %23, 1
br i1 %24, label %113, label %141
25: ; preds = %18
%26 = sext i32 %20 to i64
%27 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 0
%28 = load float, float* %27
%29 = fpext float %28 to double
%30 = fcmp ugt double %29, 1.000000e-05
%31 = fcmp ult double %29, -1.000000e-05
%32 = or i1 %30, %31
br i1 %32, label %99, label %33
33: ; preds = %25
%34 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 1
%35 = load float, float* %34
%36 = fpext float %35 to double
%37 = fcmp ugt double %36, 1.000000e-05
%38 = fcmp ult double %36, -1.000000e-05
%39 = or i1 %37, %38
br i1 %39, label %99, label %40
40: ; preds = %33
%41 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 2
%42 = load float, float* %41
%43 = fpext float %42 to double
%44 = fcmp ugt double %43, 1.000000e-05
%45 = fcmp ult double %43, -1.000000e-05
%46 = or i1 %44, %45
br i1 %46, label %99, label %47
47: ; preds = %40
%48 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 3
%49 = load float, float* %48
%50 = fpext float %49 to double
%51 = fcmp ugt double %50, 1.000000e-05
%52 = fcmp ult double %50, -1.000000e-05
%53 = or i1 %51, %52
br i1 %53, label %99, label %54
54: ; preds = %47
%55 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 4
%56 = load float, float* %55
%57 = fpext float %56 to double
%58 = fcmp ugt double %57, 1.000000e-05
%59 = fcmp ult double %57, -1.000000e-05
%60 = or i1 %58, %59
br i1 %60, label %99, label %61
61: ; preds = %54
%62 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 5
%63 = load float, float* %62
%64 = fpext float %63 to double
%65 = fcmp ugt double %64, 1.000000e-05
%66 = fcmp ult double %64, -1.000000e-05
%67 = or i1 %65, %66
br i1 %67, label %99, label %68
68: ; preds = %61
%69 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 6
%70 = load float, float* %69
%71 = fpext float %70 to double
%72 = fcmp ugt double %71, 1.000000e-05
%73 = fcmp ult double %71, -1.000000e-05
%74 = or i1 %72, %73
br i1 %74, label %99, label %75
75: ; preds = %68
%76 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 7
%77 = load float, float* %76
%78 = fpext float %77 to double
%79 = fcmp ugt double %78, 1.000000e-05
%80 = fcmp ult double %78, -1.000000e-05
%81 = or i1 %79, %80
br i1 %81, label %99, label %82
82: ; preds = %75
%83 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 8
%84 = load float, float* %83
%85 = fpext float %84 to double
%86 = fcmp ugt double %85, 1.000000e-05
%87 = fcmp ult double %85, -1.000000e-05
%88 = or i1 %86, %87
br i1 %88, label %99, label %89
89: ; preds = %82
%90 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 9
%91 = load float, float* %90
%92 = fpext float %91 to double
%93 = fcmp ugt double %92, 1.000000e-05
%94 = fcmp ult double %92, -1.000000e-05
%95 = or i1 %93, %94
br i1 %95, label %99, label %96
96: ; preds = %89
%97 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 10
%98 = load float, float* %97
br label %99
99: ; preds = %96, %89, %82, %75, %68, %61, %54, %47, %40, %33, %25
%100 = phi float [ %28, %25 ], [ %35, %33 ], [ %42, %40 ], [ %49, %47 ], [ %56, %54 ], [ %63, %61 ], [ %70, %68 ], [ %77, %75 ], [ %84, %82 ], [ %91, %89 ], [ %98, %96 ]
%101 = phi i32 [ 0, %25 ], [ 1, %33 ], [ 2, %40 ], [ 3, %47 ], [ 4, %54 ], [ 5, %61 ], [ 6, %68 ], [ 7, %75 ], [ 8, %82 ], [ 9, %89 ], [ 10, %96 ]
%102 = fcmp une float %100, 1.000000e+00
br i1 %102, label %103, label %105
103: ; preds = %99
%104 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str, i64 0, i64 0))
br label %194
105: ; preds = %99
%106 = zext i32 %101 to i64
%107 = getelementptr inbounds [11 x float], [11 x float]* %0, i64 %26, i64 10
%108 = load float, float* %107
%109 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 %106
store float %108, float* %109
%110 = zext i32 %101 to i64
%111 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 %110
%112 = load float, float* %111
br label %145
113: ; preds = %22
%114 = load i32, i32* %9
%115 = icmp eq i32 %114, 1
br i1 %115, label %116, label %141
116: ; preds = %113
%117 = load i32, i32* %10
%118 = icmp eq i32 %117, 1
br i1 %118, label %119, label %141
119: ; preds = %116
%120 = load i32, i32* %11
%121 = icmp eq i32 %120, 1
br i1 %121, label %122, label %141
122: ; preds = %119
%123 = load i32, i32* %12
%124 = icmp eq i32 %123, 1
br i1 %124, label %125, label %141
125: ; preds = %122
%126 = load i32, i32* %13
%127 = icmp eq i32 %126, 1
br i1 %127, label %128, label %141
128: ; preds = %125
%129 = load i32, i32* %14
%130 = icmp eq i32 %129, 1
br i1 %130, label %131, label %141
131: ; preds = %128
%132 = load i32, i32* %15
%133 = icmp eq i32 %132, 1
br i1 %133, label %134, label %141
134: ; preds = %131
%135 = load i32, i32* %16
%136 = icmp eq i32 %135, 1
br i1 %136, label %137, label %141
137: ; preds = %134
%138 = load i32, i32* %17
%139 = icmp eq i32 %138, 1
%140 = sext i1 %139 to i32
br label %141
141: ; preds = %137, %134, %131, %128, %125, %122, %119, %116, %113, %22
%142 = phi i32 [ 9, %22 ], [ 8, %113 ], [ 7, %116 ], [ 6, %119 ], [ 5, %122 ], [ 4, %125 ], [ 3, %128 ], [ 2, %131 ], [ 1, %134 ], [ %140, %137 ]
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 %143
store float %1, float* %144
br label %145
145: ; preds = %141, %105
%146 = phi float [ %1, %141 ], [ %112, %105 ]
%147 = phi i64 [ %143, %141 ], [ %110, %105 ]
%148 = phi i32 [ %142, %141 ], [ %101, %105 ]
%149 = getelementptr inbounds [10 x i32], [10 x i32]* %3, i64 0, i64 %147
store i32 1, i32* %149
%150 = tail call i32 @substitute_variable(float** %7, i32 %148, float %146)
%151 = add nuw nsw i32 %19, 1
%152 = icmp eq i32 %151, 10
br i1 %152, label %153, label %18
153: ; preds = %145
%154 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 0
%155 = load float, float* %154
%156 = fpext float %155 to double
%157 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 0, double %156)
%158 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 1
%159 = load float, float* %158
%160 = fpext float %159 to double
%161 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 1, double %160)
%162 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 2
%163 = load float, float* %162
%164 = fpext float %163 to double
%165 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 2, double %164)
%166 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 3
%167 = load float, float* %166
%168 = fpext float %167 to double
%169 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 3, double %168)
%170 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 4
%171 = load float, float* %170
%172 = fpext float %171 to double
%173 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 4, double %172)
%174 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 5
%175 = load float, float* %174
%176 = fpext float %175 to double
%177 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 5, double %176)
%178 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 6
%179 = load float, float* %178
%180 = fpext float %179 to double
%181 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 6, double %180)
%182 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 7
%183 = load float, float* %182
%184 = fpext float %183 to double
%185 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 7, double %184)
%186 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 8
%187 = load float, float* %186
%188 = fpext float %187 to double
%189 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 8, double %188)
%190 = getelementptr inbounds [10 x float], [10 x float]* %4, i64 0, i64 9
%191 = load float, float* %190
%192 = fpext float %191 to double
%193 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i32 9, double %192)
br label %194
194: ; preds = %153, %103
ret void
}