1
1
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2
2
; RUN: opt -S --passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s
3
3
4
- define void @h () {
5
- ; CHECK-LABEL: define void @h() {
4
+ define void @h (i16 %a , i16 %b , i16 %c , i16 %d , i16 %e , i16 %f , i16 %g , i16 %h , i16 %i , i16 %j , i16 %k , i16 %l , i16 %m , i16 %n , i16 %o ) {
5
+ ; CHECK-LABEL: define void @h(
6
+ ; CHECK-SAME: i16 [[A:%.*]], i16 [[B:%.*]], i16 [[C:%.*]], i16 [[D:%.*]], i16 [[E:%.*]], i16 [[F:%.*]], i16 [[G:%.*]], i16 [[H:%.*]], i16 [[I:%.*]], i16 [[J:%.*]], i16 [[K:%.*]], i16 [[L:%.*]], i16 [[M:%.*]], i16 [[N:%.*]], i16 [[O:%.*]]) {
6
7
; CHECK-NEXT: entry:
8
+ ; CHECK-NEXT: [[CONV9:%.*]] = zext i16 [[A]] to i32
7
9
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr i8, ptr null, i64 16
8
- ; CHECK-NEXT: store <8 x i16> zeroinitializer, ptr [[ARRAYIDX2]], align 2
10
+ ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i16> poison, i16 [[E]], i32 0
11
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i16> [[TMP0]], i16 [[I]], i32 1
12
+ ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i16> [[TMP1]], i16 [[M]], i32 2
13
+ ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i16> [[TMP2]], i16 [[B]], i32 3
14
+ ; CHECK-NEXT: [[TMP4:%.*]] = extractelement <4 x i16> [[TMP3]], i32 3
15
+ ; CHECK-NEXT: [[TMP5:%.*]] = zext i16 [[TMP4]] to i32
16
+ ; CHECK-NEXT: [[SUB:%.*]] = or i32 [[CONV9]], [[TMP5]]
17
+ ; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x i16> poison, i16 [[G]], i32 0
18
+ ; CHECK-NEXT: [[TMP7:%.*]] = insertelement <4 x i16> [[TMP6]], i16 [[K]], i32 1
19
+ ; CHECK-NEXT: [[TMP8:%.*]] = insertelement <4 x i16> [[TMP7]], i16 [[O]], i32 2
20
+ ; CHECK-NEXT: [[TMP9:%.*]] = insertelement <4 x i16> [[TMP8]], i16 [[C]], i32 3
21
+ ; CHECK-NEXT: [[SHR:%.*]] = ashr i32 0, 0
22
+ ; CHECK-NEXT: [[CONV19:%.*]] = sext i16 [[D]] to i32
23
+ ; CHECK-NEXT: [[SUB20:%.*]] = or i32 [[SHR]], [[CONV19]]
24
+ ; CHECK-NEXT: [[SUB39:%.*]] = or i32 [[SUB]], [[SUB20]]
25
+ ; CHECK-NEXT: [[CONV40:%.*]] = trunc i32 [[SUB39]] to i16
26
+ ; CHECK-NEXT: store i16 [[CONV40]], ptr [[ARRAYIDX2]], align 2
27
+ ; CHECK-NEXT: [[ARRAYIDX2_1:%.*]] = getelementptr i8, ptr null, i64 18
28
+ ; CHECK-NEXT: [[TMP10:%.*]] = extractelement <4 x i16> [[TMP3]], i32 0
29
+ ; CHECK-NEXT: [[TMP11:%.*]] = zext i16 [[TMP10]] to i32
30
+ ; CHECK-NEXT: [[ADD4_1:%.*]] = or i32 [[TMP11]], 0
31
+ ; CHECK-NEXT: [[CONV15_1:%.*]] = sext i16 [[F]] to i32
32
+ ; CHECK-NEXT: [[ARRAYIDX18_1:%.*]] = getelementptr i8, ptr null, i64 26
33
+ ; CHECK-NEXT: [[SHR29_1:%.*]] = ashr i32 0, 0
34
+ ; CHECK-NEXT: [[ADD30_1:%.*]] = or i32 [[SHR29_1]], [[CONV15_1]]
35
+ ; CHECK-NEXT: [[SUB44_1:%.*]] = or i32 [[ADD4_1]], [[ADD30_1]]
36
+ ; CHECK-NEXT: [[CONV45_1:%.*]] = trunc i32 [[SUB44_1]] to i16
37
+ ; CHECK-NEXT: store i16 [[CONV45_1]], ptr [[ARRAYIDX18_1]], align 2
38
+ ; CHECK-NEXT: [[CONV_213:%.*]] = zext i16 [[H]] to i32
39
+ ; CHECK-NEXT: [[ADD4_2:%.*]] = or i32 0, [[CONV_213]]
40
+ ; CHECK-NEXT: [[CONV15_2:%.*]] = sext i16 [[J]] to i32
41
+ ; CHECK-NEXT: [[ARRAYIDX18_2:%.*]] = getelementptr i8, ptr null, i64 28
42
+ ; CHECK-NEXT: [[SHR29_2:%.*]] = ashr i32 0, 0
43
+ ; CHECK-NEXT: [[ADD30_2:%.*]] = or i32 [[SHR29_2]], [[CONV15_2]]
44
+ ; CHECK-NEXT: [[SUB44_2:%.*]] = or i32 [[ADD4_2]], [[ADD30_2]]
45
+ ; CHECK-NEXT: [[CONV45_2:%.*]] = trunc i32 [[SUB44_2]] to i16
46
+ ; CHECK-NEXT: store i16 [[CONV45_2]], ptr [[ARRAYIDX18_2]], align 2
47
+ ; CHECK-NEXT: [[CONV_315:%.*]] = zext i16 [[L]] to i32
48
+ ; CHECK-NEXT: [[ADD4_3:%.*]] = or i32 0, [[CONV_315]]
49
+ ; CHECK-NEXT: [[CONV15_3:%.*]] = sext i16 [[N]] to i32
50
+ ; CHECK-NEXT: [[ARRAYIDX18_3:%.*]] = getelementptr i8, ptr null, i64 30
51
+ ; CHECK-NEXT: [[SHR29_3:%.*]] = ashr i32 0, 0
52
+ ; CHECK-NEXT: [[ADD30_3:%.*]] = or i32 [[SHR29_3]], [[CONV15_3]]
53
+ ; CHECK-NEXT: [[TMP12:%.*]] = insertelement <4 x i16> <i16 0, i16 0, i16 0, i16 poison>, i16 [[A]], i32 3
54
+ ; CHECK-NEXT: [[TMP13:%.*]] = or <4 x i16> [[TMP3]], [[TMP12]]
55
+ ; CHECK-NEXT: [[TMP14:%.*]] = or <4 x i16> zeroinitializer, [[TMP9]]
56
+ ; CHECK-NEXT: [[TMP15:%.*]] = or <4 x i16> [[TMP13]], [[TMP14]]
57
+ ; CHECK-NEXT: store <4 x i16> [[TMP15]], ptr [[ARRAYIDX2_1]], align 2
58
+ ; CHECK-NEXT: [[SUB44_3:%.*]] = or i32 [[ADD4_3]], [[ADD30_3]]
59
+ ; CHECK-NEXT: [[CONV45_3:%.*]] = trunc i32 [[SUB44_3]] to i16
60
+ ; CHECK-NEXT: store i16 [[CONV45_3]], ptr [[ARRAYIDX18_3]], align 2
9
61
; CHECK-NEXT: ret void
10
62
;
11
63
entry:
12
- %conv9 = zext i16 0 to i32
64
+ %conv9 = zext i16 %a to i32
13
65
%arrayidx2 = getelementptr i8 , ptr null , i64 16
14
- %conv310 = zext i16 0 to i32
66
+ %conv310 = zext i16 %b to i32
15
67
%add4 = or i32 %conv310 , %conv9
16
68
%sub = or i32 %conv9 , %conv310
17
- %conv15 = sext i16 0 to i32
69
+ %conv15 = sext i16 %c to i32
18
70
%shr = ashr i32 0 , 0
19
71
%arrayidx18 = getelementptr i8 , ptr null , i64 24
20
- %conv19 = sext i16 0 to i32
72
+ %conv19 = sext i16 %d to i32
21
73
%sub20 = or i32 %shr , %conv19
22
74
%shr29 = ashr i32 0 , 0
23
75
%add30 = or i32 %shr29 , %conv15
@@ -28,13 +80,13 @@ entry:
28
80
%conv45 = trunc i32 %sub44 to i16
29
81
store i16 %conv45 , ptr %arrayidx18 , align 2
30
82
%arrayidx2.1 = getelementptr i8 , ptr null , i64 18
31
- %conv3.112 = zext i16 0 to i32
83
+ %conv3.112 = zext i16 %e to i32
32
84
%add4.1 = or i32 %conv3.112 , 0
33
85
%sub.1 = or i32 0 , %conv3.112
34
- %conv15.1 = sext i16 0 to i32
86
+ %conv15.1 = sext i16 %f to i32
35
87
%shr.1 = ashr i32 0 , 0
36
88
%arrayidx18.1 = getelementptr i8 , ptr null , i64 26
37
- %conv19.1 = sext i16 0 to i32
89
+ %conv19.1 = sext i16 %g to i32
38
90
%sub20.1 = or i32 %shr.1 , %conv19.1
39
91
%shr29.1 = ashr i32 0 , 0
40
92
%add30.1 = or i32 %shr29.1 , %conv15.1
@@ -44,15 +96,15 @@ entry:
44
96
%sub44.1 = or i32 %add4.1 , %add30.1
45
97
%conv45.1 = trunc i32 %sub44.1 to i16
46
98
store i16 %conv45.1 , ptr %arrayidx18.1 , align 2
47
- %conv.213 = zext i16 0 to i32
99
+ %conv.213 = zext i16 %h to i32
48
100
%arrayidx2.2 = getelementptr i8 , ptr null , i64 20
49
- %conv3.214 = zext i16 0 to i32
101
+ %conv3.214 = zext i16 %i to i32
50
102
%add4.2 = or i32 0 , %conv.213
51
103
%sub.2 = or i32 0 , %conv3.214
52
- %conv15.2 = sext i16 0 to i32
104
+ %conv15.2 = sext i16 %j to i32
53
105
%shr.2 = ashr i32 0 , 0
54
106
%arrayidx18.2 = getelementptr i8 , ptr null , i64 28
55
- %conv19.2 = sext i16 0 to i32
107
+ %conv19.2 = sext i16 %k to i32
56
108
%sub20.2 = or i32 %shr.2 , %conv19.2
57
109
%shr29.2 = ashr i32 0 , 0
58
110
%add30.2 = or i32 %shr29.2 , %conv15.2
@@ -62,15 +114,15 @@ entry:
62
114
%sub44.2 = or i32 %add4.2 , %add30.2
63
115
%conv45.2 = trunc i32 %sub44.2 to i16
64
116
store i16 %conv45.2 , ptr %arrayidx18.2 , align 2
65
- %conv.315 = zext i16 0 to i32
117
+ %conv.315 = zext i16 %l to i32
66
118
%arrayidx2.3 = getelementptr i8 , ptr null , i64 22
67
- %conv3.316 = zext i16 0 to i32
119
+ %conv3.316 = zext i16 %m to i32
68
120
%add4.3 = or i32 0 , %conv.315
69
121
%sub.3 = or i32 0 , %conv3.316
70
- %conv15.3 = sext i16 0 to i32
122
+ %conv15.3 = sext i16 %n to i32
71
123
%shr.3 = ashr i32 0 , 0
72
124
%arrayidx18.3 = getelementptr i8 , ptr null , i64 30
73
- %conv19.3 = sext i16 0 to i32
125
+ %conv19.3 = sext i16 %o to i32
74
126
%sub20.3 = or i32 %shr.3 , %conv19.3
75
127
%shr29.3 = ashr i32 0 , 0
76
128
%add30.3 = or i32 %shr29.3 , %conv15.3
0 commit comments