@@ -103,15 +103,21 @@ define <vscale x 4 x i32> @sabd_s_promoted_ops(<vscale x 4 x i16> %a, <vscale x
103
103
ret <vscale x 4 x i32 > %abs
104
104
}
105
105
106
- ; FIXME: Crashes legalization if enabled
107
- ;; define <vscale x 2 x i64> @sabd_d(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
108
- ;; %a.sext = sext <vscale x 2 x i64> %a to <vscale x 2 x i128>
109
- ;; %b.sext = sext <vscale x 2 x i64> %b to <vscale x 2 x i128>
110
- ;; %sub = sub <vscale x 2 x i128> %a.sext, %b.sext
111
- ;; %abs = call <vscale x 2 x i128> @llvm.abs.nxv2i128(<vscale x 2 x i128> %sub, i1 true)
112
- ;; %trunc = trunc <vscale x 2 x i128> %abs to <vscale x 2 x i64>
113
- ;; ret <vscale x 2 x i64> %trunc
114
- ;; }
106
+ define <vscale x 2 x i64 > @sabd_d (<vscale x 2 x i64 > %a , <vscale x 2 x i64 > %b ) {
107
+ ; CHECK-LABEL: sabd_d:
108
+ ; CHECK: # %bb.0:
109
+ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
110
+ ; CHECK-NEXT: vmin.vv v12, v8, v10
111
+ ; CHECK-NEXT: vmax.vv v8, v8, v10
112
+ ; CHECK-NEXT: vsub.vv v8, v8, v12
113
+ ; CHECK-NEXT: ret
114
+ %a.sext = sext <vscale x 2 x i64 > %a to <vscale x 2 x i128 >
115
+ %b.sext = sext <vscale x 2 x i64 > %b to <vscale x 2 x i128 >
116
+ %sub = sub <vscale x 2 x i128 > %a.sext , %b.sext
117
+ %abs = call <vscale x 2 x i128 > @llvm.abs.nxv2i128 (<vscale x 2 x i128 > %sub , i1 true )
118
+ %trunc = trunc <vscale x 2 x i128 > %abs to <vscale x 2 x i64 >
119
+ ret <vscale x 2 x i64 > %trunc
120
+ }
115
121
116
122
define <vscale x 2 x i64 > @sabd_d_promoted_ops (<vscale x 2 x i32 > %a , <vscale x 2 x i32 > %b ) {
117
123
; CHECK-LABEL: sabd_d_promoted_ops:
@@ -231,15 +237,21 @@ define <vscale x 4 x i32> @uabd_s_promoted_ops(<vscale x 4 x i16> %a, <vscale x
231
237
ret <vscale x 4 x i32 > %abs
232
238
}
233
239
234
- ; FIXME: Crashes legalization if enabled
235
- ;; define <vscale x 2 x i64> @uabd_d(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) {
236
- ;; %a.zext = zext <vscale x 2 x i64> %a to <vscale x 2 x i128>
237
- ;; %b.zext = zext <vscale x 2 x i64> %b to <vscale x 2 x i128>
238
- ;; %sub = sub <vscale x 2 x i128> %a.zext, %b.zext
239
- ;; %abs = call <vscale x 2 x i128> @llvm.abs.nxv2i128(<vscale x 2 x i128> %sub, i1 true)
240
- ;; %trunc = trunc <vscale x 2 x i128> %abs to <vscale x 2 x i64>
241
- ;; ret <vscale x 2 x i64> %trunc
242
- ;; }
240
+ define <vscale x 2 x i64 > @uabd_d (<vscale x 2 x i64 > %a , <vscale x 2 x i64 > %b ) {
241
+ ; CHECK-LABEL: uabd_d:
242
+ ; CHECK: # %bb.0:
243
+ ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
244
+ ; CHECK-NEXT: vminu.vv v12, v8, v10
245
+ ; CHECK-NEXT: vmaxu.vv v8, v8, v10
246
+ ; CHECK-NEXT: vsub.vv v8, v8, v12
247
+ ; CHECK-NEXT: ret
248
+ %a.zext = zext <vscale x 2 x i64 > %a to <vscale x 2 x i128 >
249
+ %b.zext = zext <vscale x 2 x i64 > %b to <vscale x 2 x i128 >
250
+ %sub = sub <vscale x 2 x i128 > %a.zext , %b.zext
251
+ %abs = call <vscale x 2 x i128 > @llvm.abs.nxv2i128 (<vscale x 2 x i128 > %sub , i1 true )
252
+ %trunc = trunc <vscale x 2 x i128 > %abs to <vscale x 2 x i64 >
253
+ ret <vscale x 2 x i64 > %trunc
254
+ }
243
255
244
256
define <vscale x 2 x i64 > @uabd_d_promoted_ops (<vscale x 2 x i32 > %a , <vscale x 2 x i32 > %b ) {
245
257
; CHECK-LABEL: uabd_d_promoted_ops:
0 commit comments