mirror of
https://github.com/intel/llvm.git
synced 2026-01-17 23:45:25 +08:00
Revert "Look through invertible recurrences in isKnownNonEqual"
This reverts commit be20eae25f. It appears to have caused a crash on a buildbot (https://lab.llvm.org/buildbot#builders/77/builds/5653). Reverting while investigating.
This commit is contained in:
@@ -2580,35 +2580,6 @@ static Optional<unsigned> getInvertibleOperand(const Operator *Op1,
|
||||
if (Op1->getOperand(0)->getType() == Op2->getOperand(0)->getType())
|
||||
return 0;
|
||||
break;
|
||||
case Instruction::PHI: {
|
||||
const PHINode *PN1 = cast<PHINode>(Op1);
|
||||
const PHINode *PN2 = cast<PHINode>(Op2);
|
||||
|
||||
// If PN1 and PN2 are both recurrences, can we prove the entire recurrences
|
||||
// are a single invertible function of the start values? Note that repeated
|
||||
// application of an invertible function is also invertible
|
||||
BinaryOperator *BO1 = nullptr;
|
||||
Value *Start1 = nullptr, *Step1 = nullptr;
|
||||
BinaryOperator *BO2 = nullptr;
|
||||
Value *Start2 = nullptr, *Step2 = nullptr;
|
||||
if (PN1->getParent() != PN2->getParent() ||
|
||||
!matchSimpleRecurrence(PN1, BO1, Start1, Step1) ||
|
||||
!matchSimpleRecurrence(PN2, BO2, Start2, Step2))
|
||||
break;
|
||||
|
||||
Optional<unsigned> Idx = getInvertibleOperand(cast<Operator>(BO1),
|
||||
cast<Operator>(BO2));
|
||||
if (!Idx || *Idx != 0)
|
||||
break;
|
||||
assert(BO1->getOperand(*Idx) == PN1 && BO2->getOperand(*Idx) == PN2);
|
||||
|
||||
if (PN1->getOperand(0) == BO1) {
|
||||
assert(PN2->getOperand(0) == BO2);
|
||||
return 1;
|
||||
}
|
||||
assert(PN1->getOperand(1) == BO1 && PN2->getOperand(1) == BO2);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
@@ -598,7 +598,8 @@ define i1 @recurrence_add_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -774,7 +775,8 @@ define i1 @recurrence_add_neq_phi_order(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -808,7 +810,8 @@ define i1 @recurrence_sub_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -909,7 +912,8 @@ define i1 @recurrence_mul_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -1045,7 +1049,8 @@ define i1 @recurrence_shl_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -1181,7 +1186,8 @@ define i1 @recurrence_lshr_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
@@ -1317,7 +1323,8 @@ define i1 @recurrence_ashr_neq(i8 %A) {
|
||||
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[IV_NEXT]], 10
|
||||
; CHECK-NEXT: br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]]
|
||||
; CHECK: exit:
|
||||
; CHECK-NEXT: ret i1 false
|
||||
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[A_IV]], [[B_IV]]
|
||||
; CHECK-NEXT: ret i1 [[RES]]
|
||||
;
|
||||
entry:
|
||||
%B = add i8 %A, 1
|
||||
|
||||
Reference in New Issue
Block a user