@@ -2341,11 +2341,13 @@ Value *InstCombiner::getFreelyInvertedImpl(Value *V, bool WillInvertAllUses,
2341
2341
!shouldAvoidAbsorbingNotIntoSelect (*cast<SelectInst>(V));
2342
2342
// Selects/min/max with invertible operands are freely invertible
2343
2343
if (IsSelect || match (V, m_MaxOrMin (m_Value (A), m_Value (B)))) {
2344
+ bool LocalDoesConsume = DoesConsume;
2344
2345
if (!getFreelyInvertedImpl (B, B->hasOneUse (), /* Builder*/ nullptr ,
2345
- DoesConsume , Depth))
2346
+ LocalDoesConsume , Depth))
2346
2347
return nullptr ;
2347
2348
if (Value *NotA = getFreelyInvertedImpl (A, A->hasOneUse (), Builder,
2348
- DoesConsume, Depth)) {
2349
+ LocalDoesConsume, Depth)) {
2350
+ DoesConsume = LocalDoesConsume;
2349
2351
if (Builder != nullptr ) {
2350
2352
Value *NotB = getFreelyInvertedImpl (B, B->hasOneUse (), Builder,
2351
2353
DoesConsume, Depth);
@@ -2361,12 +2363,13 @@ Value *InstCombiner::getFreelyInvertedImpl(Value *V, bool WillInvertAllUses,
2361
2363
}
2362
2364
2363
2365
if (PHINode *PN = dyn_cast<PHINode>(V)) {
2366
+ bool LocalDoesConsume = DoesConsume;
2364
2367
SmallVector<std::pair<Value *, BasicBlock *>, 8 > IncomingValues;
2365
2368
for (Use &U : PN->operands ()) {
2366
2369
BasicBlock *IncomingBlock = PN->getIncomingBlock (U);
2367
2370
Value *NewIncomingVal = getFreelyInvertedImpl (
2368
2371
U.get (), /* WillInvertAllUses=*/ false ,
2369
- /* Builder=*/ nullptr , DoesConsume , MaxAnalysisRecursionDepth - 1 );
2372
+ /* Builder=*/ nullptr , LocalDoesConsume , MaxAnalysisRecursionDepth - 1 );
2370
2373
if (NewIncomingVal == nullptr )
2371
2374
return nullptr ;
2372
2375
// Make sure that we can safely erase the original PHI node.
@@ -2375,6 +2378,8 @@ Value *InstCombiner::getFreelyInvertedImpl(Value *V, bool WillInvertAllUses,
2375
2378
if (Builder != nullptr )
2376
2379
IncomingValues.emplace_back (NewIncomingVal, IncomingBlock);
2377
2380
}
2381
+
2382
+ DoesConsume = LocalDoesConsume;
2378
2383
if (Builder != nullptr ) {
2379
2384
IRBuilderBase::InsertPointGuard Guard (*Builder);
2380
2385
Builder->SetInsertPoint (PN);
0 commit comments