Skip to content

Commit 44564dd

Browse files
committed
minor optimization when extracting from index 0
1 parent b1b65af commit 44564dd

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,6 +1640,18 @@ defm : PairInsertExtractPatV8<v8f32, f32>;
16401640
defm : PairInsertExtractPatV4<v4i64, GRLenVT>;
16411641
defm : PairInsertExtractPatV4<v4f64, f64>;
16421642

1643+
foreach imm = 0...7 in {
1644+
def : Pat<(vector_insert v8i32:$xd, (GRLenVT(vector_extract v8i32:$xj, 0)),
1645+
uimm3:$imm),
1646+
(XVINSVE0_W v8i32:$xd, v8i32:$xj, uimm3:$imm)>;
1647+
}
1648+
1649+
foreach imm = 0...3 in {
1650+
def : Pat<(vector_insert v4i64:$xd, (GRLenVT(vector_extract v4i64:$xj, 0)),
1651+
uimm2:$imm),
1652+
(XVINSVE0_D v4i64:$xd, v4i64:$xj, uimm2:$imm)>;
1653+
}
1654+
16431655
def : Pat<(vector_insert v8i32:$xd,
16441656
(GRLenVT(vector_extract v8i32:$xj, uimm3:$imm1)), uimm3:$imm2),
16451657
(XVINSVE0_W v8i32:$xd, (XVPICKVE_W v8i32:$xj, uimm3:$imm1),

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,18 @@ entry:
3939
ret <8 x i32> %c
4040
}
4141

42+
43+
define <8 x i32> @insert_extract0_v8i32(<8 x i32> %a) nounwind {
44+
; CHECK-LABEL: insert_extract0_v8i32:
45+
; CHECK: # %bb.0: # %entry
46+
; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 1
47+
; CHECK-NEXT: ret
48+
entry:
49+
%b = extractelement <8 x i32> %a, i32 0
50+
%c = insertelement <8 x i32> %a, i32 %b, i32 1
51+
ret <8 x i32> %c
52+
}
53+
4254
define <8 x float> @insert_extract_v8f32(<8 x float> %a) nounwind {
4355
; CHECK-LABEL: insert_extract_v8f32:
4456
; CHECK: # %bb.0: # %entry
@@ -63,6 +75,17 @@ entry:
6375
ret <4 x i64> %c
6476
}
6577

78+
define <4 x i64> @insert_extract0_v4i64(<4 x i64> %a) nounwind {
79+
; CHECK-LABEL: insert_extract0_v4i64:
80+
; CHECK: # %bb.0: # %entry
81+
; CHECK-NEXT: xvinsve0.d $xr0, $xr0, 1
82+
; CHECK-NEXT: ret
83+
entry:
84+
%b = extractelement <4 x i64> %a, i32 0
85+
%c = insertelement <4 x i64> %a, i64 %b, i32 1
86+
ret <4 x i64> %c
87+
}
88+
6689
define <4 x double> @insert_extract_v4f64(<4 x double> %a) nounwind {
6790
; CHECK-LABEL: insert_extract_v4f64:
6891
; CHECK: # %bb.0: # %entry

0 commit comments

Comments
 (0)