int test() {
  while (1) {
    int a = 1;
    for (a = 0; a < 0x25; a += 4)
      *(int *)(0xf098 + a) = *(int *)(0xf000 + a);
    *(int *)0xf088 = *(int *)(0xf028);
    *(int *)0xf08c = *(int *)(0xf02c);
    *(int *)0xf090 = *(int *)(0xf030);
  }
}


x86 assembly (clang, -O0):
<test>:
push   %rbp
mov    %rsp,%rbp
movl   $0x1,-0x4(%rbp)
movl   $0x0,-0x4(%rbp)
cmpl   $0x25,-0x4(%rbp)
jge    1142 <test+0x42>
mov    -0x4(%rbp),%eax
add    $0xf000,%eax
cltq
mov    (%rax),%ecx
mov    -0x4(%rbp),%eax
add    $0xf098,%eax
cltq
mov    %ecx,(%rax)
mov    -0x4(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x4(%rbp)
jmp    1112 <test+0x12>
mov    $0xf028,%eax
mov    (%rax),%ecx
mov    $0xf088,%eax
mov    %ecx,(%rax)
mov    $0xf02c,%eax
mov    (%rax),%ecx
mov    $0xf08c,%eax
mov    %ecx,(%rax)
mov    $0xf030,%eax
mov    (%rax),%ecx
mov    $0xf090,%eax
mov    %ecx,(%rax)
jmp    1104 <test+0x4>

x86 assembly (clang, -O2):
<test>:
mov    0xf000,%eax
mov    %eax,0xf098
mov    0xf004,%eax
mov    %eax,0xf09c
mov    0xf008,%eax
mov    %eax,0xf0a0
mov    0xf00c,%eax
mov    %eax,0xf0a4
mov    0xf010,%eax
mov    %eax,0xf0a8
mov    0xf014,%eax
mov    %eax,0xf0ac
mov    0xf018,%eax
mov    %eax,0xf0b0
mov    0xf01c,%eax
mov    %eax,0xf0b4
mov    0xf020,%eax
mov    %eax,0xf0b8
mov    0xf024,%eax
mov    %eax,0xf0bc
mov    0xf028,%eax
mov    %eax,0xf088
mov    0xf02c,%eax
mov    %eax,0xf08c
mov    0xf030,%eax
mov    %eax,0xf090
jmp    1100 <test>

LLVM IR (-O0):
define i32 @test() {
%1 = alloca i32
br label %2
2: ; preds = %0, %19
store i32 1, i32* %1
store i32 0, i32* %1
br label %3
3: ; preds = %16, %2
%4 = load i32, i32* %1
%5 = icmp slt i32 %4, 37
br i1 %5, label %6, label %19
6: ; preds = %3
%7 = load i32, i32* %1
%8 = add nsw i32 61440, %7
%9 = sext i32 %8 to i64
%10 = inttoptr i64 %9 to i32*
%11 = load i32, i32* %10
%12 = load i32, i32* %1
%13 = add nsw i32 61592, %12
%14 = sext i32 %13 to i64
%15 = inttoptr i64 %14 to i32*
store i32 %11, i32* %15
br label %16
16: ; preds = %6
%17 = load i32, i32* %1
%18 = add nsw i32 %17, 4
store i32 %18, i32* %1
br label %3
19: ; preds = %3
%20 = load i32, i32* inttoptr (i64 61480 to i32*)
store i32 %20, i32* inttoptr (i64 61576 to i32*)
%21 = load i32, i32* inttoptr (i64 61484 to i32*)
store i32 %21, i32* inttoptr (i64 61580 to i32*)
%22 = load i32, i32* inttoptr (i64 61488 to i32*)
store i32 %22, i32* inttoptr (i64 61584 to i32*)
br label %2
}

LLVM IR (-O2):
define i32 @test() {
br label %1
1: ; preds = %0, %1
%2 = load i32, i32* inttoptr (i64 61440 to i32*)
store i32 %2, i32* inttoptr (i64 61592 to i32*)
%3 = load i32, i32* inttoptr (i64 61444 to i32*)
store i32 %3, i32* inttoptr (i64 61596 to i32*)
%4 = load i32, i32* inttoptr (i64 61448 to i32*)
store i32 %4, i32* inttoptr (i64 61600 to i32*)
%5 = load i32, i32* inttoptr (i64 61452 to i32*)
store i32 %5, i32* inttoptr (i64 61604 to i32*)
%6 = load i32, i32* inttoptr (i64 61456 to i32*)
store i32 %6, i32* inttoptr (i64 61608 to i32*)
%7 = load i32, i32* inttoptr (i64 61460 to i32*)
store i32 %7, i32* inttoptr (i64 61612 to i32*)
%8 = load i32, i32* inttoptr (i64 61464 to i32*)
store i32 %8, i32* inttoptr (i64 61616 to i32*)
%9 = load i32, i32* inttoptr (i64 61468 to i32*)
store i32 %9, i32* inttoptr (i64 61620 to i32*)
%10 = load i32, i32* inttoptr (i64 61472 to i32*)
store i32 %10, i32* inttoptr (i64 61624 to i32*)
%11 = load i32, i32* inttoptr (i64 61476 to i32*)
store i32 %11, i32* inttoptr (i64 61628 to i32*)
%12 = load i32, i32* inttoptr (i64 61480 to i32*)
store i32 %12, i32* inttoptr (i64 61576 to i32*)
%13 = load i32, i32* inttoptr (i64 61484 to i32*)
store i32 %13, i32* inttoptr (i64 61580 to i32*)
%14 = load i32, i32* inttoptr (i64 61488 to i32*)
store i32 %14, i32* inttoptr (i64 61584 to i32*)
br label %1
}