int main(int argc, char *argv[]) {
  __attribute__((vector_size(
      (4) * sizeof(unsigned int)))) unsigned int vuint = {1, 2, 3, 4};
  __attribute__((vector_size((4) * sizeof(int)))) int vint0 = {1, 1, 1, 1};
  __attribute__((vector_size((4) * sizeof(int)))) int vint1 = {-1, -1, -1, -1};
  __attribute__((vector_size((4) * sizeof(int)))) int i1, i2, i3;
  __attribute__((vector_size((4) * sizeof(unsigned int)))) unsigned int u1, u2,
      u3;
  i1 = vint1 << vint0;
  if ((*((int *)&(i1) + 0)) != ((int)-1 << (int)1))
    __builtin_abort();
  if ((*((int *)&(i1) + 1)) != ((int)-1 << (int)1))
    __builtin_abort();
  if ((*((int *)&(i1) + 2)) != ((int)-1 << (int)1))
    __builtin_abort();
  if ((*((int *)&(i1) + 3)) != ((int)-1 << (int)1))
    __builtin_abort();
  u1 = vuint << vint0;
  if ((*((int *)&(u1) + 0)) != ((unsigned int)1 << (int)1))
    __builtin_abort();
  if ((*((int *)&(u1) + 1)) != ((unsigned int)2 << (int)1))
    __builtin_abort();
  if ((*((int *)&(u1) + 2)) != ((unsigned int)3 << (int)1))
    __builtin_abort();
  if ((*((int *)&(u1) + 3)) != ((unsigned int)4 << (int)1))
    __builtin_abort();
  i2 = vint1 >> vuint;
  if ((*((int *)&(i2) + 0)) != ((int)-1 >> (unsigned int)1))
    __builtin_abort();
  if ((*((int *)&(i2) + 1)) != ((int)-1 >> (unsigned int)2))
    __builtin_abort();
  if ((*((int *)&(i2) + 2)) != ((int)-1 >> (unsigned int)3))
    __builtin_abort();
  if ((*((int *)&(i2) + 3)) != ((int)-1 >> (unsigned int)4))
    __builtin_abort();
  vint1 >>= vuint;
  vuint <<= vint0;
  vuint <<= vint1;
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movaps 0xed0(%rip),%xmm0
movaps %xmm0,-0x20(%rbp)
movaps 0xed5(%rip),%xmm0
movaps %xmm0,-0x30(%rbp)
pcmpeqd %xmm0,%xmm0
movaps %xmm0,-0x40(%rbp)
movaps -0x40(%rbp),%xmm1
movaps -0x30(%rbp),%xmm0
pslld  $0x17,%xmm0
movaps 0xec5(%rip),%xmm2
paddd  %xmm2,%xmm0
cvttps2dq %xmm0,%xmm2
movaps %xmm1,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm0,-0x50(%rbp)
cmpl   $0xfffffffe,-0x50(%rbp)
je     119a <main+0x8a>
call   1030 <abort@plt>
cmpl   $0xfffffffe,-0x4c(%rbp)
je     11a9 <main+0x99>
call   1030 <abort@plt>
cmpl   $0xfffffffe,-0x48(%rbp)
je     11b8 <main+0xa8>
call   1030 <abort@plt>
cmpl   $0xfffffffe,-0x44(%rbp)
je     11c7 <main+0xb7>
call   1030 <abort@plt>
movaps -0x20(%rbp),%xmm1
movaps -0x30(%rbp),%xmm0
pslld  $0x17,%xmm0
movaps 0xe45(%rip),%xmm2
paddd  %xmm2,%xmm0
cvttps2dq %xmm0,%xmm2
movaps %xmm1,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm0,-0x80(%rbp)
cmpl   $0x2,-0x80(%rbp)
je     121a <main+0x10a>
call   1030 <abort@plt>
cmpl   $0x4,-0x7c(%rbp)
je     1229 <main+0x119>
call   1030 <abort@plt>
cmpl   $0x6,-0x78(%rbp)
je     1238 <main+0x128>
call   1030 <abort@plt>
cmpl   $0x8,-0x74(%rbp)
je     1247 <main+0x137>
call   1030 <abort@plt>
movaps -0x40(%rbp),%xmm1
movaps -0x20(%rbp),%xmm2
pshuflw $0xfe,%xmm2,%xmm0
movaps %xmm1,%xmm3
psrad  %xmm0,%xmm3
pshuflw $0x54,%xmm2,%xmm4
movaps %xmm1,%xmm0
psrad  %xmm4,%xmm0
punpcklqdq %xmm3,%xmm0
pshufd $0xee,%xmm2,%xmm3
pshuflw $0xfe,%xmm3,%xmm4
movaps %xmm1,%xmm2
psrad  %xmm4,%xmm2
pshuflw $0x54,%xmm3,%xmm3
psrad  %xmm3,%xmm1
punpckhqdq %xmm2,%xmm1
shufps $0xcc,%xmm1,%xmm0
movdqa %xmm0,-0x60(%rbp)
cmpl   $0xffffffff,-0x60(%rbp)
je     12a1 <main+0x191>
call   1030 <abort@plt>
cmpl   $0xffffffff,-0x5c(%rbp)
je     12b0 <main+0x1a0>
call   1030 <abort@plt>
cmpl   $0xffffffff,-0x58(%rbp)
je     12bf <main+0x1af>
call   1030 <abort@plt>
cmpl   $0xffffffff,-0x54(%rbp)
je     12ce <main+0x1be>
call   1030 <abort@plt>
movaps -0x20(%rbp),%xmm2
movaps -0x40(%rbp),%xmm1
pshuflw $0xfe,%xmm2,%xmm0
movaps %xmm1,%xmm3
psrad  %xmm0,%xmm3
pshuflw $0x54,%xmm2,%xmm4
movaps %xmm1,%xmm0
psrad  %xmm4,%xmm0
punpcklqdq %xmm3,%xmm0
pshufd $0xee,%xmm2,%xmm3
pshuflw $0xfe,%xmm3,%xmm4
movaps %xmm1,%xmm2
psrad  %xmm4,%xmm2
pshuflw $0x54,%xmm3,%xmm3
psrad  %xmm3,%xmm1
punpckhqdq %xmm2,%xmm1
shufps $0xcc,%xmm1,%xmm0
movaps %xmm0,-0x40(%rbp)
movaps -0x30(%rbp),%xmm0
movaps -0x20(%rbp),%xmm1
pslld  $0x17,%xmm0
movaps 0xcf4(%rip),%xmm2
paddd  %xmm2,%xmm0
cvttps2dq %xmm0,%xmm3
movaps %xmm1,%xmm0
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movaps %xmm0,-0x20(%rbp)
movaps -0x40(%rbp),%xmm0
movaps -0x20(%rbp),%xmm1
pslld  $0x17,%xmm0
paddd  %xmm2,%xmm0
cvttps2dq %xmm0,%xmm2
movaps %xmm1,%xmm0
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm0
movdqa %xmm0,-0x20(%rbp)
xor    %eax,%eax
add    $0xa0,%rsp
pop    %rbp
ret

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

LLVM IR (-O0):
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca <4 x i32>
%7 = alloca <4 x i32>
%8 = alloca <4 x i32>
%9 = alloca <4 x i32>
%10 = alloca <4 x i32>
%11 = alloca <4 x i32>
%12 = alloca <4 x i32>
%13 = alloca <4 x i32>
%14 = alloca <4 x i32>
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, <4 x i32>* %6
store <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32>* %7
store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, <4 x i32>* %8
%15 = load <4 x i32>, <4 x i32>* %8
%16 = load <4 x i32>, <4 x i32>* %7
%17 = shl <4 x i32> %15, %16
store <4 x i32> %17, <4 x i32>* %9
%18 = bitcast <4 x i32>* %9 to i32*
%19 = getelementptr inbounds i32, i32* %18, i64 0
%20 = load i32, i32* %19
%21 = icmp ne i32 %20, -2
br i1 %21, label %22, label %23
22: ; preds = %2
unreachable
23: ; preds = %2
%24 = bitcast <4 x i32>* %9 to i32*
%25 = getelementptr inbounds i32, i32* %24, i64 1
%26 = load i32, i32* %25
%27 = icmp ne i32 %26, -2
br i1 %27, label %28, label %29
28: ; preds = %23
unreachable
29: ; preds = %23
%30 = bitcast <4 x i32>* %9 to i32*
%31 = getelementptr inbounds i32, i32* %30, i64 2
%32 = load i32, i32* %31
%33 = icmp ne i32 %32, -2
br i1 %33, label %34, label %35
34: ; preds = %29
unreachable
35: ; preds = %29
%36 = bitcast <4 x i32>* %9 to i32*
%37 = getelementptr inbounds i32, i32* %36, i64 3
%38 = load i32, i32* %37
%39 = icmp ne i32 %38, -2
br i1 %39, label %40, label %41
40: ; preds = %35
unreachable
41: ; preds = %35
%42 = load <4 x i32>, <4 x i32>* %6
%43 = load <4 x i32>, <4 x i32>* %7
%44 = shl <4 x i32> %42, %43
store <4 x i32> %44, <4 x i32>* %12
%45 = bitcast <4 x i32>* %12 to i32*
%46 = getelementptr inbounds i32, i32* %45, i64 0
%47 = load i32, i32* %46
%48 = icmp ne i32 %47, 2
br i1 %48, label %49, label %50
49: ; preds = %41
unreachable
50: ; preds = %41
%51 = bitcast <4 x i32>* %12 to i32*
%52 = getelementptr inbounds i32, i32* %51, i64 1
%53 = load i32, i32* %52
%54 = icmp ne i32 %53, 4
br i1 %54, label %55, label %56
55: ; preds = %50
unreachable
56: ; preds = %50
%57 = bitcast <4 x i32>* %12 to i32*
%58 = getelementptr inbounds i32, i32* %57, i64 2
%59 = load i32, i32* %58
%60 = icmp ne i32 %59, 6
br i1 %60, label %61, label %62
61: ; preds = %56
unreachable
62: ; preds = %56
%63 = bitcast <4 x i32>* %12 to i32*
%64 = getelementptr inbounds i32, i32* %63, i64 3
%65 = load i32, i32* %64
%66 = icmp ne i32 %65, 8
br i1 %66, label %67, label %68
67: ; preds = %62
unreachable
68: ; preds = %62
%69 = load <4 x i32>, <4 x i32>* %8
%70 = load <4 x i32>, <4 x i32>* %6
%71 = ashr <4 x i32> %69, %70
store <4 x i32> %71, <4 x i32>* %10
%72 = bitcast <4 x i32>* %10 to i32*
%73 = getelementptr inbounds i32, i32* %72, i64 0
%74 = load i32, i32* %73
%75 = icmp ne i32 %74, -1
br i1 %75, label %76, label %77
76: ; preds = %68
unreachable
77: ; preds = %68
%78 = bitcast <4 x i32>* %10 to i32*
%79 = getelementptr inbounds i32, i32* %78, i64 1
%80 = load i32, i32* %79
%81 = icmp ne i32 %80, -1
br i1 %81, label %82, label %83
82: ; preds = %77
unreachable
83: ; preds = %77
%84 = bitcast <4 x i32>* %10 to i32*
%85 = getelementptr inbounds i32, i32* %84, i64 2
%86 = load i32, i32* %85
%87 = icmp ne i32 %86, -1
br i1 %87, label %88, label %89
88: ; preds = %83
unreachable
89: ; preds = %83
%90 = bitcast <4 x i32>* %10 to i32*
%91 = getelementptr inbounds i32, i32* %90, i64 3
%92 = load i32, i32* %91
%93 = icmp ne i32 %92, -1
br i1 %93, label %94, label %95
94: ; preds = %89
unreachable
95: ; preds = %89
%96 = load <4 x i32>, <4 x i32>* %6
%97 = load <4 x i32>, <4 x i32>* %8
%98 = ashr <4 x i32> %97, %96
store <4 x i32> %98, <4 x i32>* %8
%99 = load <4 x i32>, <4 x i32>* %7
%100 = load <4 x i32>, <4 x i32>* %6
%101 = shl <4 x i32> %100, %99
store <4 x i32> %101, <4 x i32>* %6
%102 = load <4 x i32>, <4 x i32>* %8
%103 = load <4 x i32>, <4 x i32>* %6
%104 = shl <4 x i32> %103, %102
store <4 x i32> %104, <4 x i32>* %6
ret i32 0
}

LLVM IR (-O2):
define i32 @main(i32 %0, i8** nocapture readnone %1) {
ret i32 0
}