Skip to content

Commit 85cb5e9

Browse files
committed
[LoongArch] Optimize inserting extracted fp elements
1 parent 569fcac commit 85cb5e9

File tree

5 files changed

+16
-24
lines changed

5 files changed

+16
-24
lines changed

llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1593,11 +1593,14 @@ def : Pat<(vector_insert v8i32:$xd, GRLenVT:$rj, uimm3:$imm),
15931593
(XVINSGR2VR_W v8i32:$xd, GRLenVT:$rj, uimm3:$imm)>;
15941594
def : Pat<(vector_insert v4i64:$xd, GRLenVT:$rj, uimm2:$imm),
15951595
(XVINSGR2VR_D v4i64:$xd, GRLenVT:$rj, uimm2:$imm)>;
1596-
1597-
def : Pat<(vector_insert v8f32:$vd, FPR32:$fj, uimm3:$imm),
1598-
(XVINSGR2VR_W $vd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm3:$imm)>;
1599-
def : Pat<(vector_insert v4f64:$vd, FPR64:$fj, uimm2:$imm),
1600-
(XVINSGR2VR_D $vd, (COPY_TO_REGCLASS FPR64:$fj, GPR), uimm2:$imm)>;
1596+
def : Pat<(vector_insert v8f32:$xd, (f32 (vector_extract v8f32:$xj, uimm3:$imm1)), uimm3:$imm2),
1597+
(XVINSGR2VR_W $xd, (XVPICKVE2GR_W v8f32:$xj, uimm3:$imm1), uimm3:$imm2)>;
1598+
def : Pat<(vector_insert v4f64:$xd, (f64 (vector_extract v4f64:$xj, uimm2:$imm1)), uimm2:$imm2),
1599+
(XVINSGR2VR_D $xd, (XVPICKVE2GR_D v4f64:$xj, uimm2:$imm1), uimm2:$imm2)>;
1600+
def : Pat<(vector_insert v8f32:$xd, FPR32:$fj, uimm3:$imm),
1601+
(XVINSGR2VR_W $xd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm3:$imm)>;
1602+
def : Pat<(vector_insert v4f64:$xd, FPR64:$fj, uimm2:$imm),
1603+
(XVINSGR2VR_D $xd, (COPY_TO_REGCLASS FPR64:$fj, GPR), uimm2:$imm)>;
16011604

16021605
// scalar_to_vector
16031606
def : Pat<(v8f32 (scalar_to_vector FPR32:$fj)),

llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1791,7 +1791,10 @@ def : Pat<(vector_insert v4i32:$vd, GRLenVT:$rj, uimm2:$imm),
17911791
(VINSGR2VR_W v4i32:$vd, GRLenVT:$rj, uimm2:$imm)>;
17921792
def : Pat<(vector_insert v2i64:$vd, GRLenVT:$rj, uimm1:$imm),
17931793
(VINSGR2VR_D v2i64:$vd, GRLenVT:$rj, uimm1:$imm)>;
1794-
1794+
def : Pat<(vector_insert v4f32:$vd, (f32 (vector_extract v4f32:$vj, uimm2:$imm1)), uimm2:$imm2),
1795+
(VINSGR2VR_W $vd, (VPICKVE2GR_W v4f32:$vj, uimm2:$imm1), uimm2:$imm2)>;
1796+
def : Pat<(vector_insert v2f64:$vd, (f64 (vector_extract v2f64:$vj, uimm1:$imm1)), uimm1:$imm2),
1797+
(VINSGR2VR_D $vd, (VPICKVE2GR_D v2f64:$vj, uimm1:$imm1), uimm1:$imm2)>;
17951798
def : Pat<(vector_insert v4f32:$vd, FPR32:$fj, uimm2:$imm),
17961799
(VINSGR2VR_W $vd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm2:$imm)>;
17971800
def : Pat<(vector_insert v2f64:$vd, FPR64:$fj, uimm1:$imm),

llvm/test/CodeGen/LoongArch/lasx/ir-instruction/fix-xvshuf.ll

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,12 @@ define <4 x double> @shufflevector_v4f64(<4 x double> %a, <4 x double> %b) {
77
; CHECK-LABEL: shufflevector_v4f64:
88
; CHECK: # %bb.0: # %entry
99
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
10-
; CHECK-NEXT: movgr2fr.d $fa2, $a0
11-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 2
12-
; CHECK-NEXT: movgr2fr.d $fa3, $a0
13-
; CHECK-NEXT: movfr2gr.d $a0, $fa2
1410
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 0
15-
; CHECK-NEXT: movfr2gr.d $a0, $fa3
11+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 2
1612
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 1
1713
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
18-
; CHECK-NEXT: movgr2fr.d $fa0, $a0
19-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 3
20-
; CHECK-NEXT: movgr2fr.d $fa1, $a0
21-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
2214
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 2
23-
; CHECK-NEXT: movfr2gr.d $a0, $fa1
15+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 3
2416
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 3
2517
; CHECK-NEXT: xvori.b $xr0, $xr2, 0
2618
; CHECK-NEXT: ret

llvm/test/CodeGen/LoongArch/lasx/ir-instruction/insert-extract-element.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ define <8 x float> @insert_extract_v8f32(<8 x float> %a) nounwind {
55
; CHECK-LABEL: insert_extract_v8f32:
66
; CHECK: # %bb.0: # %entry
77
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7
8-
; CHECK-NEXT: movgr2fr.w $fa1, $a0
9-
; CHECK-NEXT: movfr2gr.s $a0, $fa1
108
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1
119
; CHECK-NEXT: ret
1210
entry:
@@ -19,8 +17,6 @@ define <4 x double> @insert_extract_v4f64(<4 x double> %a) nounwind {
1917
; CHECK-LABEL: insert_extract_v4f64:
2018
; CHECK: # %bb.0: # %entry
2119
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
22-
; CHECK-NEXT: movgr2fr.d $fa1, $a0
23-
; CHECK-NEXT: movfr2gr.d $a0, $fa1
2420
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
2521
; CHECK-NEXT: ret
2622
entry:

llvm/test/CodeGen/LoongArch/lsx/ir-instruction/insert-extract-element.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
define <4 x float> @insert_extract_v4f32(<4 x float> %a) nounwind {
55
; CHECK-LABEL: insert_extract_v4f32:
66
; CHECK: # %bb.0: # %entry
7-
; CHECK-NEXT: vreplvei.w $vr1, $vr0, 3
8-
; CHECK-NEXT: movfr2gr.s $a0, $fa1
7+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
98
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 0
109
; CHECK-NEXT: ret
1110
entry:
@@ -17,8 +16,7 @@ entry:
1716
define <2 x double> @insert_extract_v2f64(<2 x double> %a) nounwind {
1817
; CHECK-LABEL: insert_extract_v2f64:
1918
; CHECK: # %bb.0: # %entry
20-
; CHECK-NEXT: vreplvei.d $vr1, $vr0, 1
21-
; CHECK-NEXT: movfr2gr.d $a0, $fa1
19+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
2220
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
2321
; CHECK-NEXT: ret
2422
entry:

0 commit comments

Comments
 (0)