void dboxProject(double *p, double *lb, double *ub, int m) {
  register int i;
  if (!lb) {
    if (!ub)
      return;
    else {
      for (i = m; i-- > 0;)
        if (p[i] > ub[i])
          p[i] = ub[i];
    }
  } else if (!ub) {
    for (i = m; i-- > 0;)
      if (p[i] < lb[i])
        p[i] = lb[i];
  } else
    for (i = m; i-- > 0;)
      p[i] = (((lb[i]) >= (p[i]))
                  ? (((ub[i]) >= (lb[i]))
                         ? (lb[i])
                         : (((ub[i]) <= (p[i])) ? (p[i]) : (ub[i])))
                  : (((ub[i]) >= (p[i]))
                         ? (p[i])
                         : (((ub[i]) <= (lb[i])) ? (lb[i]) : (ub[i]))));
}


x86 assembly (clang, -O0):
<dboxProject>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1191 <dboxProject+0x91>
cmpq   $0x0,-0x18(%rbp)
jne    112e <dboxProject+0x2e>
jmp    138e <dboxProject+0x28e>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    1187 <dboxProject+0x87>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jbe    1182 <dboxProject+0x82>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1134 <dboxProject+0x34>
jmp    118c <dboxProject+0x8c>
jmp    138e <dboxProject+0x28e>
cmpq   $0x0,-0x18(%rbp)
jne    11fe <dboxProject+0xfe>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    11f9 <dboxProject+0xf9>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    11f4 <dboxProject+0xf4>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    11a2 <dboxProject+0xa2>
jmp    1389 <dboxProject+0x289>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    1384 <dboxProject+0x284>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     12d5 <dboxProject+0x1d5>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     126f <dboxProject+0x16f>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    12c6 <dboxProject+0x1c6>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     12aa <dboxProject+0x1aa>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
jmp    12bc <dboxProject+0x1bc>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    136d <dboxProject+0x26d>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     130c <dboxProject+0x20c>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    1363 <dboxProject+0x263>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     1347 <dboxProject+0x247>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1359 <dboxProject+0x259>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1204 <dboxProject+0x104>
jmp    1389 <dboxProject+0x289>
jmp    138e <dboxProject+0x28e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dboxProject>:
test   %rsi,%rsi
je     11a1 <dboxProject+0xa1>
test   %rdx,%rdx
je     1222 <dboxProject+0x122>
test   %ecx,%ecx
jle    1248 <dboxProject+0x148>
mov    %ecx,%eax
add    $0x1,%rax
jmp    1143 <dboxProject+0x43>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  %xmm0,(%rdi,%rcx,8)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    1248 <dboxProject+0x148>
lea    -0x2(%rax),%ecx
movsd  (%rsi,%rcx,8),%xmm2
movsd  (%rdi,%rcx,8),%xmm3
ucomisd %xmm3,%xmm2
movsd  (%rdx,%rcx,8),%xmm1
jae    1180 <dboxProject+0x80>
ucomisd %xmm3,%xmm1
movapd %xmm3,%xmm0
jae    1130 <dboxProject+0x30>
movapd %xmm1,%xmm0
cmplesd %xmm2,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
jmp    1130 <dboxProject+0x30>
nopl   0x0(%rax)
ucomisd %xmm2,%xmm1
movapd %xmm2,%xmm0
jae    1130 <dboxProject+0x30>
movapd %xmm1,%xmm0
cmplesd %xmm3,%xmm0
andpd  %xmm0,%xmm3
andnpd %xmm1,%xmm0
orpd   %xmm3,%xmm0
jmp    1130 <dboxProject+0x30>
test   %rdx,%rdx
je     1248 <dboxProject+0x148>
test   %ecx,%ecx
jle    1248 <dboxProject+0x148>
mov    %ecx,%eax
test   $0x1,%al
je     11d3 <dboxProject+0xd3>
add    $0xffffffffffffffff,%rax
mov    %eax,%esi
movsd  (%rdi,%rsi,8),%xmm1
movsd  (%rdx,%rsi,8),%xmm0
ucomisd %xmm0,%xmm1
jbe    11d3 <dboxProject+0xd3>
movsd  %xmm0,(%rdi,%rsi,8)
cmp    $0x1,%ecx
je     1248 <dboxProject+0x148>
add    $0xfffffffffffffffe,%rax
jmp    11f1 <dboxProject+0xf1>
xchg   %ax,%ax
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    1248 <dboxProject+0x148>
lea    0x1(%rax),%ecx
movsd  (%rdi,%rcx,8),%xmm1
movsd  (%rdx,%rcx,8),%xmm0
ucomisd %xmm0,%xmm1
jbe    1209 <dboxProject+0x109>
movsd  %xmm0,(%rdi,%rcx,8)
mov    %eax,%ecx
movsd  (%rdi,%rcx,8),%xmm1
movsd  (%rdx,%rcx,8),%xmm0
ucomisd %xmm0,%xmm1
jbe    11e0 <dboxProject+0xe0>
movsd  %xmm0,(%rdi,%rcx,8)
jmp    11e0 <dboxProject+0xe0>
test   %ecx,%ecx
jle    1248 <dboxProject+0x148>
mov    %ecx,%eax
test   $0x1,%al
je     1243 <dboxProject+0x143>
add    $0xffffffffffffffff,%rax
mov    %eax,%edx
movsd  (%rsi,%rdx,8),%xmm0
ucomisd (%rdi,%rdx,8),%xmm0
jbe    1243 <dboxProject+0x143>
movsd  %xmm0,(%rdi,%rdx,8)
cmp    $0x1,%ecx
jne    1249 <dboxProject+0x149>
ret
add    $0xfffffffffffffffe,%rax
jmp    1261 <dboxProject+0x161>
nop
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    1248 <dboxProject+0x148>
lea    0x1(%rax),%ecx
movsd  (%rsi,%rcx,8),%xmm0
ucomisd (%rdi,%rcx,8),%xmm0
jbe    1275 <dboxProject+0x175>
movsd  %xmm0,(%rdi,%rcx,8)
mov    %eax,%ecx
movsd  (%rsi,%rcx,8),%xmm0
ucomisd (%rdi,%rcx,8),%xmm0
jbe    1250 <dboxProject+0x150>
movsd  %xmm0,(%rdi,%rcx,8)
jmp    1250 <dboxProject+0x150>

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

LLVM IR (-O2):
define void @dboxProject(double* nocapture %0, double* %1, double* %2, i32 %3) {
%5 = icmp eq double* %1, null
br i1 %5, label %6, label %47
6: ; preds = %4
%7 = icmp ne double* %2, null
%8 = icmp sgt i32 %3, 0
%9 = and i1 %7, %8
br i1 %9, label %10, label %115
10: ; preds = %6
%11 = zext i32 %3 to i64
%12 = and i64 %11, 1
%13 = icmp eq i64 %12, 0
br i1 %13, label %23, label %14
14: ; preds = %10
%15 = add nsw i64 %11, -1
%16 = and i64 %15, 4294967295
%17 = getelementptr inbounds double, double* %0, i64 %16
%18 = load double, double* %17
%19 = getelementptr inbounds double, double* %2, i64 %16
%20 = load double, double* %19
%21 = fcmp ogt double %18, %20
br i1 %21, label %22, label %23
22: ; preds = %14
store double %20, double* %17
br label %23
23: ; preds = %14, %22, %10
%24 = phi i64 [ %11, %10 ], [ %15, %22 ], [ %15, %14 ]
%25 = icmp eq i32 %3, 1
br i1 %25, label %115, label %26
26: ; preds = %23, %45
%27 = phi i64 [ %37, %45 ], [ %24, %23 ]
%28 = add nsw i64 %27, -1
%29 = and i64 %28, 4294967295
%30 = getelementptr inbounds double, double* %0, i64 %29
%31 = load double, double* %30
%32 = getelementptr inbounds double, double* %2, i64 %29
%33 = load double, double* %32
%34 = fcmp ogt double %31, %33
br i1 %34, label %35, label %36
35: ; preds = %26
store double %33, double* %30
br label %36
36: ; preds = %35, %26
%37 = add nsw i64 %27, -2
%38 = and i64 %37, 4294967295
%39 = getelementptr inbounds double, double* %0, i64 %38
%40 = load double, double* %39
%41 = getelementptr inbounds double, double* %2, i64 %38
%42 = load double, double* %41
%43 = fcmp ogt double %40, %42
br i1 %43, label %44, label %45
44: ; preds = %36
store double %42, double* %39
br label %45
45: ; preds = %44, %36
%46 = icmp ugt i64 %28, 1
br i1 %46, label %26, label %115
47: ; preds = %4
%48 = icmp eq double* %2, null
%49 = icmp sgt i32 %3, 0
br i1 %48, label %53, label %50
50: ; preds = %47
br i1 %49, label %51, label %115
51: ; preds = %50
%52 = zext i32 %3 to i64
br label %91
53: ; preds = %47
br i1 %49, label %54, label %115
54: ; preds = %53
%55 = zext i32 %3 to i64
%56 = and i64 %55, 1
%57 = icmp eq i64 %56, 0
br i1 %57, label %67, label %58
58: ; preds = %54
%59 = add nsw i64 %55, -1
%60 = and i64 %59, 4294967295
%61 = getelementptr inbounds double, double* %0, i64 %60
%62 = load double, double* %61
%63 = getelementptr inbounds double, double* %1, i64 %60
%64 = load double, double* %63
%65 = fcmp olt double %62, %64
br i1 %65, label %66, label %67
66: ; preds = %58
store double %64, double* %61
br label %67
67: ; preds = %58, %66, %54
%68 = phi i64 [ %55, %54 ], [ %59, %66 ], [ %59, %58 ]
%69 = icmp eq i32 %3, 1
br i1 %69, label %115, label %70
70: ; preds = %67, %89
%71 = phi i64 [ %81, %89 ], [ %68, %67 ]
%72 = add nsw i64 %71, -1
%73 = and i64 %72, 4294967295
%74 = getelementptr inbounds double, double* %0, i64 %73
%75 = load double, double* %74
%76 = getelementptr inbounds double, double* %1, i64 %73
%77 = load double, double* %76
%78 = fcmp olt double %75, %77
br i1 %78, label %79, label %80
79: ; preds = %70
store double %77, double* %74
br label %80
80: ; preds = %79, %70
%81 = add nsw i64 %71, -2
%82 = and i64 %81, 4294967295
%83 = getelementptr inbounds double, double* %0, i64 %82
%84 = load double, double* %83
%85 = getelementptr inbounds double, double* %1, i64 %82
%86 = load double, double* %85
%87 = fcmp olt double %84, %86
br i1 %87, label %88, label %89
88: ; preds = %80
store double %86, double* %83
br label %89
89: ; preds = %88, %80
%90 = icmp ugt i64 %72, 1
br i1 %90, label %70, label %115
91: ; preds = %51, %112
%92 = phi i64 [ %52, %51 ], [ %93, %112 ]
%93 = add nsw i64 %92, -1
%94 = and i64 %93, 4294967295
%95 = getelementptr inbounds double, double* %1, i64 %94
%96 = load double, double* %95
%97 = getelementptr inbounds double, double* %0, i64 %94
%98 = load double, double* %97
%99 = fcmp ult double %96, %98
%100 = getelementptr inbounds double, double* %2, i64 %94
%101 = load double, double* %100
br i1 %99, label %107, label %102
102: ; preds = %91
%103 = fcmp ult double %101, %96
br i1 %103, label %104, label %112
104: ; preds = %102
%105 = fcmp ole double %101, %98
%106 = select i1 %105, double %98, double %101
br label %112
107: ; preds = %91
%108 = fcmp ult double %101, %98
br i1 %108, label %109, label %112
109: ; preds = %107
%110 = fcmp ole double %101, %96
%111 = select i1 %110, double %96, double %101
br label %112
112: ; preds = %109, %107, %104, %102
%113 = phi double [ %96, %102 ], [ %106, %104 ], [ %98, %107 ], [ %111, %109 ]
store double %113, double* %97
%114 = icmp ugt i64 %92, 1
br i1 %114, label %91, label %115
115: ; preds = %112, %67, %89, %23, %45, %50, %53, %6
ret void
}