char *leet(char *j) {
  int i;
  for (i = 0; j[i] != '\0'; i++) {
    if ((j[i] >= 'a' && j[i] <= 'z') || (j[i] >= 'A' && j[i] <= 'Z')) {
      if (j[i] == 'a' || j[i] == 'A') {
        j[i] = '4';
      } else if (j[i] == 'e' || j[i] == 'E') {
        j[i] = '3';
      } else if (j[i] == 'o' || j[i] == 'O') {
        j[i] = '0';
      } else if (j[i] == 't' || j[i] == 'T') {
        j[i] = '7';
      } else if (j[i] == 'l' || j[i] == 'L') {
        j[i] = '1';
      }
    }
  }
  return (j);
}


x86 assembly (clang, -O0):
<leet>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
je     12c6 <leet+0x1c6>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jl     114e <leet+0x4e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jle    1178 <leet+0x78>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jl     12b3 <leet+0x1b3>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5a,%eax
jg     12b3 <leet+0x1b3>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
je     11a2 <leet+0xa2>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x41,%eax
jne    11b3 <leet+0xb3>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x34,(%rax,%rcx,1)
jmp    12ae <leet+0x1ae>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x65,%eax
je     11dd <leet+0xdd>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x45,%eax
jne    11ee <leet+0xee>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x33,(%rax,%rcx,1)
jmp    12a9 <leet+0x1a9>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6f,%eax
je     1218 <leet+0x118>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4f,%eax
jne    1229 <leet+0x129>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    12a4 <leet+0x1a4>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x74,%eax
je     1253 <leet+0x153>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x54,%eax
jne    1264 <leet+0x164>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x37,(%rax,%rcx,1)
jmp    129f <leet+0x19f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6c,%eax
je     128e <leet+0x18e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x4c,%eax
jne    129a <leet+0x19a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movb   $0x31,(%rax,%rcx,1)
jmp    129f <leet+0x19f>
jmp    12a4 <leet+0x1a4>
jmp    12a9 <leet+0x1a9>
jmp    12ae <leet+0x1ae>
jmp    12b3 <leet+0x1b3>
jmp    12b8 <leet+0x1b8>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    110f <leet+0xf>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<leet>:
mov    %rdi,%rax
mov    (%rdi),%cl
test   %cl,%cl
je     1162 <leet+0x62>
lea    0x1(%rax),%rsi
lea    0xeec(%rip),%r8
jmp    112f <leet+0x2f>
mov    $0x31,%dil
nopl   0x0(%rax)
mov    %dil,-0x1(%rsi)
movzbl (%rsi),%ecx
add    $0x1,%rsi
test   %cl,%cl
je     1162 <leet+0x62>
mov    %ecx,%edx
and    $0xdf,%dl
add    $0xbf,%dl
cmp    $0x19,%dl
ja     1124 <leet+0x24>
add    $0xbf,%cl
cmp    $0x33,%cl
ja     1124 <leet+0x24>
mov    $0x34,%dil
movzbl %cl,%ecx
movslq (%r8,%rcx,4),%rcx
add    %r8,%rcx
jmp    *%rcx
mov    $0x33,%dil
jmp    1120 <leet+0x20>
mov    $0x30,%dil
jmp    1120 <leet+0x20>
mov    $0x37,%dil
jmp    1120 <leet+0x20>
ret

LLVM IR (-O0):
define i8* @leet(i8* %0) {
%2 = alloca i8*
%3 = alloca i32
store i8* %0, i8** %2
store i32 0, i32* %3
br label %4
4: ; preds = %155, %1
%5 = load i8*, i8** %2
%6 = load i32, i32* %3
%7 = sext i32 %6 to i64
%8 = getelementptr inbounds i8, i8* %5, i64 %7
%9 = load i8, i8* %8
%10 = sext i8 %9 to i32
%11 = icmp ne i32 %10, 0
br i1 %11, label %12, label %158
12: ; preds = %4
%13 = load i8*, i8** %2
%14 = load i32, i32* %3
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i8, i8* %13, i64 %15
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = icmp sge i32 %18, 97
br i1 %19, label %20, label %28
20: ; preds = %12
%21 = load i8*, i8** %2
%22 = load i32, i32* %3
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8, i8* %21, i64 %23
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = icmp sle i32 %26, 122
br i1 %27, label %44, label %28
28: ; preds = %20, %12
%29 = load i8*, i8** %2
%30 = load i32, i32* %3
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %29, i64 %31
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp sge i32 %34, 65
br i1 %35, label %36, label %154
36: ; preds = %28
%37 = load i8*, i8** %2
%38 = load i32, i32* %3
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %37, i64 %39
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = icmp sle i32 %42, 90
br i1 %43, label %44, label %154
44: ; preds = %36, %20
%45 = load i8*, i8** %2
%46 = load i32, i32* %3
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 %47
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 97
br i1 %51, label %60, label %52
52: ; preds = %44
%53 = load i8*, i8** %2
%54 = load i32, i32* %3
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %53, i64 %55
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = icmp eq i32 %58, 65
br i1 %59, label %60, label %65
60: ; preds = %52, %44
%61 = load i8*, i8** %2
%62 = load i32, i32* %3
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8, i8* %61, i64 %63
store i8 52, i8* %64
br label %153
65: ; preds = %52
%66 = load i8*, i8** %2
%67 = load i32, i32* %3
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds i8, i8* %66, i64 %68
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 101
br i1 %72, label %81, label %73
73: ; preds = %65
%74 = load i8*, i8** %2
%75 = load i32, i32* %3
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i8, i8* %74, i64 %76
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
%80 = icmp eq i32 %79, 69
br i1 %80, label %81, label %86
81: ; preds = %73, %65
%82 = load i8*, i8** %2
%83 = load i32, i32* %3
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %82, i64 %84
store i8 51, i8* %85
br label %152
86: ; preds = %73
%87 = load i8*, i8** %2
%88 = load i32, i32* %3
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %87, i64 %89
%91 = load i8, i8* %90
%92 = sext i8 %91 to i32
%93 = icmp eq i32 %92, 111
br i1 %93, label %102, label %94
94: ; preds = %86
%95 = load i8*, i8** %2
%96 = load i32, i32* %3
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i8, i8* %95, i64 %97
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 79
br i1 %101, label %102, label %107
102: ; preds = %94, %86
%103 = load i8*, i8** %2
%104 = load i32, i32* %3
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8, i8* %103, i64 %105
store i8 48, i8* %106
br label %151
107: ; preds = %94
%108 = load i8*, i8** %2
%109 = load i32, i32* %3
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i8, i8* %108, i64 %110
%112 = load i8, i8* %111
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %113, 116
br i1 %114, label %123, label %115
115: ; preds = %107
%116 = load i8*, i8** %2
%117 = load i32, i32* %3
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8, i8* %116, i64 %118
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = icmp eq i32 %121, 84
br i1 %122, label %123, label %128
123: ; preds = %115, %107
%124 = load i8*, i8** %2
%125 = load i32, i32* %3
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds i8, i8* %124, i64 %126
store i8 55, i8* %127
br label %150
128: ; preds = %115
%129 = load i8*, i8** %2
%130 = load i32, i32* %3
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i8, i8* %129, i64 %131
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
%135 = icmp eq i32 %134, 108
br i1 %135, label %144, label %136
136: ; preds = %128
%137 = load i8*, i8** %2
%138 = load i32, i32* %3
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i8, i8* %137, i64 %139
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp eq i32 %142, 76
br i1 %143, label %144, label %149
144: ; preds = %136, %128
%145 = load i8*, i8** %2
%146 = load i32, i32* %3
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i8, i8* %145, i64 %147
store i8 49, i8* %148
br label %149
149: ; preds = %144, %136
br label %150
150: ; preds = %149, %123
br label %151
151: ; preds = %150, %102
br label %152
152: ; preds = %151, %81
br label %153
153: ; preds = %152, %60
br label %154
154: ; preds = %153, %36, %28
br label %155
155: ; preds = %154
%156 = load i32, i32* %3
%157 = add nsw i32 %156, 1
store i32 %157, i32* %3
br label %4
158: ; preds = %4
%159 = load i8*, i8** %2
ret i8* %159
}

LLVM IR (-O2):
define i8* @leet(i8* returned %0) {
%2 = load i8, i8* %0
%3 = icmp eq i8 %2, 0
br i1 %3, label %23, label %4
4: ; preds = %1, %18
%5 = phi i64 [ %19, %18 ], [ 0, %1 ]
%6 = phi i8 [ %21, %18 ], [ %2, %1 ]
%7 = phi i8* [ %20, %18 ], [ %0, %1 ]
%8 = and i8 %6, -33
%9 = add i8 %8, -65
%10 = icmp ult i8 %9, 26
br i1 %10, label %11, label %18
11: ; preds = %4
switch i8 %6, label %18 [
i8 97, label %16
i8 65, label %16
i8 101, label %12
i8 69, label %12
i8 111, label %13
i8 79, label %13
i8 116, label %14
i8 84, label %14
i8 108, label %15
i8 76, label %15
]
12: ; preds = %11, %11
br label %16
13: ; preds = %11, %11
br label %16
14: ; preds = %11, %11
br label %16
15: ; preds = %11, %11
br label %16
16: ; preds = %11, %11, %13, %15, %14, %12
%17 = phi i8 [ 51, %12 ], [ 55, %14 ], [ 49, %15 ], [ 48, %13 ], [ 52, %11 ], [ 52, %11 ]
store i8 %17, i8* %7
br label %18
18: ; preds = %16, %4, %11
%19 = add nuw i64 %5, 1
%20 = getelementptr inbounds i8, i8* %0, i64 %19
%21 = load i8, i8* %20
%22 = icmp eq i8 %21, 0
br i1 %22, label %23, label %4
23: ; preds = %18, %1
ret i8* %0
}