Skip to content

Commit 0d160b6

Browse files
committed
[LoongArch][NFC] Pre-commit tests for vector fptrunc from vxf64 to vxf32
1 parent 778d3c8 commit 0d160b6

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s --check-prefixes=CHECK
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefixes=CHECK
4+
5+
;; fptrunc
6+
define void @fptrunc_v4f64_to_v4f32(ptr %res, ptr %a0) nounwind {
7+
; CHECK-LABEL: fptrunc_v4f64_to_v4f32:
8+
; CHECK: # %bb.0: # %entry
9+
; CHECK-NEXT: xvld $xr0, $a1, 0
10+
; CHECK-NEXT: xvpickve.d $xr1, $xr0, 1
11+
; CHECK-NEXT: fcvt.s.d $fa1, $fa1
12+
; CHECK-NEXT: xvpickve.d $xr2, $xr0, 0
13+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
14+
; CHECK-NEXT: vextrins.w $vr2, $vr1, 16
15+
; CHECK-NEXT: xvpickve.d $xr1, $xr0, 2
16+
; CHECK-NEXT: fcvt.s.d $fa1, $fa1
17+
; CHECK-NEXT: vextrins.w $vr2, $vr1, 32
18+
; CHECK-NEXT: xvpickve.d $xr0, $xr0, 3
19+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
20+
; CHECK-NEXT: vextrins.w $vr2, $vr0, 48
21+
; CHECK-NEXT: vst $vr2, $a0, 0
22+
; CHECK-NEXT: ret
23+
entry:
24+
%v0 = load <4 x double>, ptr %a0
25+
%trunc = fptrunc <4 x double> %v0 to <4 x float>
26+
store <4 x float> %trunc, ptr %res
27+
ret void
28+
}
29+
30+
define void @fptrunc_v8f64_to_v8f32(ptr %res, ptr %a0) nounwind {
31+
; CHECK-LABEL: fptrunc_v8f64_to_v8f32:
32+
; CHECK: # %bb.0: # %entry
33+
; CHECK-NEXT: xvld $xr0, $a1, 32
34+
; CHECK-NEXT: xvld $xr1, $a1, 0
35+
; CHECK-NEXT: xvpickve.d $xr2, $xr0, 1
36+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
37+
; CHECK-NEXT: xvpickve.d $xr3, $xr0, 0
38+
; CHECK-NEXT: fcvt.s.d $fa3, $fa3
39+
; CHECK-NEXT: vextrins.w $vr3, $vr2, 16
40+
; CHECK-NEXT: xvpickve.d $xr2, $xr0, 2
41+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
42+
; CHECK-NEXT: vextrins.w $vr3, $vr2, 32
43+
; CHECK-NEXT: xvpickve.d $xr0, $xr0, 3
44+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
45+
; CHECK-NEXT: vextrins.w $vr3, $vr0, 48
46+
; CHECK-NEXT: xvpickve.d $xr0, $xr1, 1
47+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
48+
; CHECK-NEXT: xvpickve.d $xr2, $xr1, 0
49+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
50+
; CHECK-NEXT: vextrins.w $vr2, $vr0, 16
51+
; CHECK-NEXT: xvpickve.d $xr0, $xr1, 2
52+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
53+
; CHECK-NEXT: vextrins.w $vr2, $vr0, 32
54+
; CHECK-NEXT: xvpickve.d $xr0, $xr1, 3
55+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
56+
; CHECK-NEXT: vextrins.w $vr2, $vr0, 48
57+
; CHECK-NEXT: xvpermi.q $xr2, $xr3, 2
58+
; CHECK-NEXT: xvst $xr2, $a0, 0
59+
; CHECK-NEXT: ret
60+
entry:
61+
%v0 = load <8 x double>, ptr %a0
62+
%trunc = fptrunc <8 x double> %v0 to <8 x float>
63+
store <8 x float> %trunc, ptr %res
64+
ret void
65+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA32
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s --check-prefixes=CHECK,LA64
4+
5+
;; fptrunc
6+
define void @fptrunc_v1f64_to_v1f32(ptr %res, ptr %a0) nounwind {
7+
; CHECK-LABEL: fptrunc_v1f64_to_v1f32:
8+
; CHECK: # %bb.0: # %entry
9+
; CHECK-NEXT: fld.d $fa0, $a1, 0
10+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
11+
; CHECK-NEXT: fst.s $fa0, $a0, 0
12+
; CHECK-NEXT: ret
13+
entry:
14+
%v0 = load <1 x double>, ptr %a0
15+
%trunc = fptrunc <1 x double> %v0 to <1 x float>
16+
store <1 x float> %trunc, ptr %res
17+
ret void
18+
}
19+
20+
define void @fptrunc_v2f64_to_v2f32(ptr %res, ptr %a0) nounwind {
21+
; LA32-LABEL: fptrunc_v2f64_to_v2f32:
22+
; LA32: # %bb.0: # %entry
23+
; LA32-NEXT: vld $vr0, $a1, 0
24+
; LA32-NEXT: vreplvei.d $vr1, $vr0, 0
25+
; LA32-NEXT: fcvt.s.d $fa1, $fa1
26+
; LA32-NEXT: vreplvei.d $vr0, $vr0, 1
27+
; LA32-NEXT: fcvt.s.d $fa0, $fa0
28+
; LA32-NEXT: fst.s $fa0, $a0, 4
29+
; LA32-NEXT: fst.s $fa1, $a0, 0
30+
; LA32-NEXT: ret
31+
;
32+
; LA64-LABEL: fptrunc_v2f64_to_v2f32:
33+
; LA64: # %bb.0: # %entry
34+
; LA64-NEXT: vld $vr0, $a1, 0
35+
; LA64-NEXT: vreplvei.d $vr1, $vr0, 1
36+
; LA64-NEXT: fcvt.s.d $fa1, $fa1
37+
; LA64-NEXT: vreplvei.d $vr0, $vr0, 0
38+
; LA64-NEXT: fcvt.s.d $fa0, $fa0
39+
; LA64-NEXT: vextrins.w $vr0, $vr1, 16
40+
; LA64-NEXT: vstelm.d $vr0, $a0, 0, 0
41+
; LA64-NEXT: ret
42+
entry:
43+
%v0 = load <2 x double>, ptr %a0
44+
%trunc = fptrunc <2 x double> %v0 to <2 x float>
45+
store <2 x float> %trunc, ptr %res
46+
ret void
47+
}
48+
49+
define void @fptrunc_v4f64_to_v4f32(ptr %res, ptr %a0) nounwind {
50+
; CHECK-LABEL: fptrunc_v4f64_to_v4f32:
51+
; CHECK: # %bb.0: # %entry
52+
; CHECK-NEXT: vld $vr0, $a1, 0
53+
; CHECK-NEXT: vld $vr1, $a1, 16
54+
; CHECK-NEXT: vreplvei.d $vr2, $vr0, 1
55+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
56+
; CHECK-NEXT: vreplvei.d $vr0, $vr0, 0
57+
; CHECK-NEXT: fcvt.s.d $fa0, $fa0
58+
; CHECK-NEXT: vextrins.w $vr0, $vr2, 16
59+
; CHECK-NEXT: vreplvei.d $vr2, $vr1, 0
60+
; CHECK-NEXT: fcvt.s.d $fa2, $fa2
61+
; CHECK-NEXT: vextrins.w $vr0, $vr2, 32
62+
; CHECK-NEXT: vreplvei.d $vr1, $vr1, 1
63+
; CHECK-NEXT: fcvt.s.d $fa1, $fa1
64+
; CHECK-NEXT: vextrins.w $vr0, $vr1, 48
65+
; CHECK-NEXT: vst $vr0, $a0, 0
66+
; CHECK-NEXT: ret
67+
entry:
68+
%v0 = load <4 x double>, ptr %a0
69+
%trunc = fptrunc <4 x double> %v0 to <4 x float>
70+
store <4 x float> %trunc, ptr %res
71+
ret void
72+
}

0 commit comments

Comments
 (0)