Skip to content

Commit d1c3795

Browse files
committed
Revert "Fix overflow flag for i128 USUBO"
This reverts commit d9c31ee.
1 parent 5773061 commit d1c3795

File tree

3 files changed

+0
-58
lines changed

3 files changed

+0
-58
lines changed

llvm/lib/Target/SystemZ/SystemZISelLowering.cpp

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4263,7 +4263,6 @@ SDValue SystemZTargetLowering::lowerXALUO(SDValue Op,
42634263
if (N->getValueType(0) == MVT::i128) {
42644264
unsigned BaseOp = 0;
42654265
unsigned FlagOp = 0;
4266-
bool IsBorrow = false;
42674266
switch (Op.getOpcode()) {
42684267
default: llvm_unreachable("Unknown instruction!");
42694268
case ISD::UADDO:
@@ -4273,17 +4272,13 @@ SDValue SystemZTargetLowering::lowerXALUO(SDValue Op,
42734272
case ISD::USUBO:
42744273
BaseOp = ISD::SUB;
42754274
FlagOp = SystemZISD::VSCBI;
4276-
IsBorrow = true;
42774275
break;
42784276
}
42794277
SDValue Result = DAG.getNode(BaseOp, DL, MVT::i128, LHS, RHS);
42804278
SDValue Flag = DAG.getNode(FlagOp, DL, MVT::i128, LHS, RHS);
42814279
Flag = DAG.getNode(ISD::AssertZext, DL, MVT::i128, Flag,
42824280
DAG.getValueType(MVT::i1));
42834281
Flag = DAG.getZExtOrTrunc(Flag, DL, N->getValueType(1));
4284-
if (IsBorrow)
4285-
Flag = DAG.getNode(ISD::XOR, DL, Flag.getValueType(),
4286-
Flag, DAG.getConstant(1, DL, Flag.getValueType()));
42874282
return DAG.getNode(ISD::MERGE_VALUES, DL, N->getVTList(), Result, Flag);
42884283
}
42894284

@@ -4356,7 +4351,6 @@ SDValue SystemZTargetLowering::lowerUADDSUBO_CARRY(SDValue Op,
43564351
if (VT == MVT::i128) {
43574352
unsigned BaseOp = 0;
43584353
unsigned FlagOp = 0;
4359-
bool IsBorrow = false;
43604354
switch (Op.getOpcode()) {
43614355
default: llvm_unreachable("Unknown instruction!");
43624356
case ISD::UADDO_CARRY:
@@ -4366,21 +4360,14 @@ SDValue SystemZTargetLowering::lowerUADDSUBO_CARRY(SDValue Op,
43664360
case ISD::USUBO_CARRY:
43674361
BaseOp = SystemZISD::VSBI;
43684362
FlagOp = SystemZISD::VSBCBI;
4369-
IsBorrow = true;
43704363
break;
43714364
}
4372-
if (IsBorrow)
4373-
Carry = DAG.getNode(ISD::XOR, DL, Carry.getValueType(),
4374-
Carry, DAG.getConstant(1, DL, Carry.getValueType()));
43754365
Carry = DAG.getZExtOrTrunc(Carry, DL, MVT::i128);
43764366
SDValue Result = DAG.getNode(BaseOp, DL, MVT::i128, LHS, RHS, Carry);
43774367
SDValue Flag = DAG.getNode(FlagOp, DL, MVT::i128, LHS, RHS, Carry);
43784368
Flag = DAG.getNode(ISD::AssertZext, DL, MVT::i128, Flag,
43794369
DAG.getValueType(MVT::i1));
43804370
Flag = DAG.getZExtOrTrunc(Flag, DL, N->getValueType(1));
4381-
if (IsBorrow)
4382-
Flag = DAG.getNode(ISD::XOR, DL, Flag.getValueType(),
4383-
Flag, DAG.getConstant(1, DL, Flag.getValueType()));
43844371
return DAG.getNode(ISD::MERGE_VALUES, DL, N->getVTList(), Result, Flag);
43854372
}
43864373

@@ -6584,27 +6571,6 @@ SDValue SystemZTargetLowering::combineTruncateExtract(
65846571
}
65856572
}
65866573
}
6587-
// Convert (zext (xor (trunc X), C)) into (xor (trunc X), C') if the size
6588-
// of the result is smaller than the size of X and all the truncated bits
6589-
// of X are already zero.
6590-
if (N0.getOpcode() == ISD::XOR &&
6591-
N0.hasOneUse() && N0.getOperand(0).hasOneUse() &&
6592-
N0.getOperand(0).getOpcode() == ISD::TRUNCATE &&
6593-
N0.getOperand(1).getOpcode() == ISD::Constant) {
6594-
SDValue X = N0.getOperand(0).getOperand(0);
6595-
if (VT.isScalarInteger() && VT.getSizeInBits() < X.getValueSizeInBits()) {
6596-
KnownBits Known = DAG.computeKnownBits(X);
6597-
APInt TruncatedBits = APInt::getBitsSet(X.getValueSizeInBits(),
6598-
N0.getValueSizeInBits(),
6599-
VT.getSizeInBits());
6600-
if (TruncatedBits.isSubsetOf(Known.Zero)) {
6601-
X = DAG.getNode(ISD::TRUNCATE, SDLoc(X), VT, X);
6602-
APInt Mask = N0.getConstantOperandAPInt(1).zext(VT.getSizeInBits());
6603-
return DAG.getNode(ISD::XOR, SDLoc(N0), VT,
6604-
X, DAG.getConstant(Mask, SDLoc(N0), VT));
6605-
}
6606-
}
6607-
}
66086574
return SDValue();
66096575
}
66106576

llvm/test/CodeGen/SystemZ/int-usub-12.ll

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ define zeroext i1 @f1(i128 %a, i128 %b, ptr %res) {
1111
; CHECK-NEXT: vscbiq %v2, %v1, %v0
1212
; CHECK-NEXT: vlgvg %r2, %v2, 1
1313
; CHECK-NEXT: vsq %v0, %v1, %v0
14-
; CHECK-NEXT: xilf %r2, 1
1514
; CHECK-NEXT: vst %v0, 0(%r4), 3
1615
; CHECK-NEXT: br %r14
1716
%t = call {i128, i1} @llvm.usub.with.overflow.i128(i128 %a, i128 %b)
@@ -28,7 +27,6 @@ define zeroext i1 @f2(i128 %a, i128 %b) {
2827
; CHECK-NEXT: vl %v1, 0(%r2), 3
2928
; CHECK-NEXT: vscbiq %v0, %v1, %v0
3029
; CHECK-NEXT: vlgvg %r2, %v0, 1
31-
; CHECK-NEXT: xilf %r2, 1
3230
; CHECK-NEXT: br %r14
3331
%t = call {i128, i1} @llvm.usub.with.overflow.i128(i128 %a, i128 %b)
3432
%obit = extractvalue {i128, i1} %t, 1
@@ -48,25 +46,5 @@ define i128 @f3(i128 %a, i128 %b) {
4846
ret i128 %val
4947
}
5048

51-
define i128 @f4(i128 %a, i128 %b) {
52-
; CHECK-LABEL: f4:
53-
; CHECK: # %bb.0:
54-
; CHECK-NEXT: vl %v0, 0(%r4), 3
55-
; CHECK-NEXT: vl %v1, 0(%r3), 3
56-
; CHECK-NEXT: vscbiq %v2, %v1, %v0
57-
; CHECK-NEXT: vlgvf %r0, %v2, 3
58-
; CHECK-NEXT: vgbm %v2, 0
59-
; CHECK-NEXT: xilf %r0, 1
60-
; CHECK-NEXT: jl .LBB3_2
61-
; CHECK-NEXT: # %bb.1:
62-
; CHECK-NEXT: vsq %v2, %v1, %v0
63-
; CHECK-NEXT: .LBB3_2:
64-
; CHECK-NEXT: vst %v2, 0(%r2), 3
65-
; CHECK-NEXT: br %r14
66-
%val = call i128 @llvm.usub.sat.i128(i128 %a, i128 %b)
67-
ret i128 %val
68-
}
69-
7049
declare {i128, i1} @llvm.usub.with.overflow.i128(i128, i128) nounwind readnone
71-
declare i128 @llvm.usub.sat.i128(i128, i128) nounwind readnone
7250

llvm/test/CodeGen/SystemZ/int-usub-13.ll

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ define zeroext i1 @f1(i256 %a, i256 %b, ptr %res) {
1515
; CHECK-NEXT: vlgvg %r2, %v5, 1
1616
; CHECK-NEXT: vsbiq %v0, %v1, %v0, %v4
1717
; CHECK-NEXT: vsq %v1, %v3, %v2
18-
; CHECK-NEXT: xilf %r2, 1
1918
; CHECK-NEXT: vst %v1, 16(%r4), 3
2019
; CHECK-NEXT: vst %v0, 0(%r4), 3
2120
; CHECK-NEXT: br %r14
@@ -36,7 +35,6 @@ define zeroext i1 @f2(i256 %a, i256 %b) {
3635
; CHECK-NEXT: vscbiq %v2, %v3, %v2
3736
; CHECK-NEXT: vsbcbiq %v0, %v1, %v0, %v2
3837
; CHECK-NEXT: vlgvg %r2, %v0, 1
39-
; CHECK-NEXT: xilf %r2, 1
4038
; CHECK-NEXT: br %r14
4139
%t = call {i256, i1} @llvm.usub.with.overflow.i256(i256 %a, i256 %b)
4240
%obit = extractvalue {i256, i1} %t, 1

0 commit comments

Comments
 (0)