Skip to content

Commit e5b20c8

Browse files
authored
[PowerPC] Update chain uses when emitting lxsizx (#84892)
1 parent cb84f13 commit e5b20c8

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed

llvm/lib/Target/PowerPC/PPCISelLowering.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -15048,6 +15048,7 @@ SDValue PPCTargetLowering::combineFPToIntToFP(SDNode *N,
1504815048
SDValue Ld = DAG.getMemIntrinsicNode(PPCISD::LXSIZX, dl,
1504915049
DAG.getVTList(MVT::f64, MVT::Other),
1505015050
Ops, MVT::i8, LDN->getMemOperand());
15051+
DAG.makeEquivalentMemoryOrdering(LDN, Ld);
1505115052

1505215053
// For signed conversion, we need to sign-extend the value in the VSR
1505315054
if (Signed) {

llvm/test/CodeGen/PowerPC/scalar-double-ldst.ll

+58
Original file line numberDiff line numberDiff line change
@@ -7281,3 +7281,61 @@ entry:
72817281
store double %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
72827282
ret void
72837283
}
7284+
7285+
define dso_local void @st_reversed_double_from_i8(ptr %ptr) {
7286+
; CHECK-P10-LABEL: st_reversed_double_from_i8:
7287+
; CHECK-P10: # %bb.0: # %entry
7288+
; CHECK-P10-NEXT: li r4, 8
7289+
; CHECK-P10-NEXT: lxsibzx f0, 0, r3
7290+
; CHECK-P10-NEXT: xxspltidp vs2, -1023410176
7291+
; CHECK-P10-NEXT: lxsibzx f1, r3, r4
7292+
; CHECK-P10-NEXT: xscvuxddp f0, f0
7293+
; CHECK-P10-NEXT: xscvuxddp f1, f1
7294+
; CHECK-P10-NEXT: xsadddp f0, f0, f2
7295+
; CHECK-P10-NEXT: xsadddp f1, f1, f2
7296+
; CHECK-P10-NEXT: stfd f1, 0(r3)
7297+
; CHECK-P10-NEXT: stfd f0, 8(r3)
7298+
; CHECK-P10-NEXT: blr
7299+
;
7300+
; CHECK-P9-LABEL: st_reversed_double_from_i8:
7301+
; CHECK-P9: # %bb.0: # %entry
7302+
; CHECK-P9-NEXT: li r4, 8
7303+
; CHECK-P9-NEXT: lxsibzx f0, 0, r3
7304+
; CHECK-P9-NEXT: lxsibzx f1, r3, r4
7305+
; CHECK-P9-NEXT: addis r4, r2, .LCPI300_0@toc@ha
7306+
; CHECK-P9-NEXT: lfs f2, .LCPI300_0@toc@l(r4)
7307+
; CHECK-P9-NEXT: xscvuxddp f0, f0
7308+
; CHECK-P9-NEXT: xscvuxddp f1, f1
7309+
; CHECK-P9-NEXT: xsadddp f0, f0, f2
7310+
; CHECK-P9-NEXT: xsadddp f1, f1, f2
7311+
; CHECK-P9-NEXT: stfd f0, 8(r3)
7312+
; CHECK-P9-NEXT: stfd f1, 0(r3)
7313+
; CHECK-P9-NEXT: blr
7314+
;
7315+
; CHECK-P8-LABEL: st_reversed_double_from_i8:
7316+
; CHECK-P8: # %bb.0: # %entry
7317+
; CHECK-P8-NEXT: lbz r4, 0(r3)
7318+
; CHECK-P8-NEXT: lbz r5, 8(r3)
7319+
; CHECK-P8-NEXT: mtfprwz f0, r4
7320+
; CHECK-P8-NEXT: mtfprwz f1, r5
7321+
; CHECK-P8-NEXT: addis r4, r2, .LCPI300_0@toc@ha
7322+
; CHECK-P8-NEXT: lfs f2, .LCPI300_0@toc@l(r4)
7323+
; CHECK-P8-NEXT: xscvuxddp f0, f0
7324+
; CHECK-P8-NEXT: xscvuxddp f1, f1
7325+
; CHECK-P8-NEXT: xsadddp f0, f0, f2
7326+
; CHECK-P8-NEXT: xsadddp f1, f1, f2
7327+
; CHECK-P8-NEXT: stfd f1, 0(r3)
7328+
; CHECK-P8-NEXT: stfd f0, 8(r3)
7329+
; CHECK-P8-NEXT: blr
7330+
entry:
7331+
%idx = getelementptr inbounds i8, ptr %ptr, i64 8
7332+
%i0 = load i8, ptr %ptr, align 1
7333+
%i1 = load i8, ptr %idx, align 1
7334+
%f0 = uitofp i8 %i0 to double
7335+
%f1 = uitofp i8 %i1 to double
7336+
%a0 = fadd double %f0, -1.280000e+02
7337+
%a1 = fadd double %f1, -1.280000e+02
7338+
store double %a1, ptr %ptr, align 8
7339+
store double %a0, ptr %idx, align 8
7340+
ret void
7341+
}

llvm/test/CodeGen/PowerPC/scalar-float-ldst.ll

+58
Original file line numberDiff line numberDiff line change
@@ -7271,3 +7271,61 @@ entry:
72717271
store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
72727272
ret void
72737273
}
7274+
7275+
define dso_local void @st_reversed_float_from_i8(ptr %ptr) {
7276+
; CHECK-P10-LABEL: st_reversed_float_from_i8:
7277+
; CHECK-P10: # %bb.0: # %entry
7278+
; CHECK-P10-NEXT: li r4, 8
7279+
; CHECK-P10-NEXT: lxsibzx f0, 0, r3
7280+
; CHECK-P10-NEXT: xxspltidp vs2, -1023410176
7281+
; CHECK-P10-NEXT: lxsibzx f1, r3, r4
7282+
; CHECK-P10-NEXT: xscvuxdsp f0, f0
7283+
; CHECK-P10-NEXT: xscvuxdsp f1, f1
7284+
; CHECK-P10-NEXT: xsaddsp f0, f0, f2
7285+
; CHECK-P10-NEXT: xsaddsp f1, f1, f2
7286+
; CHECK-P10-NEXT: stfs f0, 8(r3)
7287+
; CHECK-P10-NEXT: stfs f1, 0(r3)
7288+
; CHECK-P10-NEXT: blr
7289+
;
7290+
; CHECK-P9-LABEL: st_reversed_float_from_i8:
7291+
; CHECK-P9: # %bb.0: # %entry
7292+
; CHECK-P9-NEXT: li r4, 8
7293+
; CHECK-P9-NEXT: lxsibzx f0, 0, r3
7294+
; CHECK-P9-NEXT: lxsibzx f1, r3, r4
7295+
; CHECK-P9-NEXT: addis r4, r2, .LCPI300_0@toc@ha
7296+
; CHECK-P9-NEXT: lfs f2, .LCPI300_0@toc@l(r4)
7297+
; CHECK-P9-NEXT: xscvuxdsp f0, f0
7298+
; CHECK-P9-NEXT: xscvuxdsp f1, f1
7299+
; CHECK-P9-NEXT: xsaddsp f0, f0, f2
7300+
; CHECK-P9-NEXT: xsaddsp f1, f1, f2
7301+
; CHECK-P9-NEXT: stfs f0, 8(r3)
7302+
; CHECK-P9-NEXT: stfs f1, 0(r3)
7303+
; CHECK-P9-NEXT: blr
7304+
;
7305+
; CHECK-P8-LABEL: st_reversed_float_from_i8:
7306+
; CHECK-P8: # %bb.0: # %entry
7307+
; CHECK-P8-NEXT: lbz r4, 0(r3)
7308+
; CHECK-P8-NEXT: lbz r5, 8(r3)
7309+
; CHECK-P8-NEXT: mtfprwz f0, r4
7310+
; CHECK-P8-NEXT: mtfprwz f1, r5
7311+
; CHECK-P8-NEXT: addis r4, r2, .LCPI300_0@toc@ha
7312+
; CHECK-P8-NEXT: lfs f2, .LCPI300_0@toc@l(r4)
7313+
; CHECK-P8-NEXT: xscvuxdsp f0, f0
7314+
; CHECK-P8-NEXT: xscvuxdsp f1, f1
7315+
; CHECK-P8-NEXT: xsaddsp f0, f0, f2
7316+
; CHECK-P8-NEXT: xsaddsp f1, f1, f2
7317+
; CHECK-P8-NEXT: stfs f1, 0(r3)
7318+
; CHECK-P8-NEXT: stfs f0, 8(r3)
7319+
; CHECK-P8-NEXT: blr
7320+
entry:
7321+
%idx = getelementptr inbounds i8, ptr %ptr, i64 8
7322+
%i0 = load i8, ptr %ptr, align 1
7323+
%i1 = load i8, ptr %idx, align 1
7324+
%f0 = uitofp i8 %i0 to float
7325+
%f1 = uitofp i8 %i1 to float
7326+
%a0 = fadd float %f0, -1.280000e+02
7327+
%a1 = fadd float %f1, -1.280000e+02
7328+
store float %a1, ptr %ptr, align 8
7329+
store float %a0, ptr %idx, align 8
7330+
ret void
7331+
}

0 commit comments

Comments
 (0)