int my_check(char *nbr) {
  int lp;
  int sg;
  sg = 0;
  lp = 0;
  while (nbr[lp] != '\0') {
    if (nbr[lp] == '+' || nbr[lp] == '-') {
      if (sg == 1)
        return (0);
    } else if ((nbr[lp] != '+' || nbr[lp] != '-') && sg == 0)
      sg = 1;
    ++lp;
  }
  return (1);
}


x86 assembly (clang, -O0):
<my_check>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     11be <my_check+0xbe>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
je     1155 <my_check+0x55>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
jne    1170 <my_check+0x70>
cmpl   $0x1,-0x18(%rbp)
jne    116b <my_check+0x6b>
movl   $0x0,-0x4(%rbp)
jmp    11c5 <my_check+0xc5>
jmp    11b0 <my_check+0xb0>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2b,%eax
jne    119a <my_check+0x9a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
je     11ab <my_check+0xab>
cmpl   $0x0,-0x18(%rbp)
jne    11ab <my_check+0xab>
movl   $0x1,-0x18(%rbp)
jmp    11b0 <my_check+0xb0>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1116 <my_check+0x16>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<my_check>:
xor    %ecx,%ecx
jmp    111d <my_check+0x1d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %eax,%eax
cmp    $0x1,%ecx
je     1133 <my_check+0x33>
add    $0x1,%rdi
mov    %eax,%ecx
movzbl (%rdi),%edx
cmp    $0x2b,%dl
je     1110 <my_check+0x10>
cmp    $0x2d,%dl
je     1110 <my_check+0x10>
mov    $0x1,%eax
test   %dl,%dl
jne    1117 <my_check+0x17>
ret

LLVM IR (-O0):
define i32 @my_check(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
store i8* %0, i8** %3
store i32 0, i32* %5
store i32 0, i32* %4
br label %6
6: ; preds = %56, %1
%7 = load i8*, i8** %3
%8 = load i32, i32* %4
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds i8, i8* %7, i64 %9
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
%13 = icmp ne i32 %12, 0
br i1 %13, label %14, label %59
14: ; preds = %6
%15 = load i8*, i8** %3
%16 = load i32, i32* %4
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %15, i64 %17
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 43
br i1 %21, label %30, label %22
22: ; preds = %14
%23 = load i8*, i8** %3
%24 = load i32, i32* %4
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds i8, i8* %23, i64 %25
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
%29 = icmp eq i32 %28, 45
br i1 %29, label %30, label %35
30: ; preds = %22, %14
%31 = load i32, i32* %5
%32 = icmp eq i32 %31, 1
br i1 %32, label %33, label %34
33: ; preds = %30
store i32 0, i32* %2
br label %60
34: ; preds = %30
br label %56
35: ; preds = %22
%36 = load i8*, i8** %3
%37 = load i32, i32* %4
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %36, i64 %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp ne i32 %41, 43
br i1 %42, label %51, label %43
43: ; preds = %35
%44 = load i8*, i8** %3
%45 = load i32, i32* %4
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %44, i64 %46
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = icmp ne i32 %49, 45
br i1 %50, label %51, label %55
51: ; preds = %43, %35
%52 = load i32, i32* %5
%53 = icmp eq i32 %52, 0
br i1 %53, label %54, label %55
54: ; preds = %51
store i32 1, i32* %5
br label %55
55: ; preds = %54, %51, %43
br label %56
56: ; preds = %55, %34
%57 = load i32, i32* %4
%58 = add nsw i32 %57, 1
store i32 %58, i32* %4
br label %6
59: ; preds = %6
store i32 1, i32* %2
br label %60
60: ; preds = %59, %33
%61 = load i32, i32* %2
ret i32 %61
}

LLVM IR (-O2):
define i32 @my_check(i8* nocapture %0) {
br label %2
2: ; preds = %9, %1
%3 = phi i64 [ %11, %9 ], [ 0, %1 ]
%4 = phi i32 [ %10, %9 ], [ 0, %1 ]
%5 = getelementptr inbounds i8, i8* %0, i64 %3
%6 = load i8, i8* %5
switch i8 %6, label %9 [
i8 0, label %12
i8 43, label %7
i8 45, label %7
]
7: ; preds = %2, %2
%8 = icmp eq i32 %4, 1
br i1 %8, label %12, label %9
9: ; preds = %2, %7
%10 = phi i32 [ 0, %7 ], [ 1, %2 ]
%11 = add nuw i64 %3, 1
br label %2
12: ; preds = %2, %7
%13 = phi i32 [ 0, %7 ], [ 1, %2 ]
ret i32 %13
}