void copy_name(char *dest, const char *name) {
  int i;
  for (i = 0; i < 16; i++) {
    if (*name >= ' ' && *name <= '~') {
      *dest = *name;
      dest++;
    }
    name++;
  }
}


x86 assembly (clang, -O0):
<copy_name>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x10,-0x14(%rbp)
jge    116f <copy_name+0x6f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jl     1155 <copy_name+0x55>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
jg     1155 <copy_name+0x55>
mov    -0x10(%rbp),%rax
mov    (%rax),%cl
mov    -0x8(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1113 <copy_name+0x13>
pop    %rbp
ret

x86 assembly (clang, -O2):
<copy_name>:
mov    (%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1110 <copy_name+0x10>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x1(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1121 <copy_name+0x21>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x2(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1132 <copy_name+0x32>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x3(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1143 <copy_name+0x43>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x4(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1154 <copy_name+0x54>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x5(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1165 <copy_name+0x65>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x6(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1176 <copy_name+0x76>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x7(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1187 <copy_name+0x87>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x8(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     1198 <copy_name+0x98>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0x9(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11a9 <copy_name+0xa9>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xa(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11ba <copy_name+0xba>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xb(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11cb <copy_name+0xcb>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xc(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11dc <copy_name+0xdc>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xd(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11ed <copy_name+0xed>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xe(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     11fe <copy_name+0xfe>
mov    %al,(%rdi)
add    $0x1,%rdi
mov    0xf(%rsi),%al
lea    -0x7f(%rax),%ecx
cmp    $0xa1,%cl
jb     120b <copy_name+0x10b>
mov    %al,(%rdi)
ret

LLVM IR (-O0):
define void @copy_name(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
store i8* %0, i8** %3
store i8* %1, i8** %4
store i32 0, i32* %5
br label %6
6: ; preds = %28, %2
%7 = load i32, i32* %5
%8 = icmp slt i32 %7, 16
br i1 %8, label %9, label %31
9: ; preds = %6
%10 = load i8*, i8** %4
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
%13 = icmp sge i32 %12, 32
br i1 %13, label %14, label %25
14: ; preds = %9
%15 = load i8*, i8** %4
%16 = load i8, i8* %15
%17 = sext i8 %16 to i32
%18 = icmp sle i32 %17, 126
br i1 %18, label %19, label %25
19: ; preds = %14
%20 = load i8*, i8** %4
%21 = load i8, i8* %20
%22 = load i8*, i8** %3
store i8 %21, i8* %22
%23 = load i8*, i8** %3
%24 = getelementptr inbounds i8, i8* %23, i32 1
store i8* %24, i8** %3
br label %25
25: ; preds = %19, %14, %9
%26 = load i8*, i8** %4
%27 = getelementptr inbounds i8, i8* %26, i32 1
store i8* %27, i8** %4
br label %28
28: ; preds = %25
%29 = load i32, i32* %5
%30 = add nsw i32 %29, 1
store i32 %30, i32* %5
br label %6
31: ; preds = %6
ret void
}

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