@@ -104,6 +104,57 @@ define <8 x i8> @abs(<8 x i8> %a) {
104
104
; CHECK-LABEL: @abs(
105
105
; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i8> [[A:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
106
106
; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
107
+ ; CHECK-NEXT: [[ABT:%.*]] = call <4 x i8> @llvm.abs.v4i8(<4 x i8> [[AT]], i1 false)
108
+ ; CHECK-NEXT: [[ABB:%.*]] = call <4 x i8> @llvm.abs.v4i8(<4 x i8> [[AB]], i1 false)
109
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i8> [[ABT]], <4 x i8> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
110
+ ; CHECK-NEXT: ret <8 x i8> [[R]]
111
+ ;
112
+ %ab = shufflevector <8 x i8 > %a , <8 x i8 > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
113
+ %at = shufflevector <8 x i8 > %a , <8 x i8 > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
114
+ %abt = call <4 x i8 > @llvm.abs.v4i8 (<4 x i8 > %at , i1 false )
115
+ %abb = call <4 x i8 > @llvm.abs.v4i8 (<4 x i8 > %ab , i1 false )
116
+ %r = shufflevector <4 x i8 > %abt , <4 x i8 > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
117
+ ret <8 x i8 > %r
118
+ }
119
+
120
+ define <8 x half > @powi (<8 x half > %a ) {
121
+ ; CHECK-LABEL: @powi(
122
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
123
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x half> [[A]], <8 x half> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
124
+ ; CHECK-NEXT: [[ABT:%.*]] = call <4 x half> @llvm.powi.v4f16.i32(<4 x half> [[AT]], i32 10)
125
+ ; CHECK-NEXT: [[ABB:%.*]] = call <4 x half> @llvm.powi.v4f16.i32(<4 x half> [[AB]], i32 10)
126
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x half> [[ABT]], <4 x half> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
127
+ ; CHECK-NEXT: ret <8 x half> [[R]]
128
+ ;
129
+ %ab = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
130
+ %at = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
131
+ %abt = call <4 x half > @llvm.powi.v4f16.i32 (<4 x half > %at , i32 10 )
132
+ %abb = call <4 x half > @llvm.powi.v4f16.i32 (<4 x half > %ab , i32 10 )
133
+ %r = shufflevector <4 x half > %abt , <4 x half > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
134
+ ret <8 x half > %r
135
+ }
136
+
137
+ define <8 x i32 > @lrint (<8 x half > %a ) {
138
+ ; CHECK-LABEL: @lrint(
139
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x half> [[A:%.*]], <8 x half> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
140
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x half> [[A]], <8 x half> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
141
+ ; CHECK-NEXT: [[ABT:%.*]] = call <4 x i32> @llvm.lrint.v4i32.v4f16(<4 x half> [[AT]])
142
+ ; CHECK-NEXT: [[ABB:%.*]] = call <4 x i32> @llvm.lrint.v4i32.v4f16(<4 x half> [[AB]])
143
+ ; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i32> [[ABT]], <4 x i32> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
144
+ ; CHECK-NEXT: ret <8 x i32> [[R]]
145
+ ;
146
+ %ab = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 3 , i32 2 , i32 1 , i32 0 >
147
+ %at = shufflevector <8 x half > %a , <8 x half > poison, <4 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 >
148
+ %abt = call <4 x i32 > @llvm.lrint.v4i32.v4f16 (<4 x half > %at )
149
+ %abb = call <4 x i32 > @llvm.lrint.v4i32.v4f16 (<4 x half > %ab )
150
+ %r = shufflevector <4 x i32 > %abt , <4 x i32 > %abb , <8 x i32 > <i32 7 , i32 6 , i32 5 , i32 4 , i32 3 , i32 2 , i32 1 , i32 0 >
151
+ ret <8 x i32 > %r
152
+ }
153
+
154
+ define <8 x i8 > @abs_different (<8 x i8 > %a ) {
155
+ ; CHECK-LABEL: @abs_different(
156
+ ; CHECK-NEXT: [[AB:%.*]] = shufflevector <8 x i8> [[A:%.*]], <8 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
157
+ ; CHECK-NEXT: [[AT:%.*]] = shufflevector <8 x i8> [[A]], <8 x i8> poison, <4 x i32> <i32 7, i32 6, i32 5, i32 4>
107
158
; CHECK-NEXT: [[ABT:%.*]] = call <4 x i8> @llvm.abs.v4i8(<4 x i8> [[AT]], i1 true)
108
159
; CHECK-NEXT: [[ABB:%.*]] = call <4 x i8> @llvm.abs.v4i8(<4 x i8> [[AB]], i1 false)
109
160
; CHECK-NEXT: [[R:%.*]] = shufflevector <4 x i8> [[ABT]], <4 x i8> [[ABB]], <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
0 commit comments