|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
|
2 |
| -; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=sse2 | FileCheck %s --check-prefixes=CHECK,SSE |
3 |
| -; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=avx2 | FileCheck %s --check-prefixes=CHECK,AVX |
| 2 | +; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=sse2 | FileCheck %s |
| 3 | +; RUN: opt < %s -passes=vector-combine -S -mtriple=x86_64-- -mattr=avx2 | FileCheck %s |
4 | 4 |
|
5 | 5 | ; Fold "shuffle (binop (shuffle, shuffle)), undef" --> "binop (shuffle), (shuffle)"
|
6 | 6 |
|
@@ -83,25 +83,15 @@ define <4 x double> @fadd_v4f64_multiuse_op(<4 x double> %a, <4 x double> %b) {
|
83 | 83 | ret <4 x double> %post
|
84 | 84 | }
|
85 | 85 |
|
86 |
| -; Negative test - multiple use of inner shuffle (only fold if the moved shuffle is cheaper). |
87 | 86 | define <4 x double> @fadd_v4f64_multiuse_shuffle(<4 x double> %a, <4 x double> %b) {
|
88 |
| -; SSE-LABEL: define <4 x double> @fadd_v4f64_multiuse_shuffle( |
89 |
| -; SSE-SAME: <4 x double> [[A:%.*]], <4 x double> [[B:%.*]]) #[[ATTR0]] { |
90 |
| -; SSE-NEXT: [[A1:%.*]] = shufflevector <4 x double> [[A]], <4 x double> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> |
91 |
| -; SSE-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[A]], <4 x double> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1> |
92 |
| -; SSE-NEXT: [[TMP2:%.*]] = shufflevector <4 x double> [[B]], <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1> |
93 |
| -; SSE-NEXT: [[POST:%.*]] = fadd <4 x double> [[TMP1]], [[TMP2]] |
94 |
| -; SSE-NEXT: call void @use_v4f64(<4 x double> [[A1]]) |
95 |
| -; SSE-NEXT: ret <4 x double> [[POST]] |
96 |
| -; |
97 |
| -; AVX-LABEL: define <4 x double> @fadd_v4f64_multiuse_shuffle( |
98 |
| -; AVX-SAME: <4 x double> [[A:%.*]], <4 x double> [[B:%.*]]) #[[ATTR0]] { |
99 |
| -; AVX-NEXT: [[A1:%.*]] = shufflevector <4 x double> [[A]], <4 x double> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> |
100 |
| -; AVX-NEXT: [[B1:%.*]] = shufflevector <4 x double> [[B]], <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0> |
101 |
| -; AVX-NEXT: [[OP:%.*]] = fadd <4 x double> [[A1]], [[B1]] |
102 |
| -; AVX-NEXT: [[POST:%.*]] = shufflevector <4 x double> [[OP]], <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 3, i32 2> |
103 |
| -; AVX-NEXT: call void @use_v4f64(<4 x double> [[A1]]) |
104 |
| -; AVX-NEXT: ret <4 x double> [[POST]] |
| 87 | +; CHECK-LABEL: define <4 x double> @fadd_v4f64_multiuse_shuffle( |
| 88 | +; CHECK-SAME: <4 x double> [[A:%.*]], <4 x double> [[B:%.*]]) #[[ATTR0]] { |
| 89 | +; CHECK-NEXT: [[A1:%.*]] = shufflevector <4 x double> [[A]], <4 x double> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0> |
| 90 | +; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x double> [[A]], <4 x double> poison, <4 x i32> <i32 2, i32 3, i32 0, i32 1> |
| 91 | +; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x double> [[B]], <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1> |
| 92 | +; CHECK-NEXT: [[POST:%.*]] = fadd <4 x double> [[TMP1]], [[TMP2]] |
| 93 | +; CHECK-NEXT: call void @use_v4f64(<4 x double> [[A1]]) |
| 94 | +; CHECK-NEXT: ret <4 x double> [[POST]] |
105 | 95 | ;
|
106 | 96 | %a1 = shufflevector <4 x double> %a, <4 x double> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
|
107 | 97 | %b1 = shufflevector <4 x double> %b, <4 x double> poison, <4 x i32> <i32 1, i32 0, i32 1, i32 0>
|
|
0 commit comments