Skip to content

Commit 3282b61

Browse files
zhaoqi5mahesh-attarde
authored andcommitted
[LoongArch] Optimize general fp build_vector lowering (llvm#149486)
1 parent 87c9e3d commit 3282b61

File tree

8 files changed

+55
-70
lines changed

8 files changed

+55
-70
lines changed

llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2514,8 +2514,9 @@ SDValue LoongArchTargetLowering::lowerBUILD_VECTOR(SDValue Op,
25142514
assert(ResTy.isVector());
25152515

25162516
unsigned NumElts = ResTy.getVectorNumElements();
2517-
SDValue Vector = DAG.getUNDEF(ResTy);
2518-
for (unsigned i = 0; i < NumElts; ++i) {
2517+
SDValue Vector =
2518+
DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, ResTy, Node->getOperand(0));
2519+
for (unsigned i = 1; i < NumElts; ++i) {
25192520
Vector = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, ResTy, Vector,
25202521
Node->getOperand(i),
25212522
DAG.getConstant(i, DL, Subtarget.getGRLenVT()));

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,6 @@ define void @buildvector_v8f32(ptr %dst, float %a0, float %a1, float %a2, float
475475
; CHECK-NEXT: # kill: def $f2 killed $f2 def $xr2
476476
; CHECK-NEXT: # kill: def $f1 killed $f1 def $xr1
477477
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
478-
; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 0
479478
; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 1
480479
; CHECK-NEXT: xvinsve0.w $xr0, $xr2, 2
481480
; CHECK-NEXT: xvinsve0.w $xr0, $xr3, 3
@@ -505,7 +504,6 @@ define void @buildvector_v4f64(ptr %dst, double %a0, double %a1, double %a2, dou
505504
; CHECK-NEXT: # kill: def $f2_64 killed $f2_64 def $xr2
506505
; CHECK-NEXT: # kill: def $f1_64 killed $f1_64 def $xr1
507506
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
508-
; CHECK-NEXT: xvinsve0.d $xr0, $xr0, 0
509507
; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 1
510508
; CHECK-NEXT: xvinsve0.d $xr0, $xr2, 2
511509
; CHECK-NEXT: xvinsve0.d $xr0, $xr3, 3

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

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,23 @@ define <8 x float> @powi_v8f32(<8 x float> %va, i32 %b) nounwind {
1111
; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
1212
; CHECK-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
1313
; CHECK-NEXT: addi.w $fp, $a0, 0
14-
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 0
14+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 1
1515
; CHECK-NEXT: movgr2fr.w $fa0, $a0
1616
; CHECK-NEXT: move $a0, $fp
1717
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
1818
; CHECK-NEXT: jirl $ra, $ra, 0
1919
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
20-
; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 0
2120
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
2221
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
23-
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 1
22+
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 0
2423
; CHECK-NEXT: movgr2fr.w $fa0, $a0
2524
; CHECK-NEXT: move $a0, $fp
2625
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
2726
; CHECK-NEXT: jirl $ra, $ra, 0
2827
; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
2928
; 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
29+
; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 1
30+
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
3231
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
3332
; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 2
3433
; CHECK-NEXT: movgr2fr.w $fa0, $a0
@@ -106,44 +105,43 @@ define <4 x double> @powi_v4f64(<4 x double> %va, i32 %b) nounwind {
106105
; CHECK-NEXT: addi.d $sp, $sp, -96
107106
; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
108107
; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
109-
; CHECK-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
108+
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
110109
; CHECK-NEXT: addi.w $fp, $a0, 0
111-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
110+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
112111
; CHECK-NEXT: movgr2fr.d $fa0, $a0
113112
; CHECK-NEXT: move $a0, $fp
114113
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
115114
; CHECK-NEXT: jirl $ra, $ra, 0
116115
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
117-
; CHECK-NEXT: xvinsve0.d $xr0, $xr0, 0
118-
; CHECK-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
119-
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
120-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1
116+
; CHECK-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
117+
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
118+
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
121119
; CHECK-NEXT: movgr2fr.d $fa0, $a0
122120
; CHECK-NEXT: move $a0, $fp
123121
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
124122
; CHECK-NEXT: jirl $ra, $ra, 0
125123
; 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
129-
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
124+
; CHECK-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
125+
; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 1
126+
; CHECK-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
127+
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
130128
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2
131129
; CHECK-NEXT: movgr2fr.d $fa0, $a0
132130
; CHECK-NEXT: move $a0, $fp
133131
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
134132
; CHECK-NEXT: jirl $ra, $ra, 0
135133
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
136-
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
134+
; CHECK-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
137135
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 2
138-
; CHECK-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
139-
; CHECK-NEXT: xvld $xr0, $sp, 16 # 32-byte Folded Reload
136+
; CHECK-NEXT: xvst $xr1, $sp, 16 # 32-byte Folded Spill
137+
; CHECK-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
140138
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
141139
; CHECK-NEXT: movgr2fr.d $fa0, $a0
142140
; CHECK-NEXT: move $a0, $fp
143141
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
144142
; CHECK-NEXT: jirl $ra, $ra, 0
145143
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
146-
; CHECK-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
144+
; CHECK-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
147145
; CHECK-NEXT: xvinsve0.d $xr1, $xr0, 3
148146
; CHECK-NEXT: xvori.b $xr0, $xr1, 0
149147
; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@
66
define <4 x double> @shufflevector_v4f64(<4 x double> %a, <4 x double> %b) {
77
; CHECK-LABEL: shufflevector_v4f64:
88
; CHECK: # %bb.0: # %entry
9-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0
10-
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 0
119
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 2
12-
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 1
13-
; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3
14-
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 2
10+
; CHECK-NEXT: xvpickve2gr.d $a1, $xr0, 3
11+
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1
12+
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 2
1513
; CHECK-NEXT: xvpickve2gr.d $a0, $xr1, 3
16-
; CHECK-NEXT: xvinsgr2vr.d $xr2, $a0, 3
17-
; CHECK-NEXT: xvori.b $xr0, $xr2, 0
14+
; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 3
1815
; CHECK-NEXT: ret
1916
entry:
2017
%c = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 6, i32 3, i32 7>

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,22 +196,20 @@ define <2 x double> @exp10_v2f64(<2 x double> %x) #0 {
196196
; LA64-NEXT: addi.d $sp, $sp, -48
197197
; LA64-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill
198198
; LA64-NEXT: vst $vr0, $sp, 0 # 16-byte Folded Spill
199-
; LA64-NEXT: vreplvei.d $vr0, $vr0, 0
199+
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
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
203203
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
204-
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
205204
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
206205
; LA64-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
207-
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
206+
; LA64-NEXT: vreplvei.d $vr0, $vr0, 0
208207
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
209208
; LA64-NEXT: pcaddu18i $ra, %call36(exp10)
210209
; LA64-NEXT: jirl $ra, $ra, 0
211210
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
212211
; 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
212+
; LA64-NEXT: vextrins.d $vr0, $vr1, 16
215213
; LA64-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload
216214
; LA64-NEXT: addi.d $sp, $sp, 48
217215
; LA64-NEXT: ret

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

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -571,39 +571,37 @@ define { <2 x double>, <2 x double> } @test_sincos_v2f64(<2 x double> %a) #0 {
571571
; LA64-NEXT: addi.d $sp, $sp, -80
572572
; LA64-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill
573573
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
574-
; LA64-NEXT: vreplvei.d $vr0, $vr0, 0
575-
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
574+
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
575+
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
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
579579
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
580-
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
581-
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
580+
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
582581
; LA64-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
583-
; LA64-NEXT: vreplvei.d $vr0, $vr0, 1
582+
; LA64-NEXT: vreplvei.d $vr0, $vr0, 0
584583
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
585584
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
586585
; LA64-NEXT: pcaddu18i $ra, %call36(sin)
587586
; LA64-NEXT: jirl $ra, $ra, 0
588587
; 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
592-
; LA64-NEXT: vld $vr0, $sp, 32 # 16-byte Folded Reload
588+
; LA64-NEXT: vld $vr1, $sp, 32 # 16-byte Folded Reload
589+
; LA64-NEXT: vextrins.d $vr0, $vr1, 16
590+
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
591+
; LA64-NEXT: vld $vr0, $sp, 48 # 16-byte Folded Reload
593592
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
594593
; LA64-NEXT: pcaddu18i $ra, %call36(cos)
595594
; LA64-NEXT: jirl $ra, $ra, 0
596595
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
597-
; LA64-NEXT: vextrins.d $vr0, $vr0, 0
598-
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
596+
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
599597
; LA64-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
600598
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
601599
; LA64-NEXT: pcaddu18i $ra, %call36(cos)
602600
; LA64-NEXT: jirl $ra, $ra, 0
603-
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
604-
; LA64-NEXT: vld $vr1, $sp, 32 # 16-byte Folded Reload
605-
; LA64-NEXT: vextrins.d $vr1, $vr0, 16
601+
; LA64-NEXT: fmov.d $fa1, $fa0
606602
; LA64-NEXT: vld $vr0, $sp, 48 # 16-byte Folded Reload
603+
; LA64-NEXT: vextrins.d $vr1, $vr0, 16
604+
; LA64-NEXT: vld $vr0, $sp, 32 # 16-byte Folded Reload
607605
; LA64-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload
608606
; LA64-NEXT: addi.d $sp, $sp, 80
609607
; LA64-NEXT: ret

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,6 @@ define void @buildvector_v4f32(ptr %dst, float %a0, float %a1, float %a2, float
338338
; CHECK-NEXT: # kill: def $f2 killed $f2 def $vr2
339339
; CHECK-NEXT: # kill: def $f1 killed $f1 def $vr1
340340
; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
341-
; CHECK-NEXT: vextrins.w $vr0, $vr0, 0
342341
; CHECK-NEXT: vextrins.w $vr0, $vr1, 16
343342
; CHECK-NEXT: vextrins.w $vr0, $vr2, 32
344343
; CHECK-NEXT: vextrins.w $vr0, $vr3, 48
@@ -358,7 +357,6 @@ define void @buildvector_v2f64(ptr %dst, double %a0, double %a1) nounwind {
358357
; CHECK: # %bb.0: # %entry
359358
; CHECK-NEXT: # kill: def $f1_64 killed $f1_64 def $vr1
360359
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
361-
; CHECK-NEXT: vextrins.d $vr0, $vr0, 0
362360
; CHECK-NEXT: vextrins.d $vr0, $vr1, 16
363361
; CHECK-NEXT: vst $vr0, $a0, 0
364362
; CHECK-NEXT: ret

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

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,43 @@ define <4 x float> @powi_v4f32(<4 x float> %va, i32 %b) nounwind {
99
; CHECK-NEXT: addi.d $sp, $sp, -48
1010
; CHECK-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill
1111
; CHECK-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill
12-
; CHECK-NEXT: vst $vr0, $sp, 0 # 16-byte Folded Spill
12+
; CHECK-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
1313
; CHECK-NEXT: addi.w $fp, $a0, 0
14-
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 0
14+
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 1
1515
; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vr0
1616
; CHECK-NEXT: move $a0, $fp
1717
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
1818
; CHECK-NEXT: jirl $ra, $ra, 0
1919
; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
20-
; CHECK-NEXT: vextrins.w $vr0, $vr0, 0
21-
; CHECK-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
22-
; CHECK-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
23-
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 1
20+
; CHECK-NEXT: vst $vr0, $sp, 0 # 16-byte Folded Spill
21+
; CHECK-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
22+
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 0
2423
; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vr0
2524
; CHECK-NEXT: move $a0, $fp
2625
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
2726
; CHECK-NEXT: jirl $ra, $ra, 0
2827
; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
29-
; CHECK-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
30-
; CHECK-NEXT: vextrins.w $vr1, $vr0, 16
31-
; CHECK-NEXT: vst $vr1, $sp, 16 # 16-byte Folded Spill
32-
; CHECK-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
28+
; CHECK-NEXT: vld $vr1, $sp, 0 # 16-byte Folded Reload
29+
; CHECK-NEXT: vextrins.w $vr0, $vr1, 16
30+
; CHECK-NEXT: vst $vr0, $sp, 0 # 16-byte Folded Spill
31+
; CHECK-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
3332
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 2
3433
; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vr0
3534
; CHECK-NEXT: move $a0, $fp
3635
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
3736
; CHECK-NEXT: jirl $ra, $ra, 0
3837
; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
39-
; CHECK-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
38+
; CHECK-NEXT: vld $vr1, $sp, 0 # 16-byte Folded Reload
4039
; CHECK-NEXT: vextrins.w $vr1, $vr0, 32
41-
; CHECK-NEXT: vst $vr1, $sp, 16 # 16-byte Folded Spill
42-
; CHECK-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
40+
; CHECK-NEXT: vst $vr1, $sp, 0 # 16-byte Folded Spill
41+
; CHECK-NEXT: vld $vr0, $sp, 16 # 16-byte Folded Reload
4342
; CHECK-NEXT: vreplvei.w $vr0, $vr0, 3
4443
; CHECK-NEXT: # kill: def $f0 killed $f0 killed $vr0
4544
; CHECK-NEXT: move $a0, $fp
4645
; CHECK-NEXT: pcaddu18i $ra, %call36(__powisf2)
4746
; CHECK-NEXT: jirl $ra, $ra, 0
4847
; CHECK-NEXT: # kill: def $f0 killed $f0 def $vr0
49-
; CHECK-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
48+
; CHECK-NEXT: vld $vr1, $sp, 0 # 16-byte Folded Reload
5049
; CHECK-NEXT: vextrins.w $vr1, $vr0, 48
5150
; CHECK-NEXT: vori.b $vr0, $vr1, 0
5251
; CHECK-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload
@@ -68,24 +67,22 @@ define <2 x double> @powi_v2f64(<2 x double> %va, i32 %b) nounwind {
6867
; CHECK-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill
6968
; CHECK-NEXT: vst $vr0, $sp, 0 # 16-byte Folded Spill
7069
; CHECK-NEXT: addi.w $fp, $a0, 0
71-
; CHECK-NEXT: vreplvei.d $vr0, $vr0, 0
70+
; CHECK-NEXT: vreplvei.d $vr0, $vr0, 1
7271
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
7372
; CHECK-NEXT: move $a0, $fp
7473
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
7574
; CHECK-NEXT: jirl $ra, $ra, 0
7675
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
77-
; CHECK-NEXT: vextrins.d $vr0, $vr0, 0
7876
; CHECK-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
7977
; CHECK-NEXT: vld $vr0, $sp, 0 # 16-byte Folded Reload
80-
; CHECK-NEXT: vreplvei.d $vr0, $vr0, 1
78+
; CHECK-NEXT: vreplvei.d $vr0, $vr0, 0
8179
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 killed $vr0
8280
; CHECK-NEXT: move $a0, $fp
8381
; CHECK-NEXT: pcaddu18i $ra, %call36(__powidf2)
8482
; CHECK-NEXT: jirl $ra, $ra, 0
8583
; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
8684
; CHECK-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
87-
; CHECK-NEXT: vextrins.d $vr1, $vr0, 16
88-
; CHECK-NEXT: vori.b $vr0, $vr1, 0
85+
; CHECK-NEXT: vextrins.d $vr0, $vr1, 16
8986
; CHECK-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload
9087
; CHECK-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload
9188
; CHECK-NEXT: addi.d $sp, $sp, 48

0 commit comments

Comments
 (0)