LLVM 24.0.0git
Local.cpp
Go to the documentation of this file.
1//===- Local.cpp - Functions to perform local transformations -------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This family of functions perform various local transformations to the
10// program.
11//
12//===----------------------------------------------------------------------===//
13
15#include "llvm/ADT/APInt.h"
16#include "llvm/ADT/DenseMap.h"
17#include "llvm/ADT/DenseSet.h"
18#include "llvm/ADT/Hashing.h"
19#include "llvm/ADT/STLExtras.h"
20#include "llvm/ADT/SetVector.h"
23#include "llvm/ADT/Statistic.h"
34#include "llvm/IR/Argument.h"
35#include "llvm/IR/Attributes.h"
36#include "llvm/IR/BasicBlock.h"
37#include "llvm/IR/CFG.h"
38#include "llvm/IR/Constant.h"
40#include "llvm/IR/Constants.h"
41#include "llvm/IR/DIBuilder.h"
42#include "llvm/IR/DataLayout.h"
43#include "llvm/IR/DebugInfo.h"
45#include "llvm/IR/DebugLoc.h"
47#include "llvm/IR/Dominators.h"
49#include "llvm/IR/Function.h"
51#include "llvm/IR/IRBuilder.h"
52#include "llvm/IR/InstrTypes.h"
53#include "llvm/IR/Instruction.h"
56#include "llvm/IR/Intrinsics.h"
57#include "llvm/IR/IntrinsicsWebAssembly.h"
58#include "llvm/IR/LLVMContext.h"
59#include "llvm/IR/MDBuilder.h"
61#include "llvm/IR/Metadata.h"
62#include "llvm/IR/Module.h"
65#include "llvm/IR/Type.h"
66#include "llvm/IR/Use.h"
67#include "llvm/IR/User.h"
68#include "llvm/IR/Value.h"
69#include "llvm/IR/ValueHandle.h"
73#include "llvm/Support/Debug.h"
79#include <algorithm>
80#include <cassert>
81#include <cstdint>
82#include <iterator>
83#include <map>
84#include <optional>
85#include <utility>
86
87using namespace llvm;
88using namespace llvm::PatternMatch;
89
90#define DEBUG_TYPE "local"
91
92STATISTIC(NumRemoved, "Number of unreachable basic blocks removed");
93STATISTIC(NumPHICSEs, "Number of PHI's that got CSE'd");
94
96 "phicse-debug-hash",
97#ifdef EXPENSIVE_CHECKS
98 cl::init(true),
99#else
100 cl::init(false),
101#endif
103 cl::desc("Perform extra assertion checking to verify that PHINodes's hash "
104 "function is well-behaved w.r.t. its isEqual predicate"));
105
107 "phicse-num-phi-smallsize", cl::init(32), cl::Hidden,
108 cl::desc(
109 "When the basic block contains not more than this number of PHI nodes, "
110 "perform a (faster!) exhaustive search instead of set-driven one."));
111
113 "max-phi-entries-increase-after-removing-empty-block", cl::init(1000),
115 cl::desc("Stop removing an empty block if removing it will introduce more "
116 "than this number of phi entries in its successor"));
117
118// Max recursion depth for collectBitParts used when detecting bswap and
119// bitreverse idioms.
120static const unsigned BitPartRecursionMaxDepth = 48;
121
122//===----------------------------------------------------------------------===//
123// Local constant propagation.
124//
125
126/// ConstantFoldTerminator - If a terminator instruction is predicated on a
127/// constant value, convert it into an unconditional branch to the constant
128/// destination. This is a nontrivial operation because the successors of this
129/// basic block must have their PHI nodes updated.
130/// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch
131/// conditions and indirectbr addresses this might make dead if
132/// DeleteDeadConditions is true.
133bool llvm::ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions,
134 const TargetLibraryInfo *TLI,
135 DomTreeUpdater *DTU) {
136 Instruction *T = BB->getTerminator();
137 IRBuilder<> Builder(T);
138
139 // Branch - See if we are conditional jumping on constant
140 if (auto *BI = dyn_cast<CondBrInst>(T)) {
141 BasicBlock *Dest1 = BI->getSuccessor(0);
142 BasicBlock *Dest2 = BI->getSuccessor(1);
143
144 if (Dest2 == Dest1) { // Conditional branch to same location?
145 // This branch matches something like this:
146 // br bool %cond, label %Dest, label %Dest
147 // and changes it into: br label %Dest
148
149 // Let the basic block know that we are letting go of one copy of it.
150 assert(BI->getParent() && "Terminator not inserted in block!");
151 Dest1->removePredecessor(BI->getParent());
152
153 // Replace the conditional branch with an unconditional one.
154 UncondBrInst *NewBI = Builder.CreateBr(Dest1);
155
156 // Transfer the metadata to the new branch instruction.
157 NewBI->copyMetadata(*BI, {LLVMContext::MD_loop, LLVMContext::MD_dbg,
158 LLVMContext::MD_annotation});
159
160 Value *Cond = BI->getCondition();
161 BI->eraseFromParent();
162 if (DeleteDeadConditions)
164 return true;
165 }
166
167 if (auto *Cond = dyn_cast<ConstantInt>(BI->getCondition())) {
168 // Are we branching on constant?
169 // YES. Change to unconditional branch...
170 BasicBlock *Destination = Cond->getZExtValue() ? Dest1 : Dest2;
171 BasicBlock *OldDest = Cond->getZExtValue() ? Dest2 : Dest1;
172
173 // Let the basic block know that we are letting go of it. Based on this,
174 // it will adjust it's PHI nodes.
175 OldDest->removePredecessor(BB);
176
177 // Replace the conditional branch with an unconditional one.
178 UncondBrInst *NewBI = Builder.CreateBr(Destination);
179
180 // Transfer the metadata to the new branch instruction.
181 NewBI->copyMetadata(*BI, {LLVMContext::MD_loop, LLVMContext::MD_dbg,
182 LLVMContext::MD_annotation});
183
184 BI->eraseFromParent();
185 if (DTU)
186 DTU->applyUpdates({{DominatorTree::Delete, BB, OldDest}});
187 return true;
188 }
189
190 return false;
191 }
192
193 if (auto *SI = dyn_cast<SwitchInst>(T)) {
194 // If we are switching on a constant, we can convert the switch to an
195 // unconditional branch.
196 auto *CI = dyn_cast<ConstantInt>(SI->getCondition());
197 BasicBlock *DefaultDest = SI->getDefaultDest();
198 BasicBlock *TheOnlyDest = DefaultDest;
199
200 // If the default is unreachable, ignore it when searching for TheOnlyDest.
201 if (SI->defaultDestUnreachable() && SI->getNumCases() > 0)
202 TheOnlyDest = SI->case_begin()->getCaseSuccessor();
203
204 bool Changed = false;
205
206 // Figure out which case it goes to.
207 for (auto It = SI->case_begin(), End = SI->case_end(); It != End;) {
208 // Found case matching a constant operand?
209 if (It->getCaseValue() == CI) {
210 TheOnlyDest = It->getCaseSuccessor();
211 break;
212 }
213
214 // Check to see if this branch is going to the same place as the default
215 // dest. If so, eliminate it as an explicit compare.
216 if (It->getCaseSuccessor() == DefaultDest) {
218 unsigned NCases = SI->getNumCases();
219 // Fold the case metadata into the default if there will be any branches
220 // left, unless the metadata doesn't match the switch.
221 if (NCases > 1 && MD) {
222 // Collect branch weights into a vector.
224 extractFromBranchWeightMD64(MD, Weights);
225
226 // Merge weight of this case to the default weight.
227 unsigned Idx = It->getCaseIndex();
228
229 // Check for and prevent uint64_t overflow by reducing branch weights.
230 if (Weights[0] > UINT64_MAX - Weights[Idx + 1])
231 fitWeights(Weights);
232
233 Weights[0] += Weights[Idx + 1];
234 // Remove weight for this case.
235 std::swap(Weights[Idx + 1], Weights.back());
236 Weights.pop_back();
238 }
239 // Remove this entry.
240 BasicBlock *ParentBB = SI->getParent();
241 DefaultDest->removePredecessor(ParentBB);
242 It = SI->removeCase(It);
243 End = SI->case_end();
244
245 // Removing this case may have made the condition constant. In that
246 // case, update CI and restart iteration through the cases.
247 if (auto *NewCI = dyn_cast<ConstantInt>(SI->getCondition())) {
248 CI = NewCI;
249 It = SI->case_begin();
250 }
251
252 Changed = true;
253 continue;
254 }
255
256 // Otherwise, check to see if the switch only branches to one destination.
257 // We do this by reseting "TheOnlyDest" to null when we find two non-equal
258 // destinations.
259 if (It->getCaseSuccessor() != TheOnlyDest)
260 TheOnlyDest = nullptr;
261
262 // Increment this iterator as we haven't removed the case.
263 ++It;
264 }
265
266 if (CI && !TheOnlyDest) {
267 // Branching on a constant, but not any of the cases, go to the default
268 // successor.
269 TheOnlyDest = SI->getDefaultDest();
270 }
271
272 // If we found a single destination that we can fold the switch into, do so
273 // now.
274 if (TheOnlyDest) {
275 // Insert the new branch.
276 Builder.CreateBr(TheOnlyDest);
277 BasicBlock *BB = SI->getParent();
278
279 SmallPtrSet<BasicBlock *, 8> RemovedSuccessors;
280
281 // Remove entries from PHI nodes which we no longer branch to...
282 BasicBlock *SuccToKeep = TheOnlyDest;
283 for (BasicBlock *Succ : successors(SI)) {
284 if (DTU && Succ != TheOnlyDest)
285 RemovedSuccessors.insert(Succ);
286 // Found case matching a constant operand?
287 if (Succ == SuccToKeep) {
288 SuccToKeep = nullptr; // Don't modify the first branch to TheOnlyDest
289 } else {
290 Succ->removePredecessor(BB);
291 }
292 }
293
294 // Delete the old switch.
295 Value *Cond = SI->getCondition();
296 SI->eraseFromParent();
297 if (DeleteDeadConditions)
299 if (DTU) {
300 std::vector<DominatorTree::UpdateType> Updates;
301 Updates.reserve(RemovedSuccessors.size());
302 for (auto *RemovedSuccessor : RemovedSuccessors)
303 Updates.push_back({DominatorTree::Delete, BB, RemovedSuccessor});
304 DTU->applyUpdates(Updates);
305 }
306 return true;
307 }
308
309 if (SI->getNumCases() == 1) {
310 // Otherwise, we can fold this switch into a conditional branch
311 // instruction if it has only one non-default destination.
312 auto FirstCase = *SI->case_begin();
313 Value *Cond = Builder.CreateICmpEQ(SI->getCondition(),
314 FirstCase.getCaseValue(), "cond");
315
316 // Insert the new branch.
317 CondBrInst *NewBr = Builder.CreateCondBr(
318 Cond, FirstCase.getCaseSuccessor(), SI->getDefaultDest());
319 SmallVector<uint32_t> Weights;
320 if (extractBranchWeights(*SI, Weights) && Weights.size() == 2) {
321 uint32_t DefWeight = Weights[0];
322 uint32_t CaseWeight = Weights[1];
323 // The TrueWeight should be the weight for the single case of SI.
324 NewBr->setMetadata(LLVMContext::MD_prof,
325 MDBuilder(BB->getContext())
326 .createBranchWeights(CaseWeight, DefWeight));
327 }
328
329 // Update make.implicit metadata to the newly-created conditional branch.
330 MDNode *MakeImplicitMD = SI->getMetadata(LLVMContext::MD_make_implicit);
331 if (MakeImplicitMD)
332 NewBr->setMetadata(LLVMContext::MD_make_implicit, MakeImplicitMD);
333
334 // Delete the old switch.
335 SI->eraseFromParent();
336 return true;
337 }
338 return Changed;
339 }
340
341 if (auto *IBI = dyn_cast<IndirectBrInst>(T)) {
342 // indirectbr blockaddress(@F, @BB) -> br label @BB
343 if (auto *BA =
344 dyn_cast<BlockAddress>(IBI->getAddress()->stripPointerCasts())) {
345 BasicBlock *TheOnlyDest = BA->getBasicBlock();
346 SmallPtrSet<BasicBlock *, 8> RemovedSuccessors;
347
348 // Insert the new branch.
349 Builder.CreateBr(TheOnlyDest);
350
351 BasicBlock *SuccToKeep = TheOnlyDest;
352 for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
353 BasicBlock *DestBB = IBI->getDestination(i);
354 if (DTU && DestBB != TheOnlyDest)
355 RemovedSuccessors.insert(DestBB);
356 if (IBI->getDestination(i) == SuccToKeep) {
357 SuccToKeep = nullptr;
358 } else {
359 DestBB->removePredecessor(BB);
360 }
361 }
362 Value *Address = IBI->getAddress();
363 IBI->eraseFromParent();
364 if (DeleteDeadConditions)
365 // Delete pointer cast instructions.
367
368 // Also zap the blockaddress constant if there are no users remaining,
369 // otherwise the destination is still marked as having its address taken.
370 if (BA->use_empty())
371 BA->destroyConstant();
372
373 // If we didn't find our destination in the IBI successor list, then we
374 // have undefined behavior. Replace the unconditional branch with an
375 // 'unreachable' instruction.
376 if (SuccToKeep) {
378 new UnreachableInst(BB->getContext(), BB);
379 }
380
381 if (DTU) {
382 std::vector<DominatorTree::UpdateType> Updates;
383 Updates.reserve(RemovedSuccessors.size());
384 for (auto *RemovedSuccessor : RemovedSuccessors)
385 Updates.push_back({DominatorTree::Delete, BB, RemovedSuccessor});
386 DTU->applyUpdates(Updates);
387 }
388 return true;
389 }
390 }
391
392 return false;
393}
394
395//===----------------------------------------------------------------------===//
396// Local dead code elimination.
397//
398
399/// isInstructionTriviallyDead - Return true if the result produced by the
400/// instruction is not used, and the instruction has no side effects.
401///
403 const TargetLibraryInfo *TLI) {
404 if (!I->use_empty())
405 return false;
407}
408
410 const TargetLibraryInfo *TLI) {
411 if (I->isTerminator())
412 return false;
413
414 // We don't want the landingpad-like instructions removed by anything this
415 // general.
416 if (I->isEHPad())
417 return false;
418
419 if (const DbgLabelInst *DLI = dyn_cast<DbgLabelInst>(I)) {
420 if (DLI->getLabel())
421 return false;
422 return true;
423 }
424
425 if (auto *CB = dyn_cast<CallBase>(I))
426 if (isRemovableAlloc(CB, TLI))
427 return true;
428
429 if (!I->willReturn()) {
431 if (!II)
432 return false;
433
434 switch (II->getIntrinsicID()) {
435 case Intrinsic::experimental_guard: {
436 // Guards on true are operationally no-ops. In the future we can
437 // consider more sophisticated tradeoffs for guards considering potential
438 // for check widening, but for now we keep things simple.
439 auto *Cond = dyn_cast<ConstantInt>(II->getArgOperand(0));
440 return Cond && Cond->isOne();
441 }
442 // TODO: These intrinsics are not safe to remove, because this may remove
443 // a well-defined trap.
444 case Intrinsic::wasm_trunc_signed:
445 case Intrinsic::wasm_trunc_unsigned:
446 case Intrinsic::ptrauth_auth:
447 case Intrinsic::ptrauth_resign:
448 case Intrinsic::ptrauth_resign_load_relative:
449 return true;
450 default:
451 return false;
452 }
453 }
454
455 if (!I->mayHaveSideEffects())
456 return true;
457
458 // Special case intrinsics that "may have side effects" but can be deleted
459 // when dead.
461 // Safe to delete llvm.stacksave and launder.invariant.group if dead.
462 if (II->getIntrinsicID() == Intrinsic::stacksave ||
463 II->getIntrinsicID() == Intrinsic::launder_invariant_group)
464 return true;
465
466 // Intrinsics declare sideeffects to prevent them from moving, but they are
467 // nops without users.
468 if (II->getIntrinsicID() == Intrinsic::allow_runtime_check ||
469 II->getIntrinsicID() == Intrinsic::allow_ubsan_check)
470 return true;
471
472 if (II->isLifetimeStartOrEnd()) {
473 auto *Arg = II->getArgOperand(0);
474 if (isa<PoisonValue>(Arg))
475 return true;
476
477 // If the only uses of the alloca are lifetime intrinsics, then the
478 // intrinsics are dead.
479 return llvm::all_of(Arg->uses(), [](Use &Use) {
480 return isa<LifetimeIntrinsic>(Use.getUser());
481 });
482 }
483
484 // Assumptions are dead if their condition is trivially true.
485 if (II->getIntrinsicID() == Intrinsic::assume &&
487 if (ConstantInt *Cond = dyn_cast<ConstantInt>(II->getArgOperand(0)))
488 return !Cond->isZero();
489
490 return false;
491 }
492
493 if (auto *FPI = dyn_cast<ConstrainedFPIntrinsic>(I)) {
494 std::optional<fp::ExceptionBehavior> ExBehavior =
495 FPI->getExceptionBehavior();
496 return *ExBehavior != fp::ebStrict;
497 }
498 }
499
500 if (auto *Call = dyn_cast<CallBase>(I)) {
501 if (Value *FreedOp = getFreedOperand(Call, TLI))
502 if (Constant *C = dyn_cast<Constant>(FreedOp))
503 return C->isNullValue() || isa<UndefValue>(C);
504 if (isMathLibCallNoop(Call, TLI))
505 return true;
506 }
507
508 // Non-volatile atomic loads from constants can be removed.
509 if (auto *LI = dyn_cast<LoadInst>(I))
510 if (auto *GV = dyn_cast<GlobalVariable>(
511 LI->getPointerOperand()->stripPointerCasts()))
512 if (!LI->isVolatile() && GV->isConstant())
513 return true;
514
515 return false;
516}
517
518/// RecursivelyDeleteTriviallyDeadInstructions - If the specified value is a
519/// trivially dead instruction, delete it. If that makes any of its operands
520/// trivially dead, delete them too, recursively. Return true if any
521/// instructions were deleted.
523 Value *V, const TargetLibraryInfo *TLI, MemorySSAUpdater *MSSAU,
524 std::function<void(Value *)> AboutToDeleteCallback) {
526 if (!I || !isInstructionTriviallyDead(I, TLI))
527 return false;
528
530 DeadInsts.push_back(I);
531 RecursivelyDeleteTriviallyDeadInstructions(DeadInsts, TLI, MSSAU,
532 AboutToDeleteCallback);
533
534 return true;
535}
536
539 MemorySSAUpdater *MSSAU,
540 std::function<void(Value *)> AboutToDeleteCallback) {
541 unsigned S = 0, E = DeadInsts.size(), Alive = 0;
542 for (; S != E; ++S) {
543 auto *I = dyn_cast_or_null<Instruction>(DeadInsts[S]);
544 if (!I || !isInstructionTriviallyDead(I)) {
545 DeadInsts[S] = nullptr;
546 ++Alive;
547 }
548 }
549 if (Alive == E)
550 return false;
551 RecursivelyDeleteTriviallyDeadInstructions(DeadInsts, TLI, MSSAU,
552 AboutToDeleteCallback);
553 return true;
554}
555
558 MemorySSAUpdater *MSSAU,
559 std::function<void(Value *)> AboutToDeleteCallback) {
560 // Process the dead instruction list until empty.
561 while (!DeadInsts.empty()) {
562 Value *V = DeadInsts.pop_back_val();
564 if (!I)
565 continue;
567 "Live instruction found in dead worklist!");
568 assert(I->use_empty() && "Instructions with uses are not dead.");
569
570 // Don't lose the debug info while deleting the instructions.
572
573 if (AboutToDeleteCallback)
574 AboutToDeleteCallback(I);
575
576 // Null out all of the instruction's operands to see if any operand becomes
577 // dead as we go.
578 for (Use &OpU : I->operands()) {
579 Value *OpV = OpU.get();
580 OpU.set(nullptr);
581
582 if (!OpV->use_empty())
583 continue;
584
585 // If the operand is an instruction that became dead as we nulled out the
586 // operand, and if it is 'trivially' dead, delete it in a future loop
587 // iteration.
588 if (Instruction *OpI = dyn_cast<Instruction>(OpV))
589 if (isInstructionTriviallyDead(OpI, TLI))
590 DeadInsts.push_back(OpI);
591 }
592 if (MSSAU)
593 MSSAU->removeMemoryAccess(I);
594
595 I->eraseFromParent();
596 }
597}
598
599/// areAllUsesEqual - Check whether the uses of a value are all the same.
600/// This is similar to Instruction::hasOneUse() except this will also return
601/// true when there are no uses or multiple uses that all refer to the same
602/// value.
604 Value::user_iterator UI = I->user_begin();
605 Value::user_iterator UE = I->user_end();
606 if (UI == UE)
607 return true;
608
609 User *TheUse = *UI;
610 for (++UI; UI != UE; ++UI) {
611 if (*UI != TheUse)
612 return false;
613 }
614 return true;
615}
616
617/// RecursivelyDeleteDeadPHINode - If the specified value is an effectively
618/// dead PHI node, due to being a def-use chain of single-use nodes that
619/// either forms a cycle or is terminated by a trivially dead instruction,
620/// delete it. If that makes any of its operands trivially dead, delete them
621/// too, recursively. Return true if a change was made.
623 PHINode *PN, const TargetLibraryInfo *TLI, llvm::MemorySSAUpdater *MSSAU,
624 SmallPtrSetImpl<PHINode *> *KnownNonDeadPHIs) {
626 SmallVector<PHINode *, 8> VisitedPHIs;
627
628 for (Instruction *I = PN; areAllUsesEqual(I) && !I->mayHaveSideEffects();
629 I = cast<Instruction>(*I->user_begin())) {
630 if (I->use_empty())
632
633 // If we find an instruction more than once, we're on a cycle that
634 // won't prove fruitful.
635 if (!Visited.insert(I).second) {
636 // Break the cycle and delete the instruction and its operands.
637 I->replaceAllUsesWith(PoisonValue::get(I->getType()));
639 return true;
640 }
641
642 if (PHINode *CurPN = dyn_cast<PHINode>(I)) {
643 if (KnownNonDeadPHIs && KnownNonDeadPHIs->contains(CurPN))
644 break;
645 VisitedPHIs.push_back(CurPN);
646 }
647 }
648
649 if (KnownNonDeadPHIs)
650 for (PHINode *VisitedPN : VisitedPHIs)
651 KnownNonDeadPHIs->insert(VisitedPN);
652
653 return false;
654}
655
656static bool
659 const DataLayout &DL,
660 const TargetLibraryInfo *TLI) {
661 if (isInstructionTriviallyDead(I, TLI)) {
663
664 // Null out all of the instruction's operands to see if any operand becomes
665 // dead as we go.
666 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
667 Value *OpV = I->getOperand(i);
668 I->setOperand(i, nullptr);
669
670 if (!OpV->use_empty() || I == OpV)
671 continue;
672
673 // If the operand is an instruction that became dead as we nulled out the
674 // operand, and if it is 'trivially' dead, delete it in a future loop
675 // iteration.
676 if (Instruction *OpI = dyn_cast<Instruction>(OpV))
677 if (isInstructionTriviallyDead(OpI, TLI))
678 WorkList.insert(OpI);
679 }
680
681 I->eraseFromParent();
682
683 return true;
684 }
685
686 if (Value *SimpleV = simplifyInstruction(I, DL)) {
687 // Add the users to the worklist. CAREFUL: an instruction can use itself,
688 // in the case of a phi node.
689 for (User *U : I->users()) {
690 if (U != I) {
691 WorkList.insert(cast<Instruction>(U));
692 }
693 }
694
695 // Replace the instruction with its simplified value.
696 bool Changed = false;
697 if (!I->use_empty()) {
698 I->replaceAllUsesWith(SimpleV);
699 Changed = true;
700 }
701 if (isInstructionTriviallyDead(I, TLI)) {
702 I->eraseFromParent();
703 Changed = true;
704 }
705 return Changed;
706 }
707 return false;
708}
709
710/// SimplifyInstructionsInBlock - Scan the specified basic block and try to
711/// simplify any instructions in it and recursively delete dead instructions.
712///
713/// This returns true if it changed the code, note that it can delete
714/// instructions in other blocks as well in this block.
716 const TargetLibraryInfo *TLI) {
717 bool MadeChange = false;
718 const DataLayout &DL = BB->getDataLayout();
719
720#ifndef NDEBUG
721 // In debug builds, ensure that the terminator of the block is never replaced
722 // or deleted by these simplifications. The idea of simplification is that it
723 // cannot introduce new instructions, and there is no way to replace the
724 // terminator of a block without introducing a new instruction.
725 AssertingVH<Instruction> TerminatorVH(&BB->back());
726#endif
727
729 // Iterate over the original function, only adding insts to the worklist
730 // if they actually need to be revisited. This avoids having to pre-init
731 // the worklist with the entire function's worth of instructions.
732 for (BasicBlock::iterator BI = BB->begin(), E = std::prev(BB->end());
733 BI != E;) {
734 assert(!BI->isTerminator());
735 Instruction *I = &*BI;
736 ++BI;
737
738 // We're visiting this instruction now, so make sure it's not in the
739 // worklist from an earlier visit.
740 if (!WorkList.count(I))
741 MadeChange |= simplifyAndDCEInstruction(I, WorkList, DL, TLI);
742 }
743
744 while (!WorkList.empty()) {
745 Instruction *I = WorkList.pop_back_val();
746 MadeChange |= simplifyAndDCEInstruction(I, WorkList, DL, TLI);
747 }
748 return MadeChange;
749}
750
751//===----------------------------------------------------------------------===//
752// Control Flow Graph Restructuring.
753//
754
756 DomTreeUpdater *DTU) {
757
758 // If BB has single-entry PHI nodes, fold them.
759 while (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
760 Value *NewVal = PN->getIncomingValue(0);
761 // Replace self referencing PHI with poison, it must be dead.
762 if (NewVal == PN) NewVal = PoisonValue::get(PN->getType());
763 PN->replaceAllUsesWith(NewVal);
764 PN->eraseFromParent();
765 }
766
767 BasicBlock *PredBB = DestBB->getSinglePredecessor();
768 assert(PredBB && "Block doesn't have a single predecessor!");
769
770 bool ReplaceEntryBB = PredBB->isEntryBlock();
771
772 // DTU updates: Collect all the edges that enter
773 // PredBB. These dominator edges will be redirected to DestBB.
775
776 if (DTU) {
777 // To avoid processing the same predecessor more than once.
779 Updates.reserve(Updates.size() + 2 * pred_size(PredBB) + 1);
780 for (BasicBlock *PredOfPredBB : predecessors(PredBB))
781 // This predecessor of PredBB may already have DestBB as a successor.
782 if (PredOfPredBB != PredBB)
783 if (SeenPreds.insert(PredOfPredBB).second)
784 Updates.push_back({DominatorTree::Insert, PredOfPredBB, DestBB});
785 SeenPreds.clear();
786 for (BasicBlock *PredOfPredBB : predecessors(PredBB))
787 if (SeenPreds.insert(PredOfPredBB).second)
788 Updates.push_back({DominatorTree::Delete, PredOfPredBB, PredBB});
789 Updates.push_back({DominatorTree::Delete, PredBB, DestBB});
790 }
791
792 // Zap anything that took the address of DestBB. Not doing this will give the
793 // address an invalid value.
794 if (DestBB->hasAddressTaken()) {
795 BlockAddress *BA = BlockAddress::get(DestBB);
796 Constant *Replacement =
797 ConstantInt::get(Type::getInt32Ty(BA->getContext()), 1);
799 BA->getType()));
800 BA->destroyConstant();
801 }
802
803 // Anything that branched to PredBB now branches to DestBB.
804 PredBB->replaceAllUsesWith(DestBB);
805
806 // Splice all the instructions from PredBB to DestBB.
807 PredBB->getTerminator()->eraseFromParent();
808 DestBB->splice(DestBB->begin(), PredBB);
809 new UnreachableInst(PredBB->getContext(), PredBB);
810
811 // If the PredBB is the entry block of the function, move DestBB up to
812 // become the entry block after we erase PredBB.
813 if (ReplaceEntryBB)
814 DestBB->moveAfter(PredBB);
815
816 if (DTU) {
817 assert(PredBB->size() == 1 &&
819 "The successor list of PredBB isn't empty before "
820 "applying corresponding DTU updates.");
821 DTU->applyUpdatesPermissive(Updates);
822 DTU->deleteBB(PredBB);
823 // Recalculation of DomTree is needed when updating a forward DomTree and
824 // the Entry BB is replaced.
825 if (ReplaceEntryBB && DTU->hasDomTree()) {
826 // The entry block was removed and there is no external interface for
827 // the dominator tree to be notified of this change. In this corner-case
828 // we recalculate the entire tree.
829 DTU->recalculate(*(DestBB->getParent()));
830 }
831 }
832
833 else {
834 PredBB->eraseFromParent(); // Nuke BB if DTU is nullptr.
835 }
836}
837
838/// Return true if we can choose one of these values to use in place of the
839/// other. Note that we will always choose the non-undef value to keep.
840static bool CanMergeValues(Value *First, Value *Second) {
841 return First == Second || isa<UndefValue>(First) || isa<UndefValue>(Second);
842}
843
844/// Return true if we can fold BB, an almost-empty BB ending in an unconditional
845/// branch to Succ, into Succ.
846///
847/// Assumption: Succ is the single successor for BB.
848static bool
850 const SmallPtrSetImpl<BasicBlock *> &BBPreds) {
851 assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
852
853 LLVM_DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
854 << Succ->getName() << "\n");
855 // Shortcut, if there is only a single predecessor it must be BB and merging
856 // is always safe
857 if (Succ->getSinglePredecessor())
858 return true;
859
860 // Look at all the phi nodes in Succ, to see if they present a conflict when
861 // merging these blocks
862 for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
863 PHINode *PN = cast<PHINode>(I);
864
865 // If the incoming value from BB is again a PHINode in
866 // BB which has the same incoming value for *PI as PN does, we can
867 // merge the phi nodes and then the blocks can still be merged
869 if (BBPN && BBPN->getParent() == BB) {
870 for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
871 BasicBlock *IBB = PN->getIncomingBlock(PI);
872 if (BBPreds.count(IBB) &&
874 PN->getIncomingValue(PI))) {
876 << "Can't fold, phi node " << PN->getName() << " in "
877 << Succ->getName() << " is conflicting with "
878 << BBPN->getName() << " with regard to common predecessor "
879 << IBB->getName() << "\n");
880 return false;
881 }
882 }
883 } else {
884 Value* Val = PN->getIncomingValueForBlock(BB);
885 for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
886 // See if the incoming value for the common predecessor is equal to the
887 // one for BB, in which case this phi node will not prevent the merging
888 // of the block.
889 BasicBlock *IBB = PN->getIncomingBlock(PI);
890 if (BBPreds.count(IBB) &&
891 !CanMergeValues(Val, PN->getIncomingValue(PI))) {
892 LLVM_DEBUG(dbgs() << "Can't fold, phi node " << PN->getName()
893 << " in " << Succ->getName()
894 << " is conflicting with regard to common "
895 << "predecessor " << IBB->getName() << "\n");
896 return false;
897 }
898 }
899 }
900 }
901
902 return true;
903}
904
907
908/// Determines the value to use as the phi node input for a block.
909///
910/// Select between \p OldVal any value that we know flows from \p BB
911/// to a particular phi on the basis of which one (if either) is not
912/// undef. Update IncomingValues based on the selected value.
913///
914/// \param OldVal The value we are considering selecting.
915/// \param BB The block that the value flows in from.
916/// \param IncomingValues A map from block-to-value for other phi inputs
917/// that we have examined.
918///
919/// \returns the selected value.
921 IncomingValueMap &IncomingValues) {
922 IncomingValueMap::const_iterator It = IncomingValues.find(BB);
923 if (!isa<UndefValue>(OldVal)) {
924 assert((It != IncomingValues.end() &&
925 (!(It->second) || It->second == OldVal)) &&
926 "Expected OldVal to match incoming value from BB!");
927
928 IncomingValues.insert_or_assign(BB, OldVal);
929 return OldVal;
930 }
931
932 if (It != IncomingValues.end() && It->second)
933 return It->second;
934
935 return OldVal;
936}
937
938/// Create a map from block to value for the operands of a
939/// given phi.
940///
941/// This function initializes the map with UndefValue for all predecessors
942/// in BBPreds, and then updates the map with concrete non-undef values
943/// found in the PHI node.
944///
945/// \param PN The phi we are collecting the map for.
946/// \param BBPreds The list of all predecessor blocks to initialize with Undef.
947/// \param IncomingValues [out] The map from block to value for this phi.
949 const PredBlockVector &BBPreds,
950 IncomingValueMap &IncomingValues) {
951 for (BasicBlock *Pred : BBPreds)
952 IncomingValues[Pred] = nullptr;
953
954 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
955 Value *V = PN->getIncomingValue(i);
956 if (isa<UndefValue>(V))
957 continue;
958
959 BasicBlock *BB = PN->getIncomingBlock(i);
960 auto It = IncomingValues.find(BB);
961 if (It != IncomingValues.end())
962 It->second = V;
963 }
964}
965
966/// Replace the incoming undef values to a phi with the values
967/// from a block-to-value map.
968///
969/// \param PN The phi we are replacing the undefs in.
970/// \param IncomingValues A map from block to value.
972 const IncomingValueMap &IncomingValues) {
973 SmallVector<unsigned> TrueUndefOps;
974 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
975 Value *V = PN->getIncomingValue(i);
976
977 if (!isa<UndefValue>(V)) continue;
978
979 BasicBlock *BB = PN->getIncomingBlock(i);
980 IncomingValueMap::const_iterator It = IncomingValues.find(BB);
981 if (It == IncomingValues.end())
982 continue;
983
984 // Keep track of undef/poison incoming values. Those must match, so we fix
985 // them up below if needed.
986 // Note: this is conservatively correct, but we could try harder and group
987 // the undef values per incoming basic block.
988 if (!It->second) {
989 TrueUndefOps.push_back(i);
990 continue;
991 }
992
993 // There is a defined value for this incoming block, so map this undef
994 // incoming value to the defined value.
995 PN->setIncomingValue(i, It->second);
996 }
997
998 // If there are both undef and poison values incoming, then convert those
999 // values to undef. It is invalid to have different values for the same
1000 // incoming block.
1001 unsigned PoisonCount = count_if(TrueUndefOps, [&](unsigned i) {
1002 return isa<PoisonValue>(PN->getIncomingValue(i));
1003 });
1004 if (PoisonCount != 0 && PoisonCount != TrueUndefOps.size()) {
1005 for (unsigned i : TrueUndefOps)
1007 }
1008}
1009
1010// Only when they shares a single common predecessor, return true.
1011// Only handles cases when BB can't be merged while its predecessors can be
1012// redirected.
1013static bool
1015 const SmallPtrSetImpl<BasicBlock *> &BBPreds,
1016 BasicBlock *&CommonPred) {
1017
1018 // There must be phis in BB, otherwise BB will be merged into Succ directly
1019 if (BB->phis().empty() || Succ->phis().empty())
1020 return false;
1021
1022 // BB must have predecessors not shared that can be redirected to Succ
1023 if (!BB->hasNPredecessorsOrMore(2))
1024 return false;
1025
1026 if (any_of(BBPreds, [](const BasicBlock *Pred) {
1027 return isa<IndirectBrInst>(Pred->getTerminator());
1028 }))
1029 return false;
1030
1031 // Get the single common predecessor of both BB and Succ. Return false
1032 // when there are more than one common predecessors.
1033 for (BasicBlock *SuccPred : predecessors(Succ)) {
1034 if (BBPreds.count(SuccPred)) {
1035 if (CommonPred)
1036 return false;
1037 CommonPred = SuccPred;
1038 }
1039 }
1040
1041 return true;
1042}
1043
1044/// Check whether removing \p BB will make the phis in its \p Succ have too
1045/// many incoming entries. This function does not check whether \p BB is
1046/// foldable or not.
1048 // If BB only has one predecessor, then removing it will not introduce more
1049 // incoming edges for phis.
1050 if (BB->hasNPredecessors(1))
1051 return false;
1052 unsigned NumPreds = pred_size(BB);
1053 unsigned NumChangedPhi = 0;
1054 for (auto &Phi : Succ->phis()) {
1055 // If the incoming value is a phi and the phi is defined in BB,
1056 // then removing BB will not increase the total phi entries of the ir.
1057 if (auto *IncomingPhi = dyn_cast<PHINode>(Phi.getIncomingValueForBlock(BB)))
1058 if (IncomingPhi->getParent() == BB)
1059 continue;
1060 // Otherwise, we need to add entries to the phi
1061 NumChangedPhi++;
1062 }
1063 // For every phi that needs to be changed, (NumPreds - 1) new entries will be
1064 // added. If the total increase in phi entries exceeds
1065 // MaxPhiEntriesIncreaseAfterRemovingEmptyBlock, it will be considered as
1066 // introducing too many new phi entries.
1067 return (NumPreds - 1) * NumChangedPhi >
1069}
1070
1071/// Replace a value flowing from a block to a phi with
1072/// potentially multiple instances of that value flowing from the
1073/// block's predecessors to the phi.
1074///
1075/// \param BB The block with the value flowing into the phi.
1076/// \param BBPreds The predecessors of BB.
1077/// \param PN The phi that we are updating.
1078/// \param CommonPred The common predecessor of BB and PN's BasicBlock
1080 const PredBlockVector &BBPreds,
1081 PHINode *PN,
1082 BasicBlock *CommonPred) {
1083 Value *OldVal = PN->removeIncomingValue(BB, false);
1084 assert(OldVal && "No entry in PHI for Pred BB!");
1085
1086 // Map BBPreds to defined values or nullptr (representing undefined values).
1087 IncomingValueMap IncomingValues;
1088
1089 // We are merging two blocks - BB, and the block containing PN - and
1090 // as a result we need to redirect edges from the predecessors of BB
1091 // to go to the block containing PN, and update PN
1092 // accordingly. Since we allow merging blocks in the case where the
1093 // predecessor and successor blocks both share some predecessors,
1094 // and where some of those common predecessors might have undef
1095 // values flowing into PN, we want to rewrite those values to be
1096 // consistent with the non-undef values.
1097
1098 gatherIncomingValuesToPhi(PN, BBPreds, IncomingValues);
1099
1100 // If this incoming value is one of the PHI nodes in BB, the new entries
1101 // in the PHI node are the entries from the old PHI.
1102 if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) {
1103 PHINode *OldValPN = cast<PHINode>(OldVal);
1104 for (unsigned i = 0, e = OldValPN->getNumIncomingValues(); i != e; ++i) {
1105 // Note that, since we are merging phi nodes and BB and Succ might
1106 // have common predecessors, we could end up with a phi node with
1107 // identical incoming branches. This will be cleaned up later (and
1108 // will trigger asserts if we try to clean it up now, without also
1109 // simplifying the corresponding conditional branch).
1110 BasicBlock *PredBB = OldValPN->getIncomingBlock(i);
1111
1112 if (PredBB == CommonPred)
1113 continue;
1114
1115 Value *PredVal = OldValPN->getIncomingValue(i);
1116 Value *Selected =
1117 selectIncomingValueForBlock(PredVal, PredBB, IncomingValues);
1118
1119 // And add a new incoming value for this predecessor for the
1120 // newly retargeted branch.
1121 PN->addIncoming(Selected, PredBB);
1122 }
1123 if (CommonPred)
1124 PN->addIncoming(OldValPN->getIncomingValueForBlock(CommonPred), BB);
1125
1126 } else {
1127 for (BasicBlock *PredBB : BBPreds) {
1128 // Update existing incoming values in PN for this
1129 // predecessor of BB.
1130 if (PredBB == CommonPred)
1131 continue;
1132
1133 Value *Selected =
1134 selectIncomingValueForBlock(OldVal, PredBB, IncomingValues);
1135
1136 // And add a new incoming value for this predecessor for the
1137 // newly retargeted branch.
1138 PN->addIncoming(Selected, PredBB);
1139 }
1140 if (CommonPred)
1141 PN->addIncoming(OldVal, BB);
1142 }
1143
1144 replaceUndefValuesInPhi(PN, IncomingValues);
1145}
1146
1148 DomTreeUpdater *DTU) {
1149 assert(BB != &BB->getParent()->getEntryBlock() &&
1150 "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!");
1151
1152 // We can't simplify infinite loops.
1153 BasicBlock *Succ = cast<UncondBrInst>(BB->getTerminator())->getSuccessor(0);
1154 if (BB == Succ)
1155 return false;
1156
1158
1159 // The single common predecessor of BB and Succ when BB cannot be killed
1160 BasicBlock *CommonPred = nullptr;
1161
1162 bool BBKillable = CanPropagatePredecessorsForPHIs(BB, Succ, BBPreds);
1163
1164 // Even if we can not fold BB into Succ, we may be able to redirect the
1165 // predecessors of BB to Succ.
1166 bool BBPhisMergeable = BBKillable || CanRedirectPredsOfEmptyBBToSucc(
1167 BB, Succ, BBPreds, CommonPred);
1168
1169 if ((!BBKillable && !BBPhisMergeable) || introduceTooManyPhiEntries(BB, Succ))
1170 return false;
1171
1172 // Check to see if merging these blocks/phis would cause conflicts for any of
1173 // the phi nodes in BB or Succ. If not, we can safely merge.
1174
1175 // Check for cases where Succ has multiple predecessors and a PHI node in BB
1176 // has uses which will not disappear when the PHI nodes are merged. It is
1177 // possible to handle such cases, but difficult: it requires checking whether
1178 // BB dominates Succ, which is non-trivial to calculate in the case where
1179 // Succ has multiple predecessors. Also, it requires checking whether
1180 // constructing the necessary self-referential PHI node doesn't introduce any
1181 // conflicts; this isn't too difficult, but the previous code for doing this
1182 // was incorrect.
1183 //
1184 // Note that if this check finds a live use, BB dominates Succ, so BB is
1185 // something like a loop pre-header (or rarely, a part of an irreducible CFG);
1186 // folding the branch isn't profitable in that case anyway.
1187 if (!Succ->getSinglePredecessor()) {
1188 BasicBlock::iterator BBI = BB->begin();
1189 while (isa<PHINode>(*BBI)) {
1190 for (Use &U : BBI->uses()) {
1191 if (PHINode* PN = dyn_cast<PHINode>(U.getUser())) {
1192 if (PN->getIncomingBlock(U) != BB)
1193 return false;
1194 } else {
1195 return false;
1196 }
1197 }
1198 ++BBI;
1199 }
1200 }
1201
1202 if (BBPhisMergeable && CommonPred)
1203 LLVM_DEBUG(dbgs() << "Found Common Predecessor between: " << BB->getName()
1204 << " and " << Succ->getName() << " : "
1205 << CommonPred->getName() << "\n");
1206
1207 // 'BB' and 'BB->Pred' are loop latches, bail out to presrve inner loop
1208 // metadata.
1209 //
1210 // FIXME: This is a stop-gap solution to preserve inner-loop metadata given
1211 // current status (that loop metadata is implemented as metadata attached to
1212 // the branch instruction in the loop latch block). To quote from review
1213 // comments, "the current representation of loop metadata (using a loop latch
1214 // terminator attachment) is known to be fundamentally broken. Loop latches
1215 // are not uniquely associated with loops (both in that a latch can be part of
1216 // multiple loops and a loop may have multiple latches). Loop headers are. The
1217 // solution to this problem is also known: Add support for basic block
1218 // metadata, and attach loop metadata to the loop header."
1219 //
1220 // Why bail out:
1221 // In this case, we expect 'BB' is the latch for outer-loop and 'BB->Pred' is
1222 // the latch for inner-loop (see reason below), so bail out to prerserve
1223 // inner-loop metadata rather than eliminating 'BB' and attaching its metadata
1224 // to this inner-loop.
1225 // - The reason we believe 'BB' and 'BB->Pred' have different inner-most
1226 // loops: assuming 'BB' and 'BB->Pred' are from the same inner-most loop L,
1227 // then 'BB' is the header and latch of 'L' and thereby 'L' must consist of
1228 // one self-looping basic block, which is contradictory with the assumption.
1229 //
1230 // To illustrate how inner-loop metadata is dropped:
1231 //
1232 // CFG Before
1233 //
1234 // BB is while.cond.exit, attached with loop metdata md2.
1235 // BB->Pred is for.body, attached with loop metadata md1.
1236 //
1237 // entry
1238 // |
1239 // v
1240 // ---> while.cond -------------> while.end
1241 // | |
1242 // | v
1243 // | while.body
1244 // | |
1245 // | v
1246 // | for.body <---- (md1)
1247 // | | |______|
1248 // | v
1249 // | while.cond.exit (md2)
1250 // | |
1251 // |_______|
1252 //
1253 // CFG After
1254 //
1255 // while.cond1 is the merge of while.cond.exit and while.cond above.
1256 // for.body is attached with md2, and md1 is dropped.
1257 // If LoopSimplify runs later (as a part of loop pass), it could create
1258 // dedicated exits for inner-loop (essentially adding `while.cond.exit`
1259 // back), but won't it won't see 'md1' nor restore it for the inner-loop.
1260 //
1261 // entry
1262 // |
1263 // v
1264 // ---> while.cond1 -------------> while.end
1265 // | |
1266 // | v
1267 // | while.body
1268 // | |
1269 // | v
1270 // | for.body <---- (md2)
1271 // |_______| |______|
1272 if (Instruction *TI = BB->getTerminatorOrNull())
1273 if (TI->hasNonDebugLocLoopMetadata())
1274 for (BasicBlock *Pred : predecessors(BB))
1275 if (Instruction *PredTI = Pred->getTerminatorOrNull())
1276 if (PredTI->hasNonDebugLocLoopMetadata())
1277 return false;
1278
1279 if (BBKillable)
1280 LLVM_DEBUG(dbgs() << "Killing Trivial BB: \n" << *BB);
1281 else if (BBPhisMergeable)
1282 LLVM_DEBUG(dbgs() << "Merge Phis in Trivial BB: \n" << *BB);
1283
1285
1286 if (DTU) {
1287 // To avoid processing the same predecessor more than once.
1289 // All predecessors of BB (except the common predecessor) will be moved to
1290 // Succ.
1291 Updates.reserve(Updates.size() + 2 * pred_size(BB) + 1);
1293 predecessors(Succ));
1294 for (auto *PredOfBB : predecessors(BB)) {
1295 // Do not modify those common predecessors of BB and Succ
1296 if (!SuccPreds.contains(PredOfBB))
1297 if (SeenPreds.insert(PredOfBB).second)
1298 Updates.push_back({DominatorTree::Insert, PredOfBB, Succ});
1299 }
1300
1301 SeenPreds.clear();
1302
1303 for (auto *PredOfBB : predecessors(BB))
1304 // When BB cannot be killed, do not remove the edge between BB and
1305 // CommonPred.
1306 if (SeenPreds.insert(PredOfBB).second && PredOfBB != CommonPred)
1307 Updates.push_back({DominatorTree::Delete, PredOfBB, BB});
1308
1309 if (BBKillable)
1310 Updates.push_back({DominatorTree::Delete, BB, Succ});
1311 }
1312
1313 if (isa<PHINode>(Succ->begin())) {
1314 // If there is more than one pred of succ, and there are PHI nodes in
1315 // the successor, then we need to add incoming edges for the PHI nodes
1316 //
1317 const PredBlockVector BBPreds(predecessors(BB));
1318
1319 // Loop over all of the PHI nodes in the successor of BB.
1320 for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
1321 PHINode *PN = cast<PHINode>(I);
1322 redirectValuesFromPredecessorsToPhi(BB, BBPreds, PN, CommonPred);
1323 }
1324 }
1325
1326 if (Succ->getSinglePredecessor()) {
1327 // BB is the only predecessor of Succ, so Succ will end up with exactly
1328 // the same predecessors BB had.
1329 // Copy over any phi, debug or lifetime instruction.
1331 Succ->splice(Succ->getFirstNonPHIIt(), BB);
1332 } else {
1333 while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
1334 // We explicitly check for such uses for merging phis.
1335 assert(PN->use_empty() && "There shouldn't be any uses here!");
1336 PN->eraseFromParent();
1337 }
1338 }
1339
1340 // If the unconditional branch we replaced contains non-debug llvm.loop
1341 // metadata, we add the metadata to the branch instructions in the
1342 // predecessors.
1343 if (Instruction *TI = BB->getTerminatorOrNull())
1344 if (TI->hasNonDebugLocLoopMetadata()) {
1345 MDNode *LoopMD = TI->getMetadata(LLVMContext::MD_loop);
1346 for (BasicBlock *Pred : predecessors(BB))
1347 Pred->getTerminator()->setMetadata(LLVMContext::MD_loop, LoopMD);
1348 }
1349
1350 if (BBKillable) {
1351 // Everything that jumped to BB now goes to Succ.
1352 BB->replaceAllUsesWith(Succ);
1353
1354 if (!Succ->hasName())
1355 Succ->takeName(BB);
1356
1357 // Clear the successor list of BB to match updates applying to DTU later.
1358 if (BB->hasTerminator())
1359 BB->back().eraseFromParent();
1360
1361 new UnreachableInst(BB->getContext(), BB);
1362 assert(succ_empty(BB) && "The successor list of BB isn't empty before "
1363 "applying corresponding DTU updates.");
1364 } else if (BBPhisMergeable) {
1365 // Everything except CommonPred that jumped to BB now goes to Succ.
1366 BB->replaceUsesWithIf(Succ, [BBPreds, CommonPred](Use &U) -> bool {
1367 if (Instruction *UseInst = dyn_cast<Instruction>(U.getUser()))
1368 return UseInst->getParent() != CommonPred &&
1369 BBPreds.contains(UseInst->getParent());
1370 return false;
1371 });
1372 }
1373
1374 if (DTU)
1375 DTU->applyUpdates(Updates);
1376
1377 if (BBKillable)
1378 DeleteDeadBlock(BB, DTU);
1379
1380 return true;
1381}
1382
1383static bool
1386 // This implementation doesn't currently consider undef operands
1387 // specially. Theoretically, two phis which are identical except for
1388 // one having an undef where the other doesn't could be collapsed.
1389
1390 bool Changed = false;
1391
1392 // Examine each PHI.
1393 // Note that increment of I must *NOT* be in the iteration_expression, since
1394 // we don't want to immediately advance when we restart from the beginning.
1395 for (auto I = BB->begin(); PHINode *PN = dyn_cast<PHINode>(I);) {
1396 ++I;
1397 // Is there an identical PHI node in this basic block?
1398 // Note that we only look in the upper square's triangle,
1399 // we already checked that the lower triangle PHI's aren't identical.
1400 for (auto J = I; PHINode *DuplicatePN = dyn_cast<PHINode>(J); ++J) {
1401 if (ToRemove.contains(DuplicatePN))
1402 continue;
1403 if (!DuplicatePN->isIdenticalToWhenDefined(PN))
1404 continue;
1405 // A duplicate. Replace this PHI with the base PHI.
1406 ++NumPHICSEs;
1407 DuplicatePN->replaceAllUsesWith(PN);
1408 ToRemove.insert(DuplicatePN);
1409 Changed = true;
1410
1411 // The RAUW can change PHIs that we already visited.
1412 I = BB->begin();
1413 break; // Start over from the beginning.
1414 }
1415 }
1416 return Changed;
1417}
1418
1419static bool
1422 // This implementation doesn't currently consider undef operands
1423 // specially. Theoretically, two phis which are identical except for
1424 // one having an undef where the other doesn't could be collapsed.
1425
1426 struct PHIDenseMapInfo {
1427 // WARNING: this logic must be kept in sync with
1428 // Instruction::isIdenticalToWhenDefined()!
1429 static unsigned getHashValueImpl(PHINode *PN) {
1430 // Compute a hash value on the operands. Instcombine will likely have
1431 // sorted them, which helps expose duplicates, but we have to check all
1432 // the operands to be safe in case instcombine hasn't run.
1433 return static_cast<unsigned>(
1435 hash_combine_range(PN->blocks())));
1436 }
1437
1438 static unsigned getHashValue(PHINode *PN) {
1439#ifndef NDEBUG
1440 // If -phicse-debug-hash was specified, return a constant -- this
1441 // will force all hashing to collide, so we'll exhaustively search
1442 // the table for a match, and the assertion in isEqual will fire if
1443 // there's a bug causing equal keys to hash differently.
1444 if (PHICSEDebugHash)
1445 return 0;
1446#endif
1447 return getHashValueImpl(PN);
1448 }
1449
1450 static bool isEqualImpl(PHINode *LHS, PHINode *RHS) {
1451 return LHS->isIdenticalTo(RHS);
1452 }
1453
1454 static bool isEqual(PHINode *LHS, PHINode *RHS) {
1455 // These comparisons are nontrivial, so assert that equality implies
1456 // hash equality (DenseMap demands this as an invariant).
1457 bool Result = isEqualImpl(LHS, RHS);
1459 return Result;
1460 }
1461 };
1462
1463 // Set of unique PHINodes.
1465 PHISet.reserve(4 * PHICSENumPHISmallSize);
1466
1467 // Examine each PHI.
1468 bool Changed = false;
1469 for (auto I = BB->begin(); PHINode *PN = dyn_cast<PHINode>(I++);) {
1470 if (ToRemove.contains(PN))
1471 continue;
1472 auto Inserted = PHISet.insert(PN);
1473 if (!Inserted.second) {
1474 // A duplicate. Replace this PHI with its duplicate.
1475 ++NumPHICSEs;
1476 PN->replaceAllUsesWith(*Inserted.first);
1477 ToRemove.insert(PN);
1478 Changed = true;
1479
1480 // The RAUW can change PHIs that we already visited. Start over from the
1481 // beginning.
1482 PHISet.clear();
1483 I = BB->begin();
1484 }
1485 }
1486
1487 return Changed;
1488}
1489
1500
1504 for (PHINode *PN : ToRemove)
1505 PN->eraseFromParent();
1506 return Changed;
1507}
1508
1510 const DataLayout &DL) {
1511 V = V->stripPointerCasts();
1512
1513 if (AllocaInst *AI = dyn_cast<AllocaInst>(V)) {
1514 // TODO: Ideally, this function would not be called if PrefAlign is smaller
1515 // than the current alignment, as the known bits calculation should have
1516 // already taken it into account. However, this is not always the case,
1517 // as computeKnownBits() has a depth limit, while stripPointerCasts()
1518 // doesn't.
1519 Align CurrentAlign = AI->getAlign();
1520 if (PrefAlign <= CurrentAlign)
1521 return CurrentAlign;
1522
1523 // If the preferred alignment is greater than the natural stack alignment
1524 // then don't round up. This avoids dynamic stack realignment.
1525 MaybeAlign StackAlign = DL.getStackAlignment();
1526 if (StackAlign && PrefAlign > *StackAlign)
1527 return CurrentAlign;
1528 AI->setAlignment(PrefAlign);
1529 return PrefAlign;
1530 }
1531
1532 if (auto *GV = dyn_cast<GlobalVariable>(V)) {
1533 // TODO: as above, this shouldn't be necessary.
1534 Align CurrentAlign = GV->getPointerAlignment(DL);
1535 if (PrefAlign <= CurrentAlign)
1536 return CurrentAlign;
1537
1538 // If there is a large requested alignment and we can, bump up the alignment
1539 // of the global. If the memory we set aside for the global may not be the
1540 // memory used by the final program then it is impossible for us to reliably
1541 // enforce the preferred alignment.
1542 if (!GV->canIncreaseAlignment())
1543 return CurrentAlign;
1544
1545 if (GV->isThreadLocal()) {
1546 unsigned MaxTLSAlign = GV->getParent()->getMaxTLSAlignment() / CHAR_BIT;
1547 if (MaxTLSAlign && PrefAlign > Align(MaxTLSAlign))
1548 PrefAlign = Align(MaxTLSAlign);
1549 }
1550
1551 GV->setAlignment(PrefAlign);
1552 return PrefAlign;
1553 }
1554
1555 return Align(1);
1556}
1557
1559 const DataLayout &DL,
1560 const Instruction *CxtI,
1561 AssumptionCache *AC,
1562 const DominatorTree *DT) {
1563 assert(V->getType()->isPointerTy() &&
1564 "getOrEnforceKnownAlignment expects a pointer!");
1565
1566 KnownBits Known = computeKnownBits(V, DL, AC, CxtI, DT);
1567 unsigned TrailZ = Known.countMinTrailingZeros();
1568
1569 // Avoid trouble with ridiculously large TrailZ values, such as
1570 // those computed from a null pointer.
1571 // LLVM doesn't support alignments larger than (1 << MaxAlignmentExponent).
1572 TrailZ = std::min(TrailZ, +Value::MaxAlignmentExponent);
1573
1574 Align Alignment = Align(1ull << std::min(Known.getBitWidth() - 1, TrailZ));
1575
1576 if (PrefAlign && *PrefAlign > Alignment)
1577 Alignment = std::max(Alignment, tryEnforceAlignment(V, *PrefAlign, DL));
1578
1579 // We don't need to make any adjustment.
1580 return Alignment;
1581}
1582
1583///===---------------------------------------------------------------------===//
1584/// Dbg Intrinsic utilities
1585///
1586
1587/// See if there is a dbg.value intrinsic for DIVar for the PHI node.
1589 DIExpression *DIExpr,
1590 PHINode *APN) {
1591 // Since we can't guarantee that the original dbg.declare intrinsic
1592 // is removed by LowerDbgDeclare(), we need to make sure that we are
1593 // not inserting the same dbg.value intrinsic over and over.
1594 SmallVector<DbgVariableRecord *, 1> DbgVariableRecords;
1595 findDbgValues(APN, DbgVariableRecords);
1596 for (DbgVariableRecord *DVR : DbgVariableRecords) {
1597 assert(is_contained(DVR->location_ops(), APN));
1598 if ((DVR->getVariable() == DIVar) && (DVR->getExpression() == DIExpr))
1599 return true;
1600 }
1601 return false;
1602}
1603
1604/// Check if the alloc size of \p ValTy is large enough to cover the variable
1605/// (or fragment of the variable) described by \p DII.
1606///
1607/// This is primarily intended as a helper for the different
1608/// ConvertDebugDeclareToDebugValue functions. The dbg.declare that is converted
1609/// describes an alloca'd variable, so we need to use the alloc size of the
1610/// value when doing the comparison. E.g. an i1 value will be identified as
1611/// covering an n-bit fragment, if the store size of i1 is at least n bits.
1613 const DataLayout &DL = DVR->getModule()->getDataLayout();
1614 TypeSize ValueSize = DL.getTypeAllocSizeInBits(ValTy);
1615 if (std::optional<uint64_t> FragmentSize =
1616 DVR->getExpression()->getActiveBits(DVR->getVariable()))
1617 return TypeSize::isKnownGE(ValueSize, TypeSize::getFixed(*FragmentSize));
1618
1619 // We can't always calculate the size of the DI variable (e.g. if it is a
1620 // VLA). Try to use the size of the alloca that the dbg intrinsic describes
1621 // instead.
1622 if (DVR->isAddressOfVariable()) {
1623 // DVR should have exactly 1 location when it is an address.
1624 assert(DVR->getNumVariableLocationOps() == 1 &&
1625 "address of variable must have exactly 1 location operand.");
1626 if (auto *AI =
1628 if (std::optional<TypeSize> FragmentSize = AI->getAllocationSizeInBits(DL)) {
1629 return TypeSize::isKnownGE(ValueSize, *FragmentSize);
1630 }
1631 }
1632 }
1633 // Could not determine size of variable. Conservatively return false.
1634 return false;
1635}
1636
1638 DILocalVariable *DIVar,
1639 DIExpression *DIExpr,
1640 const DebugLoc &NewLoc,
1641 BasicBlock::iterator Instr) {
1643 DbgVariableRecord *DVRec =
1644 new DbgVariableRecord(DVAM, DIVar, DIExpr, NewLoc.get());
1645 Instr->getParent()->insertDbgRecordBefore(DVRec, Instr);
1646}
1647
1649 int NumEltDropped = DIExpr->getElements()[0] == dwarf::DW_OP_LLVM_arg ? 3 : 1;
1650 return DIExpression::get(DIExpr->getContext(),
1651 DIExpr->getElements().drop_front(NumEltDropped));
1652}
1653
1655 StoreInst *SI, DIBuilder &Builder) {
1656 assert(DVR->isAddressOfVariable() || DVR->isDbgAssign());
1657 auto *DIVar = DVR->getVariable();
1658 assert(DIVar && "Missing variable");
1659 auto *DIExpr = DVR->getExpression();
1660 Value *DV = SI->getValueOperand();
1661
1662 if (isa<UndefValue>(DV) && !isa<PoisonValue>(DV))
1663 return;
1664
1665 DebugLoc NewLoc = getDebugValueLoc(DVR);
1666
1667 // If the alloca describes the variable itself, i.e. the expression in the
1668 // dbg.declare doesn't start with a dereference, we can perform the
1669 // conversion if the value covers the entire fragment of DII.
1670 // If the alloca describes the *address* of DIVar, i.e. DIExpr is
1671 // *just* a DW_OP_deref, we use DV as is for the dbg.value.
1672 // We conservatively ignore other dereferences, because the following two are
1673 // not equivalent:
1674 // dbg.declare(alloca, ..., !Expr(deref, plus_uconstant, 2))
1675 // dbg.value(DV, ..., !Expr(deref, plus_uconstant, 2))
1676 // The former is adding 2 to the address of the variable, whereas the latter
1677 // is adding 2 to the value of the variable. As such, we insist on just a
1678 // deref expression.
1679 bool CanConvert =
1680 DIExpr->isDeref() || (!DIExpr->startsWithDeref() &&
1682 if (CanConvert) {
1683 insertDbgValueOrDbgVariableRecord(Builder, DV, DIVar, DIExpr, NewLoc,
1684 SI->getIterator());
1685 return;
1686 }
1687
1688 // FIXME: If storing to a part of the variable described by the dbg.declare,
1689 // then we want to insert a dbg.value for the corresponding fragment.
1690 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to dbg.value: " << *DVR
1691 << '\n');
1692
1693 // For now, when there is a store to parts of the variable (but we do not
1694 // know which part) we insert an dbg.value intrinsic to indicate that we
1695 // know nothing about the variable's content.
1696 DV = PoisonValue::get(DV->getType());
1698 DbgVariableRecord *NewDVR =
1699 new DbgVariableRecord(DVAM, DIVar, DIExpr, NewLoc.get());
1700 SI->getParent()->insertDbgRecordBefore(NewDVR, SI->getIterator());
1701}
1702
1704 DIBuilder &Builder) {
1705 auto *DIVar = DVR->getVariable();
1706 assert(DIVar && "Missing variable");
1707 auto *DIExpr = DVR->getExpression();
1708 DIExpr = dropInitialDeref(DIExpr);
1709 Value *DV = SI->getValueOperand();
1710
1711 DebugLoc NewLoc = getDebugValueLoc(DVR);
1712
1713 insertDbgValueOrDbgVariableRecord(Builder, DV, DIVar, DIExpr, NewLoc,
1714 SI->getIterator());
1715}
1716
1718 DIBuilder &Builder) {
1719 auto *DIVar = DVR->getVariable();
1720 auto *DIExpr = DVR->getExpression();
1721 assert(DIVar && "Missing variable");
1722
1723 if (!valueCoversEntireFragment(LI->getType(), DVR)) {
1724 // FIXME: If only referring to a part of the variable described by the
1725 // dbg.declare, then we want to insert a DbgVariableRecord for the
1726 // corresponding fragment.
1727 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to DbgVariableRecord: "
1728 << *DVR << '\n');
1729 return;
1730 }
1731
1732 DebugLoc NewLoc = getDebugValueLoc(DVR);
1733
1734 // We are now tracking the loaded value instead of the address. In the
1735 // future if multi-location support is added to the IR, it might be
1736 // preferable to keep tracking both the loaded value and the original
1737 // address in case the alloca can not be elided.
1738
1739 // Create a DbgVariableRecord directly and insert.
1741 DbgVariableRecord *DV =
1742 new DbgVariableRecord(LIVAM, DIVar, DIExpr, NewLoc.get());
1743 LI->getParent()->insertDbgRecordAfter(DV, LI);
1744}
1745
1746/// Determine whether this debug variable is a not a basic type.
1747/// We strip through DIDerivedType modifiers (typedefs, const, etc.)
1748/// to find the underlying type to decide if it seems perhaps worthwhile to
1749/// do LowerDbgDeclare.
1751 DIType *Ty = DVR->getVariable()->getType();
1752 if (Ty == nullptr)
1753 return true;
1754 // Strip through modifier types to find the underlying type.
1755 while (auto *DTy = dyn_cast<DIDerivedType>(Ty)) {
1756 switch (DTy->getTag()) {
1757 case dwarf::DW_TAG_pointer_type:
1758 case dwarf::DW_TAG_reference_type:
1759 case dwarf::DW_TAG_rvalue_reference_type:
1760 case dwarf::DW_TAG_ptr_to_member_type:
1761 case dwarf::DW_TAG_LLVM_ptrauth_type:
1762 return false;
1763 case dwarf::DW_TAG_typedef:
1764 case dwarf::DW_TAG_const_type:
1765 case dwarf::DW_TAG_volatile_type:
1766 case dwarf::DW_TAG_restrict_type:
1767 case dwarf::DW_TAG_atomic_type:
1768 case dwarf::DW_TAG_immutable_type:
1769 Ty = DTy->getBaseType();
1770 continue;
1771 default:
1772 break;
1773 }
1774 break;
1775 }
1776 return !isa<DIBasicType>(Ty);
1777}
1778
1780 DIBuilder &Builder) {
1781 auto *DIVar = DVR->getVariable();
1782 auto *DIExpr = DVR->getExpression();
1783 assert(DIVar && "Missing variable");
1784
1785 if (PhiHasDebugValue(DIVar, DIExpr, APN))
1786 return;
1787
1788 if (!valueCoversEntireFragment(APN->getType(), DVR)) {
1789 // FIXME: If only referring to a part of the variable described by the
1790 // dbg.declare, then we want to insert a DbgVariableRecord for the
1791 // corresponding fragment.
1792 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to DbgVariableRecord: "
1793 << *DVR << '\n');
1794 return;
1795 }
1796
1797 BasicBlock *BB = APN->getParent();
1798 auto InsertionPt = BB->getFirstInsertionPt();
1799
1800 DebugLoc NewLoc = getDebugValueLoc(DVR);
1801
1802 // The block may be a catchswitch block, which does not have a valid
1803 // insertion point.
1804 // FIXME: Insert DbgVariableRecord markers in the successors when appropriate.
1805 if (InsertionPt != BB->end()) {
1806 insertDbgValueOrDbgVariableRecord(Builder, APN, DIVar, DIExpr, NewLoc,
1807 InsertionPt);
1808 }
1809}
1810
1811/// LowerDbgDeclare - Lowers llvm.dbg.declare intrinsics into appropriate set
1812/// of llvm.dbg.value intrinsics.
1814 bool Changed = false;
1815 DIBuilder DIB(*F.getParent(), /*AllowUnresolved*/ false);
1818 for (auto &FI : F) {
1819 for (Instruction &BI : FI) {
1820 if (auto *DDI = dyn_cast<DbgDeclareInst>(&BI))
1821 Dbgs.push_back(DDI);
1822 for (DbgVariableRecord &DVR : filterDbgVars(BI.getDbgRecordRange())) {
1823 if (DVR.getType() == DbgVariableRecord::LocationType::Declare)
1824 DVRs.push_back(&DVR);
1825 }
1826 }
1827 }
1828
1829 if (Dbgs.empty() && DVRs.empty())
1830 return Changed;
1831
1832 auto LowerOne = [&](DbgVariableRecord *DDI) {
1833 AllocaInst *AI =
1834 dyn_cast_or_null<AllocaInst>(DDI->getVariableLocationOp(0));
1835 // If this is an alloca for a scalar variable, insert a dbg.value
1836 // at each load and store to the alloca and erase the dbg.declare.
1837 // The dbg.values allow tracking a variable even if it is not
1838 // stored on the stack, while the dbg.declare can only describe
1839 // the stack slot (and at a lexical-scope granularity). Later
1840 // passes will attempt to elide the stack slot.
1841 // Skip VLAs (dynamic allocas) and composite types (arrays/structs) since
1842 // they can't be represented as a single dbg.value.
1843 if (!AI || !isa<Constant>(AI->getArraySize()) || isCompositeType(DDI))
1844 return;
1845
1846 // A volatile load/store means that the alloca can't be elided anyway.
1847 // Just look at direct uses however, and ignore any other instructions.
1848 if (llvm::any_of(AI->users(), [](User *U) -> bool {
1849 if (LoadInst *LI = dyn_cast<LoadInst>(U))
1850 return LI->isVolatile();
1851 if (StoreInst *SI = dyn_cast<StoreInst>(U))
1852 return SI->isVolatile();
1853 return false;
1854 }))
1855 return;
1856
1858 WorkList.push_back(AI);
1859 while (!WorkList.empty()) {
1860 const Value *V = WorkList.pop_back_val();
1861 for (const auto &AIUse : V->uses()) {
1862 User *U = AIUse.getUser();
1863 if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
1864 if (AIUse.getOperandNo() == 1)
1866 } else if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
1867 ConvertDebugDeclareToDebugValue(DDI, LI, DIB);
1868 } else if (CallInst *CI = dyn_cast<CallInst>(U)) {
1869 // This is a call by-value or some other instruction that takes a
1870 // pointer to the variable. Insert a *value* intrinsic that describes
1871 // the variable by dereferencing the alloca.
1872 if (!CI->isLifetimeStartOrEnd()) {
1873 DebugLoc NewLoc = getDebugValueLoc(DDI);
1874 auto *DerefExpr =
1875 DIExpression::append(DDI->getExpression(), dwarf::DW_OP_deref);
1876 insertDbgValueOrDbgVariableRecord(DIB, AI, DDI->getVariable(),
1877 DerefExpr, NewLoc,
1878 CI->getIterator());
1879 }
1880 } else if (BitCastInst *BI = dyn_cast<BitCastInst>(U)) {
1881 if (BI->getType()->isPointerTy())
1882 WorkList.push_back(BI);
1883 }
1884 }
1885 }
1886 DDI->eraseFromParent();
1887 Changed = true;
1888 };
1889
1890 for_each(DVRs, LowerOne);
1891
1892 if (Changed)
1893 for (BasicBlock &BB : F)
1895
1896 return Changed;
1897}
1898
1899/// Propagate dbg.value records through the newly inserted PHIs.
1901 SmallVectorImpl<PHINode *> &InsertedPHIs) {
1902 assert(BB && "No BasicBlock to clone DbgVariableRecord(s) from.");
1903 if (InsertedPHIs.size() == 0)
1904 return;
1905
1906 // Map existing PHI nodes to their DbgVariableRecords.
1908 for (auto &I : *BB) {
1909 for (DbgVariableRecord &DVR : filterDbgVars(I.getDbgRecordRange())) {
1910 for (Value *V : DVR.location_ops())
1911 if (auto *Loc = dyn_cast_or_null<PHINode>(V))
1912 DbgValueMap.insert({Loc, &DVR});
1913 }
1914 }
1915 if (DbgValueMap.size() == 0)
1916 return;
1917
1918 // Map a pair of the destination BB and old DbgVariableRecord to the new
1919 // DbgVariableRecord, so that if a DbgVariableRecord is being rewritten to use
1920 // more than one of the inserted PHIs in the same destination BB, we can
1921 // update the same DbgVariableRecord with all the new PHIs instead of creating
1922 // one copy for each.
1924 NewDbgValueMap;
1925 // Then iterate through the new PHIs and look to see if they use one of the
1926 // previously mapped PHIs. If so, create a new DbgVariableRecord that will
1927 // propagate the info through the new PHI. If we use more than one new PHI in
1928 // a single destination BB with the same old dbg.value, merge the updates so
1929 // that we get a single new DbgVariableRecord with all the new PHIs.
1930 for (auto PHI : InsertedPHIs) {
1931 BasicBlock *Parent = PHI->getParent();
1932 // Avoid inserting a debug-info record into an EH block.
1933 if (Parent->getFirstNonPHIIt()->isEHPad())
1934 continue;
1935 for (auto VI : PHI->operand_values()) {
1936 auto V = DbgValueMap.find(VI);
1937 if (V != DbgValueMap.end()) {
1938 DbgVariableRecord *DbgII = cast<DbgVariableRecord>(V->second);
1939 auto NewDI = NewDbgValueMap.find({Parent, DbgII});
1940 if (NewDI == NewDbgValueMap.end()) {
1941 DbgVariableRecord *NewDbgII = DbgII->clone();
1942 NewDI = NewDbgValueMap.insert({{Parent, DbgII}, NewDbgII}).first;
1943 }
1944 DbgVariableRecord *NewDbgII = NewDI->second;
1945 // If PHI contains VI as an operand more than once, we may
1946 // replaced it in NewDbgII; confirm that it is present.
1947 if (is_contained(NewDbgII->location_ops(), VI))
1948 NewDbgII->replaceVariableLocationOp(VI, PHI);
1949 }
1950 }
1951 }
1952 // Insert the new DbgVariableRecords into their destination blocks.
1953 for (auto DI : NewDbgValueMap) {
1954 BasicBlock *Parent = DI.first.first;
1955 DbgVariableRecord *NewDbgII = DI.second;
1956 auto InsertionPt = Parent->getFirstInsertionPt();
1957 assert(InsertionPt != Parent->end() && "Ill-formed basic block");
1958
1959 Parent->insertDbgRecordBefore(NewDbgII, InsertionPt);
1960 }
1961}
1962
1964 DIBuilder &Builder, uint8_t DIExprFlags,
1965 int Offset) {
1967
1968 auto ReplaceOne = [&](DbgVariableRecord *DII) {
1969 assert(DII->getVariable() && "Missing variable");
1970 auto *DIExpr = DII->getExpression();
1971 DIExpr = DIExpression::prepend(DIExpr, DIExprFlags, Offset);
1972 DII->setExpression(DIExpr);
1973 DII->replaceVariableLocationOp(Address, NewAddress);
1974 };
1975
1976 for_each(DVRDeclares, ReplaceOne);
1977
1978 return !DVRDeclares.empty();
1979}
1980
1982 DILocalVariable *DIVar,
1983 DIExpression *DIExpr, Value *NewAddress,
1984 DbgVariableRecord *DVR,
1985 DIBuilder &Builder, int Offset) {
1986 assert(DIVar && "Missing variable");
1987
1988 // This is an alloca-based dbg.value/DbgVariableRecord. The first thing it
1989 // should do with the alloca pointer is dereference it. Otherwise we don't
1990 // know how to handle it and give up.
1991 if (!DIExpr || DIExpr->getNumElements() < 1 ||
1992 DIExpr->getElement(0) != dwarf::DW_OP_deref)
1993 return;
1994
1995 // Insert the offset before the first deref.
1996 if (Offset)
1997 DIExpr = DIExpression::prepend(DIExpr, 0, Offset);
1998
1999 DVR->setExpression(DIExpr);
2000 DVR->replaceVariableLocationOp(0u, NewAddress);
2001}
2002
2004 DIBuilder &Builder, int Offset) {
2006 findDbgValues(AI, DPUsers);
2007
2008 // Replace any DbgVariableRecords that use this alloca.
2009 for (DbgVariableRecord *DVR : DPUsers)
2010 updateOneDbgValueForAlloca(DVR->getDebugLoc(), DVR->getVariable(),
2011 DVR->getExpression(), NewAllocaAddress, DVR,
2012 Builder, Offset);
2013}
2014
2017 findDbgUsers(&I, DbgRecords);
2018 salvageDebugInfoForDbgValues(I, DbgRecords);
2019}
2020
2021/// Salvage the address of \p Assign, which the caller has checked is \p I. An
2022/// address we cannot salvage stays as it is rather than stopping the caller,
2023/// which counts the record as processed either way and goes on to salvage its
2024/// variable location.
2026 assert(Assign.isDbgAssign() && Assign.getAddress() == &I &&
2027 "dbg.assign must use salvaged instruction as its address");
2028 assert(!Assign.getAddressExpression()->getFragmentInfo().has_value() &&
2029 "address-expression shouldn't have fragment info");
2030
2031 // The address component of a dbg.assign cannot be variadic.
2032 uint64_t CurrentLocOps = 0;
2033 SmallVector<Value *, 4> AdditionalValues;
2035 Value *NewAddress =
2036 salvageDebugInfoImpl(I, CurrentLocOps, Ops, AdditionalValues);
2037
2038 // Keep an address we cannot salvage. If I is deleted, its remaining metadata
2039 // use is replaced with poison.
2040 if (!NewAddress)
2041 return;
2042
2044 Assign.getAddressExpression(), Ops, 0, /*StackValue=*/false);
2045 assert(!SalvagedExpr->getFragmentInfo().has_value() &&
2046 "address-expression shouldn't have fragment info");
2047
2048 SalvagedExpr = SalvagedExpr->foldConstantMath();
2049
2050 // Salvage succeeds if no additional values are required.
2051 if (AdditionalValues.empty()) {
2052 Assign.setAddress(NewAddress);
2053 Assign.setAddressExpression(SalvagedExpr);
2054 } else {
2055 Assign.setKillAddress();
2056 }
2057}
2058
2059/// Rewrite \p DVR's variable location in terms of \p I's operands. Return false
2060/// and leave the record alone when the instruction cannot be salvaged. Return
2061/// true once it can, including when the location ends up killed.
2063 // These are arbitrary chosen limits on the maximum number of values and the
2064 // maximum size of a debug expression we can salvage up to, used for
2065 // performance reasons.
2066 const unsigned MaxDebugArgs = 16;
2067 const unsigned MaxExpressionSize = 128;
2068
2069 // Do not add DW_OP_stack_value for DbgDeclare and DbgAddr, because they
2070 // are implicitly pointing out the value as a DWARF memory location
2071 // description.
2072 const bool StackValue = !DVR.isAddressOfVariable();
2073 auto LocationOps = DVR.location_ops();
2074 assert(is_contained(LocationOps, &I) &&
2075 "DbgVariableRecord must use salvaged instruction as its location");
2076 SmallVector<Value *, 4> AdditionalValues;
2077 // 'I' may appear more than once in DVR's location ops, and each use of 'I'
2078 // must be updated in the DIExpression and potentially have additional
2079 // values added; thus we call salvageDebugInfoImpl for each 'I' instance in
2080 // LocationOps.
2081 Value *Replacement = nullptr;
2082 DIExpression *SalvagedExpr = DVR.getExpression();
2083 auto LocIt = find(LocationOps, &I);
2084 while (SalvagedExpr && LocIt != LocationOps.end()) {
2086 unsigned LocationIndex = std::distance(LocationOps.begin(), LocIt);
2087 uint64_t CurrentLocOps = SalvagedExpr->getNumLocationOperands();
2088 Replacement = salvageDebugInfoImpl(I, CurrentLocOps, Ops, AdditionalValues);
2089 if (!Replacement)
2090 break;
2091 SalvagedExpr = DIExpression::appendOpsToArg(SalvagedExpr, Ops,
2092 LocationIndex, StackValue);
2093 LocIt = std::find(++LocIt, LocationOps.end(), &I);
2094 }
2095 // The failure conditions in salvageDebugInfoImpl do not depend on
2096 // CurrentLocOps, so failure can only occur on the first occurrence.
2097 if (!Replacement)
2098 return false;
2099
2100 SalvagedExpr = SalvagedExpr->foldConstantMath();
2101 DVR.replaceVariableLocationOp(&I, Replacement);
2102 const bool FitsExpressionLimit =
2103 SalvagedExpr->getNumElements() <= MaxExpressionSize;
2104 if (AdditionalValues.empty() && FitsExpressionLimit) {
2105 DVR.setExpression(SalvagedExpr);
2106 } else if (!DVR.isAddressOfVariable() && FitsExpressionLimit &&
2107 DVR.getNumVariableLocationOps() + AdditionalValues.size() <=
2108 MaxDebugArgs) {
2109 DVR.addVariableLocationOps(AdditionalValues, SalvagedExpr);
2110 } else {
2111 // Do not salvage using DIArgList for dbg.addr/dbg.declare, as it is
2112 // currently only valid for stack value expressions.
2113 // Also do not salvage if the resulting DIArgList would contain an
2114 // unreasonably large number of values.
2115 DVR.setKillLocation();
2116 }
2117 LLVM_DEBUG(dbgs() << "SALVAGE: " << DVR << '\n');
2118 return true;
2119}
2120
2123 bool ProcessedAnyUse = false;
2124
2125 for (auto *DVR : DbgRecords) {
2126 // replaceVariableLocationOp also updates a matching dbg.assign address, so
2127 // salvage the address before changing the variable location.
2128 if (DVR->isDbgAssign()) {
2129 if (DVR->getAddress() == &I) {
2131 ProcessedAnyUse = true;
2132 }
2133 if (DVR->getValue() != &I)
2134 continue;
2135 }
2136 if (!salvageDbgVariableLocation(I, *DVR))
2137 break;
2138 ProcessedAnyUse = true;
2139 }
2140
2141 if (ProcessedAnyUse)
2142 return;
2143
2144 for (auto *DVR : DbgRecords)
2145 DVR->setKillLocation();
2146}
2147
2149 uint64_t CurrentLocOps,
2151 SmallVectorImpl<Value *> &AdditionalValues) {
2152 unsigned BitWidth = DL.getIndexSizeInBits(GEP->getPointerAddressSpace());
2153 // Rewrite a GEP into a DIExpression.
2154 SmallMapVector<Value *, APInt, 4> VariableOffsets;
2155 APInt ConstantOffset(BitWidth, 0);
2156 if (!GEP->collectOffset(DL, BitWidth, VariableOffsets, ConstantOffset))
2157 return nullptr;
2158 if (!VariableOffsets.empty() && !CurrentLocOps) {
2159 Opcodes.insert(Opcodes.begin(), {dwarf::DW_OP_LLVM_arg, 0});
2160 CurrentLocOps = 1;
2161 }
2162 for (const auto &Offset : VariableOffsets) {
2163 AdditionalValues.push_back(Offset.first);
2164 assert(Offset.second.isStrictlyPositive() &&
2165 "Expected strictly positive multiplier for offset.");
2166 Opcodes.append({dwarf::DW_OP_LLVM_arg, CurrentLocOps++, dwarf::DW_OP_constu,
2167 Offset.second.getZExtValue(), dwarf::DW_OP_mul,
2168 dwarf::DW_OP_plus});
2169 }
2170 DIExpression::appendOffset(Opcodes, ConstantOffset.getSExtValue());
2171 return GEP->getOperand(0);
2172}
2173
2175 switch (Opcode) {
2176 case Instruction::Add:
2177 return dwarf::DW_OP_plus;
2178 case Instruction::Sub:
2179 return dwarf::DW_OP_minus;
2180 case Instruction::Mul:
2181 return dwarf::DW_OP_mul;
2182 case Instruction::SDiv:
2183 return dwarf::DW_OP_div;
2184 case Instruction::SRem:
2185 return dwarf::DW_OP_mod;
2186 case Instruction::Or:
2187 return dwarf::DW_OP_or;
2188 case Instruction::And:
2189 return dwarf::DW_OP_and;
2190 case Instruction::Xor:
2191 return dwarf::DW_OP_xor;
2192 case Instruction::Shl:
2193 return dwarf::DW_OP_shl;
2194 case Instruction::LShr:
2195 return dwarf::DW_OP_shr;
2196 case Instruction::AShr:
2197 return dwarf::DW_OP_shra;
2198 default:
2199 // TODO: Salvage from each kind of binop we know about.
2200 return 0;
2201 }
2202}
2203
2204static void handleSSAValueOperands(uint64_t CurrentLocOps,
2206 SmallVectorImpl<Value *> &AdditionalValues,
2207 Instruction *I) {
2208 if (!CurrentLocOps) {
2209 Opcodes.append({dwarf::DW_OP_LLVM_arg, 0});
2210 CurrentLocOps = 1;
2211 }
2212 Opcodes.append({dwarf::DW_OP_LLVM_arg, CurrentLocOps});
2213 AdditionalValues.push_back(I->getOperand(1));
2214}
2215
2218 SmallVectorImpl<Value *> &AdditionalValues) {
2219 // Handle binary operations with constant integer operands as a special case.
2220 auto *ConstInt = dyn_cast<ConstantInt>(BI->getOperand(1));
2221 // Values wider than 64 bits cannot be represented within a DIExpression.
2222 if (ConstInt && ConstInt->getBitWidth() > 64)
2223 return nullptr;
2224
2225 Instruction::BinaryOps BinOpcode = BI->getOpcode();
2226 // Push any Constant Int operand onto the expression stack.
2227 if (ConstInt) {
2228 uint64_t Val = ConstInt->getSExtValue();
2229 // Add or Sub Instructions with a constant operand can potentially be
2230 // simplified.
2231 if (BinOpcode == Instruction::Add || BinOpcode == Instruction::Sub) {
2232 uint64_t Offset = BinOpcode == Instruction::Add ? Val : -int64_t(Val);
2234 return BI->getOperand(0);
2235 }
2236 Opcodes.append({dwarf::DW_OP_constu, Val});
2237 } else {
2238 handleSSAValueOperands(CurrentLocOps, Opcodes, AdditionalValues, BI);
2239 }
2240
2241 // Add salvaged binary operator to expression stack, if it has a valid
2242 // representation in a DIExpression.
2243 uint64_t DwarfBinOp = getDwarfOpForBinOp(BinOpcode);
2244 if (!DwarfBinOp)
2245 return nullptr;
2246 Opcodes.push_back(DwarfBinOp);
2247 return BI->getOperand(0);
2248}
2249
2251 // The signedness of the operation is implicit in the typed stack, signed and
2252 // unsigned instructions map to the same DWARF opcode.
2253 switch (Pred) {
2254 case CmpInst::ICMP_EQ:
2255 return dwarf::DW_OP_eq;
2256 case CmpInst::ICMP_NE:
2257 return dwarf::DW_OP_ne;
2258 case CmpInst::ICMP_UGT:
2259 case CmpInst::ICMP_SGT:
2260 return dwarf::DW_OP_gt;
2261 case CmpInst::ICMP_UGE:
2262 case CmpInst::ICMP_SGE:
2263 return dwarf::DW_OP_ge;
2264 case CmpInst::ICMP_ULT:
2265 case CmpInst::ICMP_SLT:
2266 return dwarf::DW_OP_lt;
2267 case CmpInst::ICMP_ULE:
2268 case CmpInst::ICMP_SLE:
2269 return dwarf::DW_OP_le;
2270 default:
2271 return 0;
2272 }
2273}
2274
2277 SmallVectorImpl<Value *> &AdditionalValues) {
2278 // Handle icmp operations with constant integer operands as a special case.
2279 auto *ConstInt = dyn_cast<ConstantInt>(Icmp->getOperand(1));
2280 // Values wider than 64 bits cannot be represented within a DIExpression.
2281 if (ConstInt && ConstInt->getBitWidth() > 64)
2282 return nullptr;
2283 // Push any Constant Int operand onto the expression stack.
2284 if (ConstInt) {
2285 if (Icmp->isSigned())
2286 Opcodes.push_back(dwarf::DW_OP_consts);
2287 else
2288 Opcodes.push_back(dwarf::DW_OP_constu);
2289 uint64_t Val = ConstInt->getSExtValue();
2290 Opcodes.push_back(Val);
2291 } else {
2292 handleSSAValueOperands(CurrentLocOps, Opcodes, AdditionalValues, Icmp);
2293 }
2294
2295 // Add salvaged binary operator to expression stack, if it has a valid
2296 // representation in a DIExpression.
2297 uint64_t DwarfIcmpOp = getDwarfOpForIcmpPred(Icmp->getPredicate());
2298 if (!DwarfIcmpOp)
2299 return nullptr;
2300 Opcodes.push_back(DwarfIcmpOp);
2301 return Icmp->getOperand(0);
2302}
2303
2306 SmallVectorImpl<Value *> &AdditionalValues) {
2307 auto &M = *I.getModule();
2308 auto &DL = M.getDataLayout();
2309
2310 if (auto *CI = dyn_cast<CastInst>(&I)) {
2311 Value *FromValue = CI->getOperand(0);
2312 // No-op casts are irrelevant for debug info.
2313 if (CI->isNoopCast(DL)) {
2314 return FromValue;
2315 }
2316
2317 Type *Type = CI->getType();
2318 if (Type->isPointerTy())
2319 Type = DL.getIntPtrType(Type);
2320 // Casts other than Trunc, SExt, or ZExt to scalar types cannot be salvaged.
2321 if (Type->isVectorTy() ||
2324 return nullptr;
2325
2326 llvm::Type *FromType = FromValue->getType();
2327 if (FromType->isPointerTy())
2328 FromType = DL.getIntPtrType(FromType);
2329
2330 unsigned FromTypeBitSize = FromType->getScalarSizeInBits();
2331 unsigned ToTypeBitSize = Type->getScalarSizeInBits();
2332
2333 auto ExtOps = DIExpression::getExtOps(FromTypeBitSize, ToTypeBitSize,
2334 isa<SExtInst>(&I));
2335 Ops.append(ExtOps.begin(), ExtOps.end());
2336 return FromValue;
2337 }
2338
2339 if (auto *GEP = dyn_cast<GetElementPtrInst>(&I))
2340 return getSalvageOpsForGEP(GEP, DL, CurrentLocOps, Ops, AdditionalValues);
2341 if (auto *BI = dyn_cast<BinaryOperator>(&I))
2342 return getSalvageOpsForBinOp(BI, CurrentLocOps, Ops, AdditionalValues);
2343 if (auto *IC = dyn_cast<ICmpInst>(&I))
2344 return getSalvageOpsForIcmpOp(IC, CurrentLocOps, Ops, AdditionalValues);
2345
2346 // *Not* to do: we should not attempt to salvage load instructions,
2347 // because the validity and lifetime of a dbg.value containing
2348 // DW_OP_deref becomes difficult to analyze. See PR40628 for examples.
2349 return nullptr;
2350}
2351
2352/// A replacement for a dbg.value expression.
2353using DbgValReplacement = std::optional<DIExpression *>;
2354
2355/// Point debug users of \p From to \p To using exprs given by \p RewriteExpr,
2356/// possibly moving/undefing users to prevent use-before-def. Returns true if
2357/// changes are made.
2359 Instruction &From, Value &To, Instruction &DomPoint, DominatorTree &DT,
2360 function_ref<DbgValReplacement(DbgVariableRecord &DVR)> RewriteDVRExpr) {
2361 // Find debug users of From.
2363 findDbgUsers(&From, DPUsers);
2364 if (DPUsers.empty())
2365 return false;
2366
2367 // Prevent use-before-def of To.
2368 bool Changed = false;
2369
2370 SmallPtrSet<DbgVariableRecord *, 1> UndefOrSalvageDVR;
2371 if (isa<Instruction>(&To)) {
2372 bool DomPointAfterFrom = From.getNextNode() == &DomPoint;
2373
2374 // DbgVariableRecord implementation of the above.
2375 for (auto *DVR : DPUsers) {
2376 Instruction *MarkedInstr = DVR->getMarker()->MarkedInstr;
2377 Instruction *NextNonDebug = MarkedInstr;
2378
2379 // It's common to see a debug user between From and DomPoint. Move it
2380 // after DomPoint to preserve the variable update without any reordering.
2381 if (DomPointAfterFrom && NextNonDebug == &DomPoint) {
2382 LLVM_DEBUG(dbgs() << "MOVE: " << *DVR << '\n');
2383 DVR->removeFromParent();
2384 DomPoint.getParent()->insertDbgRecordAfter(DVR, &DomPoint);
2385 Changed = true;
2386
2387 // Users which otherwise aren't dominated by the replacement value must
2388 // be salvaged or deleted.
2389 } else if (!DT.dominates(&DomPoint, MarkedInstr)) {
2390 UndefOrSalvageDVR.insert(DVR);
2391 }
2392 }
2393 }
2394
2395 // Update debug users without use-before-def risk.
2396 for (auto *DVR : DPUsers) {
2397 if (UndefOrSalvageDVR.count(DVR))
2398 continue;
2399
2400 DbgValReplacement DVRepl = RewriteDVRExpr(*DVR);
2401 if (!DVRepl)
2402 continue;
2403
2404 DVR->replaceVariableLocationOp(&From, &To);
2405 DVR->setExpression(*DVRepl);
2406 LLVM_DEBUG(dbgs() << "REWRITE: " << DVR << '\n');
2407 Changed = true;
2408 }
2409
2410 if (!UndefOrSalvageDVR.empty()) {
2411 // Try to salvage the remaining debug users.
2412 salvageDebugInfo(From);
2413 Changed = true;
2414 }
2415
2416 return Changed;
2417}
2418
2419/// Check if a bitcast between a value of type \p FromTy to type \p ToTy would
2420/// losslessly preserve the bits and semantics of the value. This predicate is
2421/// symmetric, i.e swapping \p FromTy and \p ToTy should give the same result.
2422///
2423/// Note that Type::canLosslesslyBitCastTo is not suitable here because it
2424/// allows semantically unequivalent bitcasts, such as <2 x i64> -> <4 x i32>,
2425/// and also does not allow lossless pointer <-> integer conversions.
2427 Type *ToTy) {
2428 // Trivially compatible types.
2429 if (FromTy == ToTy)
2430 return true;
2431
2432 // Handle compatible pointer <-> integer conversions.
2433 if (FromTy->isIntOrPtrTy() && ToTy->isIntOrPtrTy()) {
2434 bool SameSize = DL.getTypeSizeInBits(FromTy) == DL.getTypeSizeInBits(ToTy);
2435 bool LosslessConversion = !DL.isNonIntegralPointerType(FromTy) &&
2436 !DL.isNonIntegralPointerType(ToTy);
2437 return SameSize && LosslessConversion;
2438 }
2439
2440 // TODO: This is not exhaustive.
2441 return false;
2442}
2443
2445 Instruction &DomPoint, DominatorTree &DT) {
2446 // Exit early if From has no debug users.
2447 if (!From.isUsedByMetadata())
2448 return false;
2449
2450 assert(&From != &To && "Can't replace something with itself");
2451
2452 Type *FromTy = From.getType();
2453 Type *ToTy = To.getType();
2454
2455 auto IdentityDVR = [&](DbgVariableRecord &DVR) -> DbgValReplacement {
2456 return DVR.getExpression();
2457 };
2458
2459 // Handle no-op conversions.
2460 Module &M = *From.getModule();
2461 const DataLayout &DL = M.getDataLayout();
2462 if (isBitCastSemanticsPreserving(DL, FromTy, ToTy))
2463 return rewriteDebugUsers(From, To, DomPoint, DT, IdentityDVR);
2464
2465 // Handle integer-to-integer widening and narrowing.
2466 // FIXME: Use DW_OP_convert when it's available everywhere.
2467 if (FromTy->isIntegerTy() && ToTy->isIntegerTy()) {
2468 uint64_t FromBits = FromTy->getIntegerBitWidth();
2469 uint64_t ToBits = ToTy->getIntegerBitWidth();
2470 assert(FromBits != ToBits && "Unexpected no-op conversion");
2471
2472 // When the width of the result grows, assume that a debugger will only
2473 // access the low `FromBits` bits when inspecting the source variable.
2474 if (FromBits < ToBits)
2475 return rewriteDebugUsers(From, To, DomPoint, DT, IdentityDVR);
2476
2477 // The width of the result has shrunk. Use sign/zero extension to describe
2478 // the source variable's high bits.
2479 auto SignOrZeroExtDVR = [&](DbgVariableRecord &DVR) -> DbgValReplacement {
2480 DILocalVariable *Var = DVR.getVariable();
2481
2482 // Without knowing signedness, sign/zero extension isn't possible.
2483 auto Signedness = Var->getSignedness();
2484 if (!Signedness)
2485 return std::nullopt;
2486
2487 bool Signed = *Signedness == DIBasicType::Signedness::Signed;
2488 return DIExpression::appendExt(DVR.getExpression(), ToBits, FromBits,
2489 Signed);
2490 };
2491 return rewriteDebugUsers(From, To, DomPoint, DT, SignOrZeroExtDVR);
2492 }
2493
2494 // TODO: Floating-point conversions, vectors.
2495 return false;
2496}
2497
2499 Instruction *I, SmallVectorImpl<Value *> &PoisonedValues) {
2500 bool Changed = false;
2501 // RemoveDIs: erase debug-info on this instruction manually.
2502 I->dropDbgRecords();
2503 for (Use &U : I->operands()) {
2504 Value *Op = U.get();
2505 if (isa<Instruction>(Op) && !Op->getType()->isTokenTy()) {
2506 U.set(PoisonValue::get(Op->getType()));
2507 PoisonedValues.push_back(Op);
2508 Changed = true;
2509 }
2510 }
2511
2512 return Changed;
2513}
2514
2516 unsigned NumDeadInst = 0;
2517 // Delete the instructions backwards, as it has a reduced likelihood of
2518 // having to update as many def-use and use-def chains.
2519 Instruction *EndInst = BB->getTerminator(); // Last not to be deleted.
2522
2523 while (EndInst != &BB->front()) {
2524 // Delete the next to last instruction.
2525 Instruction *Inst = &*--EndInst->getIterator();
2526 if (!Inst->use_empty() && !Inst->getType()->isTokenTy())
2528 if (Inst->isEHPad() || Inst->getType()->isTokenTy()) {
2529 // EHPads can't have DbgVariableRecords attached to them, but it might be
2530 // possible for things with token type.
2531 Inst->dropDbgRecords();
2532 EndInst = Inst;
2533 continue;
2534 }
2535 ++NumDeadInst;
2536 // RemoveDIs: erasing debug-info must be done manually.
2537 Inst->dropDbgRecords();
2538 Inst->eraseFromParent();
2539 }
2540 return NumDeadInst;
2541}
2542
2543unsigned llvm::changeToUnreachable(Instruction *I, bool PreserveLCSSA,
2544 DomTreeUpdater *DTU,
2545 MemorySSAUpdater *MSSAU) {
2546 BasicBlock *BB = I->getParent();
2547
2548 if (MSSAU)
2549 MSSAU->changeToUnreachable(I);
2550
2551 SmallPtrSet<BasicBlock *, 8> UniqueSuccessors;
2552
2553 // Loop over all of the successors, removing BB's entry from any PHI
2554 // nodes.
2555 for (BasicBlock *Successor : successors(BB)) {
2556 Successor->removePredecessor(BB, PreserveLCSSA);
2557 if (DTU)
2558 UniqueSuccessors.insert(Successor);
2559 }
2560 auto *UI = new UnreachableInst(I->getContext(), I->getIterator());
2561 UI->setDebugLoc(I->getDebugLoc());
2562
2563 // All instructions after this are dead.
2564 unsigned NumInstrsRemoved = 0;
2565 BasicBlock::iterator BBI = I->getIterator(), BBE = BB->end();
2566 while (BBI != BBE) {
2567 if (!BBI->use_empty())
2568 BBI->replaceAllUsesWith(PoisonValue::get(BBI->getType()));
2569 BBI++->eraseFromParent();
2570 ++NumInstrsRemoved;
2571 }
2572 if (DTU) {
2574 Updates.reserve(UniqueSuccessors.size());
2575 for (BasicBlock *UniqueSuccessor : UniqueSuccessors)
2576 Updates.push_back({DominatorTree::Delete, BB, UniqueSuccessor});
2577 DTU->applyUpdates(Updates);
2578 }
2580 return NumInstrsRemoved;
2581}
2582
2584 SmallVector<Value *, 8> Args(II->args());
2586 II->getOperandBundlesAsDefs(OpBundles);
2587 CallInst *NewCall = CallInst::Create(II->getFunctionType(),
2588 II->getCalledOperand(), Args, OpBundles);
2589 NewCall->setCallingConv(II->getCallingConv());
2590 NewCall->setAttributes(II->getAttributes());
2591 NewCall->copyMetadata(*II);
2592
2593 // If the invoke had profile metadata, try converting them for CallInst.
2594 uint64_t TotalWeight;
2595 if (NewCall->extractProfTotalWeight(TotalWeight)) {
2596 // Set the total weight if it fits into i32, otherwise reset.
2597 MDBuilder MDB(NewCall->getContext());
2598 auto NewWeights = uint32_t(TotalWeight) != TotalWeight
2599 ? nullptr
2600 : MDB.createBranchWeights({uint32_t(TotalWeight)});
2601 NewCall->setMetadata(LLVMContext::MD_prof, NewWeights);
2602 }
2603
2604 return NewCall;
2605}
2606
2607// changeToCall - Convert the specified invoke into a normal call.
2610 NewCall->takeName(II);
2611 NewCall->insertBefore(II->getIterator());
2612 II->replaceAllUsesWith(NewCall);
2613
2614 // Follow the call by a branch to the normal destination.
2615 BasicBlock *NormalDestBB = II->getNormalDest();
2616 auto *BI = UncondBrInst::Create(NormalDestBB, II->getIterator());
2617 // Although it takes place after the call itself, the new branch is still
2618 // performing part of the control-flow functionality of the invoke, so we use
2619 // II's DebugLoc.
2620 BI->setDebugLoc(II->getDebugLoc());
2621
2622 // Update PHI nodes in the unwind destination
2623 BasicBlock *BB = II->getParent();
2624 BasicBlock *UnwindDestBB = II->getUnwindDest();
2625 UnwindDestBB->removePredecessor(BB);
2626 II->eraseFromParent();
2627 if (DTU)
2628 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}});
2629 return NewCall;
2630}
2631
2633 BasicBlock *UnwindEdge,
2634 DomTreeUpdater *DTU) {
2635 BasicBlock *BB = CI->getParent();
2636
2637 // Convert this function call into an invoke instruction. First, split the
2638 // basic block.
2639 BasicBlock *Split = SplitBlock(BB, CI, DTU, /*LI=*/nullptr, /*MSSAU*/ nullptr,
2640 CI->getName() + ".noexc");
2641
2642 // Delete the unconditional branch inserted by SplitBlock
2643 BB->back().eraseFromParent();
2644
2645 // Create the new invoke instruction.
2646 SmallVector<Value *, 8> InvokeArgs(CI->args());
2648
2649 CI->getOperandBundlesAsDefs(OpBundles);
2650
2651 // Note: we're round tripping operand bundles through memory here, and that
2652 // can potentially be avoided with a cleverer API design that we do not have
2653 // as of this time.
2654
2655 InvokeInst *II =
2657 UnwindEdge, InvokeArgs, OpBundles, CI->getName(), BB);
2658 II->setDebugLoc(CI->getDebugLoc());
2659 II->setCallingConv(CI->getCallingConv());
2660 II->setAttributes(CI->getAttributes());
2661 II->setMetadata(LLVMContext::MD_prof, CI->getMetadata(LLVMContext::MD_prof));
2662
2663 if (DTU)
2664 DTU->applyUpdates({{DominatorTree::Insert, BB, UnwindEdge}});
2665
2666 // Make sure that anything using the call now uses the invoke! This also
2667 // updates the CallGraph if present, because it uses a WeakTrackingVH.
2669
2670 // Delete the original call
2671 Split->front().eraseFromParent();
2672 return Split;
2673}
2674
2676 DomTreeUpdater *DTU, bool FoldInstsToUnreachable) {
2678 BasicBlock *BB = &F.front();
2679 Worklist.push_back(BB);
2680 Reachable[BB->getNumber()] = true;
2681 bool Changed = false;
2682 do {
2683 BB = Worklist.pop_back_val();
2684
2685 // Do a scan of the basic block, turning any obviously unreachable
2686 // instructions into LLVM unreachable insts. The instruction combining pass
2687 // canonicalizes unreachable insts into stores to null or undef.
2688 // Note that it traverses the whole instruction list, so it may incur
2689 // significant performance overhead.
2690 if (FoldInstsToUnreachable) {
2691 for (Instruction &I : *BB) {
2692 if (auto *CI = dyn_cast<CallInst>(&I)) {
2693 Value *Callee = CI->getCalledOperand();
2694 // Handle intrinsic calls.
2695 if (Function *F = dyn_cast<Function>(Callee)) {
2696 auto IntrinsicID = F->getIntrinsicID();
2697 // Assumptions that are known to be false are equivalent to
2698 // unreachable. Also, if the condition is undefined, then we make
2699 // the choice most beneficial to the optimizer, and choose that to
2700 // also be unreachable.
2701 if (IntrinsicID == Intrinsic::assume) {
2702 if (match(CI->getArgOperand(0),
2703 m_CombineOr(m_Zero(), m_Undef()))) {
2704 // Don't insert a call to llvm.trap right before the
2705 // unreachable.
2706 changeToUnreachable(CI, false, DTU);
2707 Changed = true;
2708 break;
2709 }
2710 } else if (IntrinsicID == Intrinsic::experimental_guard) {
2711 // A call to the guard intrinsic bails out of the current
2712 // compilation unit if the predicate passed to it is false. If the
2713 // predicate is a constant false, then we know the guard will bail
2714 // out of the current compile unconditionally, so all code
2715 // following it is dead.
2716 //
2717 // Note: unlike in llvm.assume, it is not "obviously profitable"
2718 // for guards to treat `undef` as `false` since a guard on `undef`
2719 // can still be useful for widening.
2720 if (match(CI->getArgOperand(0), m_Zero()))
2721 if (!isa<UnreachableInst>(CI->getNextNode())) {
2722 changeToUnreachable(CI->getNextNode(), false, DTU);
2723 Changed = true;
2724 break;
2725 }
2726 }
2727 } else if ((isa<ConstantPointerNull>(Callee) &&
2728 !NullPointerIsDefined(CI->getFunction(),
2729 cast<PointerType>(Callee->getType())
2730 ->getAddressSpace())) ||
2731 isa<UndefValue>(Callee)) {
2732 changeToUnreachable(CI, false, DTU);
2733 Changed = true;
2734 break;
2735 }
2736 if (CI->doesNotReturn() && !CI->isMustTailCall()) {
2737 // If we found a call to a no-return function, insert an unreachable
2738 // instruction after it. Make sure there isn't *already* one there
2739 // though.
2740 if (!isa<UnreachableInst>(CI->getNextNode())) {
2741 // Don't insert a call to llvm.trap right before the unreachable.
2742 changeToUnreachable(CI->getNextNode(), false, DTU);
2743 Changed = true;
2744 }
2745 break;
2746 }
2747 } else if (auto *SI = dyn_cast<StoreInst>(&I)) {
2748 // Store to undef and store to null are undefined and used to signal
2749 // that they should be changed to unreachable by passes that can't
2750 // modify the CFG.
2751
2752 // Don't touch volatile stores.
2753 if (SI->isVolatile())
2754 continue;
2755
2756 Value *Ptr = SI->getOperand(1);
2757
2758 if (isa<UndefValue>(Ptr) ||
2760 !NullPointerIsDefined(SI->getFunction(),
2761 SI->getPointerAddressSpace()))) {
2762 changeToUnreachable(SI, false, DTU);
2763 Changed = true;
2764 break;
2765 }
2766 }
2767 }
2768
2769 Instruction *Terminator = BB->getTerminator();
2770 if (auto *II = dyn_cast<InvokeInst>(Terminator)) {
2771 // Turn invokes that call 'nounwind' functions into ordinary calls.
2772 Value *Callee = II->getCalledOperand();
2773 if ((isa<ConstantPointerNull>(Callee) &&
2774 !NullPointerIsDefined(BB->getParent())) ||
2775 isa<UndefValue>(Callee)) {
2776 changeToUnreachable(II, false, DTU);
2777 Changed = true;
2778 } else {
2779 if (II->doesNotReturn() &&
2780 !isa<UnreachableInst>(II->getNormalDest()->front())) {
2781 // If we found an invoke of a no-return function,
2782 // create a new empty basic block with an `unreachable` terminator,
2783 // and set it as the normal destination for the invoke,
2784 // unless that is already the case.
2785 // Note that the original normal destination could have other uses.
2786 BasicBlock *OrigNormalDest = II->getNormalDest();
2787 OrigNormalDest->removePredecessor(II->getParent());
2788 LLVMContext &Ctx = II->getContext();
2789 BasicBlock *UnreachableNormalDest = BasicBlock::Create(
2790 Ctx, OrigNormalDest->getName() + ".unreachable",
2791 II->getFunction(), OrigNormalDest);
2792 Reachable.resize(II->getFunction()->getMaxBlockNumber());
2793 auto *UI = new UnreachableInst(Ctx, UnreachableNormalDest);
2794 UI->setDebugLoc(DebugLoc::getTemporary());
2795 II->setNormalDest(UnreachableNormalDest);
2796 if (DTU)
2797 DTU->applyUpdates(
2798 {{DominatorTree::Delete, BB, OrigNormalDest},
2799 {DominatorTree::Insert, BB, UnreachableNormalDest}});
2800 Changed = true;
2801 }
2802 if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(&F)) {
2803 if (II->use_empty() && !II->mayHaveSideEffects()) {
2804 // jump to the normal destination branch.
2805 BasicBlock *NormalDestBB = II->getNormalDest();
2806 BasicBlock *UnwindDestBB = II->getUnwindDest();
2807 UncondBrInst::Create(NormalDestBB, II->getIterator());
2808 UnwindDestBB->removePredecessor(II->getParent());
2809 II->eraseFromParent();
2810 if (DTU)
2811 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}});
2812 } else
2813 changeToCall(II, DTU);
2814 Changed = true;
2815 }
2816 }
2817 } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(Terminator)) {
2818 // Remove catchpads which cannot be reached.
2819 struct CatchPadDenseMapInfo {
2820 static unsigned getHashValue(CatchPadInst *CatchPad) {
2821 return static_cast<unsigned>(hash_combine_range(
2822 CatchPad->value_op_begin(), CatchPad->value_op_end()));
2823 }
2824
2825 static bool isEqual(CatchPadInst *LHS, CatchPadInst *RHS) {
2826 return LHS->isIdenticalTo(RHS);
2827 }
2828 };
2829
2830 SmallDenseMap<BasicBlock *, int, 8> NumPerSuccessorCases;
2831 // Set of unique CatchPads.
2833 CatchPadDenseMapInfo,
2835 HandlerSet;
2837 for (CatchSwitchInst::handler_iterator I = CatchSwitch->handler_begin(),
2838 E = CatchSwitch->handler_end();
2839 I != E; ++I) {
2840 BasicBlock *HandlerBB = *I;
2841 if (DTU)
2842 ++NumPerSuccessorCases[HandlerBB];
2843 auto *CatchPad = cast<CatchPadInst>(HandlerBB->getFirstNonPHIIt());
2844 if (!HandlerSet.insert({CatchPad, Empty}).second) {
2845 if (DTU)
2846 --NumPerSuccessorCases[HandlerBB];
2847 CatchSwitch->removeHandler(I);
2848 --I;
2849 --E;
2850 Changed = true;
2851 }
2852 }
2853 if (DTU) {
2854 std::vector<DominatorTree::UpdateType> Updates;
2855 for (const std::pair<BasicBlock *, int> &I : NumPerSuccessorCases)
2856 if (I.second == 0)
2857 Updates.push_back({DominatorTree::Delete, BB, I.first});
2858 DTU->applyUpdates(Updates);
2859 }
2860 }
2861
2862 Changed |= ConstantFoldTerminator(BB, true, nullptr, DTU);
2863 }
2864 for (BasicBlock *Successor : successors(BB)) {
2865 if (!Reachable[Successor->getNumber()]) {
2866 Worklist.push_back(Successor);
2867 Reachable[Successor->getNumber()] = true;
2868 }
2869 }
2870 } while (!Worklist.empty());
2871 return Changed;
2872}
2873
2875 Instruction *TI = BB->getTerminator();
2876
2877 if (auto *II = dyn_cast<InvokeInst>(TI))
2878 return changeToCall(II, DTU);
2879
2880 Instruction *NewTI;
2881 BasicBlock *UnwindDest;
2882
2883 if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
2884 NewTI = CleanupReturnInst::Create(CRI->getCleanupPad(), nullptr, CRI->getIterator());
2885 UnwindDest = CRI->getUnwindDest();
2886 } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(TI)) {
2887 auto *NewCatchSwitch = CatchSwitchInst::Create(
2888 CatchSwitch->getParentPad(), nullptr, CatchSwitch->getNumHandlers(),
2889 CatchSwitch->getName(), CatchSwitch->getIterator());
2890 for (BasicBlock *PadBB : CatchSwitch->handlers())
2891 NewCatchSwitch->addHandler(PadBB);
2892
2893 NewTI = NewCatchSwitch;
2894 UnwindDest = CatchSwitch->getUnwindDest();
2895 } else {
2896 llvm_unreachable("Could not find unwind successor");
2897 }
2898
2899 NewTI->takeName(TI);
2900 NewTI->setDebugLoc(TI->getDebugLoc());
2901 UnwindDest->removePredecessor(BB);
2902 TI->replaceAllUsesWith(NewTI);
2903 TI->eraseFromParent();
2904 if (DTU)
2905 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDest}});
2906 return NewTI;
2907}
2908
2909/// removeUnreachableBlocks - Remove blocks that are not reachable, even
2910/// if they are in a dead cycle. Return true if a change was made, false
2911/// otherwise.
2913 MemorySSAUpdater *MSSAU,
2914 bool FoldInstsToUnreachable) {
2915 SmallVector<bool, 16> Reachable(F.getMaxBlockNumber());
2916 bool Changed = markAliveBlocks(F, Reachable, DTU, FoldInstsToUnreachable);
2917
2918 // Are there any blocks left to actually delete?
2919 SmallSetVector<BasicBlock *, 8> BlocksToRemove;
2920 for (BasicBlock &BB : F) {
2921 // Skip reachable basic blocks
2922 if (Reachable[BB.getNumber()])
2923 continue;
2924 // Skip already-deleted blocks
2925 if (DTU && DTU->isBBPendingDeletion(&BB))
2926 continue;
2927 BlocksToRemove.insert(&BB);
2928 }
2929
2930 if (BlocksToRemove.empty())
2931 return Changed;
2932
2933 Changed = true;
2934 NumRemoved += BlocksToRemove.size();
2935
2936 if (MSSAU)
2937 MSSAU->removeBlocks(BlocksToRemove);
2938
2939 DeleteDeadBlocks(BlocksToRemove.takeVector(), DTU);
2940
2941 return Changed;
2942}
2943
2944/// If AAOnly is set, only intersect alias analysis metadata and preserve other
2945/// known metadata. Unknown metadata is always dropped.
2946static void combineMetadata(Instruction *K, const Instruction *J,
2947 bool DoesKMove, bool AAOnly = false) {
2949 K->getAllMetadataOtherThanDebugLoc(Metadata);
2950 for (const auto &MD : Metadata) {
2951 unsigned Kind = MD.first;
2952 MDNode *JMD = J->getMetadata(Kind);
2953 MDNode *KMD = MD.second;
2954
2955 // TODO: Assert that this switch is exhaustive for fixed MD kinds.
2956 switch (Kind) {
2957 default:
2958 K->setMetadata(Kind, nullptr); // Remove unknown metadata
2959 break;
2960 case LLVMContext::MD_dbg:
2961 llvm_unreachable("getAllMetadataOtherThanDebugLoc returned a MD_dbg");
2962 case LLVMContext::MD_DIAssignID:
2963 if (!AAOnly)
2964 K->mergeDIAssignID(J);
2965 break;
2966 case LLVMContext::MD_tbaa:
2967 if (DoesKMove)
2968 K->setMetadata(Kind, MDNode::getMostGenericTBAA(JMD, KMD));
2969 break;
2970 case LLVMContext::MD_alias_scope:
2971 if (DoesKMove)
2972 K->setMetadata(Kind, MDNode::getMostGenericAliasScope(JMD, KMD));
2973 break;
2974 case LLVMContext::MD_noalias:
2975 case LLVMContext::MD_mem_parallel_loop_access:
2976 if (DoesKMove)
2977 K->setMetadata(Kind, MDNode::intersect(JMD, KMD));
2978 break;
2979 case LLVMContext::MD_access_group:
2980 if (DoesKMove)
2981 K->setMetadata(LLVMContext::MD_access_group,
2982 intersectAccessGroups(K, J));
2983 break;
2984 case LLVMContext::MD_range:
2985 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
2986 K->setMetadata(Kind, MDNode::getMostGenericRange(JMD, KMD));
2987 break;
2988 case LLVMContext::MD_nofpclass:
2989 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
2990 K->setMetadata(Kind, MDNode::getMostGenericNoFPClass(JMD, KMD));
2991 break;
2992 case LLVMContext::MD_fpmath:
2993 if (!AAOnly)
2994 K->setMetadata(Kind, MDNode::getMostGenericFPMath(JMD, KMD));
2995 break;
2996 case LLVMContext::MD_invariant_load:
2997 case LLVMContext::MD_invariant_group:
2998 // If K moves, only keep the invariant metadata if it is present on
2999 // both instructions; otherwise the invariant would be asserted on a
3000 // path (J's) that never promised it. If K does not move, K stays on
3001 // its original path, so its existing metadata remains valid.
3002 if (DoesKMove)
3003 K->setMetadata(Kind, JMD);
3004 break;
3005 case LLVMContext::MD_nonnull:
3006 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3007 K->setMetadata(Kind, JMD);
3008 break;
3009 // Keep empty cases for prof, mmra, memprof, and callsite to prevent them
3010 // from being removed as unknown metadata. The actual merging is handled
3011 // separately below.
3012 case LLVMContext::MD_prof:
3013 case LLVMContext::MD_mmra:
3014 case LLVMContext::MD_memprof:
3015 case LLVMContext::MD_callsite:
3016 break;
3017 case LLVMContext::MD_callee_type:
3018 if (!AAOnly) {
3019 K->setMetadata(LLVMContext::MD_callee_type,
3021 }
3022 break;
3023 case LLVMContext::MD_align:
3024 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3025 K->setMetadata(
3027 break;
3028 case LLVMContext::MD_dereferenceable:
3029 case LLVMContext::MD_dereferenceable_or_null:
3030 if (!AAOnly && DoesKMove)
3031 K->setMetadata(Kind,
3033 break;
3034 case LLVMContext::MD_preserve_access_index:
3035 // Preserve !preserve.access.index in K.
3036 break;
3037 case LLVMContext::MD_noundef:
3038 // If K does move, keep noundef if it is present in both instructions.
3039 if (!AAOnly && DoesKMove)
3040 K->setMetadata(Kind, JMD);
3041 break;
3042 case LLVMContext::MD_nontemporal:
3043 // Preserve !nontemporal if it is present on both instructions.
3044 if (!AAOnly)
3045 K->setMetadata(Kind, JMD);
3046 break;
3047 case LLVMContext::MD_mem_cache_hint:
3048 // Preserve !mem.cache_hint only if it is present and equivalent on both
3049 // instructions.
3050 if (!AAOnly && KMD != JMD)
3051 K->setMetadata(Kind, nullptr);
3052 break;
3053 case LLVMContext::MD_noalias_addrspace:
3054 if (DoesKMove)
3055 K->setMetadata(Kind,
3057 break;
3058 case LLVMContext::MD_nosanitize:
3059 // Preserve !nosanitize if both K and J have it.
3060 K->setMetadata(Kind, JMD);
3061 break;
3062 case LLVMContext::MD_captures:
3063 K->setMetadata(
3065 K->getContext(), MDNode::toCaptureComponents(JMD) |
3067 break;
3068 case LLVMContext::MD_alloc_token:
3069 if (!AAOnly && KMD != JMD)
3070 K->setMetadata(Kind, MDNode::getMergedAllocTokenMetadata(KMD, JMD));
3071 break;
3072 }
3073 }
3074
3075 // Merge MMRAs.
3076 // This is handled separately because we also want to handle cases where K
3077 // doesn't have tags but J does.
3078 auto JMMRA = J->getMetadata(LLVMContext::MD_mmra);
3079 auto KMMRA = K->getMetadata(LLVMContext::MD_mmra);
3080 if (JMMRA || KMMRA) {
3081 K->setMetadata(LLVMContext::MD_mmra,
3082 MMRAMetadata::combine(K->getContext(), JMMRA, KMMRA));
3083 }
3084
3085 // Merge memprof metadata.
3086 // Handle separately to support cases where only one instruction has the
3087 // metadata.
3088 auto *JMemProf = J->getMetadata(LLVMContext::MD_memprof);
3089 auto *KMemProf = K->getMetadata(LLVMContext::MD_memprof);
3090 if (!AAOnly && (JMemProf || KMemProf)) {
3091 K->setMetadata(LLVMContext::MD_memprof,
3092 MDNode::getMergedMemProfMetadata(KMemProf, JMemProf));
3093 }
3094
3095 // Merge callsite metadata.
3096 // Handle separately to support cases where only one instruction has the
3097 // metadata.
3098 auto *JCallSite = J->getMetadata(LLVMContext::MD_callsite);
3099 auto *KCallSite = K->getMetadata(LLVMContext::MD_callsite);
3100 if (!AAOnly && (JCallSite || KCallSite)) {
3101 K->setMetadata(LLVMContext::MD_callsite,
3102 MDNode::getMergedCallsiteMetadata(KCallSite, JCallSite));
3103 }
3104
3105 // Merge prof metadata.
3106 // Handle separately to support cases where only one instruction has the
3107 // metadata.
3108 auto *JProf = J->getMetadata(LLVMContext::MD_prof);
3109 auto *KProf = K->getMetadata(LLVMContext::MD_prof);
3110 if (!AAOnly && (JProf || KProf)) {
3111 K->setMetadata(LLVMContext::MD_prof,
3112 MDNode::getMergedProfMetadata(KProf, JProf, K, J));
3113 }
3114}
3115
3117 bool DoesKMove) {
3118 combineMetadata(K, J, DoesKMove);
3119}
3120
3122 combineMetadata(K, J, /*DoesKMove=*/true, /*AAOnly=*/true);
3123}
3124
3125void llvm::copyMetadataForLoad(LoadInst &Dest, const LoadInst &Source) {
3127 Source.getAllMetadata(MD);
3128 MDBuilder MDB(Dest.getContext());
3129 Type *NewType = Dest.getType();
3130 const DataLayout &DL = Source.getDataLayout();
3131 for (const auto &MDPair : MD) {
3132 unsigned ID = MDPair.first;
3133 MDNode *N = MDPair.second;
3134 // Note, essentially every kind of metadata should be preserved here! This
3135 // routine is supposed to clone a load instruction changing *only its type*.
3136 // The only metadata it makes sense to drop is metadata which is invalidated
3137 // when the pointer type changes. This should essentially never be the case
3138 // in LLVM, but we explicitly switch over only known metadata to be
3139 // conservatively correct. If you are adding metadata to LLVM which pertains
3140 // to loads, you almost certainly want to add it here.
3141 switch (ID) {
3142 case LLVMContext::MD_dbg:
3143 case LLVMContext::MD_tbaa:
3144 case LLVMContext::MD_prof:
3145 case LLVMContext::MD_fpmath:
3146 case LLVMContext::MD_tbaa_struct:
3147 case LLVMContext::MD_invariant_load:
3148 case LLVMContext::MD_alias_scope:
3149 case LLVMContext::MD_noalias:
3150 case LLVMContext::MD_nontemporal:
3151 case LLVMContext::MD_mem_cache_hint:
3152 case LLVMContext::MD_mem_parallel_loop_access:
3153 case LLVMContext::MD_access_group:
3154 case LLVMContext::MD_noundef:
3155 case LLVMContext::MD_noalias_addrspace:
3156 case LLVMContext::MD_invariant_group:
3157 // All of these directly apply.
3158 Dest.setMetadata(ID, N);
3159 break;
3160
3161 case LLVMContext::MD_nonnull:
3162 copyNonnullMetadata(Source, N, Dest);
3163 break;
3164
3165 case LLVMContext::MD_align:
3166 case LLVMContext::MD_dereferenceable:
3167 case LLVMContext::MD_dereferenceable_or_null:
3168 // These only directly apply if the new type is also a pointer.
3169 if (NewType->isPointerTy())
3170 Dest.setMetadata(ID, N);
3171 break;
3172
3173 case LLVMContext::MD_range:
3174 copyRangeMetadata(DL, Source, N, Dest);
3175 break;
3176
3177 case LLVMContext::MD_nofpclass:
3178 // This only applies if the floating-point type interpretation. This
3179 // should handle degenerate cases like casting between a scalar and single
3180 // element vector.
3181 if (NewType->getScalarType() == Source.getType()->getScalarType())
3182 Dest.setMetadata(ID, N);
3183 break;
3184 }
3185 }
3186}
3187
3189 auto *ReplInst = dyn_cast<Instruction>(Repl);
3190 if (!ReplInst)
3191 return;
3192
3193 // Patch the replacement so that it is not more restrictive than the value
3194 // being replaced.
3195 WithOverflowInst *UnusedWO;
3196 // When replacing the result of a llvm.*.with.overflow intrinsic with a
3197 // overflowing binary operator, nuw/nsw flags may no longer hold.
3198 if (isa<OverflowingBinaryOperator>(ReplInst) &&
3200 ReplInst->dropPoisonGeneratingFlags();
3201 // Note that if 'I' is a load being replaced by some operation,
3202 // for example, by an arithmetic operation, then andIRFlags()
3203 // would just erase all math flags from the original arithmetic
3204 // operation, which is clearly not wanted and not needed.
3205 else if (!isa<LoadInst>(I))
3206 ReplInst->andIRFlags(I);
3207
3208 // Handle attributes.
3209 if (auto *CB1 = dyn_cast<CallBase>(ReplInst)) {
3210 if (auto *CB2 = dyn_cast<CallBase>(I)) {
3211 bool Success = CB1->tryIntersectAttributes(CB2);
3212 assert(Success && "We should not be trying to sink callbases "
3213 "with non-intersectable attributes");
3214 // For NDEBUG Compile.
3215 (void)Success;
3216 }
3217 }
3218
3219 // FIXME: If both the original and replacement value are part of the
3220 // same control-flow region (meaning that the execution of one
3221 // guarantees the execution of the other), then we can combine the
3222 // noalias scopes here and do better than the general conservative
3223 // answer used in combineMetadata().
3224
3225 // In general, GVN unifies expressions over different control-flow
3226 // regions, and so we need a conservative combination of the noalias
3227 // scopes.
3228 combineMetadataForCSE(ReplInst, I, false);
3229}
3230
3231template <typename ShouldReplaceFn>
3232static unsigned replaceDominatedUsesWith(Value *From, Value *To,
3233 const ShouldReplaceFn &ShouldReplace) {
3234 assert(From->getType() == To->getType());
3235
3236 unsigned Count = 0;
3237 for (Use &U : llvm::make_early_inc_range(From->uses())) {
3238 auto *II = dyn_cast<IntrinsicInst>(U.getUser());
3239 if (II && II->getIntrinsicID() == Intrinsic::fake_use)
3240 continue;
3241 if (!ShouldReplace(U))
3242 continue;
3243 LLVM_DEBUG(dbgs() << "Replace dominated use of '";
3244 From->printAsOperand(dbgs());
3245 dbgs() << "' with " << *To << " in " << *U.getUser() << "\n");
3246 U.set(To);
3247 ++Count;
3248 }
3249 return Count;
3250}
3251
3253 assert(From->getType() == To->getType());
3254 auto *BB = From->getParent();
3255 unsigned Count = 0;
3256
3257 for (Use &U : llvm::make_early_inc_range(From->uses())) {
3258 auto *I = cast<Instruction>(U.getUser());
3259 if (I->getParent() == BB)
3260 continue;
3261 U.set(To);
3262 ++Count;
3263 }
3264 return Count;
3265}
3266
3268 DominatorTree &DT,
3269 const BasicBlockEdge &Root) {
3270 auto Dominates = [&](const Use &U) { return DT.dominates(Root, U); };
3271 return ::replaceDominatedUsesWith(From, To, Dominates);
3272}
3273
3275 DominatorTree &DT,
3276 const BasicBlock *BB) {
3277 auto Dominates = [&](const Use &U) { return DT.dominates(BB, U); };
3278 return ::replaceDominatedUsesWith(From, To, Dominates);
3279}
3280
3282 DominatorTree &DT,
3283 const Instruction *I) {
3284 auto Dominates = [&](const Use &U) { return DT.dominates(I, U); };
3285 return ::replaceDominatedUsesWith(From, To, Dominates);
3286}
3287
3289 Value *From, Value *To, DominatorTree &DT, const BasicBlockEdge &Root,
3290 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3291 auto DominatesAndShouldReplace = [&](const Use &U) {
3292 return DT.dominates(Root, U) && ShouldReplace(U, To);
3293 };
3294 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3295}
3296
3298 Value *From, Value *To, DominatorTree &DT, const BasicBlock *BB,
3299 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3300 auto DominatesAndShouldReplace = [&](const Use &U) {
3301 return DT.dominates(BB, U) && ShouldReplace(U, To);
3302 };
3303 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3304}
3305
3307 Value *From, Value *To, DominatorTree &DT, const Instruction *I,
3308 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3309 auto DominatesAndShouldReplace = [&](const Use &U) {
3310 return DT.dominates(I, U) && ShouldReplace(U, To);
3311 };
3312 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3313}
3314
3316 const TargetLibraryInfo &TLI) {
3317 // Check if the function is specifically marked as a gc leaf function.
3318 if (Call->hasFnAttr("gc-leaf-function"))
3319 return true;
3320 if (const Function *F = Call->getCalledFunction()) {
3321 if (F->hasFnAttribute("gc-leaf-function"))
3322 return true;
3323
3324 if (auto IID = F->getIntrinsicID()) {
3325 // Most LLVM intrinsics do not take safepoints.
3326 return IID != Intrinsic::experimental_gc_statepoint &&
3327 IID != Intrinsic::experimental_deoptimize &&
3328 IID != Intrinsic::memcpy_element_unordered_atomic &&
3329 IID != Intrinsic::memmove_element_unordered_atomic;
3330 }
3331 }
3332
3333 // Lib calls can be materialized by some passes, and won't be
3334 // marked as 'gc-leaf-function.' All available Libcalls are
3335 // GC-leaf.
3336 return TLI.has(TLI.getLibFunc(*Call));
3337}
3338
3340 LoadInst &NewLI) {
3341 auto *NewTy = NewLI.getType();
3342
3343 // This only directly applies if the new type is also a pointer.
3344 if (NewTy->isPointerTy()) {
3345 NewLI.setMetadata(LLVMContext::MD_nonnull, N);
3346 return;
3347 }
3348
3349 // The only other translation we can do is to integral loads with !range
3350 // metadata.
3351 if (!NewTy->isIntegerTy())
3352 return;
3353
3354 MDBuilder MDB(NewLI.getContext());
3355 const Value *Ptr = OldLI.getPointerOperand();
3356 auto *ITy = cast<IntegerType>(NewTy);
3357 auto *NullInt = ConstantExpr::getPtrToInt(
3359 auto *NonNullInt = ConstantExpr::getAdd(NullInt, ConstantInt::get(ITy, 1));
3360 NewLI.setMetadata(LLVMContext::MD_range,
3361 MDB.createRange(NonNullInt, NullInt));
3362}
3363
3365 MDNode *N, LoadInst &NewLI) {
3366 auto *NewTy = NewLI.getType();
3367 // Simply copy the metadata if the type did not change.
3368 if (NewTy == OldLI.getType()) {
3369 NewLI.setMetadata(LLVMContext::MD_range, N);
3370 return;
3371 }
3372
3373 // Give up unless it is converted to a pointer where there is a single very
3374 // valuable mapping we can do reliably.
3375 // FIXME: It would be nice to propagate this in more ways, but the type
3376 // conversions make it hard.
3377 if (!NewTy->isPointerTy())
3378 return;
3379
3380 unsigned BitWidth = DL.getPointerTypeSizeInBits(NewTy);
3381 if (BitWidth == OldLI.getType()->getScalarSizeInBits() &&
3382 !getConstantRangeFromMetadata(*N).contains(APInt(BitWidth, 0))) {
3383 MDNode *NN = MDNode::get(OldLI.getContext(), {});
3384 NewLI.setMetadata(LLVMContext::MD_nonnull, NN);
3385 }
3386}
3387
3390 findDbgUsers(&I, DPUsers);
3391 for (auto *DVR : DPUsers)
3392 DVR->eraseFromParent();
3393}
3394
3396 BasicBlock *BB) {
3397 // Since we are moving the instructions out of its basic block, we do not
3398 // retain their original debug locations (DILocations) and debug intrinsic
3399 // instructions.
3400 //
3401 // Doing so would degrade the debugging experience.
3402 //
3403 // FIXME: Issue #152767: debug info should also be the same as the
3404 // original branch, **if** the user explicitly indicated that (for sampling
3405 // PGO)
3406 //
3407 // Currently, when hoisting the instructions, we take the following actions:
3408 // - Remove their debug intrinsic instructions.
3409 // - Set their debug locations to the values from the insertion point.
3410 //
3411 // As per PR39141 (comment #8), the more fundamental reason why the dbg.values
3412 // need to be deleted, is because there will not be any instructions with a
3413 // DILocation in either branch left after performing the transformation. We
3414 // can only insert a dbg.value after the two branches are joined again.
3415 //
3416 // See PR38762, PR39243 for more details.
3417 //
3418 // TODO: Extend llvm.dbg.value to take more than one SSA Value (PR39141) to
3419 // encode predicated DIExpressions that yield different results on different
3420 // code paths.
3421
3422 for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE;) {
3423 Instruction *I = &*II;
3424 I->dropUBImplyingAttrsAndMetadata();
3425 if (I->isUsedByMetadata())
3426 dropDebugUsers(*I);
3427 // RemoveDIs: drop debug-info too as the following code does.
3428 I->dropDbgRecords();
3429 if (I->isDebugOrPseudoInst()) {
3430 // Remove DbgInfo and pseudo probe Intrinsics.
3431 II = I->eraseFromParent();
3432 continue;
3433 }
3434 I->setDebugLoc(InsertPt->getDebugLoc());
3435 ++II;
3436 }
3437 DomBlock->splice(InsertPt->getIterator(), BB, BB->begin(),
3438 BB->getTerminator()->getIterator());
3439}
3440
3442 Type &Ty) {
3443 // Create integer constant expression.
3444 auto createIntegerExpression = [&DIB](const Constant &CV) -> DIExpression * {
3445 const APInt &API = cast<ConstantInt>(&CV)->getValue();
3446 std::optional<int64_t> InitIntOpt;
3447 if (API.getBitWidth() == 1)
3448 InitIntOpt = API.tryZExtValue();
3449 else
3450 InitIntOpt = API.trySExtValue();
3451 return InitIntOpt ? DIB.createConstantValueExpression(
3452 static_cast<uint64_t>(*InitIntOpt))
3453 : nullptr;
3454 };
3455
3456 if (isa<ConstantInt>(C))
3457 return createIntegerExpression(C);
3458
3459 auto *FP = dyn_cast<ConstantFP>(&C);
3460 if (FP && Ty.isFloatingPointTy() && Ty.getScalarSizeInBits() <= 64) {
3461 const APFloat &APF = FP->getValueAPF();
3462 APInt const &API = APF.bitcastToAPInt();
3463 if (uint64_t Temp = API.getZExtValue())
3464 return DIB.createConstantValueExpression(Temp);
3465 return DIB.createConstantValueExpression(*API.getRawData());
3466 }
3467
3468 if (!Ty.isPointerTy())
3469 return nullptr;
3470
3472 return DIB.createConstantValueExpression(0);
3473
3474 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(&C))
3475 if (CE->getOpcode() == Instruction::IntToPtr) {
3476 const Value *V = CE->getOperand(0);
3477 if (auto CI = dyn_cast_or_null<ConstantInt>(V))
3478 return createIntegerExpression(*CI);
3479 }
3480 return nullptr;
3481}
3482
3484 auto RemapDebugOperands = [&Mapping](auto *DV, auto Set) {
3485 for (auto *Op : Set) {
3486 auto I = Mapping.find(Op);
3487 if (I != Mapping.end())
3488 DV->replaceVariableLocationOp(Op, I->second, /*AllowEmpty=*/true);
3489 }
3490 };
3491 auto RemapAssignAddress = [&Mapping](auto *DA) {
3492 auto I = Mapping.find(DA->getAddress());
3493 if (I != Mapping.end())
3494 DA->setAddress(I->second);
3495 };
3496 for (DbgVariableRecord &DVR : filterDbgVars(Inst->getDbgRecordRange())) {
3497 RemapDebugOperands(&DVR, DVR.location_ops());
3498 if (DVR.isDbgAssign())
3499 RemapAssignAddress(&DVR);
3500 }
3501}
3502
3503namespace {
3504
3505/// A potential constituent of a bitreverse or bswap expression. See
3506/// collectBitParts for a fuller explanation.
3507struct BitPart {
3508 BitPart(Value *P, unsigned BW) : Provider(P) {
3509 Provenance.resize(BW);
3510 }
3511
3512 /// The Value that this is a bitreverse/bswap of.
3513 Value *Provider;
3514
3515 /// The "provenance" of each bit. Provenance[A] = B means that bit A
3516 /// in Provider becomes bit B in the result of this expression.
3517 SmallVector<int8_t, 32> Provenance; // int8_t means max size is i128.
3518
3519 enum { Unset = -1 };
3520};
3521
3522} // end anonymous namespace
3523
3524/// Analyze the specified subexpression and see if it is capable of providing
3525/// pieces of a bswap or bitreverse. The subexpression provides a potential
3526/// piece of a bswap or bitreverse if it can be proved that each non-zero bit in
3527/// the output of the expression came from a corresponding bit in some other
3528/// value. This function is recursive, and the end result is a mapping of
3529/// bitnumber to bitnumber. It is the caller's responsibility to validate that
3530/// the bitnumber to bitnumber mapping is correct for a bswap or bitreverse.
3531///
3532/// For example, if the current subexpression if "(shl i32 %X, 24)" then we know
3533/// that the expression deposits the low byte of %X into the high byte of the
3534/// result and that all other bits are zero. This expression is accepted and a
3535/// BitPart is returned with Provider set to %X and Provenance[24-31] set to
3536/// [0-7].
3537///
3538/// For vector types, all analysis is performed at the per-element level. No
3539/// cross-element analysis is supported (shuffle/insertion/reduction), and all
3540/// constant masks must be splatted across all elements.
3541///
3542/// To avoid revisiting values, the BitPart results are memoized into the
3543/// provided map. To avoid unnecessary copying of BitParts, BitParts are
3544/// constructed in-place in the \c BPS map. Because of this \c BPS needs to
3545/// store BitParts objects, not pointers. As we need the concept of a nullptr
3546/// BitParts (Value has been analyzed and the analysis failed), we an Optional
3547/// type instead to provide the same functionality.
3548///
3549/// Because we pass around references into \c BPS, we must use a container that
3550/// does not invalidate internal references (std::map instead of DenseMap).
3551static const std::optional<BitPart> &
3552collectBitParts(Value *V, bool MatchBSwaps, bool MatchBitReversals,
3553 std::map<Value *, std::optional<BitPart>> &BPS, int Depth,
3554 bool &FoundRoot) {
3555 auto [I, Inserted] = BPS.try_emplace(V);
3556 if (!Inserted)
3557 return I->second;
3558
3559 auto &Result = I->second;
3560 auto BitWidth = V->getType()->getScalarSizeInBits();
3561
3562 // Can't do integer/elements > 128 bits.
3563 if (BitWidth > 128)
3564 return Result;
3565
3566 // Prevent stack overflow by limiting the recursion depth
3568 LLVM_DEBUG(dbgs() << "collectBitParts max recursion depth reached.\n");
3569 return Result;
3570 }
3571
3572 if (auto *I = dyn_cast<Instruction>(V)) {
3573 Value *X, *Y;
3574 const APInt *C;
3575
3576 // If this is an or instruction, it may be an inner node of the bswap.
3577 if (match(V, m_Or(m_Value(X), m_Value(Y)))) {
3578 // Check we have both sources and they are from the same provider.
3579 const auto &A = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3580 Depth + 1, FoundRoot);
3581 if (!A || !A->Provider)
3582 return Result;
3583
3584 const auto &B = collectBitParts(Y, MatchBSwaps, MatchBitReversals, BPS,
3585 Depth + 1, FoundRoot);
3586 if (!B || A->Provider != B->Provider)
3587 return Result;
3588
3589 // Try and merge the two together.
3590 Result = BitPart(A->Provider, BitWidth);
3591 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx) {
3592 if (A->Provenance[BitIdx] != BitPart::Unset &&
3593 B->Provenance[BitIdx] != BitPart::Unset &&
3594 A->Provenance[BitIdx] != B->Provenance[BitIdx])
3595 return Result = std::nullopt;
3596
3597 if (A->Provenance[BitIdx] == BitPart::Unset)
3598 Result->Provenance[BitIdx] = B->Provenance[BitIdx];
3599 else
3600 Result->Provenance[BitIdx] = A->Provenance[BitIdx];
3601 }
3602
3603 return Result;
3604 }
3605
3606 // If this is a logical shift by a constant, recurse then shift the result.
3607 if (match(V, m_LogicalShift(m_Value(X), m_APInt(C)))) {
3608 const APInt &BitShift = *C;
3609
3610 // Ensure the shift amount is defined.
3611 if (BitShift.uge(BitWidth))
3612 return Result;
3613
3614 // For bswap-only, limit shift amounts to whole bytes, for an early exit.
3615 if (!MatchBitReversals && (BitShift.getZExtValue() % 8) != 0)
3616 return Result;
3617
3618 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3619 Depth + 1, FoundRoot);
3620 if (!Res)
3621 return Result;
3622 Result = Res;
3623
3624 // Perform the "shift" on BitProvenance.
3625 auto &P = Result->Provenance;
3626 if (I->getOpcode() == Instruction::Shl) {
3627 P.erase(std::prev(P.end(), BitShift.getZExtValue()), P.end());
3628 P.insert(P.begin(), BitShift.getZExtValue(), BitPart::Unset);
3629 } else {
3630 P.erase(P.begin(), std::next(P.begin(), BitShift.getZExtValue()));
3631 P.insert(P.end(), BitShift.getZExtValue(), BitPart::Unset);
3632 }
3633
3634 return Result;
3635 }
3636
3637 // If this is a logical 'and' with a mask that clears bits, recurse then
3638 // unset the appropriate bits.
3639 if (match(V, m_And(m_Value(X), m_APInt(C)))) {
3640 const APInt &AndMask = *C;
3641
3642 // Check that the mask allows a multiple of 8 bits for a bswap, for an
3643 // early exit.
3644 unsigned NumMaskedBits = AndMask.popcount();
3645 if (!MatchBitReversals && (NumMaskedBits % 8) != 0)
3646 return Result;
3647
3648 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3649 Depth + 1, FoundRoot);
3650 if (!Res)
3651 return Result;
3652 Result = Res;
3653
3654 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3655 // If the AndMask is zero for this bit, clear the bit.
3656 if (AndMask[BitIdx] == 0)
3657 Result->Provenance[BitIdx] = BitPart::Unset;
3658 return Result;
3659 }
3660
3661 // If this is a zext instruction zero extend the result.
3662 if (match(V, m_ZExt(m_Value(X)))) {
3663 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3664 Depth + 1, FoundRoot);
3665 if (!Res)
3666 return Result;
3667
3668 Result = BitPart(Res->Provider, BitWidth);
3669 auto NarrowBitWidth = X->getType()->getScalarSizeInBits();
3670 for (unsigned BitIdx = 0; BitIdx < NarrowBitWidth; ++BitIdx)
3671 Result->Provenance[BitIdx] = Res->Provenance[BitIdx];
3672 for (unsigned BitIdx = NarrowBitWidth; BitIdx < BitWidth; ++BitIdx)
3673 Result->Provenance[BitIdx] = BitPart::Unset;
3674 return Result;
3675 }
3676
3677 // If this is a truncate instruction, extract the lower bits.
3678 if (match(V, m_Trunc(m_Value(X)))) {
3679 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3680 Depth + 1, FoundRoot);
3681 if (!Res)
3682 return Result;
3683
3684 Result = BitPart(Res->Provider, BitWidth);
3685 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3686 Result->Provenance[BitIdx] = Res->Provenance[BitIdx];
3687 return Result;
3688 }
3689
3690 // BITREVERSE - most likely due to us previous matching a partial
3691 // bitreverse.
3692 if (match(V, m_BitReverse(m_Value(X)))) {
3693 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3694 Depth + 1, FoundRoot);
3695 if (!Res)
3696 return Result;
3697
3698 Result = BitPart(Res->Provider, BitWidth);
3699 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3700 Result->Provenance[(BitWidth - 1) - BitIdx] = Res->Provenance[BitIdx];
3701 return Result;
3702 }
3703
3704 // BSWAP - most likely due to us previous matching a partial bswap.
3705 if (match(V, m_BSwap(m_Value(X)))) {
3706 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3707 Depth + 1, FoundRoot);
3708 if (!Res)
3709 return Result;
3710
3711 unsigned ByteWidth = BitWidth / 8;
3712 Result = BitPart(Res->Provider, BitWidth);
3713 for (unsigned ByteIdx = 0; ByteIdx < ByteWidth; ++ByteIdx) {
3714 unsigned ByteBitOfs = ByteIdx * 8;
3715 for (unsigned BitIdx = 0; BitIdx < 8; ++BitIdx)
3716 Result->Provenance[(BitWidth - 8 - ByteBitOfs) + BitIdx] =
3717 Res->Provenance[ByteBitOfs + BitIdx];
3718 }
3719 return Result;
3720 }
3721
3722 // Funnel 'double' shifts take 3 operands, 2 inputs and the shift
3723 // amount (modulo).
3724 // fshl(X,Y,Z): (X << (Z % BW)) | (Y >> (BW - (Z % BW)))
3725 // fshr(X,Y,Z): (X << (BW - (Z % BW))) | (Y >> (Z % BW))
3726 if (match(V, m_FShl(m_Value(X), m_Value(Y), m_APInt(C))) ||
3727 match(V, m_FShr(m_Value(X), m_Value(Y), m_APInt(C)))) {
3728 // We can treat fshr as a fshl by flipping the modulo amount.
3729 unsigned ModAmt = C->urem(BitWidth);
3730 if (cast<IntrinsicInst>(I)->getIntrinsicID() == Intrinsic::fshr)
3731 ModAmt = BitWidth - ModAmt;
3732
3733 // For bswap-only, limit shift amounts to whole bytes, for an early exit.
3734 if (!MatchBitReversals && (ModAmt % 8) != 0)
3735 return Result;
3736
3737 // Check we have both sources and they are from the same provider.
3738 const auto &LHS = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3739 Depth + 1, FoundRoot);
3740 if (!LHS || !LHS->Provider)
3741 return Result;
3742
3743 const auto &RHS = collectBitParts(Y, MatchBSwaps, MatchBitReversals, BPS,
3744 Depth + 1, FoundRoot);
3745 if (!RHS || LHS->Provider != RHS->Provider)
3746 return Result;
3747
3748 unsigned StartBitRHS = BitWidth - ModAmt;
3749 Result = BitPart(LHS->Provider, BitWidth);
3750 for (unsigned BitIdx = 0; BitIdx < StartBitRHS; ++BitIdx)
3751 Result->Provenance[BitIdx + ModAmt] = LHS->Provenance[BitIdx];
3752 for (unsigned BitIdx = 0; BitIdx < ModAmt; ++BitIdx)
3753 Result->Provenance[BitIdx] = RHS->Provenance[BitIdx + StartBitRHS];
3754 return Result;
3755 }
3756 }
3757
3758 // If we've already found a root input value then we're never going to merge
3759 // these back together.
3760 if (FoundRoot)
3761 return Result;
3762
3763 // Okay, we got to something that isn't a shift, 'or', 'and', etc. This must
3764 // be the root input value to the bswap/bitreverse.
3765 FoundRoot = true;
3766 Result = BitPart(V, BitWidth);
3767 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3768 Result->Provenance[BitIdx] = BitIdx;
3769 return Result;
3770}
3771
3772static bool bitTransformIsCorrectForBSwap(unsigned From, unsigned To,
3773 unsigned BitWidth) {
3774 if (From % 8 != To % 8)
3775 return false;
3776 // Convert from bit indices to byte indices and check for a byte reversal.
3777 From >>= 3;
3778 To >>= 3;
3779 BitWidth >>= 3;
3780 return From == BitWidth - To - 1;
3781}
3782
3783static bool bitTransformIsCorrectForBitReverse(unsigned From, unsigned To,
3784 unsigned BitWidth) {
3785 return From == BitWidth - To - 1;
3786}
3787
3789 Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
3790 SmallVectorImpl<Instruction *> &InsertedInsts) {
3791 if (!match(I, m_Or(m_Value(), m_Value())) &&
3792 !match(I, m_FShl(m_Value(), m_Value(), m_Value())) &&
3793 !match(I, m_FShr(m_Value(), m_Value(), m_Value())) &&
3794 !match(I, m_BSwap(m_Value())))
3795 return false;
3796 if (!MatchBSwaps && !MatchBitReversals)
3797 return false;
3798 Type *ITy = I->getType();
3799 if (!ITy->isIntOrIntVectorTy() || ITy->getScalarSizeInBits() == 1 ||
3800 ITy->getScalarSizeInBits() > 128)
3801 return false; // Can't do integer/elements > 128 bits.
3802
3803 // Try to find all the pieces corresponding to the bswap.
3804 bool FoundRoot = false;
3805 std::map<Value *, std::optional<BitPart>> BPS;
3806 const auto &Res =
3807 collectBitParts(I, MatchBSwaps, MatchBitReversals, BPS, 0, FoundRoot);
3808 if (!Res)
3809 return false;
3810 ArrayRef<int8_t> BitProvenance = Res->Provenance;
3811 assert(all_of(BitProvenance,
3812 [](int8_t I) { return I == BitPart::Unset || 0 <= I; }) &&
3813 "Illegal bit provenance index");
3814
3815 // If the upper bits are zero, then attempt to perform as a truncated op.
3816 Type *DemandedTy = ITy;
3817 if (BitProvenance.back() == BitPart::Unset) {
3818 while (!BitProvenance.empty() && BitProvenance.back() == BitPart::Unset)
3819 BitProvenance = BitProvenance.drop_back();
3820 if (BitProvenance.empty())
3821 return false; // TODO - handle null value?
3822 DemandedTy = Type::getIntNTy(I->getContext(), BitProvenance.size());
3823 if (auto *IVecTy = dyn_cast<VectorType>(ITy))
3824 DemandedTy = VectorType::get(DemandedTy, IVecTy);
3825 }
3826
3827 // Check BitProvenance hasn't found a source larger than the result type.
3828 unsigned DemandedBW = DemandedTy->getScalarSizeInBits();
3829 if (DemandedBW > ITy->getScalarSizeInBits())
3830 return false;
3831
3832 // Now, is the bit permutation correct for a bswap or a bitreverse? We can
3833 // only byteswap values with an even number of bytes.
3834 APInt DemandedMask = APInt::getAllOnes(DemandedBW);
3835 bool OKForBSwap = MatchBSwaps && (DemandedBW % 16) == 0;
3836 bool OKForBitReverse = MatchBitReversals;
3837 for (unsigned BitIdx = 0;
3838 (BitIdx < DemandedBW) && (OKForBSwap || OKForBitReverse); ++BitIdx) {
3839 if (BitProvenance[BitIdx] == BitPart::Unset) {
3840 DemandedMask.clearBit(BitIdx);
3841 continue;
3842 }
3843 OKForBSwap &= bitTransformIsCorrectForBSwap(BitProvenance[BitIdx], BitIdx,
3844 DemandedBW);
3845 OKForBitReverse &= bitTransformIsCorrectForBitReverse(BitProvenance[BitIdx],
3846 BitIdx, DemandedBW);
3847 }
3848
3849 Intrinsic::ID Intrin;
3850 if (OKForBSwap)
3851 Intrin = Intrinsic::bswap;
3852 else if (OKForBitReverse)
3853 Intrin = Intrinsic::bitreverse;
3854 else
3855 return false;
3856
3857 Function *F =
3858 Intrinsic::getOrInsertDeclaration(I->getModule(), Intrin, DemandedTy);
3859 Value *Provider = Res->Provider;
3860
3861 // We may need to truncate the provider.
3862 if (DemandedTy != Provider->getType()) {
3863 auto *Trunc =
3864 CastInst::CreateIntegerCast(Provider, DemandedTy, false, "trunc", I->getIterator());
3865 InsertedInsts.push_back(Trunc);
3866 Provider = Trunc;
3867 }
3868
3869 Instruction *Result = CallInst::Create(F, Provider, "rev", I->getIterator());
3870 InsertedInsts.push_back(Result);
3871
3872 if (!DemandedMask.isAllOnes()) {
3873 auto *Mask = ConstantInt::get(DemandedTy, DemandedMask);
3874 Result = BinaryOperator::Create(Instruction::And, Result, Mask, "mask", I->getIterator());
3875 InsertedInsts.push_back(Result);
3876 }
3877
3878 // We may need to zeroextend back to the result type.
3879 if (ITy != Result->getType()) {
3880 auto *ExtInst = CastInst::CreateIntegerCast(Result, ITy, false, "zext", I->getIterator());
3881 InsertedInsts.push_back(ExtInst);
3882 }
3883
3884 return true;
3885}
3886
3887// CodeGen has special handling for some string functions that may replace
3888// them with target-specific intrinsics. Since that'd skip our interceptors
3889// in ASan/MSan/TSan/DFSan, and thus make us miss some memory accesses,
3890// we mark affected calls as NoBuiltin, which will disable optimization
3891// in CodeGen.
3893 CallInst *CI, const TargetLibraryInfo *TLI) {
3894 Function *F = CI->getCalledFunction();
3895 if (F && !F->hasLocalLinkage() && F->hasName() &&
3896 TLI->hasOptimizedCodeGen(TLI->getLibFunc(F->getName())) &&
3897 !F->doesNotAccessMemory())
3898 CI->addFnAttr(Attribute::NoBuiltin);
3899}
3900
3902 const auto *Op = I->getOperand(OpIdx);
3903 // We can't have a PHI with a metadata or token type.
3904 if (Op->getType()->isMetadataTy() || Op->getType()->isTokenLikeTy())
3905 return false;
3906
3907 // swifterror pointers can only be used by a load, store, or as a swifterror
3908 // argument; swifterror pointers are not allowed to be used in select or phi
3909 // instructions.
3910 if (Op->isSwiftError())
3911 return false;
3912
3913 // Cannot replace alloca argument with phi/select.
3914 if (I->isLifetimeStartOrEnd())
3915 return false;
3916
3917 // Early exit.
3919 return true;
3920
3921 switch (I->getOpcode()) {
3922 default:
3923 return true;
3924 case Instruction::Call:
3925 case Instruction::Invoke: {
3926 const auto &CB = cast<CallBase>(*I);
3927
3928 // Can't handle inline asm. Skip it.
3929 if (CB.isInlineAsm())
3930 return false;
3931
3932 // Constant bundle operands may need to retain their constant-ness for
3933 // correctness.
3934 if (CB.isBundleOperand(OpIdx))
3935 return false;
3936
3937 if (OpIdx < CB.arg_size()) {
3938 // Some variadic intrinsics require constants in the variadic arguments,
3939 // which currently aren't markable as immarg.
3940 if (isa<IntrinsicInst>(CB) &&
3941 OpIdx >= CB.getFunctionType()->getNumParams()) {
3942 // This is known to be OK for stackmap.
3943 return CB.getIntrinsicID() == Intrinsic::experimental_stackmap;
3944 }
3945
3946 // gcroot is a special case, since it requires a constant argument which
3947 // isn't also required to be a simple ConstantInt.
3948 if (CB.getIntrinsicID() == Intrinsic::gcroot)
3949 return false;
3950
3951 // threadlocal_address is a special case as it requires its only
3952 // argument to be a thread local global.
3953 if (CB.getIntrinsicID() == Intrinsic::threadlocal_address)
3954 return false;
3955
3956 // Some intrinsic operands are required to be immediates.
3957 return !CB.paramHasAttr(OpIdx, Attribute::ImmArg);
3958 }
3959
3960 // It is never allowed to replace the call argument to an intrinsic, but it
3961 // may be possible for a call.
3962 return !isa<IntrinsicInst>(CB);
3963 }
3964 case Instruction::ShuffleVector:
3965 // Shufflevector masks are constant.
3966 return OpIdx != 2;
3967 case Instruction::Switch:
3968 case Instruction::ExtractValue:
3969 // All operands apart from the first are constant.
3970 return OpIdx == 0;
3971 case Instruction::InsertValue:
3972 // All operands apart from the first and the second are constant.
3973 return OpIdx < 2;
3974 case Instruction::Alloca:
3975 // Static allocas (constant size in the entry block) are handled by
3976 // prologue/epilogue insertion so they're free anyway. We definitely don't
3977 // want to make them non-constant.
3978 return !cast<AllocaInst>(I)->isStaticAlloca();
3979 case Instruction::GetElementPtr:
3980 if (OpIdx == 0)
3981 return true;
3983 for (auto E = std::next(It, OpIdx); It != E; ++It)
3984 if (It.isStruct())
3985 return false;
3986 return true;
3987 }
3988}
3989
3991 // First: Check if it's a constant
3992 if (Constant *C = dyn_cast<Constant>(Condition))
3993 return ConstantExpr::getNot(C);
3994
3995 // Second: If the condition is already inverted, return the original value
3996 Value *NotCondition;
3997 if (match(Condition, m_Not(m_Value(NotCondition))))
3998 return NotCondition;
3999
4000 BasicBlock *Parent = nullptr;
4001 Instruction *Inst = dyn_cast<Instruction>(Condition);
4002 if (Inst)
4003 Parent = Inst->getParent();
4004 else if (Argument *Arg = dyn_cast<Argument>(Condition))
4005 Parent = &Arg->getParent()->getEntryBlock();
4006 assert(Parent && "Unsupported condition to invert");
4007
4008 // Third: Check all the users for an invert
4009 for (User *U : Condition->users())
4011 if (I->getParent() == Parent && match(I, m_Not(m_Specific(Condition))))
4012 return I;
4013
4014 // Last option: Create a new instruction
4015 auto *Inverted =
4016 BinaryOperator::CreateNot(Condition, Condition->getName() + ".inv");
4017 if (Inst && !isa<PHINode>(Inst))
4018 Inverted->insertAfter(Inst->getIterator());
4019 else
4020 Inverted->insertBefore(Parent->getFirstInsertionPt());
4021 return Inverted;
4022}
4023
4025 // Note: We explicitly check for attributes rather than using cover functions
4026 // because some of the cover functions include the logic being implemented.
4027
4028 bool Changed = false;
4029 // readnone + not convergent implies nosync
4030 if (!F.hasFnAttribute(Attribute::NoSync) &&
4031 F.doesNotAccessMemory() && !F.isConvergent()) {
4032 F.setNoSync();
4033 Changed = true;
4034 }
4035
4036 // readonly implies nofree
4037 if (!F.hasFnAttribute(Attribute::NoFree) && F.onlyReadsMemory()) {
4038 F.setDoesNotFreeMemory();
4039 Changed = true;
4040 }
4041
4042 // willreturn implies mustprogress
4043 if (!F.hasFnAttribute(Attribute::MustProgress) && F.willReturn()) {
4044 F.setMustProgress();
4045 Changed = true;
4046 }
4047
4048 // TODO: There are a bunch of cases of restrictive memory effects we
4049 // can infer by inspecting arguments of argmemonly-ish functions.
4050
4051 return Changed;
4052}
4053
4055#ifndef NDEBUG
4056 if (Opcode)
4057 assert(Opcode == I.getOpcode() &&
4058 "can only use mergeFlags on instructions with matching opcodes");
4059 else
4060 Opcode = I.getOpcode();
4061#endif
4063 HasNUW &= I.hasNoUnsignedWrap();
4064 HasNSW &= I.hasNoSignedWrap();
4065 }
4066 if (auto *DisjointOp = dyn_cast<PossiblyDisjointInst>(&I))
4067 IsDisjoint &= DisjointOp->isDisjoint();
4068}
4069
4071 I.dropPoisonGeneratingFlags();
4072 if (I.getOpcode() == Instruction::Add ||
4073 (I.getOpcode() == Instruction::Mul && AllKnownNonZero)) {
4074 if (HasNUW)
4075 I.setHasNoUnsignedWrap();
4076 if (HasNSW && (AllKnownNonNegative || HasNUW))
4077 I.setHasNoSignedWrap();
4078 }
4079 if (auto *DisjointOp = dyn_cast<PossiblyDisjointInst>(&I))
4080 DisjointOp->setIsDisjoint(IsDisjoint);
4081}
static unsigned getIntrinsicID(const SDNode *N)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
unsigned uint64_t
Rewrite undef for PHI
This file implements a class to represent arbitrary precision integral constant values and operations...
ReachingDefInfo InstSet & ToRemove
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static bool isEqual(const Function &Caller, const Function &Callee)
This file contains the simple types necessary to represent the attributes associated with functions a...
static const Function * getParent(const Value *V)
#define X(NUM, ENUM, NAME)
Definition ELF.h:857
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file defines the DenseMap class.
This file defines the DenseSet and SmallDenseSet classes.
This file contains constants used for implementing Dwarf debug support.
static unsigned getHashValueImpl(SimpleValue Val)
Definition EarlyCSE.cpp:216
static bool isEqualImpl(SimpleValue LHS, SimpleValue RHS)
Definition EarlyCSE.cpp:337
Hexagon Common GEP
This file provides various utilities for inspecting and working with the control flow graph in LLVM I...
Module.h This file contains the declarations for the Module class.
This defines the Use class.
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
This file provides utility for Memory Model Relaxation Annotations (MMRAs).
This file contains the declarations for metadata subclasses.
#define T
uint64_t IntrinsicInst * II
#define P(N)
This file contains the declarations for profiling metadata utility functions.
const SmallVectorImpl< MachineOperand > & Cond
Remove Loads Into Fake Uses
This file contains some templates that are useful if you are working with the STL at all.
This file implements a set that has insertion order iteration characteristics.
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
This file defines the 'Statistic' class, which is designed to be an easy way to expose various metric...
#define STATISTIC(VARNAME, DESC)
Definition Statistic.h:171
#define LLVM_DEBUG(...)
Definition Debug.h:119
static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")
SmallDenseMap< BasicBlock *, Value *, 16 > IncomingValueMap
Definition Local.cpp:906
static bool valueCoversEntireFragment(Type *ValTy, DbgVariableRecord *DVR)
Check if the alloc size of ValTy is large enough to cover the variable (or fragment of the variable) ...
Definition Local.cpp:1612
static bool isBitCastSemanticsPreserving(const DataLayout &DL, Type *FromTy, Type *ToTy)
Check if a bitcast between a value of type FromTy to type ToTy would losslessly preserve the bits and...
Definition Local.cpp:2426
static void salvageDbgAssignAddress(Instruction &I, DbgVariableRecord &Assign)
Salvage the address of Assign, which the caller has checked is I.
Definition Local.cpp:2025
uint64_t getDwarfOpForBinOp(Instruction::BinaryOps Opcode)
Definition Local.cpp:2174
static bool PhiHasDebugValue(DILocalVariable *DIVar, DIExpression *DIExpr, PHINode *APN)
===------------------------------------------------------------------—===// Dbg Intrinsic utilities
Definition Local.cpp:1588
static void combineMetadata(Instruction *K, const Instruction *J, bool DoesKMove, bool AAOnly=false)
If AAOnly is set, only intersect alias analysis metadata and preserve other known metadata.
Definition Local.cpp:2946
static void handleSSAValueOperands(uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues, Instruction *I)
Definition Local.cpp:2204
std::optional< DIExpression * > DbgValReplacement
A replacement for a dbg.value expression.
Definition Local.cpp:2353
static bool rewriteDebugUsers(Instruction &From, Value &To, Instruction &DomPoint, DominatorTree &DT, function_ref< DbgValReplacement(DbgVariableRecord &DVR)> RewriteDVRExpr)
Point debug users of From to To using exprs given by RewriteExpr, possibly moving/undefing users to p...
Definition Local.cpp:2358
Value * getSalvageOpsForBinOp(BinaryOperator *BI, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2216
static DIExpression * dropInitialDeref(const DIExpression *DIExpr)
Definition Local.cpp:1648
static bool salvageDbgVariableLocation(Instruction &I, DbgVariableRecord &DVR)
Rewrite DVR's variable location in terms of I's operands.
Definition Local.cpp:2062
static void replaceUndefValuesInPhi(PHINode *PN, const IncomingValueMap &IncomingValues)
Replace the incoming undef values to a phi with the values from a block-to-value map.
Definition Local.cpp:971
Value * getSalvageOpsForGEP(GetElementPtrInst *GEP, const DataLayout &DL, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2148
static bool CanRedirectPredsOfEmptyBBToSucc(BasicBlock *BB, BasicBlock *Succ, const SmallPtrSetImpl< BasicBlock * > &BBPreds, BasicBlock *&CommonPred)
Definition Local.cpp:1014
Value * getSalvageOpsForIcmpOp(ICmpInst *Icmp, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2275
static bool CanMergeValues(Value *First, Value *Second)
Return true if we can choose one of these values to use in place of the other.
Definition Local.cpp:840
static bool simplifyAndDCEInstruction(Instruction *I, SmallSetVector< Instruction *, 16 > &WorkList, const DataLayout &DL, const TargetLibraryInfo *TLI)
Definition Local.cpp:657
static bool areAllUsesEqual(Instruction *I)
areAllUsesEqual - Check whether the uses of a value are all the same.
Definition Local.cpp:603
static cl::opt< bool > PHICSEDebugHash("phicse-debug-hash", cl::init(false), cl::Hidden, cl::desc("Perform extra assertion checking to verify that PHINodes's hash " "function is well-behaved w.r.t. its isEqual predicate"))
static void gatherIncomingValuesToPhi(PHINode *PN, const PredBlockVector &BBPreds, IncomingValueMap &IncomingValues)
Create a map from block to value for the operands of a given phi.
Definition Local.cpp:948
uint64_t getDwarfOpForIcmpPred(CmpInst::Predicate Pred)
Definition Local.cpp:2250
static bool bitTransformIsCorrectForBSwap(unsigned From, unsigned To, unsigned BitWidth)
Definition Local.cpp:3772
static const std::optional< BitPart > & collectBitParts(Value *V, bool MatchBSwaps, bool MatchBitReversals, std::map< Value *, std::optional< BitPart > > &BPS, int Depth, bool &FoundRoot)
Analyze the specified subexpression and see if it is capable of providing pieces of a bswap or bitrev...
Definition Local.cpp:3552
static bool EliminateDuplicatePHINodesNaiveImpl(BasicBlock *BB, SmallPtrSetImpl< PHINode * > &ToRemove)
Definition Local.cpp:1384
static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ, const SmallPtrSetImpl< BasicBlock * > &BBPreds)
Return true if we can fold BB, an almost-empty BB ending in an unconditional branch to Succ,...
Definition Local.cpp:849
static cl::opt< unsigned > PHICSENumPHISmallSize("phicse-num-phi-smallsize", cl::init(32), cl::Hidden, cl::desc("When the basic block contains not more than this number of PHI nodes, " "perform a (faster!) exhaustive search instead of set-driven one."))
static void updateOneDbgValueForAlloca(const DebugLoc &Loc, DILocalVariable *DIVar, DIExpression *DIExpr, Value *NewAddress, DbgVariableRecord *DVR, DIBuilder &Builder, int Offset)
Definition Local.cpp:1981
static bool EliminateDuplicatePHINodesSetBasedImpl(BasicBlock *BB, SmallPtrSetImpl< PHINode * > &ToRemove)
Definition Local.cpp:1420
static bool markAliveBlocks(Function &F, SmallVectorImpl< bool > &Reachable, DomTreeUpdater *DTU, bool FoldInstsToUnreachable)
Definition Local.cpp:2675
SmallVector< BasicBlock *, 16 > PredBlockVector
Definition Local.cpp:905
static void insertDbgValueOrDbgVariableRecord(DIBuilder &Builder, Value *DV, DILocalVariable *DIVar, DIExpression *DIExpr, const DebugLoc &NewLoc, BasicBlock::iterator Instr)
Definition Local.cpp:1637
static bool introduceTooManyPhiEntries(BasicBlock *BB, BasicBlock *Succ)
Check whether removing BB will make the phis in its Succ have too many incoming entries.
Definition Local.cpp:1047
static Value * selectIncomingValueForBlock(Value *OldVal, BasicBlock *BB, IncomingValueMap &IncomingValues)
Determines the value to use as the phi node input for a block.
Definition Local.cpp:920
static const unsigned BitPartRecursionMaxDepth
Definition Local.cpp:120
static void redirectValuesFromPredecessorsToPhi(BasicBlock *BB, const PredBlockVector &BBPreds, PHINode *PN, BasicBlock *CommonPred)
Replace a value flowing from a block to a phi with potentially multiple instances of that value flowi...
Definition Local.cpp:1079
static cl::opt< unsigned > MaxPhiEntriesIncreaseAfterRemovingEmptyBlock("max-phi-entries-increase-after-removing-empty-block", cl::init(1000), cl::Hidden, cl::desc("Stop removing an empty block if removing it will introduce more " "than this number of phi entries in its successor"))
static bool isCompositeType(DbgVariableRecord *DVR)
Determine whether this debug variable is a not a basic type.
Definition Local.cpp:1750
static bool bitTransformIsCorrectForBitReverse(unsigned From, unsigned To, unsigned BitWidth)
Definition Local.cpp:3783
LocallyHashedType DenseMapInfo< LocallyHashedType >::Empty
Value * RHS
Value * LHS
APInt bitcastToAPInt() const
Definition APFloat.h:1475
Class for arbitrary precision integers.
Definition APInt.h:78
std::optional< uint64_t > tryZExtValue() const
Get zero extended value if possible.
Definition APInt.h:1573
static APInt getAllOnes(unsigned numBits)
Return an APInt of a specified width with all bits set.
Definition APInt.h:231
void clearBit(unsigned BitPosition)
Set a given bit to 0.
Definition APInt.h:1427
uint64_t getZExtValue() const
Get zero extended value.
Definition APInt.h:1561
unsigned popcount() const
Count the number of bits set.
Definition APInt.h:1691
bool isAllOnes() const
Determine if all bits are set. This is true for zero-width values.
Definition APInt.h:368
unsigned getBitWidth() const
Return the number of bits in the APInt.
Definition APInt.h:1509
const uint64_t * getRawData() const
This function returns a pointer to the internal storage of the APInt.
Definition APInt.h:572
std::optional< int64_t > trySExtValue() const
Get sign extended value if possible.
Definition APInt.h:1595
int64_t getSExtValue() const
Get sign extended value.
Definition APInt.h:1583
bool uge(const APInt &RHS) const
Unsigned greater or equal comparison.
Definition APInt.h:1226
an instruction to allocate memory on the stack
const Value * getArraySize() const
Get the number of elements allocated.
This class represents an incoming formal argument to a Function.
Definition Argument.h:32
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
const T & back() const
Get the last element.
Definition ArrayRef.h:150
ArrayRef< T > drop_front(size_t N=1) const
Drop the first N elements of the array.
Definition ArrayRef.h:194
size_t size() const
Get the array size.
Definition ArrayRef.h:141
ArrayRef< T > drop_back(size_t N=1) const
Drop the last N elements of the array.
Definition ArrayRef.h:200
bool empty() const
Check if the array is empty.
Definition ArrayRef.h:136
Value handle that asserts if the Value is deleted.
A cache of @llvm.assume calls within a function.
LLVM Basic Block Representation.
Definition BasicBlock.h:62
iterator end()
Definition BasicBlock.h:459
unsigned getNumber() const
Definition BasicBlock.h:95
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:446
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition BasicBlock.h:515
LLVM_ABI const_iterator getFirstInsertionPt() const
Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
bool hasTerminator() const LLVM_READONLY
Returns whether the block has a terminator.
Definition BasicBlock.h:232
const Instruction & back() const
Definition BasicBlock.h:471
bool hasAddressTaken() const
Returns true if there are any uses of this basic block other than direct branches,...
Definition BasicBlock.h:672
LLVM_ABI InstListType::const_iterator getFirstNonPHIIt() const
Returns an iterator to the first instruction in this block that is not a PHINode instruction.
LLVM_ABI void insertDbgRecordBefore(DbgRecord *DR, InstListType::iterator Here)
Insert a DbgRecord into a block at the position given by Here.
static BasicBlock * Create(LLVMContext &Context, const Twine &Name="", Function *Parent=nullptr, BasicBlock *InsertBefore=nullptr)
Creates a new BasicBlock.
Definition BasicBlock.h:206
LLVM_ABI bool isEntryBlock() const
Return true if this is the entry block of the containing function.
LLVM_ABI void moveAfter(BasicBlock *MovePos)
Unlink this basic block from its current function and insert it right after MovePos in the function M...
LLVM_ABI bool hasNPredecessors(unsigned N) const
Return true if this block has exactly N predecessors.
LLVM_ABI const BasicBlock * getSinglePredecessor() const
Return the predecessor of this block if it has a single predecessor block.
const Instruction & front() const
Definition BasicBlock.h:469
const Instruction * getTerminatorOrNull() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition BasicBlock.h:248
LLVM_ABI void flushTerminatorDbgRecords()
Eject any debug-info trailing at the end of a block.
LLVM_ABI const DataLayout & getDataLayout() const
Get the data layout of the module this basic block belongs to.
LLVM_ABI SymbolTableList< BasicBlock >::iterator eraseFromParent()
Unlink 'this' from the containing function and delete it.
InstListType::iterator iterator
Instruction iterators...
Definition BasicBlock.h:170
LLVM_ABI LLVMContext & getContext() const
Get the context in which this basic block lives.
size_t size() const
Definition BasicBlock.h:467
LLVM_ABI bool hasNPredecessorsOrMore(unsigned N) const
Return true if this block has N predecessors or more.
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction; assumes that the block is well-formed.
Definition BasicBlock.h:237
void splice(BasicBlock::iterator ToIt, BasicBlock *FromBB)
Transfer all instructions from FromBB to this basic block at ToIt.
Definition BasicBlock.h:644
LLVM_ABI void removePredecessor(BasicBlock *Pred, bool KeepOneInputPHIs=false)
Update PHI nodes in this BasicBlock before removal of predecessor Pred.
BinaryOps getOpcode() const
Definition InstrTypes.h:409
static LLVM_ABI BinaryOperator * CreateNot(Value *Op, const Twine &Name="", InsertPosition InsertBefore=nullptr)
static LLVM_ABI BinaryOperator * Create(BinaryOps Op, Value *S1, Value *S2, const Twine &Name=Twine(), InsertPosition InsertBefore=nullptr)
Construct a binary instruction, given the opcode and the two operands.
This class represents a no-op cast from one type to another.
The address of a basic block.
Definition Constants.h:1088
static LLVM_ABI BlockAddress * get(Function *F, BasicBlock *BB)
Return a BlockAddress for the specified function and basic block.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
void setCallingConv(CallingConv::ID CC)
void addFnAttr(Attribute::AttrKind Kind)
Adds the attribute to the function.
LLVM_ABI void getOperandBundlesAsDefs(SmallVectorImpl< OperandBundleDef > &Defs) const
Return the list of operand bundles attached to this instruction as a vector of OperandBundleDefs.
Function * getCalledFunction() const
Returns the function called, or null if this is an indirect function invocation or the function signa...
CallingConv::ID getCallingConv() const
Value * getCalledOperand() const
void setAttributes(AttributeList A)
Set the attributes for this call.
FunctionType * getFunctionType() const
iterator_range< User::op_iterator > args()
Iteration adapter for range-for loops.
AttributeList getAttributes() const
Return the attributes for this call.
This class represents a function call, abstracting a target machine's calling convention.
static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static LLVM_ABI CastInst * CreateIntegerCast(Value *S, Type *Ty, bool isSigned, const Twine &Name="", InsertPosition InsertBefore=nullptr)
Create a ZExt, BitCast, or Trunc for int -> int casts.
mapped_iterator< op_iterator, DerefFnTy > handler_iterator
static CatchSwitchInst * Create(Value *ParentPad, BasicBlock *UnwindDest, unsigned NumHandlers, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)
static CleanupReturnInst * Create(Value *CleanupPad, BasicBlock *UnwindBB=nullptr, InsertPosition InsertBefore=nullptr)
Predicate
This enumeration lists the possible predicates for CmpInst subclasses.
Definition InstrTypes.h:740
@ ICMP_SLT
signed less than
Definition InstrTypes.h:769
@ ICMP_SLE
signed less or equal
Definition InstrTypes.h:770
@ ICMP_UGE
unsigned greater or equal
Definition InstrTypes.h:764
@ ICMP_UGT
unsigned greater than
Definition InstrTypes.h:763
@ ICMP_SGT
signed greater than
Definition InstrTypes.h:767
@ ICMP_ULT
unsigned less than
Definition InstrTypes.h:765
@ ICMP_NE
not equal
Definition InstrTypes.h:762
@ ICMP_SGE
signed greater or equal
Definition InstrTypes.h:768
@ ICMP_ULE
unsigned less or equal
Definition InstrTypes.h:766
bool isSigned() const
Definition InstrTypes.h:993
Predicate getPredicate() const
Return the predicate for this instruction.
Definition InstrTypes.h:828
Conditional Branch instruction.
A constant value that is initialized with an expression using other constant values.
Definition Constants.h:1316
static LLVM_ABI Constant * getIntToPtr(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getNot(Constant *C)
static LLVM_ABI Constant * getPtrToInt(Constant *C, Type *Ty, bool OnlyIfReduced=false)
static LLVM_ABI Constant * getAdd(Constant *C1, Constant *C2, bool HasNUW=false, bool HasNSW=false)
This is the shared class of boolean and integer constants.
Definition Constants.h:87
static LLVM_ABI ConstantPointerNull * get(PointerType *T)
Static factory methods - Return objects of the specified value.
This is an important base class in LLVM.
Definition Constant.h:43
LLVM_ABI void destroyConstant()
Called if some element of this constant is no longer valid.
DIExpression * createConstantValueExpression(uint64_t Val)
Create an expression for a variable that does not have an address, but does have a constant value.
Definition DIBuilder.h:987
DWARF expression.
static LLVM_ABI DIExpression * append(const DIExpression *Expr, ArrayRef< uint64_t > Ops)
Append the opcodes Ops to DIExpr.
unsigned getNumElements() const
static LLVM_ABI ExtOps getExtOps(unsigned FromSize, unsigned ToSize, bool Signed)
Returns the ops for a zero- or sign-extension in a DIExpression.
static LLVM_ABI void appendOffset(SmallVectorImpl< uint64_t > &Ops, int64_t Offset)
Append Ops with operations to apply the Offset.
static LLVM_ABI DIExpression * appendOpsToArg(const DIExpression *Expr, ArrayRef< uint64_t > Ops, unsigned ArgNo, bool StackValue=false)
Create a copy of Expr by appending the given list of Ops to each instance of the operand DW_OP_LLVM_a...
static LLVM_ABI std::optional< FragmentInfo > getFragmentInfo(expr_op_iterator Start, expr_op_iterator End)
Retrieve the details of this fragment expression.
LLVM_ABI DIExpression * foldConstantMath()
Try to shorten an expression with constant math operations that can be evaluated at compile time.
LLVM_ABI uint64_t getNumLocationOperands() const
Return the number of unique location operands referred to (via DW_OP_LLVM_arg) in this expression; th...
ArrayRef< uint64_t > getElements() const
LLVM_ABI std::optional< uint64_t > getActiveBits(DIVariable *Var)
Return the number of bits that have an active value, i.e.
uint64_t getElement(unsigned I) const
static LLVM_ABI DIExpression * prepend(const DIExpression *Expr, uint8_t Flags, int64_t Offset=0)
Prepend DIExpr with a deref and offset operation and optionally turn it into a stack value or/and an ...
static LLVM_ABI DIExpression * appendExt(const DIExpression *Expr, unsigned FromSize, unsigned ToSize, bool Signed)
Append a zero- or sign-extension to Expr.
Base class for types.
std::optional< DIBasicType::Signedness > getSignedness() const
Return the signedness of this variable's type, or std::nullopt if this type is neither signed nor uns...
DIType * getType() const
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
This represents the llvm.dbg.label instruction.
Instruction * MarkedInstr
Link back to the Instruction that owns this marker.
LLVM_ABI void removeFromParent()
LLVM_ABI Module * getModule()
Record of a variable value-assignment, aka a non instruction representation of the dbg....
LLVM_ABI void addVariableLocationOps(ArrayRef< Value * > NewValues, DIExpression *NewExpr)
Adding a new location operand will always result in this intrinsic using an ArgList,...
LLVM_ABI void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)
LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const
LLVM_ABI unsigned getNumVariableLocationOps() const
bool isAddressOfVariable() const
Does this describe the address of a local variable.
LLVM_ABI DbgVariableRecord * clone() const
void setExpression(DIExpression *NewExpr)
DIExpression * getExpression() const
DILocalVariable * getVariable() const
LLVM_ABI iterator_range< location_op_iterator > location_ops() const
Get the locations corresponding to the variable referenced by the debug info intrinsic.
A debug info location.
Definition DebugLoc.h:126
DILocation * get() const
Get the underlying DILocation.
Definition DebugLoc.h:220
static DebugLoc getTemporary()
Definition DebugLoc.h:152
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:223
unsigned size() const
Definition DenseMap.h:172
DenseMapIterator< KeyT, ValueT, KeyInfoT, BucketT, true > const_iterator
Definition DenseMap.h:134
iterator end()
Definition DenseMap.h:141
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition DenseMap.h:284
std::pair< iterator, bool > insert_or_assign(const KeyT &Key, V &&Val)
Definition DenseMap.h:342
Implements a dense probed hash-table based set.
Definition DenseSet.h:281
LLVM_ABI void deleteBB(BasicBlock *DelBB)
Delete DelBB.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:122
LLVM_ABI bool dominates(const BasicBlock *BB, const Use &U) const
Return true if the (end of the) basic block BB dominates the use U.
const BasicBlock & getEntryBlock() const
Definition Function.h:793
void applyUpdatesPermissive(ArrayRef< UpdateT > Updates)
Submit updates to all available trees.
void applyUpdates(ArrayRef< UpdateT > Updates)
Submit updates to all available trees.
bool hasDomTree() const
Returns true if it holds a DomTreeT.
void recalculate(FuncT &F)
Notify DTU that the entry block was replaced.
bool isBBPendingDeletion(BasicBlockT *DelBB) const
Returns true if DelBB is awaiting deletion.
an instruction for type-safe pointer arithmetic to access elements of arrays and structs
This instruction compares its operands according to the predicate given to the constructor.
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
Definition IRBuilder.h:2903
iterator_range< simple_ilist< DbgRecord >::iterator > getDbgRecordRange() const
Return a range over the DbgRecords attached to this instruction.
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
LLVM_ABI const Module * getModule() const
Return the module owning the function this instruction belongs to or nullptr it the function does not...
LLVM_ABI bool extractProfTotalWeight(uint64_t &TotalVal) const
Retrieve total raw weight values of a branch.
LLVM_ABI void insertBefore(InstListType::iterator InsertPos)
Insert an unlinked instruction into a basic block immediately before the specified position.
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
LLVM_ABI InstListType::iterator eraseFromParent()
This method unlinks 'this' from the containing basic block and deletes it.
LLVM_ABI bool isIdenticalToWhenDefined(const Instruction *I, bool IntersectAttrs=false) const LLVM_READONLY
This is like isIdenticalTo, except that it ignores the SubclassOptionalData flags,...
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node)
Set the metadata of the specified kind to the specified node.
LLVM_ABI void dropPoisonGeneratingFlags()
Drops flags that may cause this instruction to evaluate to poison despite having non-poison inputs.
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
LLVM_ABI void copyMetadata(const Instruction &SrcInst, ArrayRef< unsigned > WL=ArrayRef< unsigned >())
Copy metadata from SrcInst to this instruction.
LLVM_ABI void dropDbgRecords()
Erase any DbgRecords attached to this instruction.
A wrapper class for inspecting calls to intrinsic functions.
Invoke instruction.
static InvokeInst * Create(FunctionType *Ty, Value *Func, BasicBlock *IfNormal, BasicBlock *IfException, ArrayRef< Value * > Args, const Twine &NameStr, InsertPosition InsertBefore=nullptr)
This is an important class for using LLVM in a threaded context.
Definition LLVMContext.h:68
An instruction for reading from memory.
Value * getPointerOperand()
LLVM_ABI MDNode * createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight, bool IsExpected=false)
Return metadata containing two branch weights.
Definition MDBuilder.cpp:38
LLVM_ABI MDNode * createRange(const APInt &Lo, const APInt &Hi)
Return metadata describing the range [Lo, Hi).
Definition MDBuilder.cpp:96
Metadata node.
Definition Metadata.h:1069
static LLVM_ABI MDNode * getMostGenericAliasScope(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * getMergedCallsiteMetadata(MDNode *A, MDNode *B)
static LLVM_ABI CaptureComponents toCaptureComponents(const MDNode *MD)
Convert !captures metadata to CaptureComponents. MD may be nullptr.
static LLVM_ABI MDNode * getMergedCalleeTypeMetadata(const MDNode *A, const MDNode *B)
static LLVM_ABI MDNode * getMostGenericTBAA(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * getMostGenericNoaliasAddrspace(MDNode *A, MDNode *B)
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1567
static LLVM_ABI MDNode * getMergedProfMetadata(MDNode *A, MDNode *B, const Instruction *AInstr, const Instruction *BInstr)
Merge !prof metadata from two instructions.
static LLVM_ABI MDNode * getMergedAllocTokenMetadata(const MDNode *A, const MDNode *B)
static LLVM_ABI MDNode * getMostGenericFPMath(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * getMostGenericRange(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * getMergedMemProfMetadata(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * intersect(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * getMostGenericNoFPClass(MDNode *A, MDNode *B)
LLVMContext & getContext() const
Definition Metadata.h:1233
static LLVM_ABI MDNode * fromCaptureComponents(LLVMContext &Ctx, CaptureComponents CC)
Convert CaptureComponents to !captures metadata.
static LLVM_ABI MDNode * getMostGenericAlignmentOrDereferenceable(MDNode *A, MDNode *B)
static LLVM_ABI MDNode * combine(LLVMContext &Ctx, const MMRAMetadata &A, const MMRAMetadata &B)
Combines A and B according to MMRA semantics.
This class implements a map that also provides access to all stored values in a deterministic order.
Definition MapVector.h:38
iterator find(const KeyT &Key)
Definition MapVector.h:156
iterator end()
Definition MapVector.h:69
bool empty() const
Definition MapVector.h:79
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition MapVector.h:126
LLVM_ABI void changeToUnreachable(const Instruction *I)
Instruction I will be changed to an unreachable.
LLVM_ABI void removeBlocks(const SmallSetVector< BasicBlock *, 8 > &DeadBlocks)
Remove all MemoryAcceses in a set of BasicBlocks about to be deleted.
LLVM_ABI void removeMemoryAccess(MemoryAccess *, bool OptimizePhis=false)
Remove a MemoryAccess from MemorySSA, including updating all definitions and uses.
Root of the metadata hierarchy.
Definition Metadata.h:64
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
const DataLayout & getDataLayout() const
Get the data layout for the module's target platform.
Definition Module.h:320
void addIncoming(Value *V, BasicBlock *BB)
Add an incoming value to the end of the PHI list.
iterator_range< const_block_iterator > blocks() const
LLVM_ABI Value * removeIncomingValue(unsigned Idx, bool DeletePHIIfEmpty=true)
Remove an incoming value.
void setIncomingValue(unsigned i, Value *V)
Value * getIncomingValueForBlock(const BasicBlock *BB) const
BasicBlock * getIncomingBlock(unsigned i) const
Return incoming basic block number i.
Value * getIncomingValue(unsigned i) const
Return incoming value number x.
unsigned getNumIncomingValues() const
Return the number of incoming edges.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
size_type size() const
Determine the number of elements in the SetVector.
Definition SetVector.h:103
size_type count(const_arg_type key) const
Count the number of elements of a given key in the SetVector.
Definition SetVector.h:268
Vector takeVector()
Clear the SetVector and return the underlying vector.
Definition SetVector.h:94
bool empty() const
Determine if the SetVector is empty or not.
Definition SetVector.h:100
bool insert(const value_type &X)
Insert a new element into the SetVector.
Definition SetVector.h:157
value_type pop_back_val()
Definition SetVector.h:285
size_type size() const
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
bool contains(ConstPtrType Ptr) const
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
A SetVector that performs no allocations if smaller than a certain size.
Definition SetVector.h:345
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
void reserve(size_type N)
void append(ItTy in_start, ItTy in_end)
Add the specified range to the end of the SmallVector.
iterator insert(iterator I, T &&Elt)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An instruction for storing to memory.
Provides information about what library functions are available for the current target.
bool hasOptimizedCodeGen(LibFunc F) const
Tests if the function is both available and a candidate for optimized code generation.
bool has(LibFunc F) const
Tests whether a library function is available.
LibFunc getLibFunc(StringRef funcName) const
Searches for a particular function name.
TinyPtrVector - This class is specialized for cases where there are normally 0 or 1 element in a vect...
static constexpr TypeSize getFixed(ScalarTy ExactSize)
Definition TypeSize.h:343
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
LLVM_ABI unsigned getIntegerBitWidth() const
bool isVectorTy() const
True if this is an instance of VectorType.
Definition Type.h:288
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
Definition Type.cpp:309
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition Type.h:263
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:282
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
Definition Type.h:368
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
Definition Type.cpp:232
bool isIntOrPtrTy() const
Return true if this is an integer type or a pointer type.
Definition Type.h:270
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition Type.h:257
bool isTokenTy() const
Return true if this is 'token'.
Definition Type.h:236
static LLVM_ABI IntegerType * getIntNTy(LLVMContext &C, unsigned N)
Definition Type.cpp:313
Unconditional Branch instruction.
static UncondBrInst * Create(BasicBlock *Target, InsertPosition InsertBefore=nullptr)
static LLVM_ABI UndefValue * get(Type *T)
Static factory methods - Return an 'undef' object of the specified type.
This function has undefined behavior.
A Use represents the edge between a Value definition and its users.
Definition Use.h:35
value_op_iterator value_op_end()
Definition User.h:288
Value * getOperand(unsigned i) const
Definition User.h:207
value_op_iterator value_op_begin()
Definition User.h:285
iterator_range< value_op_iterator > operand_values()
Definition User.h:291
Value wrapper in the Metadata hierarchy.
Definition Metadata.h:459
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:510
iterator find(const KeyT &Val)
Definition ValueMap.h:160
iterator end()
Definition ValueMap.h:139
LLVM Value Representation.
Definition Value.h:75
Type * getType() const
All values are typed, get the type of this value.
Definition Value.h:255
LLVM_ABI void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition Value.cpp:553
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:258
iterator_range< user_iterator > users()
Definition Value.h:426
LLVM_ABI void printAsOperand(raw_ostream &O, bool PrintType=true, const Module *M=nullptr) const
Print the name of this Value out to the specified raw_ostream.
bool isUsedByMetadata() const
Return true if there is metadata referencing this value.
Definition Value.h:558
bool use_empty() const
Definition Value.h:346
static constexpr unsigned MaxAlignmentExponent
The maximum alignment for instructions.
Definition Value.h:798
LLVM_ABI bool replaceUsesWithIf(Value *New, llvm::function_ref< bool(Use &U)> ShouldReplace)
Go through the uses list for this definition and make each use point to "V" if the callback ShouldRep...
Definition Value.cpp:561
iterator_range< use_iterator > uses()
Definition Value.h:380
user_iterator_impl< User > user_iterator
Definition Value.h:391
bool hasName() const
Definition Value.h:261
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:319
LLVM_ABI void takeName(Value *V)
Transfer the name from V to this value.
Definition Value.cpp:400
static LLVM_ABI VectorType * get(Type *ElementType, ElementCount EC)
This static method is the primary way to construct an VectorType.
Represents an op.with.overflow intrinsic.
std::pair< iterator, bool > insert(const ValueT &V)
Definition DenseSet.h:209
void reserve(size_t Size)
Grow the DenseSet so that it can contain at least NumEntries items before resizing again.
Definition DenseSet.h:93
static constexpr bool isKnownGE(const FixedOrScalableQuantity &LHS, const FixedOrScalableQuantity &RHS)
Definition TypeSize.h:237
An efficient, type-erasing, non-owning reference to a callable.
const ParentTy * getParent() const
Definition ilist_node.h:34
self_iterator getIterator()
Definition ilist_node.h:123
NodeTy * getNextNode()
Get the next node, or nullptr for the list tail.
Definition ilist_node.h:348
CallInst * Call
Changed
#define UINT64_MAX
Definition DataTypes.h:77
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
LLVM_ABI Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > OverloadTys={})
Look up the Function declaration of the intrinsic id in the Module M.
BinaryOp_match< SrcTy, SpecificConstantMatch, TargetOpcode::G_XOR, true > m_Not(const SrcTy &&Src)
Matches a register not-ed by a G_XOR.
match_combine_or< Ty... > m_CombineOr(const Ty &...Ps)
Combine pattern matchers matching any of Ps patterns.
BinaryOp_match< LHS, RHS, Instruction::And > m_And(const LHS &L, const RHS &R)
auto m_BSwap(const Opnd0 &Op0)
auto m_BitReverse(const Opnd0 &Op0)
ap_match< APInt > m_APInt(const APInt *&Res)
Match a ConstantInt or splatted ConstantVector, binding the specified pointer to the contained APInt.
CastInst_match< OpTy, TruncInst > m_Trunc(const OpTy &Op)
Matches Trunc.
bool match(Val *V, const Pattern &P)
specificval_ty m_Specific(const Value *V)
Match if we have a specific specified value.
ExtractValue_match< Ind, Val_t > m_ExtractValue(const Val_t &V)
Match a single index ExtractValue instruction.
BinOpPred_match< LHS, RHS, is_logical_shift_op > m_LogicalShift(const LHS &L, const RHS &R)
Matches logical shift operations.
auto m_Value()
Match an arbitrary value and ignore it.
match_bind< WithOverflowInst > m_WithOverflowInst(WithOverflowInst *&I)
Match a with overflow intrinsic, capturing it if we match.
CastInst_match< OpTy, ZExtInst > m_ZExt(const OpTy &Op)
Matches ZExt.
auto m_FShl(const Opnd0 &Op0, const Opnd1 &Op1, const Opnd2 &Op2)
auto m_Undef()
Match an arbitrary undef constant.
BinaryOp_match< LHS, RHS, Instruction::Or > m_Or(const LHS &L, const RHS &R)
is_zero m_Zero()
Match any null constant or a vector with all elements equal to 0.
auto m_FShr(const Opnd0 &Op0, const Opnd1 &Op1, const Opnd2 &Op2)
initializer< Ty > init(const Ty &Val)
@ DW_OP_LLVM_arg
Only used in LLVM metadata.
Definition Dwarf.h:149
@ ebStrict
This corresponds to "fpexcept.strict".
Definition FPEnv.h:42
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:577
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1765
LLVM_ABI bool RemoveRedundantDbgInstrs(BasicBlock *BB)
Try to remove redundant dbg.value instructions from given basic block.
UnaryFunction for_each(R &&Range, UnaryFunction F)
Provide wrappers to std::for_each which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1732
LLVM_ABI unsigned removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB)
Remove all instructions from a basic block other than its terminator and any present EH pad instructi...
Definition Local.cpp:2515
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1739
LLVM_ABI bool RecursivelyDeleteTriviallyDeadInstructions(Value *V, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr, std::function< void(Value *)> AboutToDeleteCallback=std::function< void(Value *)>())
If the specified value is a trivially dead instruction, delete it.
Definition Local.cpp:522
bool succ_empty(const Instruction *I)
Definition CFG.h:141
LLVM_ABI BasicBlock * changeToInvokeAndSplitBasicBlock(CallInst *CI, BasicBlock *UnwindEdge, DomTreeUpdater *DTU=nullptr)
Convert the CallInst to InvokeInst with the specified unwind edge basic block.
Definition Local.cpp:2632
LLVM_ABI bool ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions=false, const TargetLibraryInfo *TLI=nullptr, DomTreeUpdater *DTU=nullptr)
If a terminator instruction is predicated on a constant value, convert it into an unconditional branc...
Definition Local.cpp:133
LLVM_ABI unsigned replaceDominatedUsesWithIf(Value *From, Value *To, DominatorTree &DT, const BasicBlockEdge &Edge, function_ref< bool(const Use &U, const Value *To)> ShouldReplace)
Replace each use of 'From' with 'To' if that use is dominated by the given edge and the callback Shou...
Definition Local.cpp:3288
LLVM_ABI void findDbgValues(Value *V, SmallVectorImpl< DbgVariableRecord * > &DbgVariableRecords)
Finds the dbg.values describing a value.
@ Known
Known to have no common set bits.
LLVM_ABI unsigned replaceNonLocalUsesWith(Instruction *From, Value *To)
Definition Local.cpp:3252
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:643
LLVM_ABI void salvageDebugInfo(const MachineRegisterInfo &MRI, MachineInstr &MI)
Assuming the instruction MI is going to be deleted, attempt to salvage debug users of MI by writing t...
Definition Utils.cpp:1675
auto successors(const MachineBasicBlock *BB)
LLVM_ABI bool isRemovableAlloc(const CallBase *V, const TargetLibraryInfo *TLI)
Return true if this is a call to an allocation function that does not have side effects that we are r...
LLVM_ABI CallInst * changeToCall(InvokeInst *II, DomTreeUpdater *DTU=nullptr)
This function converts the specified invoke into a normal call.
Definition Local.cpp:2608
LLVM_ABI bool isMathLibCallNoop(const CallBase *Call, const TargetLibraryInfo *TLI)
Check whether the given call has no side-effects.
LLVM_ABI void copyMetadataForLoad(LoadInst &Dest, const LoadInst &Source)
Copy the metadata from the source instruction to the destination (the replacement for the source inst...
Definition Local.cpp:3125
LLVM_ABI void InsertDebugValueAtStoreLoc(DbgVariableRecord *DVR, StoreInst *SI, DIBuilder &Builder)
===------------------------------------------------------------------—===// Dbg Intrinsic utilities
Definition Local.cpp:1703
constexpr from_range_t from_range
bool hasNItemsOrLess(IterTy &&Begin, IterTy &&End, unsigned N, Pred &&ShouldBeCounted=[](const decltype(*std::declval< IterTy >()) &) { return true;})
Returns true if the sequence [Begin, End) has N or less items.
Definition STLExtras.h:2659
LLVM_ABI void remapDebugVariable(ValueToValueMapTy &Mapping, Instruction *Inst)
Remap the operands of the debug records attached to Inst, and the operands of Inst itself if it's a d...
Definition Local.cpp:3483
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...
Definition STLExtras.h:633
auto cast_or_null(const Y &Val)
Definition Casting.h:714
auto pred_size(const MachineBasicBlock *BB)
LLVM_ABI bool SimplifyInstructionsInBlock(BasicBlock *BB, const TargetLibraryInfo *TLI=nullptr)
Scan the specified basic block and try to simplify any instructions in it and recursively delete dead...
Definition Local.cpp:715
LLVM_ABI bool isAssumeWithEmptyBundle(const AssumeInst &Assume)
Return true iff the operand bundles of the provided llvm.assume doesn't contain any valuable informat...
LLVM_ABI void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete the specified block, which must have no predecessors.
LLVM_ABI bool hasBranchWeightOrigin(const Instruction &I)
Check if Branch Weight Metadata has an "expected" field from an llvm.expect* intrinsic.
LLVM_ABI void insertDebugValuesForPHIs(BasicBlock *BB, SmallVectorImpl< PHINode * > &InsertedPHIs)
Propagate dbg.value intrinsics through the newly inserted PHIs.
Definition Local.cpp:1900
LLVM_ABI ConstantRange getConstantRangeFromMetadata(const MDNode &RangeMD)
Parse out a conservative ConstantRange from !range metadata.
LLVM_ABI MDNode * intersectAccessGroups(const Instruction *Inst1, const Instruction *Inst2)
Compute the access-group list of access groups that Inst1 and Inst2 are both in.
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Value
Definition InstrProf.h:143
LLVM_ABI bool handleUnreachableTerminator(Instruction *I, SmallVectorImpl< Value * > &PoisonedValues)
If a terminator in an unreachable basic block has an operand of type Instruction, transform it into p...
Definition Local.cpp:2498
LLVM_ABI bool canSimplifyInvokeNoUnwind(const Function *F)
LLVM_ABI Value * simplifyInstruction(Instruction *I, const SimplifyQuery &Q)
See if we can compute a simplified version of this instruction.
LLVM_ABI bool removeUnreachableBlocks(Function &F, DomTreeUpdater *DTU=nullptr, MemorySSAUpdater *MSSAU=nullptr, bool FoldInstsToUnreachable=true)
Remove all blocks that can not be reached from the function's entry.
Definition Local.cpp:2912
auto dyn_cast_or_null(const Y &Val)
Definition Casting.h:753
bool any_of(R &&range, UnaryPredicate P)
Provide wrappers to std::any_of which take ranges instead of having to pass begin/end explicitly.
Definition STLExtras.h:1746
LLVM_ABI bool isInstructionTriviallyDead(Instruction *I, const TargetLibraryInfo *TLI=nullptr)
Return true if the result produced by the instruction is not used, and the instruction will return.
Definition Local.cpp:402
LLVM_ABI bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
BB is known to contain an unconditional branch, and contains no instructions other than PHI nodes,...
Definition Local.cpp:1147
LLVM_ABI SmallVector< uint32_t > fitWeights(ArrayRef< uint64_t > Weights)
Push the weights right to fit in uint32_t.
LLVM_ABI bool recognizeBSwapOrBitReverseIdiom(Instruction *I, bool MatchBSwaps, bool MatchBitReversals, SmallVectorImpl< Instruction * > &InsertedInsts)
Try to match a bswap or bitreverse idiom.
Definition Local.cpp:3788
LLVM_ABI MDNode * getValidBranchWeightMDNode(const Instruction &I)
Get the valid branch weights metadata node.
LLVM_ABI Align getOrEnforceKnownAlignment(Value *V, MaybeAlign PrefAlign, const DataLayout &DL, const Instruction *CxtI=nullptr, AssumptionCache *AC=nullptr, const DominatorTree *DT=nullptr)
Try to ensure that the alignment of V is at least PrefAlign bytes.
Definition Local.cpp:1558
LLVM_ABI void computeKnownBits(const Value *V, KnownBits &Known, const DataLayout &DL, AssumptionCache *AC=nullptr, const Instruction *CxtI=nullptr, const DominatorTree *DT=nullptr, bool UseInstrInfo=true, unsigned Depth=0)
Determine which bits of V are known to be either zero or one and return them in the KnownZero/KnownOn...
LLVM_ABI bool LowerDbgDeclare(Function &F)
Lowers dbg.declare records into appropriate set of dbg.value records.
Definition Local.cpp:1813
LLVM_ABI bool NullPointerIsDefined(const Function *F, unsigned AS=0)
Check whether null pointer dereferencing is considered undefined behavior for a given function or an ...
LLVM_ABI DIExpression * getExpressionForConstant(DIBuilder &DIB, const Constant &C, Type &Ty)
Given a constant, create a debug information expression.
Definition Local.cpp:3441
LLVM_ABI CallInst * createCallMatchingInvoke(InvokeInst *II)
Create a call that matches the invoke II in terms of arguments, attributes, debug information,...
Definition Local.cpp:2583
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:209
LLVM_ABI void salvageDebugInfoForDbgValues(Instruction &I, ArrayRef< DbgVariableRecord * > DbgRecords)
Salvage only the records in DbgRecords instead of finding every debug user of I.
Definition Local.cpp:2121
generic_gep_type_iterator<> gep_type_iterator
LLVM_ABI void ConvertDebugDeclareToDebugValue(DbgVariableRecord *DVR, StoreInst *SI, DIBuilder &Builder)
Inserts a dbg.value record before a store to an alloca'd value that has an associated dbg....
Definition Local.cpp:1654
LLVM_ABI Instruction * removeUnwindEdge(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
Replace 'BB's terminator with one that does not have an unwind successor block.
Definition Local.cpp:2874
LLVM_ABI bool wouldInstructionBeTriviallyDead(const Instruction *I, const TargetLibraryInfo *TLI=nullptr)
Return true if the result produced by the instruction would have no side effects if it was not used.
Definition Local.cpp:409
LLVM_ABI void patchReplacementInstruction(Instruction *I, Value *Repl)
Patch the replacement so that it is not more restrictive than the value being replaced.
Definition Local.cpp:3188
LLVM_ABI bool RecursivelyDeleteDeadPHINode(PHINode *PN, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr, SmallPtrSetImpl< PHINode * > *KnownNonDeadPHIs=nullptr)
If the specified value is an effectively dead PHI node, due to being a def-use chain of single-use no...
Definition Local.cpp:622
LLVM_ABI unsigned replaceDominatedUsesWith(Value *From, Value *To, DominatorTree &DT, const BasicBlockEdge &Edge)
Replace each use of 'From' with 'To' if that use is dominated by the given edge.
Definition Local.cpp:3267
class LLVM_GSL_OWNER SmallVector
Forward declaration of SmallVector so that calculateSmallVectorDefaultInlinedElements can reference s...
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
@ Success
The lock was released successfully.
LLVM_ABI unsigned changeToUnreachable(Instruction *I, bool PreserveLCSSA=false, DomTreeUpdater *DTU=nullptr, MemorySSAUpdater *MSSAU=nullptr)
Insert an unreachable instruction before the specified instruction, making it and the rest of the cod...
Definition Local.cpp:2543
LLVM_ABI bool replaceAllDbgUsesWith(Instruction &From, Value &To, Instruction &DomPoint, DominatorTree &DT)
Point debug users of From to To or salvage them.
Definition Local.cpp:2444
LLVM_ABI Value * salvageDebugInfoImpl(Instruction &I, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Ops, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2304
RNSuccIterator< NodeRef, BlockT, RegionT > succ_begin(NodeRef Node)
LLVM_ABI void combineMetadataForCSE(Instruction *K, const Instruction *J, bool DoesKMove)
Combine the metadata of two instructions so that K can replace J.
Definition Local.cpp:3116
LLVM_ABI void dropDebugUsers(Instruction &I)
Remove the debug intrinsic instructions for the given instruction.
Definition Local.cpp:3388
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
Definition ModRef.h:74
LLVM_ABI void MergeBasicBlockIntoOnlyPred(BasicBlock *BB, DomTreeUpdater *DTU=nullptr)
BB is a block with one predecessor and its predecessor is known to have one successor (BB!...
Definition Local.cpp:755
LLVM_ABI void hoistAllInstructionsInto(BasicBlock *DomBlock, Instruction *InsertPt, BasicBlock *BB)
Hoist all of the instructions in the IfBlock to the dominant block DomBlock, by moving its instructio...
Definition Local.cpp:3395
LLVM_ABI void copyRangeMetadata(const DataLayout &DL, const LoadInst &OldLI, MDNode *N, LoadInst &NewLI)
Copy a range metadata node to a new load instruction.
Definition Local.cpp:3364
LLVM_ABI BasicBlock * SplitBlock(BasicBlock *Old, BasicBlock::iterator SplitPt, DominatorTree *DT, LoopInfo *LI=nullptr, MemorySSAUpdater *MSSAU=nullptr, const Twine &BBName="")
Split the specified block at the specified instruction.
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count
Definition InstrProf.h:145
LLVM_ABI DebugLoc getDebugValueLoc(DbgVariableRecord *DVR)
Produce a DebugLoc to use for each dbg.declare that is promoted to a dbg.value.
LLVM_ABI void copyNonnullMetadata(const LoadInst &OldLI, MDNode *N, LoadInst &NewLI)
Copy a nonnull metadata node to a new load instruction.
Definition Local.cpp:3339
LLVM_ABI bool canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx)
Given an instruction, is it legal to set operand OpIdx to a non-constant value?
Definition Local.cpp:3901
DWARFExpression::Operation Op
LLVM_ABI void replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress, DIBuilder &Builder, int Offset=0)
Replaces multiple dbg.value records when the alloca it describes is replaced with a new value.
Definition Local.cpp:2003
LLVM_ABI Align tryEnforceAlignment(Value *V, Align PrefAlign, const DataLayout &DL)
If the specified pointer points to an object that we control, try to modify the object's alignment to...
Definition Local.cpp:1509
LLVM_ABI Value * getFreedOperand(const CallBase *CB, const TargetLibraryInfo *TLI)
If this if a call to a free function, return the freed operand.
LLVM_ABI bool RecursivelyDeleteTriviallyDeadInstructionsPermissive(SmallVectorImpl< WeakTrackingVH > &DeadInsts, const TargetLibraryInfo *TLI=nullptr, MemorySSAUpdater *MSSAU=nullptr, std::function< void(Value *)> AboutToDeleteCallback=std::function< void(Value *)>())
Same functionality as RecursivelyDeleteTriviallyDeadInstructions, but allow instructions that are not...
Definition Local.cpp:537
constexpr unsigned BitWidth
ValueMap< const Value *, WeakTrackingVH > ValueToValueMapTy
LLVM_ABI bool extractBranchWeights(const MDNode *ProfileData, SmallVectorImpl< uint32_t > &Weights)
Extract branch weights from MD_prof metadata.
auto count_if(R &&Range, UnaryPredicate P)
Wrapper function around std::count_if to count the number of times an element satisfying a given pred...
Definition STLExtras.h:2019
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
gep_type_iterator gep_type_begin(const User *GEP)
LLVM_ABI TinyPtrVector< DbgVariableRecord * > findDVRDeclares(Value *V)
Finds dbg.declare records declaring local variables as living in the memory that 'V' points to.
Definition DebugInfo.cpp:48
auto predecessors(const MachineBasicBlock *BB)
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition STLExtras.h:1947
LLVM_ABI void combineAAMetadata(Instruction *K, const Instruction *J)
Combine metadata of two instructions, where instruction J is a memory access that has been merged int...
Definition Local.cpp:3121
LLVM_ABI bool inferAttributesFromOthers(Function &F)
If we can infer one attribute from another on the declaration of a function, explicitly materialize t...
Definition Local.cpp:4024
LLVM_ABI Value * invertCondition(Value *Condition)
Invert the given true/false value, possibly reusing an existing copy.
Definition Local.cpp:3990
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
Definition Hashing.h:305
LLVM_ABI void DeleteDeadBlocks(ArrayRef< BasicBlock * > BBs, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete the specified blocks from BB.
LLVM_ABI void setFittedBranchWeights(Instruction &I, ArrayRef< uint64_t > Weights, bool IsExpected, bool ElideAllZero=false)
Variant of setBranchWeights where the Weights will be fit first to uint32_t by shifting right.
LLVM_ABI void maybeMarkSanitizerLibraryCallNoBuiltin(CallInst *CI, const TargetLibraryInfo *TLI)
Given a CallInst, check if it calls a string function known to CodeGen, and mark it with NoBuiltin if...
Definition Local.cpp:3892
static auto filterDbgVars(iterator_range< simple_ilist< DbgRecord >::iterator > R)
Filter the DbgRecord range to DbgVariableRecord types only and downcast.
LLVM_ABI bool EliminateDuplicatePHINodes(BasicBlock *BB)
Check for and eliminate duplicate PHI nodes in this block.
Definition Local.cpp:1501
LLVM_ABI void findDbgUsers(Value *V, SmallVectorImpl< DbgVariableRecord * > &DbgVariableRecords)
Finds the debug info records describing a value.
LLVM_ABI bool callsGCLeafFunction(const CallBase *Call, const TargetLibraryInfo &TLI)
Return true if this call calls a gc leaf function.
Definition Local.cpp:3315
hash_code hash_combine_range(InputIteratorT first, InputIteratorT last)
Compute a hash_code for a sequence of values.
Definition Hashing.h:285
LLVM_ABI bool replaceDbgDeclare(Value *Address, Value *NewAddress, DIBuilder &Builder, uint8_t DIExprFlags, int Offset)
Replaces dbg.declare record when the address it describes is replaced with a new value.
Definition Local.cpp:1963
LLVM_ABI void extractFromBranchWeightMD64(const MDNode *ProfileData, SmallVectorImpl< uint64_t > &Weights)
Faster version of extractBranchWeights() that skips checks and must only be called with "branch_weigh...
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
Definition BitVector.h:880
#define N
#define NDEBUG
Definition regutils.h:48
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition Alignment.h:39
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Definition Alignment.h:106
std::optional< unsigned > Opcode
Opcode of merged instructions.
Definition Local.h:589
LLVM_ABI void mergeFlags(Instruction &I)
Merge in the no-wrap flags from I.
Definition Local.cpp:4054
LLVM_ABI void applyFlags(Instruction &I)
Apply the no-wrap flags to I if applicable.
Definition Local.cpp:4070
A MapVector that performs no allocations if smaller than a certain size.
Definition MapVector.h:342