Skip to content

Commit 035d395

Browse files
committed
[LoongArch] Optimize inserting fp element bitconverted from integer
1 parent ec752c6 commit 035d395

File tree

4 files changed

+8
-10
lines changed

4 files changed

+8
-10
lines changed

llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1593,7 +1593,10 @@ 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-
1596+
def : Pat<(vector_insert v8f32:$vd, (loongarch_movgr2fr_w_la64 GPR:$rj), uimm3:$imm),
1597+
(XVINSGR2VR_W $vd, $rj, uimm3:$imm)>;
1598+
def : Pat<(vector_insert v4f64:$vd, (f64 (bitconvert i64:$rj)), uimm2:$imm),
1599+
(XVINSGR2VR_D $vd, $rj, uimm2:$imm)>;
15971600
def : Pat<(vector_insert v8f32:$vd, FPR32:$fj, uimm3:$imm),
15981601
(XVINSGR2VR_W $vd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm3:$imm)>;
15991602
def : Pat<(vector_insert v4f64:$vd, FPR64:$fj, uimm2:$imm),

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, (loongarch_movgr2fr_w_la64 GPR:$rj), uimm2:$imm),
1795+
(VINSGR2VR_W $vd, $rj, uimm2:$imm)>;
1796+
def : Pat<(vector_insert v2f64:$vd, (f64 (bitconvert i64:$rj)), uimm1:$imm),
1797+
(VINSGR2VR_D $vd, $rj, uimm1:$imm)>;
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/insert-bitcast-element.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
define <8 x float> @insert_bitcast_v8f32(<8 x float> %a, i32 %b) nounwind {
55
; CHECK-LABEL: insert_bitcast_v8f32:
66
; CHECK: # %bb.0: # %entry
7-
; CHECK-NEXT: movgr2fr.w $fa1, $a0
8-
; CHECK-NEXT: movfr2gr.s $a0, $fa1
97
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1
108
; CHECK-NEXT: ret
119
entry:
@@ -17,8 +15,6 @@ entry:
1715
define <4 x double> @insert_bitcast_v4f64(<4 x double> %a, i64 %b) nounwind {
1816
; CHECK-LABEL: insert_bitcast_v4f64:
1917
; CHECK: # %bb.0: # %entry
20-
; CHECK-NEXT: movgr2fr.d $fa1, $a0
21-
; CHECK-NEXT: movfr2gr.d $a0, $fa1
2218
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
2319
; CHECK-NEXT: ret
2420
entry:

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
define <4 x float> @insert_bitcast_v4f32(<4 x float> %a, i32 %b) nounwind {
55
; CHECK-LABEL: insert_bitcast_v4f32:
66
; CHECK: # %bb.0: # %entry
7-
; CHECK-NEXT: movgr2fr.w $fa1, $a0
8-
; CHECK-NEXT: movfr2gr.s $a0, $fa1
97
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 1
108
; CHECK-NEXT: ret
119
entry:
@@ -17,8 +15,6 @@ entry:
1715
define <2 x double> @insert_bitcast_v2f64(<2 x double> %a, i64 %b) nounwind {
1816
; CHECK-LABEL: insert_bitcast_v2f64:
1917
; CHECK: # %bb.0: # %entry
20-
; CHECK-NEXT: movgr2fr.d $fa1, $a0
21-
; CHECK-NEXT: movfr2gr.d $a0, $fa1
2218
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 1
2319
; CHECK-NEXT: ret
2420
entry:

0 commit comments

Comments
 (0)