1 ; RUN: llc < %s -mcpu=x86-64 | FileCheck %s -check-prefix=CHECK-NOSSSE3
2 ; RUN: llc < %s -mcpu=core2 | FileCheck %s -check-prefix=CHECK-SSSE3
3 ; RUN: llc < %s -mcpu=core-avx2 | FileCheck %s -check-prefix=CHECK-AVX2
4 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5 target triple = "x86_64-unknown-linux-gnu"
7 declare <8 x i16> @llvm.bswap.v8i16(<8 x i16>)
8 declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>)
9 declare <2 x i64> @llvm.bswap.v2i64(<2 x i64>)
11 define <8 x i16> @test1(<8 x i16> %v) #0 {
13 %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)
16 ; CHECK-NOSSSE3-LABEL: @test1
27 ; CHECK-SSSE3-LABEL: @test1
29 ; CHECK-SSSE3-NEXT: retq
31 ; CHECK-AVX2-LABEL: @test1
33 ; CHECK-AVX2-NEXT: retq
36 define <4 x i32> @test2(<4 x i32> %v) #0 {
38 %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)
41 ; CHECK-NOSSSE3-LABEL: @test2
42 ; CHECK-NOSSSE3: bswapl
43 ; CHECK-NOSSSE3: bswapl
44 ; CHECK-NOSSSE3: bswapl
45 ; CHECK-NOSSSE3: bswapl
48 ; CHECK-SSSE3-LABEL: @test2
50 ; CHECK-SSSE3-NEXT: retq
52 ; CHECK-AVX2-LABEL: @test2
54 ; CHECK-AVX2-NEXT: retq
57 define <2 x i64> @test3(<2 x i64> %v) #0 {
59 %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)
62 ; CHECK-NOSSSE3-LABEL: @test3
63 ; CHECK-NOSSSE3: bswapq
64 ; CHECK-NOSSSE3: bswapq
67 ; CHECK-SSSE3-LABEL: @test3
69 ; CHECK-SSSE3-NEXT: retq
71 ; CHECK-AVX2-LABEL: @test3
73 ; CHECK-AVX2-NEXT: retq
76 declare <16 x i16> @llvm.bswap.v16i16(<16 x i16>)
77 declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>)
78 declare <4 x i64> @llvm.bswap.v4i64(<4 x i64>)
80 define <16 x i16> @test4(<16 x i16> %v) #0 {
82 %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)
85 ; CHECK-SSSE3-LABEL: @test4
88 ; CHECK-SSSE3-NEXT: retq
90 ; CHECK-AVX2-LABEL: @test4
92 ; CHECK-AVX2-NEXT: retq
95 define <8 x i32> @test5(<8 x i32> %v) #0 {
97 %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)
100 ; CHECK-SSSE3-LABEL: @test5
101 ; CHECK-SSSE3: pshufb
102 ; CHECK-SSSE3: pshufb
103 ; CHECK-SSSE3-NEXT: retq
105 ; CHECK-AVX2-LABEL: @test5
106 ; CHECK-AVX2: vpshufb
107 ; CHECK-AVX2-NEXT: retq
110 define <4 x i64> @test6(<4 x i64> %v) #0 {
112 %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)
115 ; CHECK-SSSE3-LABEL: @test6
116 ; CHECK-SSSE3: pshufb
117 ; CHECK-SSSE3: pshufb
118 ; CHECK-SSSE3-NEXT: retq
120 ; CHECK-AVX2-LABEL: @test6
121 ; CHECK-AVX2: vpshufb
122 ; CHECK-AVX2-NEXT: retq
125 declare <4 x i16> @llvm.bswap.v4i16(<4 x i16>)
127 define <4 x i16> @test7(<4 x i16> %v) #0 {
129 %r = call <4 x i16> @llvm.bswap.v4i16(<4 x i16> %v)
132 ; CHECK-SSSE3-LABEL: @test7
133 ; CHECK-SSSE3: pshufb
134 ; CHECK-SSSE3: psrld $16
135 ; CHECK-SSSE3-NEXT: retq
137 ; CHECK-AVX2-LABEL: @test7
138 ; CHECK-AVX2: vpshufb
139 ; CHECK-AVX2: vpsrld $16
140 ; CHECK-AVX2-NEXT: retq
143 attributes #0 = { nounwind uwtable }