void insertTitle(char listOfTitles[1000][1000], int position,
                 char titleToInsert[200]) {
  int i = 0;
  while (i <= 999) {
    listOfTitles[position][i] = titleToInsert[i];
    i++;
  }
}


x86 assembly (clang, -O0):
<insertTitle>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3e7,-0x1c(%rbp)
jg     1155 <insertTitle+0x55>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x3e8,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1116 <insertTitle+0x16>
pop    %rbp
ret

x86 assembly (clang, -O2):
<insertTitle>:
movslq %esi,%rax
imul   $0x3e8,%rax,%rcx
lea    (%rdi,%rcx,1),%r8
lea    0x3e8(%rdx),%rsi
cmp    %rsi,%r8
jae    116e <insertTitle+0x6e>
lea    (%rdi,%rcx,1),%rsi
add    $0x3e8,%rsi
cmp    %rdx,%rsi
jbe    116e <insertTitle+0x6e>
mov    $0x4,%ecx
nop
movzbl -0x4(%rdx,%rcx,1),%eax
mov    %al,-0x4(%r8,%rcx,1)
movzbl -0x3(%rdx,%rcx,1),%eax
mov    %al,-0x3(%r8,%rcx,1)
movzbl -0x2(%rdx,%rcx,1),%eax
mov    %al,-0x2(%r8,%rcx,1)
movzbl -0x1(%rdx,%rcx,1),%eax
mov    %al,-0x1(%r8,%rcx,1)
movzbl (%rdx,%rcx,1),%eax
mov    %al,(%r8,%rcx,1)
add    $0x5,%rcx
cmp    $0x3ec,%rcx
jne    1130 <insertTitle+0x30>
ret
mov    $0x70,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups -0x70(%rdx,%rsi,1),%xmm0
movups -0x60(%rdx,%rsi,1),%xmm1
movups %xmm0,-0x70(%r8,%rsi,1)
movups %xmm1,-0x60(%r8,%rsi,1)
movups -0x50(%rdx,%rsi,1),%xmm0
movups -0x40(%rdx,%rsi,1),%xmm1
movups %xmm0,-0x50(%r8,%rsi,1)
movups %xmm1,-0x40(%r8,%rsi,1)
movups -0x30(%rdx,%rsi,1),%xmm0
movups -0x20(%rdx,%rsi,1),%xmm1
movups %xmm0,-0x30(%r8,%rsi,1)
movups %xmm1,-0x20(%r8,%rsi,1)
cmp    $0x3f0,%rsi
je     11e5 <insertTitle+0xe5>
movups -0x10(%rdx,%rsi,1),%xmm0
movups (%rdx,%rsi,1),%xmm1
movups %xmm0,-0x10(%r8,%rsi,1)
movups %xmm1,(%r8,%rsi,1)
sub    $0xffffffffffffff80,%rsi
jmp    1180 <insertTitle+0x80>
mov    0x3e0(%rdx),%rax
mov    %rax,0x3e0(%rdi,%rcx,1)
ret

LLVM IR (-O0):
define void @insertTitle([1000 x i8]* %0, i32 %1, i8* %2) {
%4 = alloca [1000 x i8]*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32
store [1000 x i8]* %0, [1000 x i8]** %4
store i32 %1, i32* %5
store i8* %2, i8** %6
store i32 0, i32* %7
br label %8
8: ; preds = %11, %3
%9 = load i32, i32* %7
%10 = icmp sle i32 %9, 999
br i1 %10, label %11, label %26
11: ; preds = %8
%12 = load i8*, i8** %6
%13 = load i32, i32* %7
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds i8, i8* %12, i64 %14
%16 = load i8, i8* %15
%17 = load [1000 x i8]*, [1000 x i8]** %4
%18 = load i32, i32* %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [1000 x i8], [1000 x i8]* %17, i64 %19
%21 = load i32, i32* %7
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [1000 x i8], [1000 x i8]* %20, i64 0, i64 %22
store i8 %16, i8* %23
%24 = load i32, i32* %7
%25 = add nsw i32 %24, 1
store i32 %25, i32* %7
br label %8
26: ; preds = %8
ret void
}

LLVM IR (-O2):
define void @insertTitle([1000 x i8]* nocapture writeonly %0, i32 %1, i8* nocapture %2) {
%4 = sext i32 %1 to i64
%5 = getelementptr [1000 x i8], [1000 x i8]* %0, i64 %4, i64 0
%6 = add nsw i64 %4, 1
%7 = getelementptr [1000 x i8], [1000 x i8]* %0, i64 %6, i64 0
%8 = getelementptr i8, i8* %2, i64 1000
%9 = icmp ult i8* %5, %8
%10 = icmp ugt i8* %7, %2
%11 = and i1 %9, %10
br i1 %11, label %66, label %12
12: ; preds = %3, %48
%13 = phi i64 [ %59, %48 ], [ 0, %3 ]
%14 = getelementptr inbounds i8, i8* %2, i64 %13
%15 = bitcast i8* %14 to <16 x i8>*
%16 = load <16 x i8>, <16 x i8>* %15
%17 = getelementptr inbounds i8, i8* %14, i64 16
%18 = bitcast i8* %17 to <16 x i8>*
%19 = load <16 x i8>, <16 x i8>* %18
%20 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %13
%21 = bitcast i8* %20 to <16 x i8>*
store <16 x i8> %16, <16 x i8>* %21
%22 = getelementptr inbounds i8, i8* %20, i64 16
%23 = bitcast i8* %22 to <16 x i8>*
store <16 x i8> %19, <16 x i8>* %23
%24 = or i64 %13, 32
%25 = getelementptr inbounds i8, i8* %2, i64 %24
%26 = bitcast i8* %25 to <16 x i8>*
%27 = load <16 x i8>, <16 x i8>* %26
%28 = getelementptr inbounds i8, i8* %25, i64 16
%29 = bitcast i8* %28 to <16 x i8>*
%30 = load <16 x i8>, <16 x i8>* %29
%31 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %24
%32 = bitcast i8* %31 to <16 x i8>*
store <16 x i8> %27, <16 x i8>* %32
%33 = getelementptr inbounds i8, i8* %31, i64 16
%34 = bitcast i8* %33 to <16 x i8>*
store <16 x i8> %30, <16 x i8>* %34
%35 = or i64 %13, 64
%36 = getelementptr inbounds i8, i8* %2, i64 %35
%37 = bitcast i8* %36 to <16 x i8>*
%38 = load <16 x i8>, <16 x i8>* %37
%39 = getelementptr inbounds i8, i8* %36, i64 16
%40 = bitcast i8* %39 to <16 x i8>*
%41 = load <16 x i8>, <16 x i8>* %40
%42 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %35
%43 = bitcast i8* %42 to <16 x i8>*
store <16 x i8> %38, <16 x i8>* %43
%44 = getelementptr inbounds i8, i8* %42, i64 16
%45 = bitcast i8* %44 to <16 x i8>*
store <16 x i8> %41, <16 x i8>* %45
%46 = or i64 %13, 96
%47 = icmp eq i64 %46, 992
br i1 %47, label %60, label %48
48: ; preds = %12
%49 = getelementptr inbounds i8, i8* %2, i64 %46
%50 = bitcast i8* %49 to <16 x i8>*
%51 = load <16 x i8>, <16 x i8>* %50
%52 = getelementptr inbounds i8, i8* %49, i64 16
%53 = bitcast i8* %52 to <16 x i8>*
%54 = load <16 x i8>, <16 x i8>* %53
%55 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %46
%56 = bitcast i8* %55 to <16 x i8>*
store <16 x i8> %51, <16 x i8>* %56
%57 = getelementptr inbounds i8, i8* %55, i64 16
%58 = bitcast i8* %57 to <16 x i8>*
store <16 x i8> %54, <16 x i8>* %58
%59 = add nuw nsw i64 %13, 128
br label %12
60: ; preds = %12
%61 = getelementptr inbounds i8, i8* %2, i64 992
%62 = bitcast i8* %61 to <8 x i8>*
%63 = load <8 x i8>, <8 x i8>* %62
%64 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 992
%65 = bitcast i8* %64 to <8 x i8>*
store <8 x i8> %63, <8 x i8>* %65
br label %89
66: ; preds = %3, %66
%67 = phi i64 [ %87, %66 ], [ 0, %3 ]
%68 = getelementptr inbounds i8, i8* %2, i64 %67
%69 = load i8, i8* %68
%70 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %67
store i8 %69, i8* %70
%71 = add nuw nsw i64 %67, 1
%72 = getelementptr inbounds i8, i8* %2, i64 %71
%73 = load i8, i8* %72
%74 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %71
store i8 %73, i8* %74
%75 = add nuw nsw i64 %67, 2
%76 = getelementptr inbounds i8, i8* %2, i64 %75
%77 = load i8, i8* %76
%78 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %75
store i8 %77, i8* %78
%79 = add nuw nsw i64 %67, 3
%80 = getelementptr inbounds i8, i8* %2, i64 %79
%81 = load i8, i8* %80
%82 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %79
store i8 %81, i8* %82
%83 = add nuw nsw i64 %67, 4
%84 = getelementptr inbounds i8, i8* %2, i64 %83
%85 = load i8, i8* %84
%86 = getelementptr inbounds [1000 x i8], [1000 x i8]* %0, i64 %4, i64 %83
store i8 %85, i8* %86
%87 = add nuw nsw i64 %67, 5
%88 = icmp eq i64 %87, 1000
br i1 %88, label %89, label %66
89: ; preds = %66, %60
ret void
}