Skip to content

Commit 3a4d506

Browse files
[LLVM][CodeGen][AArch64] Prevent invalid extract_elt within combineStoreValueFPToInt.
This reverts a small part of #147707 that triggers an isel failure because we cannot extract an >i32 element into an i64 result.
1 parent 6b76ca8 commit 3a4d506

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
@@ -24174,13 +24174,6 @@ static SDValue combineStoreValueFPToInt(StoreSDNode *ST,
2417424174
SDValue VecFP = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VecSrcVT, FPSrc);
2417524175
SDValue VecConv = DAG.getNode(Value.getOpcode(), DL, VecDstVT, VecFP);
2417624176

24177-
if (ST->isTruncatingStore()) {
24178-
EVT NewVecDstVT = EVT::getVectorVT(
24179-
*DAG.getContext(), ST->getMemoryVT(),
24180-
VecDstVT.getFixedSizeInBits() / ST->getMemoryVT().getFixedSizeInBits());
24181-
VecConv = DAG.getNode(AArch64ISD::NVCAST, DL, NewVecDstVT, VecConv);
24182-
}
24183-
2418424177
SDValue Zero = DAG.getVectorIdxConstant(0, DL);
2418524178
SDValue Extracted =
2418624179
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)