blob: a18fd68865cc738a76026bdd705a83aa98ee376e [file] [log] [blame]
Benjamin Kramerf3ad2352014-05-19 13:12:38 +00001; 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
Hal Finkel5c968d92014-02-03 17:27:25 +00004target 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"
5target triple = "x86_64-unknown-linux-gnu"
6
Benjamin Kramerf3ad2352014-05-19 13:12:38 +00007declare <8 x i16> @llvm.bswap.v8i16(<8 x i16>)
8declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>)
Hal Finkel5c968d92014-02-03 17:27:25 +00009declare <2 x i64> @llvm.bswap.v2i64(<2 x i64>)
10
Benjamin Kramerf3ad2352014-05-19 13:12:38 +000011define <8 x i16> @test1(<8 x i16> %v) #0 {
12entry:
13 %r = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %v)
14 ret <8 x i16> %r
15
16; CHECK-NOSSSE3-LABEL: @test1
17; CHECK-NOSSSE3: rolw
18; CHECK-NOSSSE3: rolw
19; CHECK-NOSSSE3: rolw
20; CHECK-NOSSSE3: rolw
21; CHECK-NOSSSE3: rolw
22; CHECK-NOSSSE3: rolw
23; CHECK-NOSSSE3: rolw
24; CHECK-NOSSSE3: rolw
25; CHECK-NOSSSE3: retq
26
27; CHECK-SSSE3-LABEL: @test1
28; CHECK-SSSE3: pshufb
29; CHECK-SSSE3-NEXT: retq
30
31; CHECK-AVX2-LABEL: @test1
32; CHECK-AVX2: vpshufb
33; CHECK-AVX2-NEXT: retq
34}
35
36define <4 x i32> @test2(<4 x i32> %v) #0 {
37entry:
38 %r = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %v)
39 ret <4 x i32> %r
40
41; CHECK-NOSSSE3-LABEL: @test2
42; CHECK-NOSSSE3: bswapl
43; CHECK-NOSSSE3: bswapl
44; CHECK-NOSSSE3: bswapl
45; CHECK-NOSSSE3: bswapl
46; CHECK-NOSSSE3: retq
47
48; CHECK-SSSE3-LABEL: @test2
49; CHECK-SSSE3: pshufb
50; CHECK-SSSE3-NEXT: retq
51
52; CHECK-AVX2-LABEL: @test2
53; CHECK-AVX2: vpshufb
54; CHECK-AVX2-NEXT: retq
55}
56
57define <2 x i64> @test3(<2 x i64> %v) #0 {
Hal Finkel5c968d92014-02-03 17:27:25 +000058entry:
59 %r = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %v)
60 ret <2 x i64> %r
Benjamin Kramerf3ad2352014-05-19 13:12:38 +000061
62; CHECK-NOSSSE3-LABEL: @test3
63; CHECK-NOSSSE3: bswapq
64; CHECK-NOSSSE3: bswapq
65; CHECK-NOSSSE3: retq
66
67; CHECK-SSSE3-LABEL: @test3
68; CHECK-SSSE3: pshufb
69; CHECK-SSSE3-NEXT: retq
70
71; CHECK-AVX2-LABEL: @test3
72; CHECK-AVX2: vpshufb
73; CHECK-AVX2-NEXT: retq
Hal Finkel5c968d92014-02-03 17:27:25 +000074}
75
Benjamin Kramerf3ad2352014-05-19 13:12:38 +000076declare <16 x i16> @llvm.bswap.v16i16(<16 x i16>)
77declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>)
78declare <4 x i64> @llvm.bswap.v4i64(<4 x i64>)
79
80define <16 x i16> @test4(<16 x i16> %v) #0 {
81entry:
82 %r = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %v)
83 ret <16 x i16> %r
84
85; CHECK-SSSE3-LABEL: @test4
86; CHECK-SSSE3: pshufb
87; CHECK-SSSE3: pshufb
88; CHECK-SSSE3-NEXT: retq
89
90; CHECK-AVX2-LABEL: @test4
91; CHECK-AVX2: vpshufb
92; CHECK-AVX2-NEXT: retq
93}
94
95define <8 x i32> @test5(<8 x i32> %v) #0 {
96entry:
97 %r = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %v)
98 ret <8 x i32> %r
99
100; CHECK-SSSE3-LABEL: @test5
101; CHECK-SSSE3: pshufb
102; CHECK-SSSE3: pshufb
103; CHECK-SSSE3-NEXT: retq
104
105; CHECK-AVX2-LABEL: @test5
106; CHECK-AVX2: vpshufb
107; CHECK-AVX2-NEXT: retq
108}
109
110define <4 x i64> @test6(<4 x i64> %v) #0 {
111entry:
112 %r = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %v)
113 ret <4 x i64> %r
114
115; CHECK-SSSE3-LABEL: @test6
116; CHECK-SSSE3: pshufb
117; CHECK-SSSE3: pshufb
118; CHECK-SSSE3-NEXT: retq
119
120; CHECK-AVX2-LABEL: @test6
121; CHECK-AVX2: vpshufb
122; CHECK-AVX2-NEXT: retq
123}
124
Hal Finkel5c968d92014-02-03 17:27:25 +0000125
126attributes #0 = { nounwind uwtable }
127