Skip to content

Commit a52bc4f

Browse files
committed
Restore assert
Instead disable the 'performAddSubIntoVectorOp' which turned a scalar i64 sub back into a v1i64 sub. I tried disabling the combine before (operation) legalization, but that didn't work. So instead, I've just disabled it if the ISD::SUB needs Expand for v1i64.
1 parent 54d08e4 commit a52bc4f

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3740,10 +3740,8 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
37403740
}
37413741
case ISD::SUB: {
37423742
EVT VT = Node->getValueType(0);
3743-
assert((VT.isFixedLengthVector() || // fixed length ADD can be expanded to
3744-
// scalar ADD
3745-
(TLI.isOperationLegalOrCustom(ISD::ADD, VT) &&
3746-
TLI.isOperationLegalOrCustom(ISD::XOR, VT))) &&
3743+
assert(TLI.isOperationLegalOrCustom(ISD::ADD, VT) &&
3744+
TLI.isOperationLegalOrCustom(ISD::XOR, VT) &&
37473745
"Don't know how to expand this subtraction!");
37483746
Tmp1 = DAG.getNOT(dl, Node->getOperand(1), VT);
37493747
Tmp1 = DAG.getNode(ISD::ADD, dl, VT, Tmp1, DAG.getConstant(1, dl, VT));

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19866,7 +19866,8 @@ performSVEMulAddSubCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI) {
1986619866
// help, for example, to produce ssra from sshr+add.
1986719867
static SDValue performAddSubIntoVectorOp(SDNode *N, SelectionDAG &DAG) {
1986819868
EVT VT = N->getValueType(0);
19869-
if (VT != MVT::i64)
19869+
if (VT != MVT::i64 ||
19870+
DAG.getTargetLoweringInfo().isOperationExpand(N->getOpcode(), MVT::v1i64))
1987019871
return SDValue();
1987119872
SDValue Op0 = N->getOperand(0);
1987219873
SDValue Op1 = N->getOperand(1);

llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-int-arith.ll

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,14 @@ define <1 x i64> @add_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
680680
;
681681
; NONEON-NOSVE-LABEL: add_v1i64:
682682
; NONEON-NOSVE: // %bb.0:
683-
; NONEON-NOSVE-NEXT: add d0, d0, d1
683+
; NONEON-NOSVE-NEXT: sub sp, sp, #16
684+
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
685+
; NONEON-NOSVE-NEXT: fmov x8, d1
686+
; NONEON-NOSVE-NEXT: fmov x9, d0
687+
; NONEON-NOSVE-NEXT: add x8, x9, x8
688+
; NONEON-NOSVE-NEXT: str x8, [sp, #8]
689+
; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
690+
; NONEON-NOSVE-NEXT: add sp, sp, #16
684691
; NONEON-NOSVE-NEXT: ret
685692
%res = add <1 x i64> %op1, %op2
686693
ret <1 x i64> %res
@@ -2312,14 +2319,14 @@ define <1 x i64> @sub_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
23122319
;
23132320
; NONEON-NOSVE-LABEL: sub_v1i64:
23142321
; NONEON-NOSVE: // %bb.0:
2315-
; NONEON-NOSVE-NEXT: mov x8, #-1 // =0xffffffffffffffff
2316-
; NONEON-NOSVE-NEXT: mov w9, #1 // =0x1
2317-
; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #-16]!
2322+
; NONEON-NOSVE-NEXT: sub sp, sp, #16
23182323
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
2319-
; NONEON-NOSVE-NEXT: ldp d3, d2, [sp], #16
2320-
; NONEON-NOSVE-NEXT: eor v1.8b, v1.8b, v2.8b
2321-
; NONEON-NOSVE-NEXT: add d0, d0, d3
2322-
; NONEON-NOSVE-NEXT: add d0, d0, d1
2324+
; NONEON-NOSVE-NEXT: fmov x8, d1
2325+
; NONEON-NOSVE-NEXT: fmov x9, d0
2326+
; NONEON-NOSVE-NEXT: sub x8, x9, x8
2327+
; NONEON-NOSVE-NEXT: str x8, [sp, #8]
2328+
; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]
2329+
; NONEON-NOSVE-NEXT: add sp, sp, #16
23232330
; NONEON-NOSVE-NEXT: ret
23242331
%res = sub <1 x i64> %op1, %op2
23252332
ret <1 x i64> %res

0 commit comments

Comments
 (0)