int Wsafe_slowcase(char line[], int maxlen) {
  int i, ERROR = 0;
  char quote;
  for (i = 0; (line[i] && (i < maxlen)); i++) {
    line[i] = (((line[i]) > 64 && (line[i]) < 91) ? (line[i]) | 32 : (line[i]));
    if (line[i] == 34 || line[i] == 39 || line[i] == '`') {
      quote = line[i++];
      while (line[i])
        i++;
      while (line[i] != quote)
        i--;
      if (i > maxlen)
        ERROR = -1;
    }
  }
  return (ERROR);
}


x86 assembly (clang, -O0):
<Wsafe_slowcase>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x16(%rbp)
je     113f <Wsafe_slowcase+0x3f>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
setl   %al
mov    %al,-0x16(%rbp)
mov    -0x16(%rbp),%al
test   $0x1,%al
jne    114f <Wsafe_slowcase+0x4f>
jmp    127c <Wsafe_slowcase+0x17c>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x40,%eax
jle    1190 <Wsafe_slowcase+0x90>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5b,%eax
jge    1190 <Wsafe_slowcase+0x90>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
or     $0x20,%eax
mov    %eax,-0x1c(%rbp)
jmp    119f <Wsafe_slowcase+0x9f>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
je     11ee <Wsafe_slowcase+0xee>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
je     11ee <Wsafe_slowcase+0xee>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x60,%eax
jne    1269 <Wsafe_slowcase+0x169>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x10(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x15(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
cmpb   $0x0,(%rax,%rcx,1)
je     1226 <Wsafe_slowcase+0x126>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1206 <Wsafe_slowcase+0x106>
jmp    122b <Wsafe_slowcase+0x12b>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movsbl -0x15(%rbp),%ecx
cmp    %ecx,%eax
je     1251 <Wsafe_slowcase+0x151>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    122b <Wsafe_slowcase+0x12b>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    1264 <Wsafe_slowcase+0x164>
movl   $0xffffffff,-0x14(%rbp)
jmp    1269 <Wsafe_slowcase+0x169>
jmp    126e <Wsafe_slowcase+0x16e>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1119 <Wsafe_slowcase+0x19>
mov    -0x14(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<Wsafe_slowcase>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    (%rdi),%dl
xor    %eax,%eax
test   %dl,%dl
je     11f4 <Wsafe_slowcase+0xf4>
test   %esi,%esi
jle    11f4 <Wsafe_slowcase+0xf4>
lea    0x1(%rdi),%r10
xor    %ecx,%ecx
movabs $0x4000000000000021,%r8
movabs $0x100000000,%r11
mov    $0xffffffff,%r9d
mov    %rdi,%rbx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x41(%rdx),%ebp
movzbl %dl,%r15d
or     $0x20,%dl
cmp    $0x1a,%bpl
movzbl %dl,%r14d
cmovae %r15d,%r14d
mov    %r14b,(%rbx)
lea    -0x22(%r14),%edx
cmp    $0x3e,%dl
ja     11d5 <Wsafe_slowcase+0xd5>
movzbl %dl,%edx
bt     %rdx,%r8
jae    11d5 <Wsafe_slowcase+0xd5>
movslq %ecx,%r15
mov    %r15,%rbx
shl    $0x20,%rbx
lea    (%r10,%r15,1),%rdx
lea    0x2(%r15),%r12d
add    $0x1,%r15d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    %r11,%rbx
cmpb   $0x0,(%rdx)
mov    %r12d,%ecx
mov    %r15d,%ebp
lea    0x1(%rdx),%rdx
lea    0x1(%rcx),%r12d
lea    0x1(%rbp),%r15d
jne    11a0 <Wsafe_slowcase+0xa0>
movslq %ebp,%rdx
add    %rdi,%rdx
add    $0xffffffff,%ecx
lea    -0x1(%rdx),%rbx
cmp    %r14b,(%rdx)
mov    %rbx,%rdx
jne    11c0 <Wsafe_slowcase+0xc0>
cmp    %esi,%ecx
cmovg  %r9d,%eax
movslq %ecx,%rcx
mov    0x1(%rdi,%rcx,1),%dl
test   %dl,%dl
je     11f4 <Wsafe_slowcase+0xf4>
lea    (%rdi,%rcx,1),%rbx
add    $0x1,%rbx
add    $0x1,%rcx
cmp    %esi,%ecx
jl     1150 <Wsafe_slowcase+0x50>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @Wsafe_slowcase(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i8
store i8* %0, i8** %3
store i32 %1, i32* %4
store i32 0, i32* %6
store i32 0, i32* %5
br label %8
8: ; preds = %121, %2
%9 = load i8*, i8** %3
%10 = load i32, i32* %5
%11 = sext i32 %10 to i64
%12 = getelementptr inbounds i8, i8* %9, i64 %11
%13 = load i8, i8* %12
%14 = sext i8 %13 to i32
%15 = icmp ne i32 %14, 0
br i1 %15, label %16, label %20
16: ; preds = %8
%17 = load i32, i32* %5
%18 = load i32, i32* %4
%19 = icmp slt i32 %17, %18
br label %20
20: ; preds = %16, %8
%21 = phi i1 [ false, %8 ], [ %19, %16 ]
br i1 %21, label %22, label %124
22: ; preds = %20
%23 = load i8*, i8** %3
%24 = load i32, i32* %5
%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 sgt i32 %28, 64
br i1 %29, label %30, label %46
30: ; preds = %22
%31 = load i8*, i8** %3
%32 = load i32, i32* %5
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = icmp slt i32 %36, 91
br i1 %37, label %38, label %46
38: ; preds = %30
%39 = load i8*, i8** %3
%40 = load i32, i32* %5
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = or i32 %44, 32
br label %53
46: ; preds = %30, %22
%47 = load i8*, i8** %3
%48 = load i32, i32* %5
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds i8, i8* %47, i64 %49
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
br label %53
53: ; preds = %46, %38
%54 = phi i32 [ %45, %38 ], [ %52, %46 ]
%55 = trunc i32 %54 to i8
%56 = load i8*, i8** %3
%57 = load i32, i32* %5
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i8, i8* %56, i64 %58
store i8 %55, i8* %59
%60 = load i8*, i8** %3
%61 = load i32, i32* %5
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds i8, i8* %60, i64 %62
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = icmp eq i32 %65, 34
br i1 %66, label %83, label %67
67: ; preds = %53
%68 = load i8*, i8** %3
%69 = load i32, i32* %5
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i8, i8* %68, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 39
br i1 %74, label %83, label %75
75: ; preds = %67
%76 = load i8*, i8** %3
%77 = load i32, i32* %5
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %76, i64 %78
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = icmp eq i32 %81, 96
br i1 %82, label %83, label %120
83: ; preds = %75, %67, %53
%84 = load i8*, i8** %3
%85 = load i32, i32* %5
%86 = add nsw i32 %85, 1
store i32 %86, i32* %5
%87 = sext i32 %85 to i64
%88 = getelementptr inbounds i8, i8* %84, i64 %87
%89 = load i8, i8* %88
store i8 %89, i8* %7
br label %90
90: ; preds = %97, %83
%91 = load i8*, i8** %3
%92 = load i32, i32* %5
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8, i8* %91, i64 %93
%95 = load i8, i8* %94
%96 = icmp ne i8 %95, 0
br i1 %96, label %97, label %100
97: ; preds = %90
%98 = load i32, i32* %5
%99 = add nsw i32 %98, 1
store i32 %99, i32* %5
br label %90
100: ; preds = %90
br label %101
101: ; preds = %111, %100
%102 = load i8*, i8** %3
%103 = load i32, i32* %5
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i8, i8* %102, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = load i8, i8* %7
%109 = sext i8 %108 to i32
%110 = icmp ne i32 %107, %109
br i1 %110, label %111, label %114
111: ; preds = %101
%112 = load i32, i32* %5
%113 = add nsw i32 %112, -1
store i32 %113, i32* %5
br label %101
114: ; preds = %101
%115 = load i32, i32* %5
%116 = load i32, i32* %4
%117 = icmp sgt i32 %115, %116
br i1 %117, label %118, label %119
118: ; preds = %114
store i32 -1, i32* %6
br label %119
119: ; preds = %118, %114
br label %120
120: ; preds = %119, %75
br label %121
121: ; preds = %120
%122 = load i32, i32* %5
%123 = add nsw i32 %122, 1
store i32 %123, i32* %5
br label %8
124: ; preds = %20
%125 = load i32, i32* %6
ret i32 %125
}

LLVM IR (-O2):
define i32 @Wsafe_slowcase(i8* nocapture %0, i32 %1) {
%3 = load i8, i8* %0
%4 = icmp ne i8 %3, 0
%5 = icmp sgt i32 %1, 0
%6 = and i1 %4, %5
br i1 %6, label %7, label %47
7: ; preds = %2, %37
%8 = phi i8 [ %43, %37 ], [ %3, %2 ]
%9 = phi i8* [ %42, %37 ], [ %0, %2 ]
%10 = phi i32 [ %40, %37 ], [ 0, %2 ]
%11 = phi i32 [ %38, %37 ], [ 0, %2 ]
%12 = add i8 %8, -65
%13 = icmp ult i8 %12, 26
%14 = or i8 %8, 32
%15 = select i1 %13, i8 %14, i8 %8
store i8 %15, i8* %9
switch i8 %15, label %37 [
i8 34, label %16
i8 39, label %16
i8 96, label %16
]
16: ; preds = %7, %7, %7
%17 = sext i32 %10 to i64
br label %18
18: ; preds = %18, %16
%19 = phi i64 [ %20, %18 ], [ %17, %16 ]
%20 = add i64 %19, 1
%21 = getelementptr inbounds i8, i8* %0, i64 %20
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 0
br i1 %23, label %24, label %18
24: ; preds = %18
%25 = shl i64 %20, 32
%26 = ashr exact i64 %25, 32
br label %27
27: ; preds = %24, %27
%28 = phi i64 [ %26, %24 ], [ %32, %27 ]
%29 = getelementptr inbounds i8, i8* %0, i64 %28
%30 = load i8, i8* %29
%31 = icmp eq i8 %30, %15
%32 = add i64 %28, -1
br i1 %31, label %33, label %27
33: ; preds = %27
%34 = trunc i64 %28 to i32
%35 = icmp sgt i32 %34, %1
%36 = select i1 %35, i32 -1, i32 %11
br label %37
37: ; preds = %33, %7
%38 = phi i32 [ %11, %7 ], [ %36, %33 ]
%39 = phi i32 [ %10, %7 ], [ %34, %33 ]
%40 = add nsw i32 %39, 1
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %0, i64 %41
%43 = load i8, i8* %42
%44 = icmp ne i8 %43, 0
%45 = icmp slt i32 %40, %1
%46 = select i1 %44, i1 %45, i1 false
br i1 %46, label %7, label %47
47: ; preds = %37, %2
%48 = phi i32 [ 0, %2 ], [ %38, %37 ]
ret i32 %48
}