void assign_targ(int targ_pitch[], int start, int end,
                 int best_path[130][200 + 1], int at, int pitch[800][130]) {
  int i;
  for (i = start; i <= end; i++)
    targ_pitch[i] = pitch[i][best_path[at][i - start + 1]];
}


x86 assembly (clang, -O0):
<assign_targ>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     117c <assign_targ+0x7c>
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
imul   $0x208,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
imul   $0x324,%rdx,%rdx
add    %rdx,%rcx
mov    -0x2c(%rbp),%edx
sub    -0xc(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1120 <assign_targ+0x20>
pop    %rbp
ret

x86 assembly (clang, -O2):
<assign_targ>:
mov    %edx,%r10d
sub    %esi,%r10d
jl     11ba <assign_targ+0xba>
movslq %r8d,%r8
movslq %esi,%r11
add    $0x1,%r10d
test   $0x1,%r10b
je     1142 <assign_targ+0x42>
imul   $0x324,%r8,%rax
movslq 0x4(%rcx,%rax,1),%r10
mov    %r11,%rax
shl    $0x9,%rax
lea    (%rax,%r11,8),%rax
add    %r9,%rax
mov    (%rax,%r10,4),%eax
mov    %eax,(%rdi,%r11,4)
add    $0x1,%r11
cmp    %esi,%edx
je     11ba <assign_targ+0xba>
sub    %r11d,%edx
add    $0x1,%edx
lea    (%rdi,%r11,4),%rdi
add    $0x4,%rdi
mov    %r11,%rax
shl    $0x9,%rax
lea    (%rax,%r11,8),%rax
add    %rax,%r9
sub    %esi,%r11d
xor    %esi,%esi
imul   $0x324,%r8,%rax
add    %rax,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%r11,%rsi,1),%eax
add    $0x1,%eax
cltq
movslq (%rcx,%rax,4),%rax
mov    (%r9,%rax,4),%eax
mov    %eax,-0x4(%rdi,%rsi,4)
lea    0x2(%r11,%rsi,1),%eax
cltq
movslq (%rcx,%rax,4),%rax
mov    0x208(%r9,%rax,4),%eax
mov    %eax,(%rdi,%rsi,4)
add    $0x2,%rsi
add    $0x410,%r9
cmp    %esi,%edx
jne    1180 <assign_targ+0x80>
ret

LLVM IR (-O0):
define void @assign_targ(i32* %0, i32 %1, i32 %2, [201 x i32]* %3, i32 %4, [130 x i32]* %5) {
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32
%10 = alloca [201 x i32]*
%11 = alloca i32
%12 = alloca [130 x i32]*
%13 = alloca i32
store i32* %0, i32** %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store [201 x i32]* %3, [201 x i32]** %10
store i32 %4, i32* %11
store [130 x i32]* %5, [130 x i32]** %12
%14 = load i32, i32* %8
store i32 %14, i32* %13
br label %15
15: ; preds = %42, %6
%16 = load i32, i32* %13
%17 = load i32, i32* %9
%18 = icmp sle i32 %16, %17
br i1 %18, label %19, label %45
19: ; preds = %15
%20 = load [130 x i32]*, [130 x i32]** %12
%21 = load i32, i32* %13
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [130 x i32], [130 x i32]* %20, i64 %22
%24 = load [201 x i32]*, [201 x i32]** %10
%25 = load i32, i32* %11
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [201 x i32], [201 x i32]* %24, i64 %26
%28 = load i32, i32* %13
%29 = load i32, i32* %8
%30 = sub nsw i32 %28, %29
%31 = add nsw i32 %30, 1
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [201 x i32], [201 x i32]* %27, i64 0, i64 %32
%34 = load i32, i32* %33
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [130 x i32], [130 x i32]* %23, i64 0, i64 %35
%37 = load i32, i32* %36
%38 = load i32*, i32** %7
%39 = load i32, i32* %13
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i32, i32* %38, i64 %40
store i32 %37, i32* %41
br label %42
42: ; preds = %19
%43 = load i32, i32* %13
%44 = add nsw i32 %43, 1
store i32 %44, i32* %13
br label %15
45: ; preds = %15
ret void
}

LLVM IR (-O2):
define void @assign_targ(i32* nocapture writeonly %0, i32 %1, i32 %2, [201 x i32]* nocapture %3, i32 %4, [130 x i32]* nocapture %5) {
%7 = icmp slt i32 %2, %1
br i1 %7, label %51, label %8
8: ; preds = %6
%9 = sext i32 %4 to i64
%10 = sub i32 1, %1
%11 = sext i32 %1 to i64
%12 = add i32 %2, 1
%13 = sub i32 %12, %1
%14 = and i32 %13, 1
%15 = icmp eq i32 %14, 0
br i1 %15, label %24, label %16
16: ; preds = %8
%17 = getelementptr inbounds [201 x i32], [201 x i32]* %3, i64 %9, i64 1
%18 = load i32, i32* %17
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [130 x i32], [130 x i32]* %5, i64 %11, i64 %19
%21 = load i32, i32* %20
%22 = getelementptr inbounds i32, i32* %0, i64 %11
store i32 %21, i32* %22
%23 = add nsw i64 %11, 1
br label %24
24: ; preds = %16, %8
%25 = phi i64 [ %11, %8 ], [ %23, %16 ]
%26 = icmp eq i32 %2, %1
br i1 %26, label %51, label %27
27: ; preds = %24, %27
%28 = phi i64 [ %48, %27 ], [ %25, %24 ]
%29 = trunc i64 %28 to i32
%30 = add i32 %10, %29
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [201 x i32], [201 x i32]* %3, i64 %9, i64 %31
%33 = load i32, i32* %32
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [130 x i32], [130 x i32]* %5, i64 %28, i64 %34
%36 = load i32, i32* %35
%37 = getelementptr inbounds i32, i32* %0, i64 %28
store i32 %36, i32* %37
%38 = add nsw i64 %28, 1
%39 = trunc i64 %38 to i32
%40 = add i32 %10, %39
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [201 x i32], [201 x i32]* %3, i64 %9, i64 %41
%43 = load i32, i32* %42
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [130 x i32], [130 x i32]* %5, i64 %38, i64 %44
%46 = load i32, i32* %45
%47 = getelementptr inbounds i32, i32* %0, i64 %38
store i32 %46, i32* %47
%48 = add nsw i64 %28, 2
%49 = trunc i64 %48 to i32
%50 = icmp eq i32 %12, %49
br i1 %50, label %51, label %27
51: ; preds = %24, %27, %6
ret void
}