int main(void) {
  __attribute__((vector_size(4 * sizeof(int)))) int vi = {12, -34, -56, 78};
#pragma acc parallel copy(vi)
  {
    if (vi[0] != 12 || vi[1] != -34 || vi[2] != -56 || vi[3] != 78)
      __builtin_abort();
    __attribute__((vector_size(4 * sizeof(int)))) int vi_ = {-21, -43, 65, 87};
    vi = vi_;
  }
  if (vi[0] != -21 || vi[1] != -43 || vi[2] != 65 || vi[3] != 87)
    __builtin_abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movaps 0xeda(%rip),%xmm0
movaps %xmm0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    $0xc,%eax
jne    1178 <main+0x68>
movaps -0x20(%rbp),%xmm0
pshufd $0x55,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0xffffffde,%eax
jne    1178 <main+0x68>
movaps -0x20(%rbp),%xmm0
pshufd $0xee,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0xffffffc8,%eax
jne    1178 <main+0x68>
movaps -0x20(%rbp),%xmm0
pshufd $0xff,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0x4e,%eax
je     117d <main+0x6d>
call   1030 <abort@plt>
movaps 0xe8c(%rip),%xmm0
movaps %xmm0,-0x30(%rbp)
movaps -0x30(%rbp),%xmm0
movaps %xmm0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    $0xffffffeb,%eax
jne    11de <main+0xce>
movaps -0x20(%rbp),%xmm0
pshufd $0x55,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0xffffffd5,%eax
jne    11de <main+0xce>
movaps -0x20(%rbp),%xmm0
pshufd $0xee,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0x41,%eax
jne    11de <main+0xce>
movaps -0x20(%rbp),%xmm0
pshufd $0xff,%xmm0,%xmm0
movd   %xmm0,%eax
cmp    $0x57,%eax
je     11e3 <main+0xd3>
call   1030 <abort@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca <4 x i32>
%3 = alloca <4 x i32>
store i32 0, i32* %1
store <4 x i32> <i32 12, i32 -34, i32 -56, i32 78>, <4 x i32>* %2
%4 = load <4 x i32>, <4 x i32>* %2
%5 = extractelement <4 x i32> %4, i32 0
%6 = icmp ne i32 %5, 12
br i1 %6, label %19, label %7
7: ; preds = %0
%8 = load <4 x i32>, <4 x i32>* %2
%9 = extractelement <4 x i32> %8, i32 1
%10 = icmp ne i32 %9, -34
br i1 %10, label %19, label %11
11: ; preds = %7
%12 = load <4 x i32>, <4 x i32>* %2
%13 = extractelement <4 x i32> %12, i32 2
%14 = icmp ne i32 %13, -56
br i1 %14, label %19, label %15
15: ; preds = %11
%16 = load <4 x i32>, <4 x i32>* %2
%17 = extractelement <4 x i32> %16, i32 3
%18 = icmp ne i32 %17, 78
br i1 %18, label %19, label %20
19: ; preds = %15, %11, %7, %0
unreachable
20: ; preds = %15
store <4 x i32> <i32 -21, i32 -43, i32 65, i32 87>, <4 x i32>* %3
%21 = load <4 x i32>, <4 x i32>* %3
store <4 x i32> %21, <4 x i32>* %2
%22 = load <4 x i32>, <4 x i32>* %2
%23 = extractelement <4 x i32> %22, i32 0
%24 = icmp ne i32 %23, -21
br i1 %24, label %37, label %25
25: ; preds = %20
%26 = load <4 x i32>, <4 x i32>* %2
%27 = extractelement <4 x i32> %26, i32 1
%28 = icmp ne i32 %27, -43
br i1 %28, label %37, label %29
29: ; preds = %25
%30 = load <4 x i32>, <4 x i32>* %2
%31 = extractelement <4 x i32> %30, i32 2
%32 = icmp ne i32 %31, 65
br i1 %32, label %37, label %33
33: ; preds = %29
%34 = load <4 x i32>, <4 x i32>* %2
%35 = extractelement <4 x i32> %34, i32 3
%36 = icmp ne i32 %35, 87
br i1 %36, label %37, label %38
37: ; preds = %33, %29, %25, %20
unreachable
38: ; preds = %33
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}