void check_row(int *sudoku_p, int *temp1_p) {
  int k;
  for (k = 0; k < (9); k++) {
    if (*(sudoku_p) == k + 1) {
      *(temp1_p + k) = k + 1;
    }
  }
}


x86 assembly (clang, -O0):
<check_row>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x9,-0x14(%rbp)
jge    1155 <check_row+0x55>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    1142 <check_row+0x42>
mov    -0x14(%rbp),%edx
add    $0x1,%edx
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1147 <check_row+0x47>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1113 <check_row+0x13>
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_row>:
mov    (%rdi),%eax
cmp    $0x1,%eax
je     1130 <check_row+0x30>
cmp    $0x2,%eax
je     113d <check_row+0x3d>
cmp    $0x3,%eax
je     114b <check_row+0x4b>
cmp    $0x4,%eax
je     1159 <check_row+0x59>
cmp    $0x5,%eax
je     1167 <check_row+0x67>
cmp    $0x6,%eax
je     1175 <check_row+0x75>
cmp    $0x7,%eax
je     1183 <check_row+0x83>
cmp    $0x8,%eax
je     1191 <check_row+0x91>
cmp    $0x9,%eax
je     119f <check_row+0x9f>
ret
movl   $0x1,(%rsi)
mov    (%rdi),%eax
cmp    $0x2,%eax
jne    110c <check_row+0xc>
movl   $0x2,0x4(%rsi)
mov    (%rdi),%eax
cmp    $0x3,%eax
jne    1111 <check_row+0x11>
movl   $0x3,0x8(%rsi)
mov    (%rdi),%eax
cmp    $0x4,%eax
jne    1116 <check_row+0x16>
movl   $0x4,0xc(%rsi)
mov    (%rdi),%eax
cmp    $0x5,%eax
jne    111b <check_row+0x1b>
movl   $0x5,0x10(%rsi)
mov    (%rdi),%eax
cmp    $0x6,%eax
jne    1120 <check_row+0x20>
movl   $0x6,0x14(%rsi)
mov    (%rdi),%eax
cmp    $0x7,%eax
jne    1125 <check_row+0x25>
movl   $0x7,0x18(%rsi)
mov    (%rdi),%eax
cmp    $0x8,%eax
jne    112a <check_row+0x2a>
movl   $0x8,0x1c(%rsi)
mov    (%rdi),%eax
cmp    $0x9,%eax
jne    112f <check_row+0x2f>
movl   $0x9,0x20(%rsi)
ret

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

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