Lines Matching full:comparison

157     // We need to make sure that we can do comparison in any order, so we  in visitICmpLoadOperand()
178 // A comparison between two BCE atoms, e.g. `a == o.a` in the example at the
180 // Note: the terminology is misleading: the comparison is symmetric, so there
196 // A basic block with a comparison between two BCE atoms.
197 // The block might do extra work besides the atom comparison, in which case
199 // split into the atom comparison part and the "other work" part
212 // Returns true if the block does other works besides comparison.
230 // The basic block where this comparison happens.
303 // Visit the given comparison. If this is a comparison between two valid
304 // BCE atoms, returns the comparison.
308 // The comparison can only be used once: in visitICmp()
311 // If there are any other uses of the comparison, we cannot merge it with in visitICmp()
333 // Visit the given comparison block. If this is a comparison between two valid
334 // BCE atoms, returns the comparison.
349 // comparison. This is the last link in the chain of comparisons (note in visitCmpBlock()
355 // In this case, we expect a constant incoming value (the comparison is in visitCmpBlock()
388 BCECmpBlock &&Comparison) { in enqueueBlock() argument
389 LLVM_DEBUG(dbgs() << "Block '" << Comparison.BB->getName() in enqueueBlock()
390 << "': Found cmp of " << Comparison.SizeBits() in enqueueBlock()
391 << " bits between " << Comparison.Lhs().BaseId << " + " in enqueueBlock()
392 << Comparison.Lhs().Offset << " and " in enqueueBlock()
393 << Comparison.Rhs().BaseId << " + " in enqueueBlock()
394 << Comparison.Rhs().Offset << "\n"); in enqueueBlock()
396 Comparison.OrigOrder = Comparisons.size(); in enqueueBlock()
397 Comparisons.push_back(std::move(Comparison)); in enqueueBlock()
438 /// Given a chain of comparison blocks, groups the blocks into contiguous
439 /// ranges that can be merged together into a single comparison.
482 std::optional<BCECmpBlock> Comparison = visitCmpBlock( in BCECmpChain() local
484 if (!Comparison) { in BCECmpChain()
488 if (Comparison->doesOtherWork()) { in BCECmpChain()
489 LLVM_DEBUG(dbgs() << "block '" << Comparison->BB->getName() in BCECmpChain()
505 if (Comparison->canSplit(AA)) { in BCECmpChain()
507 << "Split initial block '" << Comparison->BB->getName() in BCECmpChain()
509 Comparison->RequireSplit = true; in BCECmpChain()
510 enqueueBlock(Comparisons, std::move(*Comparison)); in BCECmpChain()
513 << "ignoring initial block '" << Comparison->BB->getName() in BCECmpChain()
543 enqueueBlock(Comparisons, std::move(*Comparison)); in BCECmpChain()
546 // It is possible we have no suitable comparison to merge. in BCECmpChain()
602 // Merges the given contiguous comparison blocks into one memcmp block.
643 LLVM_DEBUG(dbgs() << "Only one comparison, updating branches\n"); in mergeComparisons()
649 // There are no blocks to merge, just do the comparison. in mergeComparisons()
673 // Continue to phi, passing it the comparison result. in mergeComparisons()
690 LLVM_DEBUG(dbgs() << "Simplifying comparison chain starting at block " in simplify()
795 // - Blocks cannot do other work besides the comparison, see doesOtherWork() in processPhi()