int feasible_p(int n, double *x, double *lb, double *ub) {
  int j;
  for (j = 0; j < n; j++)
    if (x[j] > ub[j] || x[j] < lb[j])
      return 0;
  return 1;
}


x86 assembly (clang, -O0):
<feasible_p>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1189 <feasible_p+0x89>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
ja     116a <feasible_p+0x6a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    1176 <feasible_p+0x76>
movl   $0x0,-0x4(%rbp)
jmp    1190 <feasible_p+0x90>
jmp    117b <feasible_p+0x7b>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    111a <feasible_p+0x1a>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<feasible_p>:
mov    $0x1,%eax
test   %edi,%edi
jle    1130 <feasible_p+0x30>
mov    %edi,%r8d
xor    %edi,%edi
xchg   %ax,%ax
movsd  (%rsi,%rdi,8),%xmm0
ucomisd (%rcx,%rdi,8),%xmm0
ja     1131 <feasible_p+0x31>
movsd  (%rdx,%rdi,8),%xmm1
ucomisd %xmm0,%xmm1
ja     1131 <feasible_p+0x31>
add    $0x1,%rdi
cmp    %rdi,%r8
jne    1110 <feasible_p+0x10>
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @feasible_p(i32 %0, double* %1, double* %2, double* %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca double*
%8 = alloca double*
%9 = alloca double*
%10 = alloca i32
store i32 %0, i32* %6
store double* %1, double** %7
store double* %2, double** %8
store double* %3, double** %9
store i32 0, i32* %10
br label %11
11: ; preds = %41, %4
%12 = load i32, i32* %10
%13 = load i32, i32* %6
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %44
15: ; preds = %11
%16 = load double*, double** %7
%17 = load i32, i32* %10
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds double, double* %16, i64 %18
%20 = load double, double* %19
%21 = load double*, double** %9
%22 = load i32, i32* %10
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds double, double* %21, i64 %23
%25 = load double, double* %24
%26 = fcmp ogt double %20, %25
br i1 %26, label %39, label %27
27: ; preds = %15
%28 = load double*, double** %7
%29 = load i32, i32* %10
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds double, double* %28, i64 %30
%32 = load double, double* %31
%33 = load double*, double** %8
%34 = load i32, i32* %10
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds double, double* %33, i64 %35
%37 = load double, double* %36
%38 = fcmp olt double %32, %37
br i1 %38, label %39, label %40
39: ; preds = %27, %15
store i32 0, i32* %5
br label %45
40: ; preds = %27
br label %41
41: ; preds = %40
%42 = load i32, i32* %10
%43 = add nsw i32 %42, 1
store i32 %43, i32* %10
br label %11
44: ; preds = %11
store i32 1, i32* %5
br label %45
45: ; preds = %44, %39
%46 = load i32, i32* %5
ret i32 %46
}

LLVM IR (-O2):
define i32 @feasible_p(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture %3) {
%5 = icmp sgt i32 %0, 0
br i1 %5, label %6, label %22
6: ; preds = %4
%7 = zext i32 %0 to i64
br label %10
8: ; preds = %17
%9 = icmp eq i64 %21, %7
br i1 %9, label %22, label %10
10: ; preds = %6, %8
%11 = phi i64 [ 0, %6 ], [ %21, %8 ]
%12 = getelementptr inbounds double, double* %1, i64 %11
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %3, i64 %11
%15 = load double, double* %14
%16 = fcmp ogt double %13, %15
br i1 %16, label %22, label %17
17: ; preds = %10
%18 = getelementptr inbounds double, double* %2, i64 %11
%19 = load double, double* %18
%20 = fcmp olt double %13, %19
%21 = add nuw nsw i64 %11, 1
br i1 %20, label %22, label %8
22: ; preds = %17, %10, %8, %4
%23 = phi i32 [ 1, %4 ], [ 1, %8 ], [ 0, %10 ], [ 0, %17 ]
ret i32 %23
}