|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
2 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer,instcombine -S | FileCheck %s |
3 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer,instcombine -S | FileCheck %s |
4 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer,instcombine -S | FileCheck %s |
5 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer,instcombine -S | FileCheck %s |
6 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer,instcombine -S | FileCheck %s |
7 |
| -; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -passes=slp-vectorizer,instcombine -S | FileCheck %s |
| 2 | +; RUN: opt < %s -mtriple=x86_64-unknown -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,SSE2 |
| 3 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=slm -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,SLM |
| 4 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=corei7-avx -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,AVX |
| 5 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=core-avx2 -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,AVX2 |
| 6 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=knl -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,AVX512 |
| 7 | +; RUN: opt < %s -mtriple=x86_64-unknown -mcpu=skx -passes=slp-vectorizer,instcombine -S | FileCheck %s --check-prefixes=CHECK,AVX512 |
8 | 8 |
|
9 | 9 | define <8 x float> @sitofp_uitofp(<8 x i32> %a) {
|
10 | 10 | ; CHECK-LABEL: @sitofp_uitofp(
|
11 |
| -; CHECK-NEXT: [[TMP1:%.*]] = sitofp <8 x i32> [[A:%.*]] to <8 x float> |
12 |
| -; CHECK-NEXT: [[TMP2:%.*]] = uitofp <8 x i32> [[A]] to <8 x float> |
13 |
| -; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 11 | +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i32> [[A:%.*]], <8 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> |
| 12 | +; CHECK-NEXT: [[TMP2:%.*]] = sitofp <4 x i32> [[TMP1]] to <4 x float> |
| 13 | +; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <8 x i32> [[A]], <8 x i32> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> |
| 14 | +; CHECK-NEXT: [[TMP4:%.*]] = uitofp <4 x i32> [[TMP5]] to <4 x float> |
| 15 | +; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x float> [[TMP2]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
14 | 16 | ; CHECK-NEXT: ret <8 x float> [[TMP3]]
|
15 | 17 | ;
|
16 | 18 | %a0 = extractelement <8 x i32> %a, i32 0
|
@@ -42,9 +44,11 @@ define <8 x float> @sitofp_uitofp(<8 x i32> %a) {
|
42 | 44 |
|
43 | 45 | define <8 x i32> @fptosi_fptoui(<8 x float> %a) {
|
44 | 46 | ; CHECK-LABEL: @fptosi_fptoui(
|
45 |
| -; CHECK-NEXT: [[TMP1:%.*]] = fptosi <8 x float> [[A:%.*]] to <8 x i32> |
46 |
| -; CHECK-NEXT: [[TMP2:%.*]] = fptoui <8 x float> [[A]] to <8 x i32> |
47 |
| -; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 47 | +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> |
| 48 | +; CHECK-NEXT: [[TMP2:%.*]] = fptosi <4 x float> [[TMP1]] to <4 x i32> |
| 49 | +; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> |
| 50 | +; CHECK-NEXT: [[TMP4:%.*]] = fptoui <4 x float> [[TMP5]] to <4 x i32> |
| 51 | +; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
48 | 52 | ; CHECK-NEXT: ret <8 x i32> [[TMP3]]
|
49 | 53 | ;
|
50 | 54 | %a0 = extractelement <8 x float> %a, i32 0
|
@@ -75,11 +79,39 @@ define <8 x i32> @fptosi_fptoui(<8 x float> %a) {
|
75 | 79 | }
|
76 | 80 |
|
77 | 81 | define <8 x float> @fneg_fabs(<8 x float> %a) {
|
78 |
| -; CHECK-LABEL: @fneg_fabs( |
79 |
| -; CHECK-NEXT: [[TMP1:%.*]] = fneg <8 x float> [[A:%.*]] |
80 |
| -; CHECK-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A]]) |
81 |
| -; CHECK-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
82 |
| -; CHECK-NEXT: ret <8 x float> [[DOTUNCASTED]] |
| 82 | +; SSE2-LABEL: @fneg_fabs( |
| 83 | +; SSE2-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> |
| 84 | +; SSE2-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> |
| 85 | +; SSE2-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]] |
| 86 | +; SSE2-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]]) |
| 87 | +; SSE2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 88 | +; SSE2-NEXT: ret <8 x float> [[DOTUNCASTED]] |
| 89 | +; |
| 90 | +; SLM-LABEL: @fneg_fabs( |
| 91 | +; SLM-NEXT: [[TMP1:%.*]] = shufflevector <8 x float> [[A:%.*]], <8 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> |
| 92 | +; SLM-NEXT: [[TMP2:%.*]] = shufflevector <8 x float> [[A]], <8 x float> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> |
| 93 | +; SLM-NEXT: [[TMP3:%.*]] = fneg <4 x float> [[TMP1]] |
| 94 | +; SLM-NEXT: [[TMP4:%.*]] = call <4 x float> @llvm.fabs.v4f32(<4 x float> [[TMP2]]) |
| 95 | +; SLM-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
| 96 | +; SLM-NEXT: ret <8 x float> [[DOTUNCASTED]] |
| 97 | +; |
| 98 | +; AVX-LABEL: @fneg_fabs( |
| 99 | +; AVX-NEXT: [[TMP1:%.*]] = fneg <8 x float> [[A:%.*]] |
| 100 | +; AVX-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A]]) |
| 101 | +; AVX-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 102 | +; AVX-NEXT: ret <8 x float> [[DOTUNCASTED]] |
| 103 | +; |
| 104 | +; AVX2-LABEL: @fneg_fabs( |
| 105 | +; AVX2-NEXT: [[TMP1:%.*]] = fneg <8 x float> [[A:%.*]] |
| 106 | +; AVX2-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A]]) |
| 107 | +; AVX2-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 108 | +; AVX2-NEXT: ret <8 x float> [[DOTUNCASTED]] |
| 109 | +; |
| 110 | +; AVX512-LABEL: @fneg_fabs( |
| 111 | +; AVX512-NEXT: [[TMP1:%.*]] = fneg <8 x float> [[A:%.*]] |
| 112 | +; AVX512-NEXT: [[TMP2:%.*]] = call <8 x float> @llvm.fabs.v8f32(<8 x float> [[A]]) |
| 113 | +; AVX512-NEXT: [[DOTUNCASTED:%.*]] = shufflevector <8 x float> [[TMP1]], <8 x float> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 114 | +; AVX512-NEXT: ret <8 x float> [[DOTUNCASTED]] |
83 | 115 | ;
|
84 | 116 | %a0 = extractelement <8 x float> %a, i32 0
|
85 | 117 | %a1 = extractelement <8 x float> %a, i32 1
|
@@ -126,9 +158,11 @@ define <8 x float> @fneg_fabs(<8 x float> %a) {
|
126 | 158 |
|
127 | 159 | define <8 x i32> @sext_zext(<8 x i16> %a) {
|
128 | 160 | ; CHECK-LABEL: @sext_zext(
|
129 |
| -; CHECK-NEXT: [[TMP1:%.*]] = sext <8 x i16> [[A:%.*]] to <8 x i32> |
130 |
| -; CHECK-NEXT: [[TMP2:%.*]] = zext <8 x i16> [[A]] to <8 x i32> |
131 |
| -; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP1]], <8 x i32> [[TMP2]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15> |
| 161 | +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <8 x i16> [[A:%.*]], <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3> |
| 162 | +; CHECK-NEXT: [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32> |
| 163 | +; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <8 x i16> [[A]], <8 x i16> poison, <4 x i32> <i32 4, i32 5, i32 6, i32 7> |
| 164 | +; CHECK-NEXT: [[TMP4:%.*]] = zext <4 x i16> [[TMP5]] to <4 x i32> |
| 165 | +; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> [[TMP4]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> |
132 | 166 | ; CHECK-NEXT: ret <8 x i32> [[TMP3]]
|
133 | 167 | ;
|
134 | 168 | %a0 = extractelement <8 x i16> %a, i32 0
|
|
0 commit comments