int main(void) {
  short x[128 + 32];
  int i;
  for (i = 0; i < 16; i++) {
    asm("");
    x[i] = x[i + 144] = 5678;
  }
  test1(x + 16, 1234);
  for (i = 0; i < 128; i++)
    if (x[i + 16] != 1234)
      abort();
  for (i = 0; i < 16; i++)
    if (x[i] != 5678 || x[i + 144] != 5678)
      abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x154(%rbp)
cmpl   $0x10,-0x154(%rbp)
jge    1185 <main+0x65>
mov    -0x154(%rbp),%eax
add    $0x90,%eax
cltq
movw   $0x162e,-0x150(%rbp,%rax,2)
ff 2e 16
movslq -0x154(%rbp),%rax
movw   $0x162e,-0x150(%rbp,%rax,2)
ff 2e 16
mov    -0x154(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x154(%rbp)
jmp    113c <main+0x1c>
lea    -0x150(%rbp),%rdi
add    $0x20,%rdi
mov    $0x4d2,%esi
mov    $0x0,%al
call   1040 <test1@plt>
movl   $0x0,-0x154(%rbp)
cmpl   $0x80,-0x154(%rbp)
jge    11f2 <main+0xd2>
mov    -0x154(%rbp),%eax
add    $0x10,%eax
cltq
movswl -0x150(%rbp,%rax,2),%eax
ff
cmp    $0x4d2,%eax
je     11d9 <main+0xb9>
call   1030 <abort@plt>
jmp    11de <main+0xbe>
mov    -0x154(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x154(%rbp)
jmp    11a6 <main+0x86>
movl   $0x0,-0x154(%rbp)
cmpl   $0x10,-0x154(%rbp)
jge    1261 <main+0x141>
movslq -0x154(%rbp),%rax
movswl -0x150(%rbp,%rax,2),%eax
ff
cmp    $0x162e,%eax
jne    1243 <main+0x123>
mov    -0x154(%rbp),%eax
add    $0x90,%eax
cltq
movswl -0x150(%rbp,%rax,2),%eax
ff
cmp    $0x162e,%eax
je     1248 <main+0x128>
call   1030 <abort@plt>
jmp    124d <main+0x12d>
mov    -0x154(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x154(%rbp)
jmp    11fc <main+0xdc>
xor    %eax,%eax
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x140,%rsp
movaps 0xed1(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps %xmm0,(%rsp)
movaps %xmm0,0x130(%rsp)
movaps %xmm0,0x10(%rsp)
lea    0x20(%rsp),%rdi
xor    %ebx,%ebx
mov    $0x4d2,%esi
xor    %eax,%eax
call   1040 <test1@plt>
nopl   0x0(%rax,%rax,1)
movzwl 0x20(%rsp,%rbx,2),%eax
cmp    $0x4d2,%eax
jne    13c3 <main+0x2a3>
movzwl 0x22(%rsp,%rbx,2),%eax
cmp    $0x4d2,%eax
jne    13c3 <main+0x2a3>
movzwl 0x24(%rsp,%rbx,2),%eax
cmp    $0x4d2,%eax
jne    13c3 <main+0x2a3>
movzwl 0x26(%rsp,%rbx,2),%eax
cmp    $0x4d2,%eax
jne    13c3 <main+0x2a3>
add    $0x4,%rbx
cmp    $0x80,%rbx
jne    1160 <main+0x40>
movzwl (%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x120(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x2(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x122(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x4(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x124(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x6(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x126(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x8(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x128(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0xa(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x12a(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0xc(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x12c(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0xe(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x12e(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x10(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x130(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x12(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x132(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x14(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x134(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x16(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x136(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x18(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x138(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x1a(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x13a(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x1c(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x13c(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x1e(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
movzwl 0x13e(%rsp),%eax
cmp    $0x162e,%eax
jne    13c3 <main+0x2a3>
xor    %eax,%eax
add    $0x140,%rsp
pop    %rbx
ret
call   1030 <abort@plt>

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca [160 x i16]
%3 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %3
br label %4
4: ; preds = %15, %0
%5 = load i32, i32* %3
%6 = icmp slt i32 %5, 16
br i1 %6, label %7, label %18
7: ; preds = %4
%8 = load i32, i32* %3
%9 = add nsw i32 %8, 144
%10 = sext i32 %9 to i64
%11 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 %10
store i16 5678, i16* %11
%12 = load i32, i32* %3
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 %13
store i16 5678, i16* %14
br label %15
15: ; preds = %7
%16 = load i32, i32* %3
%17 = add nsw i32 %16, 1
store i32 %17, i32* %3
br label %4
18: ; preds = %4
%19 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 0
%20 = getelementptr inbounds i16, i16* %19, i64 16
%21 = call i32 (i16*, i32, ...) bitcast (i32 (...)* @test1 to i32 (i16*, i32, ...)*)(i16* %20, i32 1234)
store i32 0, i32* %3
br label %22
22: ; preds = %35, %18
%23 = load i32, i32* %3
%24 = icmp slt i32 %23, 128
br i1 %24, label %25, label %38
25: ; preds = %22
%26 = load i32, i32* %3
%27 = add nsw i32 %26, 16
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 %28
%30 = load i16, i16* %29
%31 = sext i16 %30 to i32
%32 = icmp ne i32 %31, 1234
br i1 %32, label %33, label %34
33: ; preds = %25
unreachable
34: ; preds = %25
br label %35
35: ; preds = %34
%36 = load i32, i32* %3
%37 = add nsw i32 %36, 1
store i32 %37, i32* %3
br label %22
38: ; preds = %22
store i32 0, i32* %3
br label %39
39: ; preds = %59, %38
%40 = load i32, i32* %3
%41 = icmp slt i32 %40, 16
br i1 %41, label %42, label %62
42: ; preds = %39
%43 = load i32, i32* %3
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 %44
%46 = load i16, i16* %45
%47 = sext i16 %46 to i32
%48 = icmp ne i32 %47, 5678
br i1 %48, label %57, label %49
49: ; preds = %42
%50 = load i32, i32* %3
%51 = add nsw i32 %50, 144
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [160 x i16], [160 x i16]* %2, i64 0, i64 %52
%54 = load i16, i16* %53
%55 = sext i16 %54 to i32
%56 = icmp ne i32 %55, 5678
br i1 %56, label %57, label %58
57: ; preds = %49, %42
unreachable
58: ; preds = %49
br label %59
59: ; preds = %58
%60 = load i32, i32* %3
%61 = add nsw i32 %60, 1
store i32 %61, i32* %3
br label %39
62: ; preds = %39
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = alloca [160 x i16]
%2 = bitcast [160 x i16]* %1 to i8*
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%3 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 144
%4 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 0
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%5 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 145
%6 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 1
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%7 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 146
%8 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 2
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%9 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 147
%10 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 3
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%11 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 148
%12 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 4
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%13 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 149
%14 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 5
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%15 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 150
%16 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 6
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%17 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 151
%18 = bitcast i16* %3 to <8 x i16>*
store <8 x i16> <i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678>, <8 x i16>* %18
%19 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 7
%20 = bitcast [160 x i16]* %1 to <8 x i16>*
store <8 x i16> <i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678>, <8 x i16>* %20
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%21 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 152
%22 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 8
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%23 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 153
%24 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 9
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%25 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 154
%26 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 10
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%27 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 155
%28 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 11
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%29 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 156
%30 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 12
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%31 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 157
%32 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 13
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%33 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 158
%34 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 14
tail call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
%35 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 159
%36 = bitcast i16* %21 to <8 x i16>*
store <8 x i16> <i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678>, <8 x i16>* %36
%37 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 15
%38 = bitcast i16* %22 to <8 x i16>*
store <8 x i16> <i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678, i16 5678>, <8 x i16>* %38
%39 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 16
%40 = call i32 (i16*, i32, ...) bitcast (i32 (...)* @test1 to i32 (i16*, i32, ...)*)(i16* %39, i32 1234)
br label %62
41: ; preds = %62
%42 = add nuw nsw i64 %63, 17
%43 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 %42
%44 = load i16, i16* %43
%45 = icmp eq i16 %44, 1234
br i1 %45, label %46, label %68
46: ; preds = %41
%47 = add nuw nsw i64 %63, 18
%48 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 %47
%49 = load i16, i16* %48
%50 = icmp eq i16 %49, 1234
br i1 %50, label %51, label %68
51: ; preds = %46
%52 = add nuw nsw i64 %63, 19
%53 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 %52
%54 = load i16, i16* %53
%55 = icmp eq i16 %54, 1234
br i1 %55, label %56, label %68
56: ; preds = %51
%57 = add nuw nsw i64 %63, 4
%58 = icmp eq i64 %57, 128
br i1 %58, label %59, label %62
59: ; preds = %56
%60 = load i16, i16* %4
%61 = icmp eq i16 %60, 5678
br i1 %61, label %70, label %163
62: ; preds = %56, %0
%63 = phi i64 [ 0, %0 ], [ %57, %56 ]
%64 = add nuw nsw i64 %63, 16
%65 = getelementptr inbounds [160 x i16], [160 x i16]* %1, i64 0, i64 %64
%66 = load i16, i16* %65
%67 = icmp eq i16 %66, 1234
br i1 %67, label %41, label %68
68: ; preds = %51, %46, %41, %62
unreachable
69: ; preds = %70
ret i32 0
70: ; preds = %59
%71 = load i16, i16* %3
%72 = icmp eq i16 %71, 5678
%73 = load i16, i16* %6
%74 = icmp eq i16 %73, 5678
%75 = select i1 %72, i1 %74, i1 false
%76 = load i16, i16* %5
%77 = icmp eq i16 %76, 5678
%78 = select i1 %75, i1 %77, i1 false
%79 = load i16, i16* %8
%80 = icmp eq i16 %79, 5678
%81 = select i1 %78, i1 %80, i1 false
%82 = load i16, i16* %7
%83 = icmp eq i16 %82, 5678
%84 = select i1 %81, i1 %83, i1 false
%85 = load i16, i16* %10
%86 = icmp eq i16 %85, 5678
%87 = select i1 %84, i1 %86, i1 false
%88 = load i16, i16* %9
%89 = icmp eq i16 %88, 5678
%90 = select i1 %87, i1 %89, i1 false
%91 = load i16, i16* %12
%92 = icmp eq i16 %91, 5678
%93 = select i1 %90, i1 %92, i1 false
%94 = load i16, i16* %11
%95 = icmp eq i16 %94, 5678
%96 = select i1 %93, i1 %95, i1 false
%97 = load i16, i16* %14
%98 = icmp eq i16 %97, 5678
%99 = select i1 %96, i1 %98, i1 false
%100 = load i16, i16* %13
%101 = icmp eq i16 %100, 5678
%102 = select i1 %99, i1 %101, i1 false
%103 = load i16, i16* %16
%104 = icmp eq i16 %103, 5678
%105 = select i1 %102, i1 %104, i1 false
%106 = load i16, i16* %15
%107 = icmp eq i16 %106, 5678
%108 = select i1 %105, i1 %107, i1 false
%109 = load i16, i16* %19
%110 = icmp eq i16 %109, 5678
%111 = select i1 %108, i1 %110, i1 false
%112 = load i16, i16* %17
%113 = icmp eq i16 %112, 5678
%114 = select i1 %111, i1 %113, i1 false
%115 = load i16, i16* %22
%116 = icmp eq i16 %115, 5678
%117 = select i1 %114, i1 %116, i1 false
%118 = load i16, i16* %21
%119 = icmp eq i16 %118, 5678
%120 = select i1 %117, i1 %119, i1 false
%121 = load i16, i16* %24
%122 = icmp eq i16 %121, 5678
%123 = select i1 %120, i1 %122, i1 false
%124 = load i16, i16* %23
%125 = icmp eq i16 %124, 5678
%126 = select i1 %123, i1 %125, i1 false
%127 = load i16, i16* %26
%128 = icmp eq i16 %127, 5678
%129 = select i1 %126, i1 %128, i1 false
%130 = load i16, i16* %25
%131 = icmp eq i16 %130, 5678
%132 = select i1 %129, i1 %131, i1 false
%133 = load i16, i16* %28
%134 = icmp eq i16 %133, 5678
%135 = select i1 %132, i1 %134, i1 false
%136 = load i16, i16* %27
%137 = icmp eq i16 %136, 5678
%138 = select i1 %135, i1 %137, i1 false
%139 = load i16, i16* %30
%140 = icmp eq i16 %139, 5678
%141 = select i1 %138, i1 %140, i1 false
%142 = load i16, i16* %29
%143 = icmp eq i16 %142, 5678
%144 = select i1 %141, i1 %143, i1 false
%145 = load i16, i16* %32
%146 = icmp eq i16 %145, 5678
%147 = select i1 %144, i1 %146, i1 false
%148 = load i16, i16* %31
%149 = icmp eq i16 %148, 5678
%150 = select i1 %147, i1 %149, i1 false
%151 = load i16, i16* %34
%152 = icmp eq i16 %151, 5678
%153 = select i1 %150, i1 %152, i1 false
%154 = load i16, i16* %33
%155 = icmp eq i16 %154, 5678
%156 = select i1 %153, i1 %155, i1 false
%157 = load i16, i16* %37
%158 = icmp eq i16 %157, 5678
%159 = select i1 %156, i1 %158, i1 false
%160 = load i16, i16* %35
%161 = icmp eq i16 %160, 5678
%162 = select i1 %159, i1 %161, i1 false
br i1 %162, label %69, label %163
163: ; preds = %70, %59
unreachable
}