Skip to content

Commit f558a6e

Browse files
committed
[RISCV] lowerVectorFTRUNC_FCEIL_FFLOOR_FROUND - freeze source value before conversion to scalable type
1 parent ba6dd3f commit f558a6e

File tree

2 files changed

+3
-21
lines changed

2 files changed

+3
-21
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3237,6 +3237,9 @@ lowerVectorFTRUNC_FCEIL_FFLOOR_FROUND(SDValue Op, SelectionDAG &DAG,
32373237

32383238
SDValue Src = Op.getOperand(0);
32393239

3240+
// Freeze the source since we are increasing the number of uses.
3241+
Src = DAG.getFreeze(Src);
3242+
32403243
MVT ContainerVT = VT;
32413244
if (VT.isFixedLengthVector()) {
32423245
ContainerVT = getContainerForFixedLengthVector(DAG, VT, Subtarget);
@@ -3254,9 +3257,6 @@ lowerVectorFTRUNC_FCEIL_FFLOOR_FROUND(SDValue Op, SelectionDAG &DAG,
32543257
std::tie(Mask, VL) = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget);
32553258
}
32563259

3257-
// Freeze the source since we are increasing the number of uses.
3258-
Src = DAG.getFreeze(Src);
3259-
32603260
// We do the conversion on the absolute value and fix the sign at the end.
32613261
SDValue Abs = DAG.getNode(RISCVISD::FABS_VL, DL, ContainerVT, Src, Mask, VL);
32623262

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp.ll

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3927,7 +3927,6 @@ define void @trunc_v8f16(ptr %x) {
39273927
; ZVFH-NEXT: vle16.v v8, (a0)
39283928
; ZVFH-NEXT: lui a1, %hi(.LCPI171_0)
39293929
; ZVFH-NEXT: flh fa5, %lo(.LCPI171_0)(a1)
3930-
; ZVFH-NEXT: vmv.v.v v8, v8
39313930
; ZVFH-NEXT: vfabs.v v9, v8
39323931
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
39333932
; ZVFH-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
@@ -4008,7 +4007,6 @@ define void @trunc_v4f32(ptr %x) {
40084007
; CHECK-NEXT: vle32.v v8, (a0)
40094008
; CHECK-NEXT: lui a1, 307200
40104009
; CHECK-NEXT: fmv.w.x fa5, a1
4011-
; CHECK-NEXT: vmv.v.v v8, v8
40124010
; CHECK-NEXT: vfabs.v v9, v8
40134011
; CHECK-NEXT: vmflt.vf v0, v9, fa5
40144012
; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
@@ -4030,7 +4028,6 @@ define void @trunc_v2f64(ptr %x) {
40304028
; CHECK-NEXT: vle64.v v8, (a0)
40314029
; CHECK-NEXT: lui a1, %hi(.LCPI174_0)
40324030
; CHECK-NEXT: fld fa5, %lo(.LCPI174_0)(a1)
4033-
; CHECK-NEXT: vmv.v.v v8, v8
40344031
; CHECK-NEXT: vfabs.v v9, v8
40354032
; CHECK-NEXT: vmflt.vf v0, v9, fa5
40364033
; CHECK-NEXT: vfcvt.rtz.x.f.v v9, v8, v0.t
@@ -4106,7 +4103,6 @@ define void @ceil_v8f16(ptr %x) {
41064103
; ZVFH-NEXT: vle16.v v8, (a0)
41074104
; ZVFH-NEXT: lui a1, %hi(.LCPI177_0)
41084105
; ZVFH-NEXT: flh fa5, %lo(.LCPI177_0)(a1)
4109-
; ZVFH-NEXT: vmv.v.v v8, v8
41104106
; ZVFH-NEXT: vfabs.v v9, v8
41114107
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
41124108
; ZVFH-NEXT: fsrmi a1, 3
@@ -4195,7 +4191,6 @@ define void @ceil_v4f32(ptr %x) {
41954191
; CHECK-NEXT: vle32.v v8, (a0)
41964192
; CHECK-NEXT: lui a1, 307200
41974193
; CHECK-NEXT: fmv.w.x fa5, a1
4198-
; CHECK-NEXT: vmv.v.v v8, v8
41994194
; CHECK-NEXT: vfabs.v v9, v8
42004195
; CHECK-NEXT: vmflt.vf v0, v9, fa5
42014196
; CHECK-NEXT: fsrmi a1, 3
@@ -4219,7 +4214,6 @@ define void @ceil_v2f64(ptr %x) {
42194214
; CHECK-NEXT: vle64.v v8, (a0)
42204215
; CHECK-NEXT: lui a1, %hi(.LCPI180_0)
42214216
; CHECK-NEXT: fld fa5, %lo(.LCPI180_0)(a1)
4222-
; CHECK-NEXT: vmv.v.v v8, v8
42234217
; CHECK-NEXT: vfabs.v v9, v8
42244218
; CHECK-NEXT: vmflt.vf v0, v9, fa5
42254219
; CHECK-NEXT: fsrmi a1, 3
@@ -4297,7 +4291,6 @@ define void @floor_v8f16(ptr %x) {
42974291
; ZVFH-NEXT: vle16.v v8, (a0)
42984292
; ZVFH-NEXT: lui a1, %hi(.LCPI183_0)
42994293
; ZVFH-NEXT: flh fa5, %lo(.LCPI183_0)(a1)
4300-
; ZVFH-NEXT: vmv.v.v v8, v8
43014294
; ZVFH-NEXT: vfabs.v v9, v8
43024295
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
43034296
; ZVFH-NEXT: fsrmi a1, 2
@@ -4386,7 +4379,6 @@ define void @floor_v4f32(ptr %x) {
43864379
; CHECK-NEXT: vle32.v v8, (a0)
43874380
; CHECK-NEXT: lui a1, 307200
43884381
; CHECK-NEXT: fmv.w.x fa5, a1
4389-
; CHECK-NEXT: vmv.v.v v8, v8
43904382
; CHECK-NEXT: vfabs.v v9, v8
43914383
; CHECK-NEXT: vmflt.vf v0, v9, fa5
43924384
; CHECK-NEXT: fsrmi a1, 2
@@ -4410,7 +4402,6 @@ define void @floor_v2f64(ptr %x) {
44104402
; CHECK-NEXT: vle64.v v8, (a0)
44114403
; CHECK-NEXT: lui a1, %hi(.LCPI186_0)
44124404
; CHECK-NEXT: fld fa5, %lo(.LCPI186_0)(a1)
4413-
; CHECK-NEXT: vmv.v.v v8, v8
44144405
; CHECK-NEXT: vfabs.v v9, v8
44154406
; CHECK-NEXT: vmflt.vf v0, v9, fa5
44164407
; CHECK-NEXT: fsrmi a1, 2
@@ -4488,7 +4479,6 @@ define void @round_v8f16(ptr %x) {
44884479
; ZVFH-NEXT: vle16.v v8, (a0)
44894480
; ZVFH-NEXT: lui a1, %hi(.LCPI189_0)
44904481
; ZVFH-NEXT: flh fa5, %lo(.LCPI189_0)(a1)
4491-
; ZVFH-NEXT: vmv.v.v v8, v8
44924482
; ZVFH-NEXT: vfabs.v v9, v8
44934483
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
44944484
; ZVFH-NEXT: fsrmi a1, 4
@@ -4577,7 +4567,6 @@ define void @round_v4f32(ptr %x) {
45774567
; CHECK-NEXT: vle32.v v8, (a0)
45784568
; CHECK-NEXT: lui a1, 307200
45794569
; CHECK-NEXT: fmv.w.x fa5, a1
4580-
; CHECK-NEXT: vmv.v.v v8, v8
45814570
; CHECK-NEXT: vfabs.v v9, v8
45824571
; CHECK-NEXT: vmflt.vf v0, v9, fa5
45834572
; CHECK-NEXT: fsrmi a1, 4
@@ -4601,7 +4590,6 @@ define void @round_v2f64(ptr %x) {
46014590
; CHECK-NEXT: vle64.v v8, (a0)
46024591
; CHECK-NEXT: lui a1, %hi(.LCPI192_0)
46034592
; CHECK-NEXT: fld fa5, %lo(.LCPI192_0)(a1)
4604-
; CHECK-NEXT: vmv.v.v v8, v8
46054593
; CHECK-NEXT: vfabs.v v9, v8
46064594
; CHECK-NEXT: vmflt.vf v0, v9, fa5
46074595
; CHECK-NEXT: fsrmi a1, 4
@@ -4650,7 +4638,6 @@ define void @rint_v8f16(ptr %x) {
46504638
; ZVFH-NEXT: vle16.v v8, (a0)
46514639
; ZVFH-NEXT: lui a1, %hi(.LCPI194_0)
46524640
; ZVFH-NEXT: flh fa5, %lo(.LCPI194_0)(a1)
4653-
; ZVFH-NEXT: vmv.v.v v8, v8
46544641
; ZVFH-NEXT: vfabs.v v9, v8
46554642
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
46564643
; ZVFH-NEXT: vfcvt.x.f.v v9, v8, v0.t
@@ -4691,7 +4678,6 @@ define void @rint_v4f32(ptr %x) {
46914678
; CHECK-NEXT: vle32.v v8, (a0)
46924679
; CHECK-NEXT: lui a1, 307200
46934680
; CHECK-NEXT: fmv.w.x fa5, a1
4694-
; CHECK-NEXT: vmv.v.v v8, v8
46954681
; CHECK-NEXT: vfabs.v v9, v8
46964682
; CHECK-NEXT: vmflt.vf v0, v9, fa5
46974683
; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t
@@ -4713,7 +4699,6 @@ define void @rint_v2f64(ptr %x) {
47134699
; CHECK-NEXT: vle64.v v8, (a0)
47144700
; CHECK-NEXT: lui a1, %hi(.LCPI196_0)
47154701
; CHECK-NEXT: fld fa5, %lo(.LCPI196_0)(a1)
4716-
; CHECK-NEXT: vmv.v.v v8, v8
47174702
; CHECK-NEXT: vfabs.v v9, v8
47184703
; CHECK-NEXT: vmflt.vf v0, v9, fa5
47194704
; CHECK-NEXT: vfcvt.x.f.v v9, v8, v0.t
@@ -4762,7 +4747,6 @@ define void @nearbyint_v8f16(ptr %x) {
47624747
; ZVFH-NEXT: vle16.v v8, (a0)
47634748
; ZVFH-NEXT: lui a1, %hi(.LCPI198_0)
47644749
; ZVFH-NEXT: flh fa5, %lo(.LCPI198_0)(a1)
4765-
; ZVFH-NEXT: vmv.v.v v8, v8
47664750
; ZVFH-NEXT: vfabs.v v9, v8
47674751
; ZVFH-NEXT: vmflt.vf v0, v9, fa5
47684752
; ZVFH-NEXT: frflags a1
@@ -4807,7 +4791,6 @@ define void @nearbyint_v4f32(ptr %x) {
48074791
; CHECK-NEXT: vle32.v v8, (a0)
48084792
; CHECK-NEXT: lui a1, 307200
48094793
; CHECK-NEXT: fmv.w.x fa5, a1
4810-
; CHECK-NEXT: vmv.v.v v8, v8
48114794
; CHECK-NEXT: vfabs.v v9, v8
48124795
; CHECK-NEXT: vmflt.vf v0, v9, fa5
48134796
; CHECK-NEXT: frflags a1
@@ -4831,7 +4814,6 @@ define void @nearbyint_v2f64(ptr %x) {
48314814
; CHECK-NEXT: vle64.v v8, (a0)
48324815
; CHECK-NEXT: lui a1, %hi(.LCPI200_0)
48334816
; CHECK-NEXT: fld fa5, %lo(.LCPI200_0)(a1)
4834-
; CHECK-NEXT: vmv.v.v v8, v8
48354817
; CHECK-NEXT: vfabs.v v9, v8
48364818
; CHECK-NEXT: vmflt.vf v0, v9, fa5
48374819
; CHECK-NEXT: frflags a1

0 commit comments

Comments
 (0)