Skip to content

Commit a87b3b4

Browse files
paulwalker-armguy-david
authored andcommitted
[LLVM][CodeGen][AArch64] Prevent invalid extract_elt within combineStoreValueFPToInt.
This reverts a small part of llvm#147707 that triggers an isel failure because we cannot extract an >i32 element into an i64 result.
1 parent 85bad18 commit a87b3b4

File tree

2 files changed

+2
-8
lines changed

2 files changed

+2
-8
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23988,13 +23988,6 @@ static SDValue combineStoreValueFPToInt(StoreSDNode *ST,
2398823988
SDValue VecFP = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VecSrcVT, FPSrc);
2398923989
SDValue VecConv = DAG.getNode(Value.getOpcode(), DL, VecDstVT, VecFP);
2399023990

23991-
if (ST->isTruncatingStore()) {
23992-
EVT NewVecDstVT = EVT::getVectorVT(
23993-
*DAG.getContext(), ST->getMemoryVT(),
23994-
VecDstVT.getFixedSizeInBits() / ST->getMemoryVT().getFixedSizeInBits());
23995-
VecConv = DAG.getNode(AArch64ISD::NVCAST, DL, NewVecDstVT, VecConv);
23996-
}
23997-
2399823991
SDValue Zero = DAG.getVectorIdxConstant(0, DL);
2399923992
SDValue Extracted =
2400023993
DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, VT, VecConv, Zero);

llvm/test/CodeGen/AArch64/tbl-loops.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ define void @loop1(ptr noalias nocapture noundef writeonly %dst, ptr nocapture n
6464
; CHECK-NEXT: fcsel s2, s0, s3, mi
6565
; CHECK-NEXT: subs w10, w10, #1
6666
; CHECK-NEXT: fcvtzs s2, s2
67-
; CHECK-NEXT: st1 { v2.b }[0], [x9], #1
67+
; CHECK-NEXT: fmov w11, s2
68+
; CHECK-NEXT: strb w11, [x9], #1
6869
; CHECK-NEXT: b.ne .LBB0_7
6970
; CHECK-NEXT: .LBB0_8: // %for.cond.cleanup
7071
; CHECK-NEXT: ret

0 commit comments

Comments
 (0)