Skip to content

Commit 569fcac

Browse files
committed
[LoongArch] Pre-commit tests for optimizing insert extracted fp elements
1 parent 1b2843b commit 569fcac

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3+
4+
define <8 x float> @insert_extract_v8f32(<8 x float> %a) nounwind {
5+
; CHECK-LABEL: insert_extract_v8f32:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7
8+
; CHECK-NEXT: movgr2fr.w $fa1, $a0
9+
; CHECK-NEXT: movfr2gr.s $a0, $fa1
10+
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1
11+
; CHECK-NEXT: ret
12+
entry:
13+
%b = extractelement <8 x float> %a, i32 7
14+
%c = insertelement <8 x float> %a, float %b, i32 1
15+
ret <8 x float> %c
16+
}
17+
18+
define <4 x double> @insert_extract_v4f64(<4 x double> %a) nounwind {
19+
; CHECK-LABEL: insert_extract_v4f64:
20+
; CHECK: # %bb.0: # %entry
21+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
22+
; CHECK-NEXT: movgr2fr.d $fa1, $a0
23+
; CHECK-NEXT: movfr2gr.d $a0, $fa1
24+
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
25+
; CHECK-NEXT: ret
26+
entry:
27+
%b = extractelement <4 x double> %a, i32 3
28+
%c = insertelement <4 x double> %a, double %b, i32 1
29+
ret <4 x double> %c
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
3+
4+
define <4 x float> @insert_extract_v4f32(<4 x float> %a) nounwind {
5+
; CHECK-LABEL: insert_extract_v4f32:
6+
; CHECK: # %bb.0: # %entry
7+
; CHECK-NEXT: vreplvei.w $vr1, $vr0, 3
8+
; CHECK-NEXT: movfr2gr.s $a0, $fa1
9+
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 0
10+
; CHECK-NEXT: ret
11+
entry:
12+
%b = extractelement <4 x float> %a, i32 3
13+
%c = insertelement <4 x float> %a, float %b, i32 0
14+
ret <4 x float> %c
15+
}
16+
17+
define <2 x double> @insert_extract_v2f64(<2 x double> %a) nounwind {
18+
; CHECK-LABEL: insert_extract_v2f64:
19+
; CHECK: # %bb.0: # %entry
20+
; CHECK-NEXT: vreplvei.d $vr1, $vr0, 1
21+
; CHECK-NEXT: movfr2gr.d $a0, $fa1
22+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
23+
; CHECK-NEXT: ret
24+
entry:
25+
%b = extractelement <2 x double> %a, i32 1
26+
%c = insertelement <2 x double> %a, double %b, i32 0
27+
ret <2 x double> %c
28+
}

0 commit comments

Comments
 (0)