Files
wasmtime/cranelift/filetests/filetests/isa/aarch64/dynamic-simd-narrow.clif
Trevor Elliott 7ad2fe32c9 aarch64: Avoid a copy in the extract_vector lowering (#6252)
* Avoid a move in the aarch64 lowering of extract_vector

* Update tests
2023-04-20 18:24:12 +00:00

409 lines
7.0 KiB
Plaintext

test compile precise-output
target aarch64
function %snarrow_i16x4(i16) -> i8x8 {
gv0 = dyn_scale_target_const.i16x4
gv1 = dyn_scale_target_const.i8x8
dt0 = i16x4*gv0
dt1 = i8x8*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = snarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.4h, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; sqxtn v0.8b, v2.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.4h, w0
; mov v2.d[1], v2.d[0]
; sqxtn v0.8b, v2.8h
; ret
function %snarrow_i16x8(i16) -> i8x16 {
gv0 = dyn_scale_target_const.i16x8
gv1 = dyn_scale_target_const.i8x16
dt0 = i16x8*gv0
dt1 = i8x16*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = snarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.8h, w0
; sqxtn v0.8b, v4.8h
; sqxtn2 v0.16b, v0.16b, v4.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.8h, w0
; sqxtn v0.8b, v4.8h
; sqxtn2 v0.16b, v4.8h
; ret
function %snarrow_i32x2(i32) -> i16x4 {
gv0 = dyn_scale_target_const.i32x2
gv1 = dyn_scale_target_const.i16x4
dt0 = i32x2*gv0
dt1 = i16x4*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = snarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.2s, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; sqxtn v0.4h, v2.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.2s, w0
; mov v2.d[1], v2.d[0]
; sqxtn v0.4h, v2.4s
; ret
function %snarrow_i32x4(i32) -> i16x8 {
gv0 = dyn_scale_target_const.i32x4
gv1 = dyn_scale_target_const.i16x8
dt0 = i32x4*gv0
dt1 = i16x8*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = snarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.4s, w0
; sqxtn v0.4h, v4.4s
; sqxtn2 v0.8h, v0.8h, v4.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.4s, w0
; sqxtn v0.4h, v4.4s
; sqxtn2 v0.8h, v4.4s
; ret
function %snarrow_i64x2(i64) -> i32x4 {
gv0 = dyn_scale_target_const.i64x2
gv1 = dyn_scale_target_const.i32x4
dt0 = i64x2*gv0
dt1 = i32x4*gv0
block0(v0: i64):
v1 = splat.dt0 v0
v2 = snarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.2d, x0
; sqxtn v0.2s, v4.2d
; sqxtn2 v0.4s, v0.4s, v4.2d
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.2d, x0
; sqxtn v0.2s, v4.2d
; sqxtn2 v0.4s, v4.2d
; ret
function %unarrow_i16x4(i16) -> i8x8 {
gv0 = dyn_scale_target_const.i16x4
gv1 = dyn_scale_target_const.i8x8
dt0 = i16x4*gv0
dt1 = i8x8*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = unarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.4h, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; sqxtun v0.8b, v2.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.4h, w0
; mov v2.d[1], v2.d[0]
; sqxtun v0.8b, v2.8h
; ret
function %unarrow_i16x8(i16) -> i8x16 {
gv0 = dyn_scale_target_const.i16x8
gv1 = dyn_scale_target_const.i8x16
dt0 = i16x8*gv0
dt1 = i8x16*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = unarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.8h, w0
; sqxtun v0.8b, v4.8h
; sqxtun2 v0.16b, v0.16b, v4.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.8h, w0
; sqxtun v0.8b, v4.8h
; sqxtun2 v0.16b, v4.8h
; ret
function %unarrow_i32x2(i32) -> i16x4 {
gv0 = dyn_scale_target_const.i32x2
gv1 = dyn_scale_target_const.i16x4
dt0 = i32x2*gv0
dt1 = i16x4*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = unarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.2s, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; sqxtun v0.4h, v2.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.2s, w0
; mov v2.d[1], v2.d[0]
; sqxtun v0.4h, v2.4s
; ret
function %unarrow_i32x4(i32) -> i16x8 {
gv0 = dyn_scale_target_const.i32x4
gv1 = dyn_scale_target_const.i16x8
dt0 = i32x4*gv0
dt1 = i16x8*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = unarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.4s, w0
; sqxtun v0.4h, v4.4s
; sqxtun2 v0.8h, v0.8h, v4.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.4s, w0
; sqxtun v0.4h, v4.4s
; sqxtun2 v0.8h, v4.4s
; ret
function %unarrow_i64x2(i64) -> i32x4 {
gv0 = dyn_scale_target_const.i64x2
gv1 = dyn_scale_target_const.i32x4
dt0 = i64x2*gv0
dt1 = i32x4*gv0
block0(v0: i64):
v1 = splat.dt0 v0
v2 = unarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.2d, x0
; sqxtun v0.2s, v4.2d
; sqxtun2 v0.4s, v0.4s, v4.2d
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.2d, x0
; sqxtun v0.2s, v4.2d
; sqxtun2 v0.4s, v4.2d
; ret
function %uunarrow_i16x4(i16) -> i8x8 {
gv0 = dyn_scale_target_const.i16x4
gv1 = dyn_scale_target_const.i8x8
dt0 = i16x4*gv0
dt1 = i8x8*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = uunarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.4h, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; uqxtn v0.8b, v2.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.4h, w0
; mov v2.d[1], v2.d[0]
; uqxtn v0.8b, v2.8h
; ret
function %uunarrow_i16x8(i16) -> i8x16 {
gv0 = dyn_scale_target_const.i16x8
gv1 = dyn_scale_target_const.i8x16
dt0 = i16x8*gv0
dt1 = i8x16*gv0
block0(v0: i16):
v1 = splat.dt0 v0
v2 = uunarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.8h, w0
; uqxtn v0.8b, v4.8h
; uqxtn2 v0.16b, v0.16b, v4.8h
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.8h, w0
; uqxtn v0.8b, v4.8h
; uqxtn2 v0.16b, v4.8h
; ret
function %uunarrow_i32x2(i32) -> i16x4 {
gv0 = dyn_scale_target_const.i32x2
gv1 = dyn_scale_target_const.i16x4
dt0 = i32x2*gv0
dt1 = i16x4*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = uunarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v2.2s, w0
; mov v2.d[1], v2.d[1], v2.d[0]
; uqxtn v0.4h, v2.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v2.2s, w0
; mov v2.d[1], v2.d[0]
; uqxtn v0.4h, v2.4s
; ret
function %uunarrow_i32x4(i32) -> i16x8 {
gv0 = dyn_scale_target_const.i32x4
gv1 = dyn_scale_target_const.i16x8
dt0 = i32x4*gv0
dt1 = i16x8*gv0
block0(v0: i32):
v1 = splat.dt0 v0
v2 = uunarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.4s, w0
; uqxtn v0.4h, v4.4s
; uqxtn2 v0.8h, v0.8h, v4.4s
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.4s, w0
; uqxtn v0.4h, v4.4s
; uqxtn2 v0.8h, v4.4s
; ret
function %uunarrow_i64x2(i64) -> i32x4 {
gv0 = dyn_scale_target_const.i64x2
gv1 = dyn_scale_target_const.i32x4
dt0 = i64x2*gv0
dt1 = i32x4*gv0
block0(v0: i64):
v1 = splat.dt0 v0
v2 = uunarrow.dt0 v1, v1
v3 = extract_vector v2, 0
return v3
}
; VCode:
; block0:
; dup v4.2d, x0
; uqxtn v0.2s, v4.2d
; uqxtn2 v0.4s, v0.4s, v4.2d
; ret
;
; Disassembled:
; block0: ; offset 0x0
; dup v4.2d, x0
; uqxtn v0.2s, v4.2d
; uqxtn2 v0.4s, v4.2d
; ret