blob: 0560a8d6ae2595c49ada33decaa3c015aef4cf0b [file] [log] [blame]
Andrea Di Biagioe85ba4d2014-05-08 17:44:04 +00001; RUN: llc < %s -march=x86-64 -mcpu=core-avx2 | FileCheck %s
2
3; Verify that the backend correctly combines AVX2 builtin intrinsics.
4
5
6define <8 x i32> @test_psra_1(<8 x i32> %A) {
7 %1 = tail call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %A, i32 3)
8 %2 = tail call <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32> %1, <4 x i32> <i32 3, i32 0, i32 7, i32 0>)
9 %3 = tail call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %2, i32 2)
10 ret <8 x i32> %3
11}
12; CHECK-LABEL: test_psra_1
13; CHECK: vpsrad $8, %ymm0, %ymm0
14; CHECK-NEXT: ret
15
16define <16 x i16> @test_psra_2(<16 x i16> %A) {
17 %1 = tail call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %A, i32 3)
18 %2 = tail call <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16> %1, <8 x i16> <i16 3, i16 0, i16 0, i16 0, i16 7, i16 0, i16 0, i16 0>)
19 %3 = tail call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %2, i32 2)
20 ret <16 x i16> %3
21}
22; CHECK-LABEL: test_psra_2
23; CHECK: vpsraw $8, %ymm0, %ymm0
24; CHECK-NEXT: ret
25
26define <16 x i16> @test_psra_3(<16 x i16> %A) {
27 %1 = tail call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %A, i32 0)
28 %2 = tail call <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16> %1, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 7, i16 0, i16 0, i16 0>)
29 %3 = tail call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %2, i32 0)
30 ret <16 x i16> %3
31}
32; CHECK-LABEL: test_psra_3
33; CHECK-NOT: vpsraw
34; CHECK: ret
35
36define <8 x i32> @test_psra_4(<8 x i32> %A) {
37 %1 = tail call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %A, i32 0)
38 %2 = tail call <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32> %1, <4 x i32> <i32 0, i32 0, i32 7, i32 0>)
39 %3 = tail call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %2, i32 0)
40 ret <8 x i32> %3
41}
42; CHECK-LABEL: test_psra_4
43; CHECK-NOT: vpsrad
44; CHECK: ret
45
46
47declare <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16>, <8 x i16>)
48declare <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16>, i32)
49declare <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32>, <4 x i32>)
50declare <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32>, i32)
51