Skip to content

Commit 641a786

Browse files
committed
[AArch64] Add codegen shuffle-select test. NFC
This splits the shuffle-select CostModel test into a seperate CodeGen test and removes the codegen from the CostModel version. An extra fp16 test is added too.
1 parent 0c68155 commit 641a786

File tree

2 files changed

+206
-54
lines changed

2 files changed

+206
-54
lines changed
Lines changed: 69 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,112 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt < %s -mtriple=aarch64--linux-gnu -passes="print<cost-model>" 2>&1 -disable-output | FileCheck %s --check-prefix=COST
2-
; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CODE
33

44
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
55

6-
; COST-LABEL: sel.v8i8
7-
; COST: Found an estimated cost of 28 for instruction: %tmp0 = shufflevector <8 x i8> %v0, <8 x i8> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
8-
; CODE-LABEL: sel.v8i8
9-
; CODE: tbl v0.8b, { v0.16b }, v1.8b
10-
define <8 x i8> @sel.v8i8(<8 x i8> %v0, <8 x i8> %v1) {
6+
define <8 x i8> @sel_v8i8(<8 x i8> %v0, <8 x i8> %v1) {
7+
; COST-LABEL: 'sel_v8i8'
8+
; COST-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %tmp0 = shufflevector <8 x i8> %v0, <8 x i8> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
9+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i8> %tmp0
10+
;
1111
%tmp0 = shufflevector <8 x i8> %v0, <8 x i8> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
1212
ret <8 x i8> %tmp0
1313
}
1414

15-
; COST-LABEL: sel.v16i8
16-
; COST: Found an estimated cost of 60 for instruction: %tmp0 = shufflevector <16 x i8> %v0, <16 x i8> %v1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
17-
; CODE-LABEL: sel.v16i8
18-
; CODE: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
19-
define <16 x i8> @sel.v16i8(<16 x i8> %v0, <16 x i8> %v1) {
15+
define <16 x i8> @sel_v16i8(<16 x i8> %v0, <16 x i8> %v1) {
16+
; COST-LABEL: 'sel_v16i8'
17+
; COST-NEXT: Cost Model: Found an estimated cost of 60 for instruction: %tmp0 = shufflevector <16 x i8> %v0, <16 x i8> %v1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
18+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %tmp0
19+
;
2020
%tmp0 = shufflevector <16 x i8> %v0, <16 x i8> %v1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
2121
ret <16 x i8> %tmp0
2222
}
2323

24-
; COST-LABEL: sel.v4i16
25-
; COST: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x i16> %v0, <4 x i16> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
26-
; CODE-LABEL: sel.v4i16
27-
; CODE: rev32 v0.4h, v0.4h
28-
; CODE: trn2 v0.4h, v0.4h, v1.4h
29-
define <4 x i16> @sel.v4i16(<4 x i16> %v0, <4 x i16> %v1) {
24+
define <4 x i16> @sel_v4i16(<4 x i16> %v0, <4 x i16> %v1) {
25+
; COST-LABEL: 'sel_v4i16'
26+
; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x i16> %v0, <4 x i16> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
27+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i16> %tmp0
28+
;
3029
%tmp0 = shufflevector <4 x i16> %v0, <4 x i16> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
3130
ret <4 x i16> %tmp0
3231
}
3332

34-
; COST-LABEL: sel.v8i16
35-
; COST: Found an estimated cost of 28 for instruction: %tmp0 = shufflevector <8 x i16> %v0, <8 x i16> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
36-
; CODE-LABEL: sel.v8i16
37-
; CODE: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
38-
define <8 x i16> @sel.v8i16(<8 x i16> %v0, <8 x i16> %v1) {
33+
define <8 x i16> @sel_v8i16(<8 x i16> %v0, <8 x i16> %v1) {
34+
; COST-LABEL: 'sel_v8i16'
35+
; COST-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %tmp0 = shufflevector <8 x i16> %v0, <8 x i16> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
36+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %tmp0
37+
;
3938
%tmp0 = shufflevector <8 x i16> %v0, <8 x i16> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
4039
ret <8 x i16> %tmp0
4140
}
4241

43-
; COST-LABEL: sel.v2i32
44-
; COST: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x i32> %v0, <2 x i32> %v1, <2 x i32> <i32 0, i32 3>
45-
; CODE-LABEL: sel.v2i32
46-
; CODE: mov v0.s[1], v1.s[1]
47-
define <2 x i32> @sel.v2i32(<2 x i32> %v0, <2 x i32> %v1) {
42+
define <2 x i32> @sel_v2i32(<2 x i32> %v0, <2 x i32> %v1) {
43+
; COST-LABEL: 'sel_v2i32'
44+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x i32> %v0, <2 x i32> %v1, <2 x i32> <i32 0, i32 3>
45+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i32> %tmp0
46+
;
4847
%tmp0 = shufflevector <2 x i32> %v0, <2 x i32> %v1, <2 x i32> <i32 0, i32 3>
4948
ret <2 x i32> %tmp0
5049
}
5150

52-
; COST-LABEL: sel.v4i32
53-
; COST: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
54-
; CODE-LABEL: sel.v4i32
55-
; CODE: rev64 v0.4s, v0.4s
56-
; CODE: trn2 v0.4s, v0.4s, v1.4s
57-
define <4 x i32> @sel.v4i32(<4 x i32> %v0, <4 x i32> %v1) {
51+
define <4 x i32> @sel_v4i32(<4 x i32> %v0, <4 x i32> %v1) {
52+
; COST-LABEL: 'sel_v4i32'
53+
; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
54+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %tmp0
55+
;
5856
%tmp0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
5957
ret <4 x i32> %tmp0
6058
}
6159

62-
; COST-LABEL: sel.v2i64
63-
; COST: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x i64> %v0, <2 x i64> %v1, <2 x i32> <i32 0, i32 3>
64-
; CODE-LABEL: sel.v2i64
65-
; CODE: mov v0.d[1], v1.d[1]
66-
define <2 x i64> @sel.v2i64(<2 x i64> %v0, <2 x i64> %v1) {
60+
define <2 x i64> @sel_v2i64(<2 x i64> %v0, <2 x i64> %v1) {
61+
; COST-LABEL: 'sel_v2i64'
62+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x i64> %v0, <2 x i64> %v1, <2 x i32> <i32 0, i32 3>
63+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %tmp0
64+
;
6765
%tmp0 = shufflevector <2 x i64> %v0, <2 x i64> %v1, <2 x i32> <i32 0, i32 3>
6866
ret <2 x i64> %tmp0
6967
}
7068

71-
; COST-LABEL: sel.v2f32
72-
; COST: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x float> %v0, <2 x float> %v1, <2 x i32> <i32 0, i32 3>
73-
; CODE-LABEL: sel.v2f32
74-
; CODE: mov v0.s[1], v1.s[1]
75-
define <2 x float> @sel.v2f32(<2 x float> %v0, <2 x float> %v1) {
69+
define <4 x half> @sel_v4f16(<4 x half> %v0, <4 x half> %v1) {
70+
; COST-LABEL: 'sel_v4f16'
71+
; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x half> %v0, <4 x half> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
72+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x half> %tmp0
73+
;
74+
%tmp0 = shufflevector <4 x half> %v0, <4 x half> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
75+
ret <4 x half> %tmp0
76+
}
77+
78+
define <8 x half> @sel_v8f16(<8 x half> %v0, <8 x half> %v1) {
79+
; COST-LABEL: 'sel_v8f16'
80+
; COST-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %tmp0 = shufflevector <8 x half> %v0, <8 x half> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
81+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x half> %tmp0
82+
;
83+
%tmp0 = shufflevector <8 x half> %v0, <8 x half> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
84+
ret <8 x half> %tmp0
85+
}
86+
87+
define <2 x float> @sel_v2f32(<2 x float> %v0, <2 x float> %v1) {
88+
; COST-LABEL: 'sel_v2f32'
89+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x float> %v0, <2 x float> %v1, <2 x i32> <i32 0, i32 3>
90+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x float> %tmp0
91+
;
7692
%tmp0 = shufflevector <2 x float> %v0, <2 x float> %v1, <2 x i32> <i32 0, i32 3>
7793
ret <2 x float> %tmp0
7894
}
7995

80-
; COST-LABEL: sel.v4f32
81-
; COST: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x float> %v0, <4 x float> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
82-
; CODE-LABEL: sel.v4f32
83-
; CODE: rev64 v0.4s, v0.4s
84-
; CODE: trn2 v0.4s, v0.4s, v1.4s
85-
define <4 x float> @sel.v4f32(<4 x float> %v0, <4 x float> %v1) {
96+
define <4 x float> @sel_v4f32(<4 x float> %v0, <4 x float> %v1) {
97+
; COST-LABEL: 'sel_v4f32'
98+
; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %tmp0 = shufflevector <4 x float> %v0, <4 x float> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
99+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x float> %tmp0
100+
;
86101
%tmp0 = shufflevector <4 x float> %v0, <4 x float> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
87102
ret <4 x float> %tmp0
88103
}
89104

90-
; COST-LABEL: sel.v2f64
91-
; COST: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x double> %v0, <2 x double> %v1, <2 x i32> <i32 0, i32 3>
92-
; CODE-LABEL: sel.v2f64
93-
; CODE: mov v0.d[1], v1.d[1]
94-
define <2 x double> @sel.v2f64(<2 x double> %v0, <2 x double> %v1) {
105+
define <2 x double> @sel_v2f64(<2 x double> %v0, <2 x double> %v1) {
106+
; COST-LABEL: 'sel_v2f64'
107+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = shufflevector <2 x double> %v0, <2 x double> %v1, <2 x i32> <i32 0, i32 3>
108+
; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <2 x double> %tmp0
109+
;
95110
%tmp0 = shufflevector <2 x double> %v0, <2 x double> %v1, <2 x i32> <i32 0, i32 3>
96111
ret <2 x double> %tmp0
97112
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s
3+
4+
define <8 x i8> @sel_v8i8(<8 x i8> %v0, <8 x i8> %v1) {
5+
; CHECK-LABEL: sel_v8i8:
6+
; CHECK: // %bb.0:
7+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
8+
; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
9+
; CHECK-NEXT: adrp x8, .LCPI0_0
10+
; CHECK-NEXT: mov v0.d[1], v1.d[0]
11+
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI0_0]
12+
; CHECK-NEXT: tbl v0.8b, { v0.16b }, v1.8b
13+
; CHECK-NEXT: ret
14+
%tmp0 = shufflevector <8 x i8> %v0, <8 x i8> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
15+
ret <8 x i8> %tmp0
16+
}
17+
18+
define <16 x i8> @sel_v16i8(<16 x i8> %v0, <16 x i8> %v1) {
19+
; CHECK-LABEL: sel_v16i8:
20+
; CHECK: // %bb.0:
21+
; CHECK-NEXT: adrp x8, .LCPI1_0
22+
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
23+
; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI1_0]
24+
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
25+
; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
26+
; CHECK-NEXT: ret
27+
%tmp0 = shufflevector <16 x i8> %v0, <16 x i8> %v1, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
28+
ret <16 x i8> %tmp0
29+
}
30+
31+
define <4 x i16> @sel_v4i16(<4 x i16> %v0, <4 x i16> %v1) {
32+
; CHECK-LABEL: sel_v4i16:
33+
; CHECK: // %bb.0:
34+
; CHECK-NEXT: rev32 v0.4h, v0.4h
35+
; CHECK-NEXT: trn2 v0.4h, v0.4h, v1.4h
36+
; CHECK-NEXT: ret
37+
%tmp0 = shufflevector <4 x i16> %v0, <4 x i16> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
38+
ret <4 x i16> %tmp0
39+
}
40+
41+
define <8 x i16> @sel_v8i16(<8 x i16> %v0, <8 x i16> %v1) {
42+
; CHECK-LABEL: sel_v8i16:
43+
; CHECK: // %bb.0:
44+
; CHECK-NEXT: adrp x8, .LCPI3_0
45+
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
46+
; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI3_0]
47+
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
48+
; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
49+
; CHECK-NEXT: ret
50+
%tmp0 = shufflevector <8 x i16> %v0, <8 x i16> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
51+
ret <8 x i16> %tmp0
52+
}
53+
54+
define <2 x i32> @sel_v2i32(<2 x i32> %v0, <2 x i32> %v1) {
55+
; CHECK-LABEL: sel_v2i32:
56+
; CHECK: // %bb.0:
57+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
58+
; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
59+
; CHECK-NEXT: mov v0.s[1], v1.s[1]
60+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
61+
; CHECK-NEXT: ret
62+
%tmp0 = shufflevector <2 x i32> %v0, <2 x i32> %v1, <2 x i32> <i32 0, i32 3>
63+
ret <2 x i32> %tmp0
64+
}
65+
66+
define <4 x i32> @sel_v4i32(<4 x i32> %v0, <4 x i32> %v1) {
67+
; CHECK-LABEL: sel_v4i32:
68+
; CHECK: // %bb.0:
69+
; CHECK-NEXT: rev64 v0.4s, v0.4s
70+
; CHECK-NEXT: trn2 v0.4s, v0.4s, v1.4s
71+
; CHECK-NEXT: ret
72+
%tmp0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
73+
ret <4 x i32> %tmp0
74+
}
75+
76+
define <2 x i64> @sel_v2i64(<2 x i64> %v0, <2 x i64> %v1) {
77+
; CHECK-LABEL: sel_v2i64:
78+
; CHECK: // %bb.0:
79+
; CHECK-NEXT: mov v0.d[1], v1.d[1]
80+
; CHECK-NEXT: ret
81+
%tmp0 = shufflevector <2 x i64> %v0, <2 x i64> %v1, <2 x i32> <i32 0, i32 3>
82+
ret <2 x i64> %tmp0
83+
}
84+
85+
define <4 x half> @sel_v4f16(<4 x half> %v0, <4 x half> %v1) {
86+
; CHECK-LABEL: sel_v4f16:
87+
; CHECK: // %bb.0:
88+
; CHECK-NEXT: rev32 v0.4h, v0.4h
89+
; CHECK-NEXT: trn2 v0.4h, v0.4h, v1.4h
90+
; CHECK-NEXT: ret
91+
%tmp0 = shufflevector <4 x half> %v0, <4 x half> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
92+
ret <4 x half> %tmp0
93+
}
94+
95+
define <8 x half> @sel_v8f16(<8 x half> %v0, <8 x half> %v1) {
96+
; CHECK-LABEL: sel_v8f16:
97+
; CHECK: // %bb.0:
98+
; CHECK-NEXT: adrp x8, .LCPI8_0
99+
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
100+
; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI8_0]
101+
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
102+
; CHECK-NEXT: tbl v0.16b, { v0.16b, v1.16b }, v2.16b
103+
; CHECK-NEXT: ret
104+
%tmp0 = shufflevector <8 x half> %v0, <8 x half> %v1, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
105+
ret <8 x half> %tmp0
106+
}
107+
108+
define <2 x float> @sel_v2f32(<2 x float> %v0, <2 x float> %v1) {
109+
; CHECK-LABEL: sel_v2f32:
110+
; CHECK: // %bb.0:
111+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
112+
; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
113+
; CHECK-NEXT: mov v0.s[1], v1.s[1]
114+
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $q0
115+
; CHECK-NEXT: ret
116+
%tmp0 = shufflevector <2 x float> %v0, <2 x float> %v1, <2 x i32> <i32 0, i32 3>
117+
ret <2 x float> %tmp0
118+
}
119+
120+
define <4 x float> @sel_v4f32(<4 x float> %v0, <4 x float> %v1) {
121+
; CHECK-LABEL: sel_v4f32:
122+
; CHECK: // %bb.0:
123+
; CHECK-NEXT: rev64 v0.4s, v0.4s
124+
; CHECK-NEXT: trn2 v0.4s, v0.4s, v1.4s
125+
; CHECK-NEXT: ret
126+
%tmp0 = shufflevector <4 x float> %v0, <4 x float> %v1, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
127+
ret <4 x float> %tmp0
128+
}
129+
130+
define <2 x double> @sel_v2f64(<2 x double> %v0, <2 x double> %v1) {
131+
; CHECK-LABEL: sel_v2f64:
132+
; CHECK: // %bb.0:
133+
; CHECK-NEXT: mov v0.d[1], v1.d[1]
134+
; CHECK-NEXT: ret
135+
%tmp0 = shufflevector <2 x double> %v0, <2 x double> %v1, <2 x i32> <i32 0, i32 3>
136+
ret <2 x double> %tmp0
137+
}

0 commit comments

Comments
 (0)