; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-SSE --check-prefix=CHECK-NOSSSE3
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+ssse3 | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-SSE --check-prefix=CHECK-SSSE3
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s --check-prefix=CHECK-ALL --check-prefix=CHECK-AVX --check-prefix=CHECK-AVX2
+; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-NOSSSE3,CHECK-SSE-X86,CHECK-NOSSSE3-X86
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-SSE-X64,CHECK-NOSSSE3,CHECK-NOSSSE3-X64
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+ssse3 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-SSE,CHECK-SSE-X64,CHECK-SSSE3
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s --check-prefixes=CHECK-ALL,CHECK-AVX,CHECK-AVX2
declare <8 x i16> @llvm.bswap.v8i16(<8 x i16>)
declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>)
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
; CHECK-NOSSSE3-NEXT: packuswb %xmm2, %xmm0
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test1:
; CHECK-SSSE3: # %bb.0: # %entry
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
; CHECK-NOSSSE3-NEXT: packuswb %xmm2, %xmm0
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test2:
; CHECK-SSSE3: # %bb.0:
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
; CHECK-NOSSSE3-NEXT: packuswb %xmm2, %xmm0
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: or_bswap:
; CHECK-SSSE3: # %bb.0:
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[3,2,1,0,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,7,6,5,4]
; CHECK-NOSSSE3-NEXT: packuswb %xmm2, %xmm0
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test3:
; CHECK-SSSE3: # %bb.0: # %entry
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[1,0,3,2,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,5,4,7,6]
; CHECK-NOSSSE3-NEXT: packuswb %xmm3, %xmm1
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test4:
; CHECK-SSSE3: # %bb.0: # %entry
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
; CHECK-NOSSSE3-NEXT: packuswb %xmm3, %xmm1
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test5:
; CHECK-SSSE3: # %bb.0: # %entry
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm1 = xmm1[3,2,1,0,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm1 = xmm1[0,1,2,3,7,6,5,4]
; CHECK-NOSSSE3-NEXT: packuswb %xmm3, %xmm1
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test6:
; CHECK-SSSE3: # %bb.0: # %entry
; CHECK-NOSSSE3-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7]
; CHECK-NOSSSE3-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6]
; CHECK-NOSSSE3-NEXT: packuswb %xmm2, %xmm0
-; CHECK-NOSSSE3-NEXT: retq
+; CHECK-NOSSSE3-NEXT: ret{{[l|q]}}
;
; CHECK-SSSE3-LABEL: test7:
; CHECK-SSSE3: # %bb.0: # %entry
define <8 x i16> @identity_v8i16(<8 x i16> %v) {
; CHECK-ALL-LABEL: identity_v8i16:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)
%bs2 = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %bs1)
define <4 x i32> @identity_v4i32(<4 x i32> %v) {
; CHECK-ALL-LABEL: identity_v4i32:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)
%bs2 = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %bs1)
define <2 x i64> @identity_v2i64(<2 x i64> %v) {
; CHECK-ALL-LABEL: identity_v2i64:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)
%bs2 = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %bs1)
define <16 x i16> @identity_v16i16(<16 x i16> %v) {
; CHECK-ALL-LABEL: identity_v16i16:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)
%bs2 = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %bs1)
define <8 x i32> @identity_v8i32(<8 x i32> %v) {
; CHECK-ALL-LABEL: identity_v8i32:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)
%bs2 = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %bs1)
define <4 x i64> @identity_v4i64(<4 x i64> %v) {
; CHECK-ALL-LABEL: identity_v4i64:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)
%bs2 = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %bs1)
define <4 x i16> @identity_v4i16(<4 x i16> %v) {
; CHECK-ALL-LABEL: identity_v4i16:
; CHECK-ALL: # %bb.0: # %entry
-; CHECK-ALL-NEXT: retq
+; CHECK-ALL-NEXT: ret{{[l|q]}}
entry:
%bs1 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)
%bs2 = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %bs1)
; CHECK-SSE-LABEL: fold_v8i16:
; CHECK-SSE: # %bb.0: # %entry
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-NEXT: ret{{[l|q]}}
;
; CHECK-AVX-LABEL: fold_v8i16:
; CHECK-AVX: # %bb.0: # %entry
; CHECK-SSE-LABEL: fold_v4i32:
; CHECK-SSE: # %bb.0: # %entry
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [0,4294967295,33554432,4261412863]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-NEXT: ret{{[l|q]}}
;
; CHECK-AVX-LABEL: fold_v4i32:
; CHECK-AVX: # %bb.0: # %entry
}
define <2 x i64> @fold_v2i64() {
-; CHECK-SSE-LABEL: fold_v2i64:
-; CHECK-SSE: # %bb.0: # %entry
-; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-X86-LABEL: fold_v2i64:
+; CHECK-SSE-X86: # %bb.0: # %entry
+; CHECK-SSE-X86-NEXT: movaps {{.*#+}} xmm0 = [0,4278190080,4294967295,4294967295]
+; CHECK-SSE-X86-NEXT: retl
+;
+; CHECK-SSE-X64-LABEL: fold_v2i64:
+; CHECK-SSE-X64: # %bb.0: # %entry
+; CHECK-SSE-X64-NEXT: movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
+; CHECK-SSE-X64-NEXT: retq
;
; CHECK-AVX-LABEL: fold_v2i64:
; CHECK-AVX: # %bb.0: # %entry
; CHECK-SSE: # %bb.0: # %entry
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [0,256,65535,512,65023,1024,64511,1536]
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm1 = [63999,2048,63487,2560,62975,3072,62463,3584]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-NEXT: ret{{[l|q]}}
;
; CHECK-AVX-LABEL: fold_v16i16:
; CHECK-AVX: # %bb.0: # %entry
; CHECK-SSE: # %bb.0: # %entry
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [0,16777216,4294967295,33554432]
; CHECK-SSE-NEXT: movaps {{.*#+}} xmm1 = [4261412863,67108864,4227858431,100663296]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-NEXT: ret{{[l|q]}}
;
; CHECK-AVX-LABEL: fold_v8i32:
; CHECK-AVX: # %bb.0: # %entry
}
define <4 x i64> @fold_v4i64() {
-; CHECK-SSE-LABEL: fold_v4i64:
-; CHECK-SSE: # %bb.0: # %entry
-; CHECK-SSE-NEXT: movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
-; CHECK-SSE-NEXT: movaps {{.*#+}} xmm1 = [18446462598732840960,72056494526300160]
-; CHECK-SSE-NEXT: retq
+; CHECK-SSE-X86-LABEL: fold_v4i64:
+; CHECK-SSE-X86: # %bb.0: # %entry
+; CHECK-SSE-X86-NEXT: movaps {{.*#+}} xmm0 = [0,4278190080,4294967295,4294967295]
+; CHECK-SSE-X86-NEXT: movaps {{.*#+}} xmm1 = [0,4294901760,0,16776960]
+; CHECK-SSE-X86-NEXT: retl
+;
+; CHECK-SSE-X64-LABEL: fold_v4i64:
+; CHECK-SSE-X64: # %bb.0: # %entry
+; CHECK-SSE-X64-NEXT: movaps {{.*#+}} xmm0 = [18374686479671623680,18446744073709551615]
+; CHECK-SSE-X64-NEXT: movaps {{.*#+}} xmm1 = [18446462598732840960,72056494526300160]
+; CHECK-SSE-X64-NEXT: retq
;
; CHECK-AVX-LABEL: fold_v4i64:
; CHECK-AVX: # %bb.0: # %entry