Skip to content

Commit cae7650

Browse files
zhaoqi5tangaac
andauthored
[LoongArch] Optimize inserting fp element to vector (#149302)
Co-authored-by: tangaac <[email protected]>
1 parent 8b9e760 commit cae7650

File tree

10 files changed

+145
-129
lines changed

10 files changed

+145
-129
lines changed

llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,18 +1651,20 @@ def : Pat<(vector_insert v8i32:$xd, GRLenVT:$rj, uimm3:$imm),
16511651
(XVINSGR2VR_W v8i32:$xd, GRLenVT:$rj, uimm3:$imm)>;
16521652
def : Pat<(vector_insert v4i64:$xd, GRLenVT:$rj, uimm2:$imm),
16531653
(XVINSGR2VR_D v4i64:$xd, GRLenVT:$rj, uimm2:$imm)>;
1654-
def : Pat<(vector_insert v8f32:$vd, (loongarch_movgr2fr_w_la64 GPR:$rj), uimm3:$imm),
1655-
(XVINSGR2VR_W $vd, $rj, uimm3:$imm)>;
1656-
def : Pat<(vector_insert v4f64:$vd, (f64 (bitconvert i64:$rj)), uimm2:$imm),
1657-
(XVINSGR2VR_D $vd, $rj, uimm2:$imm)>;
1654+
def : Pat<(vector_insert v8f32:$xd, (loongarch_movgr2fr_w_la64 GPR:$rj), uimm3:$imm),
1655+
(XVINSGR2VR_W $xd, $rj, uimm3:$imm)>;
1656+
def : Pat<(vector_insert v4f64:$xd, (f64 (bitconvert i64:$rj)), uimm2:$imm),
1657+
(XVINSGR2VR_D $xd, $rj, uimm2:$imm)>;
16581658
def : Pat<(vector_insert v8f32:$xd, (f32 (vector_extract v8f32:$xj, uimm3:$imm1)), uimm3:$imm2),
16591659
(XVINSGR2VR_W $xd, (XVPICKVE2GR_W v8f32:$xj, uimm3:$imm1), uimm3:$imm2)>;
16601660
def : Pat<(vector_insert v4f64:$xd, (f64 (vector_extract v4f64:$xj, uimm2:$imm1)), uimm2:$imm2),
16611661
(XVINSGR2VR_D $xd, (XVPICKVE2GR_D v4f64:$xj, uimm2:$imm1), uimm2:$imm2)>;
1662+
1663+
// XVINSVE0_{W/D}
16621664
def : Pat<(vector_insert v8f32:$xd, FPR32:$fj, uimm3:$imm),
1663-
(XVINSGR2VR_W $xd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm3:$imm)>;
1665+
(XVINSVE0_W $xd, (SUBREG_TO_REG (i64 0), FPR32:$fj, sub_32), uimm3:$imm)>;
16641666
def : Pat<(vector_insert v4f64:$xd, FPR64:$fj, uimm2:$imm),
1665-
(XVINSGR2VR_D $xd, (COPY_TO_REGCLASS FPR64:$fj, GPR), uimm2:$imm)>;
1667+
(XVINSVE0_D $xd, (SUBREG_TO_REG (i64 0), FPR64:$fj, sub_64), uimm2:$imm)>;
16661668

16671669
// scalar_to_vector
16681670
def : Pat<(v8f32 (scalar_to_vector FPR32:$fj)),

llvm/lib/Target/LoongArch/LoongArchLSXInstrInfo.td

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,10 +1842,19 @@ def : Pat<(vector_insert v4f32:$vd, (loongarch_movgr2fr_w_la64 GPR:$rj), uimm2:$
18421842
(VINSGR2VR_W $vd, $rj, uimm2:$imm)>;
18431843
def : Pat<(vector_insert v2f64:$vd, (f64 (bitconvert i64:$rj)), uimm1:$imm),
18441844
(VINSGR2VR_D $vd, $rj, uimm1:$imm)>;
1845-
def : Pat<(vector_insert v4f32:$vd, FPR32:$fj, uimm2:$imm),
1846-
(VINSGR2VR_W $vd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm2:$imm)>;
1847-
def : Pat<(vector_insert v2f64:$vd, FPR64:$fj, uimm1:$imm),
1848-
(VINSGR2VR_D $vd, (COPY_TO_REGCLASS FPR64:$fj, GPR), uimm1:$imm)>;
1845+
1846+
// VEXTRINS_{W/D}
1847+
foreach imm = 0...3 in {
1848+
defvar Imm = !shl(imm, 4);
1849+
def : Pat<(vector_insert v4f32:$vd, FPR32:$fj, imm),
1850+
(VEXTRINS_W $vd, (SUBREG_TO_REG (i64 0), FPR32:$fj, sub_32), Imm)>;
1851+
}
1852+
1853+
foreach imm = 0...1 in {
1854+
defvar Imm = !shl(imm, 4);
1855+
def : Pat<(vector_insert v2f64:$vd, FPR64:$fj, imm),
1856+
(VEXTRINS_D $vd, (SUBREG_TO_REG (i64 0), FPR64:$fj, sub_64), Imm)>;
1857+
}
18491858

18501859
// scalar_to_vector
18511860
def : Pat<(v4f32 (scalar_to_vector FPR32:$fj)),

llvm/test/CodeGen/LoongArch/lasx/build-vector.ll

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -467,22 +467,22 @@ entry:
467467
define void @buildvector_v8f32(ptr %dst, float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7) nounwind {
468468
; CHECK-LABEL: buildvector_v8f32:
469469
; CHECK: # %bb.0: # %entry
470-
; CHECK-NEXT: movfr2gr.s $a1, $fa0
471-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 0
472-
; CHECK-NEXT: movfr2gr.s $a1, $fa1
473-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 1
474-
; CHECK-NEXT: movfr2gr.s $a1, $fa2
475-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 2
476-
; CHECK-NEXT: movfr2gr.s $a1, $fa3
477-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 3
478-
; CHECK-NEXT: movfr2gr.s $a1, $fa4
479-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 4
480-
; CHECK-NEXT: movfr2gr.s $a1, $fa5
481-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 5
482-
; CHECK-NEXT: movfr2gr.s $a1, $fa6
483-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 6
484-
; CHECK-NEXT: movfr2gr.s $a1, $fa7
485-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 7
470+
; CHECK-NEXT: # kill: def $f7 killed $f7 def $xr7
471+
; CHECK-NEXT: # kill: def $f6 killed $f6 def $xr6
472+
; CHECK-NEXT: # kill: def $f5 killed $f5 def $xr5
473+
; CHECK-NEXT: # kill: def $f4 killed $f4 def $xr4
474+
; CHECK-NEXT: # kill: def $f3 killed $f3 def $xr3
475+
; CHECK-NEXT: # kill: def $f2 killed $f2 def $xr2
476+
; CHECK-NEXT: # kill: def $f1 killed $f1 def $xr1
477+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
478+
; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 0
479+
; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 1
480+
; CHECK-NEXT: xvinsve0.w $xr0, $xr2, 2
481+
; CHECK-NEXT: xvinsve0.w $xr0, $xr3, 3
482+
; CHECK-NEXT: xvinsve0.w $xr0, $xr4, 4
483+
; CHECK-NEXT: xvinsve0.w $xr0, $xr5, 5
484+
; CHECK-NEXT: xvinsve0.w $xr0, $xr6, 6
485+
; CHECK-NEXT: xvinsve0.w $xr0, $xr7, 7
486486
; CHECK-NEXT: xvst $xr0, $a0, 0
487487
; CHECK-NEXT: ret
488488
entry:
@@ -501,14 +501,14 @@ entry:
501501
define void @buildvector_v4f64(ptr %dst, double %a0, double %a1, double %a2, double %a3) nounwind {
502502
; CHECK-LABEL: buildvector_v4f64:
503503
; CHECK: # %bb.0: # %entry
504-
; CHECK-NEXT: movfr2gr.d $a1, $fa0
505-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 0
506-
; CHECK-NEXT: movfr2gr.d $a1, $fa1
507-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 1
508-
; CHECK-NEXT: movfr2gr.d $a1, $fa2
509-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 2
510-
; CHECK-NEXT: movfr2gr.d $a1, $fa3
511-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 3
504+
; CHECK-NEXT: # kill: def $f3_64 killed $f3_64 def $xr3
505+
; CHECK-NEXT: # kill: def $f2_64 killed $f2_64 def $xr2
506+
; CHECK-NEXT: # kill: def $f1_64 killed $f1_64 def $xr1
507+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
508+
; CHECK-NEXT: xvinsve0.d $xr0, $xr0, 0
509+
; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 1
510+
; CHECK-NEXT: xvinsve0.d $xr0, $xr2, 2
511+
; CHECK-NEXT: xvinsve0.d $xr0, $xr3, 3
512512
; CHECK-NEXT: xvst $xr0, $a0, 0
513513
; CHECK-NEXT: ret
514514
entry:

llvm/test/CodeGen/LoongArch/lasx/fpowi.ll

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -16,78 +16,79 @@ define <8 x float> @powi_v8f32(<8 x float> %va, i32 %b) nounwind {
1616
; CHECK-NEXT: move $a0, $fp
1717
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
1818
; CHECK-NEXT: jirl $ra, $ra, 0
19-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
20-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 0
19+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
20+
; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 0
2121
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
2222
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
2323
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 1
2424
; CHECK-NEXT: movgr2fr.w $fa0, $a0
2525
; CHECK-NEXT: move $a0, $fp
2626
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
2727
; CHECK-NEXT: jirl $ra, $ra, 0
28-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
29-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
30-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1
31-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
28+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
29+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
30+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 1
31+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
3232
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
3333
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 2
3434
; CHECK-NEXT: movgr2fr.w $fa0, $a0
3535
; CHECK-NEXT: move $a0, $fp
3636
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
3737
; CHECK-NEXT: jirl $ra, $ra, 0
38-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
39-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
40-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 2
41-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
38+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
39+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
40+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 2
41+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
4242
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
4343
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 3
4444
; CHECK-NEXT: movgr2fr.w $fa0, $a0
4545
; CHECK-NEXT: move $a0, $fp
4646
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
4747
; CHECK-NEXT: jirl $ra, $ra, 0
48-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
49-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
50-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 3
51-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
48+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
49+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
50+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 3
51+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
5252
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
5353
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 4
5454
; CHECK-NEXT: movgr2fr.w $fa0, $a0
5555
; CHECK-NEXT: move $a0, $fp
5656
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
5757
; CHECK-NEXT: jirl $ra, $ra, 0
58-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
59-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
60-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 4
61-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
58+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
59+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
60+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 4
61+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
6262
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
6363
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 5
6464
; CHECK-NEXT: movgr2fr.w $fa0, $a0
6565
; CHECK-NEXT: move $a0, $fp
6666
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
6767
; CHECK-NEXT: jirl $ra, $ra, 0
68-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
69-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
70-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 5
71-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
68+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
69+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
70+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 5
71+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
7272
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
7373
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 6
7474
; CHECK-NEXT: movgr2fr.w $fa0, $a0
7575
; CHECK-NEXT: move $a0, $fp
7676
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
7777
; CHECK-NEXT: jirl $ra, $ra, 0
78-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
79-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
80-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 6
81-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
78+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
79+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
80+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 6
81+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
8282
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
8383
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7
8484
; CHECK-NEXT: movgr2fr.w $fa0, $a0
8585
; CHECK-NEXT: move $a0, $fp
8686
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
8787
; CHECK-NEXT: jirl $ra, $ra, 0
88-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
89-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
90-
; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 7
88+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
89+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
90+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 7
91+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
9192
; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
9293
; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
9394
; CHECK-NEXT: addi.d $sp, $sp, 96
@@ -112,38 +113,39 @@ define <4 x double> @powi_v4f64(<4 x double> %va, i32 %b) nounwind {
112113
; CHECK-NEXT: move $a0, $fp
113114
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
114115
; CHECK-NEXT: jirl $ra, $ra, 0
115-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
116-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 0
116+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
117+
; CHECK-NEXT: xvinsve0.d $xr0, $xr0, 0
117118
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
118119
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
119120
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
120121
; CHECK-NEXT: movgr2fr.d $fa0, $a0
121122
; CHECK-NEXT: move $a0, $fp
122123
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
123124
; CHECK-NEXT: jirl $ra, $ra, 0
124-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
125-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
126-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
127-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
125+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
126+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
127+
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 1
128+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
128129
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
129130
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2
130131
; CHECK-NEXT: movgr2fr.d $fa0, $a0
131132
; CHECK-NEXT: move $a0, $fp
132133
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
133134
; CHECK-NEXT: jirl $ra, $ra, 0
134-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
135-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
136-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 2
137-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
135+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
136+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
137+
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 2
138+
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
138139
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
139140
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
140141
; CHECK-NEXT: movgr2fr.d $fa0, $a0
141142
; CHECK-NEXT: move $a0, $fp
142143
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
143144
; CHECK-NEXT: jirl $ra, $ra, 0
144-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
145-
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
146-
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 3
145+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
146+
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
147+
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 3
148+
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
147149
; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
148150
; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
149151
; CHECK-NEXT: addi.d $sp, $sp, 96

llvm/test/CodeGen/LoongArch/lasx/ir-instruction/insertelement.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ define void @insert_8xfloat(ptr %src, ptr %dst, float %in) nounwind {
8787
; CHECK-LABEL: insert_8xfloat:
8888
; CHECK: # %bb.0:
8989
; CHECK-NEXT: xvld $xr1, $a0, 0
90-
; CHECK-NEXT: movfr2gr.s $a0, $fa0
91-
; CHECK-NEXT: xvinsgr2vr.w $xr1, $a0, 1
90+
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
91+
; CHECK-NEXT: xvinsve0.w $xr1, $xr0, 1
9292
; CHECK-NEXT: xvst $xr1, $a1, 0
9393
; CHECK-NEXT: ret
9494
%v = load volatile <8 x float>, ptr %src
@@ -101,8 +101,8 @@ define void @insert_4xdouble(ptr %src, ptr %dst, double %in) nounwind {
101101
; CHECK-LABEL: insert_4xdouble:
102102
; CHECK: # %bb.0:
103103
; CHECK-NEXT: xvld $xr1, $a0, 0
104-
; CHECK-NEXT: movfr2gr.d $a0, $fa0
105-
; CHECK-NEXT: xvinsgr2vr.d $xr1, $a0, 1
104+
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
105+
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 1
106106
; CHECK-NEXT: xvst $xr1, $a1, 0
107107
; CHECK-NEXT: ret
108108
%v = load volatile <4 x double>, ptr %src

llvm/test/CodeGen/LoongArch/llvm.exp10.ll

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,17 +200,18 @@ define <2 x double> @exp10_v2f64(<2 x double> %x) #0 {
200200
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
201201
; LA64-NEXT: pcaddu18i $ra, %call36(exp10)
202202
; LA64-NEXT: jirl $ra, $ra, 0
203-
; LA64-NEXT: movfr2gr.d $a0, $fa0
204-
; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
203+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
204+
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
205205
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
206206
; LA64-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
207207
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
208208
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
209209
; LA64-NEXT: pcaddu18i $ra, %call36(exp10)
210210
; LA64-NEXT: jirl $ra, $ra, 0
211-
; LA64-NEXT: movfr2gr.d $a0, $fa0
212-
; LA64-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
213-
; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 1
211+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
212+
; LA64-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
213+
; LA64-NEXT: vextrins.d $vr1, $vr0, 16
214+
; LA64-NEXT: vori.b $vr0, $vr1, 0
214215
; LA64-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload
215216
; LA64-NEXT: addi.d $sp, $sp, 48
216217
; LA64-NEXT: ret

llvm/test/CodeGen/LoongArch/llvm.sincos.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -576,33 +576,33 @@ define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {
576576
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
577577
; LA64-NEXT: pcaddu18i $ra, %call36(sin)
578578
; LA64-NEXT: jirl $ra, $ra, 0
579-
; LA64-NEXT: movfr2gr.d $a0, $fa0
580-
; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
579+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
580+
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
581581
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
582582
; LA64-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
583583
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
584584
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
585585
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
586586
; LA64-NEXT: pcaddu18i $ra, %call36(sin)
587587
; LA64-NEXT: jirl $ra, $ra, 0
588-
; LA64-NEXT: movfr2gr.d $a0, $fa0
589-
; LA64-NEXT: vld $vr0, $sp, 48 # 16-byte Folded Reload
590-
; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 1
591-
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
588+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
589+
; LA64-NEXT: vld $vr1, $sp, 48 # 16-byte Folded Reload
590+
; LA64-NEXT: vextrins.d $vr1, $vr0, 16
591+
; LA64-NEXT: vst $vr1, $sp, 48 # 16-byte Folded Spill
592592
; LA64-NEXT: vld $vr0, $sp, 32 # 16-byte Folded Reload
593593
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
594594
; LA64-NEXT: pcaddu18i $ra, %call36(cos)
595595
; LA64-NEXT: jirl $ra, $ra, 0
596-
; LA64-NEXT: movfr2gr.d $a0, $fa0
597-
; LA64-NEXT: vinsgr2vr.d $vr0, $a0, 0
596+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
597+
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
598598
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
599599
; LA64-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
600600
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
601601
; LA64-NEXT: pcaddu18i $ra, %call36(cos)
602602
; LA64-NEXT: jirl $ra, $ra, 0
603-
; LA64-NEXT: movfr2gr.d $a0, $fa0
603+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
604604
; LA64-NEXT: vld $vr1, $sp, 32 # 16-byte Folded Reload
605-
; LA64-NEXT: vinsgr2vr.d $vr1, $a0, 1
605+
; LA64-NEXT: vextrins.d $vr1, $vr0, 16
606606
; LA64-NEXT: vld $vr0, $sp, 48 # 16-byte Folded Reload
607607
; LA64-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload
608608
; LA64-NEXT: addi.d $sp, $sp, 80

0 commit comments

Comments
 (0)