@@ -6,9 +6,8 @@ declare void @usevec(<2 x i32>)
6
6
7
7
define <2 x double > @fpext_fpext (<2 x half > %x , half %y , i32 %index ) {
8
8
; CHECK-LABEL: @fpext_fpext(
9
- ; CHECK-NEXT: [[V:%.*]] = fpext <2 x half> [[X:%.*]] to <2 x double>
10
- ; CHECK-NEXT: [[S:%.*]] = fpext half [[Y:%.*]] to double
11
- ; CHECK-NEXT: [[I:%.*]] = insertelement <2 x double> [[V]], double [[S]], i32 [[INDEX:%.*]]
9
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x half> [[X:%.*]], half [[Y:%.*]], i32 [[INDEX:%.*]]
10
+ ; CHECK-NEXT: [[I:%.*]] = fpext <2 x half> [[TMP1]] to <2 x double>
12
11
; CHECK-NEXT: ret <2 x double> [[I]]
13
12
;
14
13
%v = fpext <2 x half > %x to <2 x double >
@@ -19,9 +18,8 @@ define <2 x double> @fpext_fpext(<2 x half> %x, half %y, i32 %index) {
19
18
20
19
define <2 x i32 > @sext_sext (<2 x i8 > %x , i8 %y , i32 %index ) {
21
20
; CHECK-LABEL: @sext_sext(
22
- ; CHECK-NEXT: [[V:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i32>
23
- ; CHECK-NEXT: [[S:%.*]] = sext i8 [[Y:%.*]] to i32
24
- ; CHECK-NEXT: [[I:%.*]] = insertelement <2 x i32> [[V]], i32 [[S]], i32 [[INDEX:%.*]]
21
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i8> [[X:%.*]], i8 [[Y:%.*]], i32 [[INDEX:%.*]]
22
+ ; CHECK-NEXT: [[I:%.*]] = sext <2 x i8> [[TMP1]] to <2 x i32>
25
23
; CHECK-NEXT: ret <2 x i32> [[I]]
26
24
;
27
25
%v = sext <2 x i8 > %x to <2 x i32 >
@@ -32,9 +30,8 @@ define <2 x i32> @sext_sext(<2 x i8> %x, i8 %y, i32 %index) {
32
30
33
31
define <2 x i12 > @zext_zext (<2 x i8 > %x , i8 %y , i32 %index ) {
34
32
; CHECK-LABEL: @zext_zext(
35
- ; CHECK-NEXT: [[V:%.*]] = zext <2 x i8> [[X:%.*]] to <2 x i12>
36
- ; CHECK-NEXT: [[S:%.*]] = zext i8 [[Y:%.*]] to i12
37
- ; CHECK-NEXT: [[I:%.*]] = insertelement <2 x i12> [[V]], i12 [[S]], i32 [[INDEX:%.*]]
33
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i8> [[X:%.*]], i8 [[Y:%.*]], i32 [[INDEX:%.*]]
34
+ ; CHECK-NEXT: [[I:%.*]] = zext <2 x i8> [[TMP1]] to <2 x i12>
38
35
; CHECK-NEXT: ret <2 x i12> [[I]]
39
36
;
40
37
%v = zext <2 x i8 > %x to <2 x i12 >
@@ -43,6 +40,8 @@ define <2 x i12> @zext_zext(<2 x i8> %x, i8 %y, i32 %index) {
43
40
ret <2 x i12 > %i
44
41
}
45
42
43
+ ; negative test - need same source type
44
+
46
45
define <2 x double > @fpext_fpext_types (<2 x half > %x , float %y , i32 %index ) {
47
46
; CHECK-LABEL: @fpext_fpext_types(
48
47
; CHECK-NEXT: [[V:%.*]] = fpext <2 x half> [[X:%.*]] to <2 x double>
@@ -56,6 +55,8 @@ define <2 x double> @fpext_fpext_types(<2 x half> %x, float %y, i32 %index) {
56
55
ret <2 x double > %i
57
56
}
58
57
58
+ ; negative test - need same source type
59
+
59
60
define <2 x i32 > @sext_sext_types (<2 x i16 > %x , i8 %y , i32 %index ) {
60
61
; CHECK-LABEL: @sext_sext_types(
61
62
; CHECK-NEXT: [[V:%.*]] = sext <2 x i16> [[X:%.*]] to <2 x i32>
@@ -69,6 +70,8 @@ define <2 x i32> @sext_sext_types(<2 x i16> %x, i8 %y, i32 %index) {
69
70
ret <2 x i32 > %i
70
71
}
71
72
73
+ ; negative test - need same extend opcode
74
+
72
75
define <2 x i12 > @sext_zext (<2 x i8 > %x , i8 %y , i32 %index ) {
73
76
; CHECK-LABEL: @sext_zext(
74
77
; CHECK-NEXT: [[V:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i12>
@@ -82,6 +85,8 @@ define <2 x i12> @sext_zext(<2 x i8> %x, i8 %y, i32 %index) {
82
85
ret <2 x i12 > %i
83
86
}
84
87
88
+ ; negative test - don't trade scalar extend for vector extend
89
+
85
90
define <2 x i32 > @sext_sext_use1 (<2 x i8 > %x , i8 %y , i32 %index ) {
86
91
; CHECK-LABEL: @sext_sext_use1(
87
92
; CHECK-NEXT: [[V:%.*]] = sext <2 x i8> [[X:%.*]] to <2 x i32>
@@ -99,10 +104,10 @@ define <2 x i32> @sext_sext_use1(<2 x i8> %x, i8 %y, i32 %index) {
99
104
100
105
define <2 x i32 > @zext_zext_use2 (<2 x i8 > %x , i8 %y , i32 %index ) {
101
106
; CHECK-LABEL: @zext_zext_use2(
102
- ; CHECK-NEXT: [[V:%.*]] = zext <2 x i8> [[X:%.*]] to <2 x i32>
103
107
; CHECK-NEXT: [[S:%.*]] = zext i8 [[Y:%.*]] to i32
104
108
; CHECK-NEXT: call void @use(i32 [[S]])
105
- ; CHECK-NEXT: [[I:%.*]] = insertelement <2 x i32> [[V]], i32 [[S]], i32 [[INDEX:%.*]]
109
+ ; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i8> [[X:%.*]], i8 [[Y]], i32 [[INDEX:%.*]]
110
+ ; CHECK-NEXT: [[I:%.*]] = zext <2 x i8> [[TMP1]] to <2 x i32>
106
111
; CHECK-NEXT: ret <2 x i32> [[I]]
107
112
;
108
113
%v = zext <2 x i8 > %x to <2 x i32 >
@@ -112,6 +117,8 @@ define <2 x i32> @zext_zext_use2(<2 x i8> %x, i8 %y, i32 %index) {
112
117
ret <2 x i32 > %i
113
118
}
114
119
120
+ ; negative test - don't create an extra extend
121
+
115
122
define <2 x i32 > @zext_zext_use3 (<2 x i8 > %x , i8 %y , i32 %index ) {
116
123
; CHECK-LABEL: @zext_zext_use3(
117
124
; CHECK-NEXT: [[V:%.*]] = zext <2 x i8> [[X:%.*]] to <2 x i32>
0 commit comments