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
138 // Branch - See if we are conditional jumping on constant
139 if (auto *BI = dyn_cast<CondBrInst>(T)) {
140 BasicBlock *Dest1 = BI->getSuccessor(0);
141 BasicBlock *Dest2 = BI->getSuccessor(1);
142
143 if (Dest2 == Dest1) { // Conditional branch to same location?
144 // This branch matches something like this:
145 // br bool %cond, label %Dest, label %Dest
146 // and changes it into: br label %Dest
147
148 // Let the basic block know that we are letting go of one copy of it.
149 assert(BI->getParent() && "Terminator not inserted in block!");
150 Dest1->removePredecessor(BI->getParent());
151
152 // Replace the conditional branch with an unconditional one.
153 IRBuilder<> Builder(BI);
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 its PHI nodes.
175 OldDest->removePredecessor(BB);
176
177 // Replace the conditional branch with an unconditional one.
178 IRBuilder<> Builder(BI);
179 UncondBrInst *NewBI = Builder.CreateBr(Destination);
180
181 // Transfer the metadata to the new branch instruction.
182 NewBI->copyMetadata(*BI, {LLVMContext::MD_loop, LLVMContext::MD_dbg,
183 LLVMContext::MD_annotation});
184
185 BI->eraseFromParent();
186 if (DTU)
187 DTU->applyUpdates({{DominatorTree::Delete, BB, OldDest}});
188 return true;
189 }
190
191 return false;
192 }
193
194 if (auto *SI = dyn_cast<SwitchInst>(T)) {
195 // If we are switching on a constant, we can convert the switch to an
196 // unconditional branch.
197 auto *CI = dyn_cast<ConstantInt>(SI->getCondition());
198 BasicBlock *DefaultDest = SI->getDefaultDest();
199 BasicBlock *TheOnlyDest = DefaultDest;
200
201 // If the default is unreachable, ignore it when searching for TheOnlyDest.
202 if (SI->defaultDestUnreachable() && SI->getNumCases() > 0)
203 TheOnlyDest = SI->case_begin()->getCaseSuccessor();
204
205 bool Changed = false;
206
207 // Figure out which case it goes to.
208 for (auto It = SI->case_begin(), End = SI->case_end(); It != End;) {
209 // Found case matching a constant operand?
210 if (It->getCaseValue() == CI) {
211 TheOnlyDest = It->getCaseSuccessor();
212 break;
213 }
214
215 // Check to see if this branch is going to the same place as the default
216 // dest. If so, eliminate it as an explicit compare.
217 if (It->getCaseSuccessor() == DefaultDest) {
219 unsigned NCases = SI->getNumCases();
220 // Fold the case metadata into the default if there will be any branches
221 // left, unless the metadata doesn't match the switch.
222 if (NCases > 1 && MD) {
223 // Collect branch weights into a vector.
225 extractFromBranchWeightMD64(MD, Weights);
226
227 // Merge weight of this case to the default weight.
228 unsigned Idx = It->getCaseIndex();
229
230 // Check for and prevent uint64_t overflow by reducing branch weights.
231 if (Weights[0] > UINT64_MAX - Weights[Idx + 1])
232 fitWeights(Weights);
233
234 Weights[0] += Weights[Idx + 1];
235 // Remove weight for this case.
236 std::swap(Weights[Idx + 1], Weights.back());
237 Weights.pop_back();
239 }
240 // Remove this entry.
241 BasicBlock *ParentBB = SI->getParent();
242 DefaultDest->removePredecessor(ParentBB);
243 It = SI->removeCase(It);
244 End = SI->case_end();
245
246 // Removing this case may have made the condition constant. In that
247 // case, update CI and restart iteration through the cases.
248 if (auto *NewCI = dyn_cast<ConstantInt>(SI->getCondition())) {
249 CI = NewCI;
250 It = SI->case_begin();
251 }
252
253 Changed = true;
254 continue;
255 }
256
257 // Otherwise, check to see if the switch only branches to one destination.
258 // We do this by resetting "TheOnlyDest" to null when we find two
259 // non-equal destinations.
260 if (It->getCaseSuccessor() != TheOnlyDest)
261 TheOnlyDest = nullptr;
262
263 // Increment this iterator as we haven't removed the case.
264 ++It;
265 }
266
267 if (CI && !TheOnlyDest) {
268 // Branching on a constant, but not any of the cases, go to the default
269 // successor.
270 TheOnlyDest = SI->getDefaultDest();
271 }
272
273 // If we found a single destination that we can fold the switch into, do so
274 // now.
275 if (TheOnlyDest) {
276 // Insert the new branch.
277 IRBuilder<> Builder(SI);
278 Builder.CreateBr(TheOnlyDest);
279 BasicBlock *BB = SI->getParent();
280
281 SmallPtrSet<BasicBlock *, 8> RemovedSuccessors;
282
283 // Remove entries from PHI nodes which we no longer branch to...
284 BasicBlock *SuccToKeep = TheOnlyDest;
285 for (BasicBlock *Succ : successors(SI)) {
286 if (DTU && Succ != TheOnlyDest)
287 RemovedSuccessors.insert(Succ);
288 // Found case matching a constant operand?
289 if (Succ == SuccToKeep) {
290 SuccToKeep = nullptr; // Don't modify the first branch to TheOnlyDest
291 } else {
292 Succ->removePredecessor(BB);
293 }
294 }
295
296 // Delete the old switch.
297 Value *Cond = SI->getCondition();
298 SI->eraseFromParent();
299 if (DeleteDeadConditions)
301 if (DTU) {
302 std::vector<DominatorTree::UpdateType> Updates;
303 Updates.reserve(RemovedSuccessors.size());
304 for (auto *RemovedSuccessor : RemovedSuccessors)
305 Updates.push_back({DominatorTree::Delete, BB, RemovedSuccessor});
306 DTU->applyUpdates(Updates);
307 }
308 return true;
309 }
310
311 if (SI->getNumCases() == 1) {
312 // Otherwise, we can fold this switch into a conditional branch
313 // instruction if it has only one non-default destination.
314 auto FirstCase = *SI->case_begin();
315 IRBuilder<> Builder(SI);
316 Value *Cond = Builder.CreateICmpEQ(SI->getCondition(),
317 FirstCase.getCaseValue(), "cond");
318
319 // Insert the new branch.
320 CondBrInst *NewBr = Builder.CreateCondBr(
321 Cond, FirstCase.getCaseSuccessor(), SI->getDefaultDest());
322 SmallVector<uint32_t> Weights;
323 if (extractBranchWeights(*SI, Weights) && Weights.size() == 2) {
324 uint32_t DefWeight = Weights[0];
325 uint32_t CaseWeight = Weights[1];
326 // The TrueWeight should be the weight for the single case of SI.
327 NewBr->setMetadata(LLVMContext::MD_prof,
328 MDBuilder(BB->getContext())
329 .createBranchWeights(CaseWeight, DefWeight));
330 } else {
332 }
333
334 // Update make.implicit metadata to the newly-created conditional branch.
335 MDNode *MakeImplicitMD = SI->getMetadata(LLVMContext::MD_make_implicit);
336 if (MakeImplicitMD)
337 NewBr->setMetadata(LLVMContext::MD_make_implicit, MakeImplicitMD);
338
339 // Delete the old switch.
340 SI->eraseFromParent();
341 return true;
342 }
343 return Changed;
344 }
345
346 if (auto *IBI = dyn_cast<IndirectBrInst>(T)) {
347 // indirectbr blockaddress(@F, @BB) -> br label @BB
348 if (auto *BA =
349 dyn_cast<BlockAddress>(IBI->getAddress()->stripPointerCasts())) {
350 BasicBlock *TheOnlyDest = BA->getBasicBlock();
351 SmallPtrSet<BasicBlock *, 8> RemovedSuccessors;
352
353 // Insert the new branch.
354 IRBuilder<> Builder(IBI);
355 Builder.CreateBr(TheOnlyDest);
356
357 BasicBlock *SuccToKeep = TheOnlyDest;
358 for (unsigned i = 0, e = IBI->getNumDestinations(); i != e; ++i) {
359 BasicBlock *DestBB = IBI->getDestination(i);
360 if (DTU && DestBB != TheOnlyDest)
361 RemovedSuccessors.insert(DestBB);
362 if (IBI->getDestination(i) == SuccToKeep) {
363 SuccToKeep = nullptr;
364 } else {
365 DestBB->removePredecessor(BB);
366 }
367 }
368 Value *Address = IBI->getAddress();
369 IBI->eraseFromParent();
370 if (DeleteDeadConditions)
371 // Delete pointer cast instructions.
373
374 // Also zap the blockaddress constant if there are no users remaining,
375 // otherwise the destination is still marked as having its address taken.
376 if (BA->use_empty())
377 BA->destroyConstant();
378
379 // If we didn't find our destination in the IBI successor list, then we
380 // have undefined behavior. Replace the unconditional branch with an
381 // 'unreachable' instruction.
382 if (SuccToKeep) {
384 new UnreachableInst(BB->getContext(), BB);
385 }
386
387 if (DTU) {
388 std::vector<DominatorTree::UpdateType> Updates;
389 Updates.reserve(RemovedSuccessors.size());
390 for (auto *RemovedSuccessor : RemovedSuccessors)
391 Updates.push_back({DominatorTree::Delete, BB, RemovedSuccessor});
392 DTU->applyUpdates(Updates);
393 }
394 return true;
395 }
396 }
397
398 return false;
399}
400
401//===----------------------------------------------------------------------===//
402// Local dead code elimination.
403//
404
405/// isInstructionTriviallyDead - Return true if the result produced by the
406/// instruction is not used, and the instruction has no side effects.
407///
409 const TargetLibraryInfo *TLI) {
410 if (!I->use_empty())
411 return false;
413}
414
416 const TargetLibraryInfo *TLI) {
417 if (I->isTerminator())
418 return false;
419
420 // We don't want the landingpad-like instructions removed by anything this
421 // general.
422 if (I->isEHPad())
423 return false;
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);
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) {
527 return false;
528
530 DeadInsts.push_back(I);
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;
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))
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 Instruction::user_iterator UI = I->user_begin();
605 Instruction::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.
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) {
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))
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 }
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 one of \p BBPreds may branch to \p Succ. At most 16
845/// successors are inspected; beyond that, this conservatively returns true, so
846/// the check stays cheap even if a predecessor ends in a large switch.
847static bool
849 const SmallPtrSetImpl<BasicBlock *> &BBPreds) {
850 unsigned Budget = 16;
851 for (BasicBlock *Pred : BBPreds) {
852 const Instruction *TI = Pred->getTerminator();
853 unsigned NumSuccs = TI->getNumSuccessors();
854 if (NumSuccs > Budget)
855 return true;
856 Budget -= NumSuccs;
857 if (is_contained(successors(TI), Succ))
858 return true;
859 }
860 return false;
861}
862
863/// Return true if we can fold BB, an almost-empty BB ending in an unconditional
864/// branch to Succ, into Succ.
865///
866/// Assumption: Succ is the single successor for BB.
867static bool
869 const SmallPtrSetImpl<BasicBlock *> &BBPreds) {
870 assert(*succ_begin(BB) == Succ && "Succ is not successor of BB!");
871
872 LLVM_DEBUG(dbgs() << "Looking to fold " << BB->getName() << " into "
873 << Succ->getName() << "\n");
874 // Shortcut, if there is only a single predecessor it must be BB and merging
875 // is always safe
876 if (Succ->getSinglePredecessor())
877 return true;
878
879 // Look at all the phi nodes in Succ, to see if they present a conflict when
880 // merging these blocks
881 for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
882 PHINode *PN = cast<PHINode>(I);
883
884 // If the incoming value from BB is again a PHINode in
885 // BB which has the same incoming value for *PI as PN does, we can
886 // merge the phi nodes and then the blocks can still be merged
888 if (BBPN && BBPN->getParent() == BB) {
889 for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
890 BasicBlock *IBB = PN->getIncomingBlock(PI);
891 if (BBPreds.count(IBB) &&
893 PN->getIncomingValue(PI))) {
895 << "Can't fold, phi node " << PN->getName() << " in "
896 << Succ->getName() << " is conflicting with "
897 << BBPN->getName() << " with regard to common predecessor "
898 << IBB->getName() << "\n");
899 return false;
900 }
901 }
902 } else {
903 Value* Val = PN->getIncomingValueForBlock(BB);
904 for (unsigned PI = 0, PE = PN->getNumIncomingValues(); PI != PE; ++PI) {
905 // See if the incoming value for the common predecessor is equal to the
906 // one for BB, in which case this phi node will not prevent the merging
907 // of the block.
908 BasicBlock *IBB = PN->getIncomingBlock(PI);
909 if (BBPreds.count(IBB) &&
910 !CanMergeValues(Val, PN->getIncomingValue(PI))) {
911 LLVM_DEBUG(dbgs() << "Can't fold, phi node " << PN->getName()
912 << " in " << Succ->getName()
913 << " is conflicting with regard to common "
914 << "predecessor " << IBB->getName() << "\n");
915 return false;
916 }
917 }
918 }
919 }
920
921 return true;
922}
923
926
927/// Determines the value to use as the phi node input for a block.
928///
929/// Select between \p OldVal any value that we know flows from \p BB
930/// to a particular phi on the basis of which one (if either) is not
931/// undef. Update IncomingValues based on the selected value.
932///
933/// \param OldVal The value we are considering selecting.
934/// \param BB The block that the value flows in from.
935/// \param IncomingValues A map from block-to-value for other phi inputs
936/// that we have examined.
937///
938/// \returns the selected value.
940 IncomingValueMap &IncomingValues) {
941 IncomingValueMap::const_iterator It = IncomingValues.find(BB);
942 if (!isa<UndefValue>(OldVal)) {
943 assert((It != IncomingValues.end() &&
944 (!(It->second) || It->second == OldVal)) &&
945 "Expected OldVal to match incoming value from BB!");
946
947 IncomingValues.insert_or_assign(BB, OldVal);
948 return OldVal;
949 }
950
951 if (It != IncomingValues.end() && It->second)
952 return It->second;
953
954 return OldVal;
955}
956
957/// Update a block-to-value map with the non-undef values found in a phi.
958/// Only blocks that are already in the map are updated.
959///
960/// \param PN The phi we are collecting the values of.
961/// \param IncomingValues [in,out] The map from block to value for this phi.
963 IncomingValueMap &IncomingValues) {
964 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
965 Value *V = PN->getIncomingValue(i);
966 if (isa<UndefValue>(V))
967 continue;
968
969 BasicBlock *BB = PN->getIncomingBlock(i);
970 auto It = IncomingValues.find(BB);
971 if (It != IncomingValues.end())
972 It->second = V;
973 }
974}
975
976/// If the incoming values of a phi at \p UndefOps are a mix of undef and
977/// poison, replace the poison values with undef.
978///
979/// \param PN The phi whose incoming values are replaced.
980/// \param UndefOps The indices of incoming values that are undef or poison.
982 ArrayRef<unsigned> UndefOps) {
983 // If there are both undef and poison values incoming, then convert those
984 // values to undef. It is invalid to have different values for the same
985 // incoming block.
986 unsigned PoisonCount = count_if(UndefOps, [&](unsigned I) {
988 });
989
990 if (PoisonCount == 0 || PoisonCount == UndefOps.size())
991 return;
992
993 for (unsigned I : UndefOps)
995}
996
997/// Replace the incoming undef values to a phi with the values
998/// from a block-to-value map.
999///
1000/// \param PN The phi we are replacing the undefs in.
1001/// \param IncomingValues A map from block to value.
1003 const IncomingValueMap &IncomingValues) {
1004 SmallVector<unsigned> TrueUndefOps;
1005 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1006 Value *V = PN->getIncomingValue(i);
1007
1008 if (!isa<UndefValue>(V)) continue;
1009
1010 BasicBlock *BB = PN->getIncomingBlock(i);
1011 IncomingValueMap::const_iterator It = IncomingValues.find(BB);
1012 if (It == IncomingValues.end())
1013 continue;
1014
1015 // Keep track of undef/poison incoming values. Those must match, so we fix
1016 // them up below if needed.
1017 // Note: this is conservatively correct, but we could try harder and group
1018 // the undef values per incoming basic block.
1019 if (!It->second) {
1020 TrueUndefOps.push_back(i);
1021 continue;
1022 }
1023
1024 // There is a defined value for this incoming block, so map this undef
1025 // incoming value to the defined value.
1026 PN->setIncomingValue(i, It->second);
1027 }
1028
1029 replacePoisonWithUndefIfMixed(PN, TrueUndefOps);
1030}
1031
1032// Only when they shares a single common predecessor, return true.
1033// Only handles cases when BB can't be merged while its predecessors can be
1034// redirected.
1035static bool
1037 const SmallPtrSetImpl<BasicBlock *> &BBPreds,
1038 BasicBlock *&CommonPred) {
1039
1040 // There must be phis in BB, otherwise BB will be merged into Succ directly
1041 if (BB->phis().empty() || Succ->phis().empty())
1042 return false;
1043
1044 // BB must have predecessors not shared that can be redirected to Succ
1045 if (!BB->hasNPredecessorsOrMore(2))
1046 return false;
1047
1048 if (any_of(BBPreds, [](const BasicBlock *Pred) {
1049 return isa<IndirectBrInst>(Pred->getTerminator());
1050 }))
1051 return false;
1052
1053 // Get the single common predecessor of both BB and Succ. Return false
1054 // when there are more than one common predecessors.
1055 for (BasicBlock *SuccPred : predecessors(Succ)) {
1056 if (BBPreds.count(SuccPred)) {
1057 if (CommonPred)
1058 return false;
1059 CommonPred = SuccPred;
1060 }
1061 }
1062
1063 return true;
1064}
1065
1066/// Check whether removing \p BB will make the phis in its \p Succ have too
1067/// many incoming entries. This function does not check whether \p BB is
1068/// foldable or not.
1070 // If BB only has one predecessor, then removing it will not introduce more
1071 // incoming edges for phis.
1072 if (BB->hasNPredecessors(1))
1073 return false;
1074 unsigned NumPreds = pred_size(BB);
1075 unsigned NumChangedPhi = 0;
1076 for (auto &Phi : Succ->phis()) {
1077 // If the incoming value is a phi and the phi is defined in BB,
1078 // then removing BB will not increase the total phi entries of the ir.
1079 if (auto *IncomingPhi = dyn_cast<PHINode>(Phi.getIncomingValueForBlock(BB)))
1080 if (IncomingPhi->getParent() == BB)
1081 continue;
1082 // Otherwise, we need to add entries to the phi
1083 NumChangedPhi++;
1084 }
1085 // For every phi that needs to be changed, (NumPreds - 1) new entries will be
1086 // added. If the total increase in phi entries exceeds
1087 // MaxPhiEntriesIncreaseAfterRemovingEmptyBlock, it will be considered as
1088 // introducing too many new phi entries.
1089 return (NumPreds - 1) * NumChangedPhi >
1091}
1092
1093/// Replace a value flowing from a block to a phi with
1094/// potentially multiple instances of that value flowing from the
1095/// block's predecessors to the phi.
1096///
1097/// \param BB The block with the value flowing into the phi.
1098/// \param BBPreds The predecessors of BB.
1099/// \param PN The phi that we are updating.
1100/// \param CommonPred The common predecessor of BB and PN's BasicBlock
1101/// \param HasSharedPreds Whether BB and PN's BasicBlock may share a
1102/// predecessor.
1104 const PredBlockVector &BBPreds,
1105 PHINode *PN,
1106 BasicBlock *CommonPred,
1107 bool HasSharedPreds) {
1108 assert((HasSharedPreds || !CommonPred) && "Unexpected CommonPred!");
1109 Value *OldVal = PN->removeIncomingValue(BB, false);
1110 assert(OldVal && "No entry in PHI for Pred BB!");
1111
1112 // Map BBPreds to defined values or nullptr (representing undefined values).
1113 IncomingValueMap IncomingValues;
1114 for (BasicBlock *Pred : BBPreds)
1115 IncomingValues[Pred] = nullptr;
1116
1117 // We are merging two blocks - BB, and the block containing PN - and
1118 // as a result we need to redirect edges from the predecessors of BB
1119 // to go to the block containing PN, and update PN
1120 // accordingly. Since we allow merging blocks in the case where the
1121 // predecessor and successor blocks both share some predecessors,
1122 // and where some of those common predecessors might have undef
1123 // values flowing into PN, we want to rewrite those values to be
1124 // consistent with the non-undef values.
1125 // Without shared predecessors, PN has no incoming values from BBPreds yet.
1126 if (HasSharedPreds)
1127 gatherIncomingValuesToPhi(PN, IncomingValues);
1128
1129 SmallVector<unsigned> NewUndefOps;
1130
1131 // If this incoming value is one of the PHI nodes in BB, the new entries
1132 // in the PHI node are the entries from the old PHI.
1133 if (isa<PHINode>(OldVal) && cast<PHINode>(OldVal)->getParent() == BB) {
1134 PHINode *OldValPN = cast<PHINode>(OldVal);
1135 for (unsigned i = 0, e = OldValPN->getNumIncomingValues(); i != e; ++i) {
1136 // Note that, since we are merging phi nodes and BB and Succ might
1137 // have common predecessors, we could end up with a phi node with
1138 // identical incoming branches. This will be cleaned up later (and
1139 // will trigger asserts if we try to clean it up now, without also
1140 // simplifying the corresponding conditional branch).
1141 BasicBlock *PredBB = OldValPN->getIncomingBlock(i);
1142
1143 if (PredBB == CommonPred)
1144 continue;
1145
1146 Value *PredVal = OldValPN->getIncomingValue(i);
1147 Value *Selected =
1148 selectIncomingValueForBlock(PredVal, PredBB, IncomingValues);
1149
1150 // And add a new incoming value for this predecessor for the
1151 // newly retargeted branch.
1152 if (!HasSharedPreds && isa<UndefValue>(Selected))
1153 NewUndefOps.push_back(PN->getNumIncomingValues());
1154 PN->addIncoming(Selected, PredBB);
1155 }
1156 if (CommonPred)
1157 PN->addIncoming(OldValPN->getIncomingValueForBlock(CommonPred), BB);
1158
1159 } else {
1160 for (BasicBlock *PredBB : BBPreds) {
1161 // Update existing incoming values in PN for this
1162 // predecessor of BB.
1163 if (PredBB == CommonPred)
1164 continue;
1165
1166 Value *Selected =
1167 selectIncomingValueForBlock(OldVal, PredBB, IncomingValues);
1168
1169 // And add a new incoming value for this predecessor for the
1170 // newly retargeted branch.
1171 if (!HasSharedPreds && isa<UndefValue>(Selected))
1172 NewUndefOps.push_back(PN->getNumIncomingValues());
1173 PN->addIncoming(Selected, PredBB);
1174 }
1175 if (CommonPred)
1176 PN->addIncoming(OldVal, BB);
1177 }
1178
1179 if (HasSharedPreds)
1180 replaceUndefValuesInPhi(PN, IncomingValues);
1181 else
1182 replacePoisonWithUndefIfMixed(PN, NewUndefOps);
1183}
1184
1186 DomTreeUpdater *DTU) {
1187 assert(BB != &BB->getParent()->getEntryBlock() &&
1188 "TryToSimplifyUncondBranchFromEmptyBlock called on entry block!");
1189
1190 // We can't simplify infinite loops.
1191 BasicBlock *Succ = cast<UncondBrInst>(BB->getTerminator())->getSuccessor(0);
1192 if (BB == Succ)
1193 return false;
1194
1196
1197 // The single common predecessor of BB and Succ when BB cannot be killed
1198 BasicBlock *CommonPred = nullptr;
1199
1200 // Without a predecessor shared with Succ, folding BB can't create conflicting
1201 // phi entries, so the checks below can be skipped.
1202 bool HasSharedPreds = mayHaveSharedPredecessor(Succ, BBPreds);
1203
1204 bool BBKillable =
1205 !HasSharedPreds || CanPropagatePredecessorsForPHIs(BB, Succ, BBPreds);
1206
1207 // Even if we can not fold BB into Succ, we may be able to redirect the
1208 // predecessors of BB to Succ.
1209 bool BBPhisMergeable = BBKillable || CanRedirectPredsOfEmptyBBToSucc(
1210 BB, Succ, BBPreds, CommonPred);
1211
1212 if ((!BBKillable && !BBPhisMergeable) || introduceTooManyPhiEntries(BB, Succ))
1213 return false;
1214
1215 // Check to see if merging these blocks/phis would cause conflicts for any of
1216 // the phi nodes in BB or Succ. If not, we can safely merge.
1217
1218 // Check for cases where Succ has multiple predecessors and a PHI node in BB
1219 // has uses which will not disappear when the PHI nodes are merged. It is
1220 // possible to handle such cases, but difficult: it requires checking whether
1221 // BB dominates Succ, which is non-trivial to calculate in the case where
1222 // Succ has multiple predecessors. Also, it requires checking whether
1223 // constructing the necessary self-referential PHI node doesn't introduce any
1224 // conflicts; this isn't too difficult, but the previous code for doing this
1225 // was incorrect.
1226 //
1227 // Note that if this check finds a live use, BB dominates Succ, so BB is
1228 // something like a loop pre-header (or rarely, a part of an irreducible CFG);
1229 // folding the branch isn't profitable in that case anyway.
1230 if (!Succ->getSinglePredecessor()) {
1231 BasicBlock::iterator BBI = BB->begin();
1232 while (isa<PHINode>(*BBI)) {
1233 for (Use &U : BBI->uses()) {
1234 if (PHINode* PN = dyn_cast<PHINode>(U.getUser())) {
1235 if (PN->getIncomingBlock(U) != BB)
1236 return false;
1237 } else {
1238 return false;
1239 }
1240 }
1241 ++BBI;
1242 }
1243 }
1244
1245 if (BBPhisMergeable && CommonPred)
1246 LLVM_DEBUG(dbgs() << "Found Common Predecessor between: " << BB->getName()
1247 << " and " << Succ->getName() << " : "
1248 << CommonPred->getName() << "\n");
1249
1250 // 'BB' and 'BB->Pred' are loop latches, bail out to preserve inner loop
1251 // metadata.
1252 //
1253 // FIXME: This is a stop-gap solution to preserve inner-loop metadata given
1254 // current status (that loop metadata is implemented as metadata attached to
1255 // the branch instruction in the loop latch block). To quote from review
1256 // comments, "the current representation of loop metadata (using a loop latch
1257 // terminator attachment) is known to be fundamentally broken. Loop latches
1258 // are not uniquely associated with loops (both in that a latch can be part of
1259 // multiple loops and a loop may have multiple latches). Loop headers are. The
1260 // solution to this problem is also known: Add support for basic block
1261 // metadata, and attach loop metadata to the loop header."
1262 //
1263 // Why bail out:
1264 // In this case, we expect 'BB' is the latch for outer-loop and 'BB->Pred' is
1265 // the latch for inner-loop (see reason below), so bail out to prerserve
1266 // inner-loop metadata rather than eliminating 'BB' and attaching its metadata
1267 // to this inner-loop.
1268 // - The reason we believe 'BB' and 'BB->Pred' have different inner-most
1269 // loops: assuming 'BB' and 'BB->Pred' are from the same inner-most loop L,
1270 // then 'BB' is the header and latch of 'L' and thereby 'L' must consist of
1271 // one self-looping basic block, which is contradictory with the assumption.
1272 //
1273 // To illustrate how inner-loop metadata is dropped:
1274 //
1275 // CFG Before
1276 //
1277 // BB is while.cond.exit, attached with loop metadata md2.
1278 // BB->Pred is for.body, attached with loop metadata md1.
1279 //
1280 // entry
1281 // |
1282 // v
1283 // ---> while.cond -------------> while.end
1284 // | |
1285 // | v
1286 // | while.body
1287 // | |
1288 // | v
1289 // | for.body <---- (md1)
1290 // | | |______|
1291 // | v
1292 // | while.cond.exit (md2)
1293 // | |
1294 // |_______|
1295 //
1296 // CFG After
1297 //
1298 // while.cond1 is the merge of while.cond.exit and while.cond above.
1299 // for.body is attached with md2, and md1 is dropped.
1300 // If LoopSimplify runs later (as a part of loop pass), it could create
1301 // dedicated exits for inner-loop (essentially adding `while.cond.exit`
1302 // back), but it won't see 'md1' nor restore it for the inner-loop.
1303 //
1304 // entry
1305 // |
1306 // v
1307 // ---> while.cond1 -------------> while.end
1308 // | |
1309 // | v
1310 // | while.body
1311 // | |
1312 // | v
1313 // | for.body <---- (md2)
1314 // |_______| |______|
1315 if (Instruction *TI = BB->getTerminatorOrNull())
1316 if (TI->hasNonDebugLocLoopMetadata())
1317 for (BasicBlock *Pred : predecessors(BB))
1318 if (Instruction *PredTI = Pred->getTerminatorOrNull())
1319 if (PredTI->hasNonDebugLocLoopMetadata())
1320 return false;
1321
1322 if (BBKillable)
1323 LLVM_DEBUG(dbgs() << "Killing Trivial BB: \n" << *BB);
1324 else if (BBPhisMergeable)
1325 LLVM_DEBUG(dbgs() << "Merge Phis in Trivial BB: \n" << *BB);
1326
1328
1329 if (DTU) {
1330 // To avoid processing the same predecessor more than once.
1332 // All predecessors of BB (except the common predecessor) will be moved to
1333 // Succ.
1334 Updates.reserve(Updates.size() + 2 * pred_size(BB) + 1);
1336 if (HasSharedPreds)
1337 SuccPreds.insert_range(predecessors(Succ));
1338 for (auto *PredOfBB : predecessors(BB)) {
1339 // Do not modify those common predecessors of BB and Succ
1340 if (!SuccPreds.contains(PredOfBB))
1341 if (SeenPreds.insert(PredOfBB).second)
1342 Updates.push_back({DominatorTree::Insert, PredOfBB, Succ});
1343 }
1344
1345 SeenPreds.clear();
1346
1347 for (auto *PredOfBB : predecessors(BB))
1348 // When BB cannot be killed, do not remove the edge between BB and
1349 // CommonPred.
1350 if (SeenPreds.insert(PredOfBB).second && PredOfBB != CommonPred)
1351 Updates.push_back({DominatorTree::Delete, PredOfBB, BB});
1352
1353 if (BBKillable)
1354 Updates.push_back({DominatorTree::Delete, BB, Succ});
1355 }
1356
1357 if (isa<PHINode>(Succ->begin())) {
1358 // If there is more than one pred of succ, and there are PHI nodes in
1359 // the successor, then we need to add incoming edges for the PHI nodes
1360 //
1361 const PredBlockVector BBPreds(predecessors(BB));
1362
1363 // Loop over all of the PHI nodes in the successor of BB.
1364 for (BasicBlock::iterator I = Succ->begin(); isa<PHINode>(I); ++I) {
1365 PHINode *PN = cast<PHINode>(I);
1366 redirectValuesFromPredecessorsToPhi(BB, BBPreds, PN, CommonPred,
1367 HasSharedPreds);
1368 }
1369 }
1370
1371 if (Succ->getSinglePredecessor()) {
1372 // BB is the only predecessor of Succ, so Succ will end up with exactly
1373 // the same predecessors BB had.
1374 // Copy over any phi, debug or lifetime instruction.
1376 Succ->splice(Succ->getFirstNonPHIIt(), BB);
1377 } else {
1378 while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
1379 // We explicitly check for such uses for merging phis.
1380 assert(PN->use_empty() && "There shouldn't be any uses here!");
1381 PN->eraseFromParent();
1382 }
1383 }
1384
1385 // If the unconditional branch we replaced contains non-debug llvm.loop
1386 // metadata, we add the metadata to the branch instructions in the
1387 // predecessors.
1388 if (Instruction *TI = BB->getTerminatorOrNull())
1389 if (TI->hasNonDebugLocLoopMetadata()) {
1390 MDNode *LoopMD = TI->getMetadata(LLVMContext::MD_loop);
1391 for (BasicBlock *Pred : predecessors(BB))
1392 Pred->getTerminator()->setMetadata(LLVMContext::MD_loop, LoopMD);
1393 }
1394
1395 if (BBKillable) {
1396 // Clear the successor list of BB to match updates applying to DTU later.
1397 // Run before replaceAllUsesWith() to not redundantly scan phi nodes in
1398 // Succ for BB.
1399 if (BB->hasTerminator())
1400 BB->back().eraseFromParent();
1401
1402 // Everything that jumped to BB now goes to Succ.
1403 BB->replaceAllUsesWith(Succ);
1404
1405 if (!Succ->hasName())
1406 Succ->takeName(BB);
1407
1408 new UnreachableInst(BB->getContext(), BB);
1409 assert(succ_empty(BB) && "The successor list of BB isn't empty before "
1410 "applying corresponding DTU updates.");
1411 } else if (BBPhisMergeable) {
1412 // Everything except CommonPred that jumped to BB now goes to Succ.
1413 BB->replaceUsesWithIf(Succ, [BBPreds, CommonPred](Use &U) -> bool {
1414 if (Instruction *UseInst = dyn_cast<Instruction>(U.getUser()))
1415 return UseInst->getParent() != CommonPred &&
1416 BBPreds.contains(UseInst->getParent());
1417 return false;
1418 });
1419 }
1420
1421 if (DTU)
1422 DTU->applyUpdates(Updates);
1423
1424 if (BBKillable)
1425 DeleteDeadBlock(BB, DTU);
1426
1427 return true;
1428}
1429
1430static bool
1433 // This implementation doesn't currently consider undef operands
1434 // specially. Theoretically, two phis which are identical except for
1435 // one having an undef where the other doesn't could be collapsed.
1436
1437 bool Changed = false;
1438
1439 // Examine each PHI.
1440 // Note that increment of I must *NOT* be in the iteration_expression, since
1441 // we don't want to immediately advance when we restart from the beginning.
1442 for (auto I = BB->begin(); PHINode *PN = dyn_cast<PHINode>(I);) {
1443 ++I;
1444 // Is there an identical PHI node in this basic block?
1445 // Note that we only look in the upper square's triangle,
1446 // we already checked that the lower triangle PHI's aren't identical.
1447 for (auto J = I; PHINode *DuplicatePN = dyn_cast<PHINode>(J); ++J) {
1448 if (ToRemove.contains(DuplicatePN))
1449 continue;
1450 if (!DuplicatePN->isIdenticalToWhenDefined(PN))
1451 continue;
1452 // A duplicate. Replace this PHI with the base PHI.
1453 ++NumPHICSEs;
1454 PN->andIRFlags(DuplicatePN);
1455 DuplicatePN->replaceAllUsesWith(PN);
1456 ToRemove.insert(DuplicatePN);
1457 Changed = true;
1458
1459 // The RAUW can change PHIs that we already visited.
1460 I = BB->begin();
1461 break; // Start over from the beginning.
1462 }
1463 }
1464 return Changed;
1465}
1466
1467static bool
1470 // This implementation doesn't currently consider undef operands
1471 // specially. Theoretically, two phis which are identical except for
1472 // one having an undef where the other doesn't could be collapsed.
1473
1474 struct PHIDenseMapInfo {
1475 // WARNING: this logic must be kept in sync with
1476 // Instruction::isIdenticalToWhenDefined()!
1477 static unsigned getHashValueImpl(PHINode *PN) {
1478 // Compute a hash value on the operands. Instcombine will likely have
1479 // sorted them, which helps expose duplicates, but we have to check all
1480 // the operands to be safe in case instcombine hasn't run.
1481 return static_cast<unsigned>(
1483 hash_combine_range(PN->blocks())));
1484 }
1485
1486 static unsigned getHashValue(PHINode *PN) {
1487#ifndef NDEBUG
1488 // If -phicse-debug-hash was specified, return a constant -- this
1489 // will force all hashing to collide, so we'll exhaustively search
1490 // the table for a match, and the assertion in isEqual will fire if
1491 // there's a bug causing equal keys to hash differently.
1492 if (PHICSEDebugHash)
1493 return 0;
1494#endif
1495 return getHashValueImpl(PN);
1496 }
1497
1498 static bool isEqualImpl(PHINode *LHS, PHINode *RHS) {
1499 return LHS->isIdenticalToWhenDefined(RHS);
1500 }
1501
1502 static bool isEqual(PHINode *LHS, PHINode *RHS) {
1503 // These comparisons are nontrivial, so assert that equality implies
1504 // hash equality (DenseMap demands this as an invariant).
1505 bool Result = isEqualImpl(LHS, RHS);
1507 return Result;
1508 }
1509 };
1510
1511 // Set of unique PHINodes.
1513 PHISet.reserve(4 * PHICSENumPHISmallSize);
1514
1515 // Examine each PHI.
1516 bool Changed = false;
1517 for (auto I = BB->begin(); PHINode *PN = dyn_cast<PHINode>(I++);) {
1518 if (ToRemove.contains(PN))
1519 continue;
1520 auto Inserted = PHISet.insert(PN);
1521 if (!Inserted.second) {
1522 // A duplicate. Replace this PHI with its duplicate.
1523 ++NumPHICSEs;
1524 (*Inserted.first)->andIRFlags(PN);
1525 PN->replaceAllUsesWith(*Inserted.first);
1526 ToRemove.insert(PN);
1527 Changed = true;
1528
1529 // The RAUW can change PHIs that we already visited. Start over from the
1530 // beginning.
1531 PHISet.clear();
1532 I = BB->begin();
1533 }
1534 }
1535
1536 return Changed;
1537}
1538
1549
1553 for (PHINode *PN : ToRemove)
1554 PN->eraseFromParent();
1555 return Changed;
1556}
1557
1559 const DataLayout &DL) {
1560 V = V->stripPointerCasts();
1561
1562 if (AllocaInst *AI = dyn_cast<AllocaInst>(V)) {
1563 // TODO: Ideally, this function would not be called if PrefAlign is smaller
1564 // than the current alignment, as the known bits calculation should have
1565 // already taken it into account. However, this is not always the case,
1566 // as computeKnownBits() has a depth limit, while stripPointerCasts()
1567 // doesn't.
1568 Align CurrentAlign = AI->getAlign();
1569 if (PrefAlign <= CurrentAlign)
1570 return CurrentAlign;
1571
1572 // If the preferred alignment is greater than the natural stack alignment
1573 // then don't round up. This avoids dynamic stack realignment.
1574 MaybeAlign StackAlign = DL.getStackAlignment();
1575 if (StackAlign && PrefAlign > *StackAlign)
1576 return CurrentAlign;
1577 AI->setAlignment(PrefAlign);
1578 return PrefAlign;
1579 }
1580
1581 if (auto *GV = dyn_cast<GlobalVariable>(V)) {
1582 // TODO: as above, this shouldn't be necessary.
1583 Align CurrentAlign = GV->getPointerAlignment(DL);
1584 if (PrefAlign <= CurrentAlign)
1585 return CurrentAlign;
1586
1587 // If there is a large requested alignment and we can, bump up the alignment
1588 // of the global. If the memory we set aside for the global may not be the
1589 // memory used by the final program then it is impossible for us to reliably
1590 // enforce the preferred alignment.
1591 if (!GV->canIncreaseAlignment())
1592 return CurrentAlign;
1593
1594 if (GV->isThreadLocal()) {
1595 unsigned MaxTLSAlign = GV->getParent()->getMaxTLSAlignment() / CHAR_BIT;
1596 if (MaxTLSAlign && PrefAlign > Align(MaxTLSAlign))
1597 PrefAlign = Align(MaxTLSAlign);
1598 }
1599
1600 GV->setAlignment(PrefAlign);
1601 return PrefAlign;
1602 }
1603
1604 return Align(1);
1605}
1606
1608 const DataLayout &DL,
1609 const Instruction *CtxI,
1610 AssumptionCache *AC,
1611 const DominatorTree *DT) {
1612 assert(V->getType()->isPointerTy() &&
1613 "getOrEnforceKnownAlignment expects a pointer!");
1614
1615 KnownBits Known = computeKnownBits(V, DL, AC, CtxI, DT);
1616 unsigned TrailZ = Known.countMinTrailingZeros();
1617
1618 // Avoid trouble with ridiculously large TrailZ values, such as
1619 // those computed from a null pointer.
1620 // LLVM doesn't support alignments larger than (1 << MaxAlignmentExponent).
1621 TrailZ = std::min(TrailZ, +Value::MaxAlignmentExponent);
1622
1623 Align Alignment = Align::fromLog2(std::min(Known.getBitWidth() - 1, TrailZ));
1624
1625 if (PrefAlign && *PrefAlign > Alignment)
1626 Alignment = std::max(Alignment, tryEnforceAlignment(V, *PrefAlign, DL));
1627
1628 // We don't need to make any adjustment.
1629 return Alignment;
1630}
1631
1632///===---------------------------------------------------------------------===//
1633/// Dbg Intrinsic utilities
1634///
1635
1636/// See if there is a dbg.value intrinsic for DIVar for the PHI node.
1638 DIExpression *DIExpr,
1639 PHINode *APN) {
1640 // Since we can't guarantee that the original dbg.declare intrinsic
1641 // is removed by LowerDbgDeclare(), we need to make sure that we are
1642 // not inserting the same dbg.value intrinsic over and over.
1643 SmallVector<DbgVariableRecord *, 1> DbgVariableRecords;
1644 findDbgValues(APN, DbgVariableRecords);
1645 for (DbgVariableRecord *DVR : DbgVariableRecords) {
1646 assert(is_contained(DVR->location_ops(), APN));
1647 if ((DVR->getVariable() == DIVar) && (DVR->getExpression() == DIExpr))
1648 return true;
1649 }
1650 return false;
1651}
1652
1653/// Check if the alloc size of \p ValTy is large enough to cover the variable
1654/// (or fragment of the variable) described by \p DII.
1655///
1656/// This is primarily intended as a helper for the different
1657/// ConvertDebugDeclareToDebugValue functions. The dbg.declare that is converted
1658/// describes an alloca'd variable, so we need to use the alloc size of the
1659/// value when doing the comparison. E.g. an i1 value will be identified as
1660/// covering an n-bit fragment, if the store size of i1 is at least n bits.
1662 const DataLayout &DL = DVR->getModule()->getDataLayout();
1663 TypeSize ValueSize = DL.getTypeAllocSizeInBits(ValTy);
1664 if (std::optional<uint64_t> FragmentSize =
1665 DVR->getExpression()->getActiveBits(DVR->getVariable()))
1666 return TypeSize::isKnownGE(ValueSize, TypeSize::getFixed(*FragmentSize));
1667
1668 // We can't always calculate the size of the DI variable (e.g. if it is a
1669 // VLA). Try to use the size of the alloca that the dbg intrinsic describes
1670 // instead.
1671 if (DVR->isAddressOfVariable()) {
1672 // DVR should have exactly 1 location when it is an address.
1673 assert(DVR->getNumVariableLocationOps() == 1 &&
1674 "address of variable must have exactly 1 location operand.");
1675 if (auto *AI =
1677 if (std::optional<TypeSize> FragmentSize = AI->getAllocationSizeInBits(DL)) {
1678 return TypeSize::isKnownGE(ValueSize, *FragmentSize);
1679 }
1680 }
1681 }
1682 // Could not determine size of variable. Conservatively return false.
1683 return false;
1684}
1685
1687 DILocalVariable *DIVar,
1688 DIExpression *DIExpr,
1689 const DebugLoc &NewLoc,
1690 BasicBlock::iterator Instr) {
1692 DbgVariableRecord *DVRec =
1693 new DbgVariableRecord(DVAM, DIVar, DIExpr, NewLoc.get());
1694 Instr->getParent()->insertDbgRecordBefore(DVRec, Instr);
1695}
1696
1698 int NumEltDropped = DIExpr->getElements()[0] == dwarf::DW_OP_LLVM_arg ? 3 : 1;
1699 return DIExpression::get(DIExpr->getContext(),
1700 DIExpr->getElements().drop_front(NumEltDropped));
1701}
1702
1704 StoreInst *SI, DIBuilder &Builder) {
1705 assert(DVR->isAddressOfVariable() || DVR->isDbgAssign());
1706 auto *DIVar = DVR->getVariable();
1707 assert(DIVar && "Missing variable");
1708 auto *DIExpr = DVR->getExpression();
1709 Value *DV = SI->getValueOperand();
1710
1711 if (isa<UndefValue>(DV) && !isa<PoisonValue>(DV))
1712 return;
1713
1714 DebugLoc NewLoc = getDebugValueLoc(DVR);
1715
1716 // If the alloca describes the variable itself, i.e. the expression in the
1717 // dbg.declare doesn't start with a dereference, we can perform the
1718 // conversion if the value covers the entire fragment of DII.
1719 // If the alloca describes the *address* of DIVar, i.e. DIExpr is
1720 // *just* a DW_OP_deref, we use DV as is for the dbg.value.
1721 // We conservatively ignore other dereferences, because the following two are
1722 // not equivalent:
1723 // dbg.declare(alloca, ..., !Expr(deref, plus_uconstant, 2))
1724 // dbg.value(DV, ..., !Expr(deref, plus_uconstant, 2))
1725 // The former is adding 2 to the address of the variable, whereas the latter
1726 // is adding 2 to the value of the variable. As such, we insist on just a
1727 // deref expression.
1728 bool CanConvert =
1729 DIExpr->isDeref() || (!DIExpr->startsWithDeref() &&
1731 if (CanConvert) {
1732 insertDbgValueOrDbgVariableRecord(Builder, DV, DIVar, DIExpr, NewLoc,
1733 SI->getIterator());
1734 return;
1735 }
1736
1737 // FIXME: If storing to a part of the variable described by the dbg.declare,
1738 // then we want to insert a dbg.value for the corresponding fragment.
1739 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to dbg.value: " << *DVR
1740 << '\n');
1741
1742 // For now, when there is a store to parts of the variable (but we do not
1743 // know which part) we insert an dbg.value intrinsic to indicate that we
1744 // know nothing about the variable's content.
1745 DV = PoisonValue::get(DV->getType());
1747 DbgVariableRecord *NewDVR =
1748 new DbgVariableRecord(DVAM, DIVar, DIExpr, NewLoc.get());
1749 SI->getParent()->insertDbgRecordBefore(NewDVR, SI->getIterator());
1750}
1751
1753 DIBuilder &Builder) {
1754 auto *DIVar = DVR->getVariable();
1755 assert(DIVar && "Missing variable");
1756 auto *DIExpr = DVR->getExpression();
1757 DIExpr = dropInitialDeref(DIExpr);
1758 Value *DV = SI->getValueOperand();
1759
1760 if (isa<UndefValue>(DV) && !isa<PoisonValue>(DV))
1761 return;
1762
1763 DebugLoc NewLoc = getDebugValueLoc(DVR);
1764
1765 insertDbgValueOrDbgVariableRecord(Builder, DV, DIVar, DIExpr, NewLoc,
1766 SI->getIterator());
1767}
1768
1770 DIBuilder &Builder) {
1771 auto *DIVar = DVR->getVariable();
1772 auto *DIExpr = DVR->getExpression();
1773 assert(DIVar && "Missing variable");
1774
1775 if (!valueCoversEntireFragment(LI->getType(), DVR)) {
1776 // FIXME: If only referring to a part of the variable described by the
1777 // dbg.declare, then we want to insert a DbgVariableRecord for the
1778 // corresponding fragment.
1779 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to DbgVariableRecord: "
1780 << *DVR << '\n');
1781 return;
1782 }
1783
1784 DebugLoc NewLoc = getDebugValueLoc(DVR);
1785
1786 // We are now tracking the loaded value instead of the address. In the
1787 // future if multi-location support is added to the IR, it might be
1788 // preferable to keep tracking both the loaded value and the original
1789 // address in case the alloca can not be elided.
1790
1791 // Create a DbgVariableRecord directly and insert.
1793 DbgVariableRecord *DV =
1794 new DbgVariableRecord(LIVAM, DIVar, DIExpr, NewLoc.get());
1795 LI->getParent()->insertDbgRecordAfter(DV, LI);
1796}
1797
1798/// Determine whether this debug variable is a not a basic type.
1799/// We strip through DIDerivedType modifiers (typedefs, const, etc.)
1800/// to find the underlying type to decide if it seems perhaps worthwhile to
1801/// do LowerDbgDeclare.
1803 DIType *Ty = DVR->getVariable()->getType();
1804 if (Ty == nullptr)
1805 return true;
1806 // Strip through modifier types to find the underlying type.
1807 while (auto *DTy = dyn_cast<DIDerivedType>(Ty)) {
1808 switch (DTy->getTag()) {
1809 case dwarf::DW_TAG_pointer_type:
1810 case dwarf::DW_TAG_reference_type:
1811 case dwarf::DW_TAG_rvalue_reference_type:
1812 case dwarf::DW_TAG_ptr_to_member_type:
1813 case dwarf::DW_TAG_LLVM_ptrauth_type:
1814 return false;
1815 case dwarf::DW_TAG_typedef:
1816 case dwarf::DW_TAG_const_type:
1817 case dwarf::DW_TAG_volatile_type:
1818 case dwarf::DW_TAG_restrict_type:
1819 case dwarf::DW_TAG_atomic_type:
1820 case dwarf::DW_TAG_immutable_type:
1821 Ty = DTy->getBaseType();
1822 continue;
1823 default:
1824 break;
1825 }
1826 break;
1827 }
1828 return !isa<DIBasicType>(Ty);
1829}
1830
1832 DIBuilder &Builder) {
1833 auto *DIVar = DVR->getVariable();
1834 auto *DIExpr = DVR->getExpression();
1835 assert(DIVar && "Missing variable");
1836
1837 if (PhiHasDebugValue(DIVar, DIExpr, APN))
1838 return;
1839
1840 if (!valueCoversEntireFragment(APN->getType(), DVR)) {
1841 // FIXME: If only referring to a part of the variable described by the
1842 // dbg.declare, then we want to insert a DbgVariableRecord for the
1843 // corresponding fragment.
1844 LLVM_DEBUG(dbgs() << "Failed to convert dbg.declare to DbgVariableRecord: "
1845 << *DVR << '\n');
1846 return;
1847 }
1848
1849 BasicBlock *BB = APN->getParent();
1850 auto InsertionPt = BB->getFirstInsertionPt();
1851
1852 DebugLoc NewLoc = getDebugValueLoc(DVR);
1853
1854 // The block may be a catchswitch block, which does not have a valid
1855 // insertion point.
1856 // FIXME: Insert DbgVariableRecord markers in the successors when appropriate.
1857 if (InsertionPt != BB->end()) {
1858 insertDbgValueOrDbgVariableRecord(Builder, APN, DIVar, DIExpr, NewLoc,
1859 InsertionPt);
1860 }
1861}
1862
1863/// LowerDbgDeclare - Lowers llvm.dbg.declare intrinsics into appropriate set
1864/// of llvm.dbg.value intrinsics.
1866 bool Changed = false;
1867 DIBuilder DIB(*F.getParent(), /*AllowUnresolved*/ false);
1869 for (auto &FI : F) {
1870 for (Instruction &BI : FI) {
1871 for (DbgVariableRecord &DVR : filterDbgVars(BI.getDbgRecordRange())) {
1872 if (DVR.getType() == DbgVariableRecord::LocationType::Declare)
1873 DVRs.push_back(&DVR);
1874 }
1875 }
1876 }
1877
1878 if (DVRs.empty())
1879 return Changed;
1880
1881 auto LowerOne = [&](DbgVariableRecord *DDI) {
1882 AllocaInst *AI =
1883 dyn_cast_or_null<AllocaInst>(DDI->getVariableLocationOp(0));
1884 // If this is an alloca for a scalar variable, insert a dbg.value
1885 // at each load and store to the alloca and erase the dbg.declare.
1886 // The dbg.values allow tracking a variable even if it is not
1887 // stored on the stack, while the dbg.declare can only describe
1888 // the stack slot (and at a lexical-scope granularity). Later
1889 // passes will attempt to elide the stack slot.
1890 // Skip VLAs (dynamic allocas) and composite types (arrays/structs) since
1891 // they can't be represented as a single dbg.value.
1892 if (!AI || !isa<Constant>(AI->getArraySize()) || isCompositeType(DDI))
1893 return;
1894
1895 // A volatile load/store means that the alloca can't be elided anyway.
1896 // Just look at direct uses however, and ignore any other instructions.
1897 if (llvm::any_of(AI->users(), [](User *U) -> bool {
1898 if (LoadInst *LI = dyn_cast<LoadInst>(U))
1899 return LI->isVolatile();
1900 if (StoreInst *SI = dyn_cast<StoreInst>(U))
1901 return SI->isVolatile();
1902 return false;
1903 }))
1904 return;
1905
1907 WorkList.push_back(AI);
1908 while (!WorkList.empty()) {
1909 const Value *V = WorkList.pop_back_val();
1910 for (const auto &AIUse : V->uses()) {
1911 User *U = AIUse.getUser();
1912 if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
1913 if (AIUse.getOperandNo() == 1)
1915 } else if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
1916 ConvertDebugDeclareToDebugValue(DDI, LI, DIB);
1917 } else if (CallInst *CI = dyn_cast<CallInst>(U)) {
1918 // This is a call by-value or some other instruction that takes a
1919 // pointer to the variable. Insert a *value* intrinsic that describes
1920 // the variable by dereferencing the alloca.
1921 if (!CI->isLifetimeStartOrEnd()) {
1922 DebugLoc NewLoc = getDebugValueLoc(DDI);
1923 auto *DerefExpr =
1924 DIExpression::append(DDI->getExpression(), dwarf::DW_OP_deref);
1925 insertDbgValueOrDbgVariableRecord(DIB, AI, DDI->getVariable(),
1926 DerefExpr, NewLoc,
1927 CI->getIterator());
1928 }
1929 } else if (BitCastInst *BI = dyn_cast<BitCastInst>(U)) {
1930 if (BI->getType()->isPointerTy())
1931 WorkList.push_back(BI);
1932 }
1933 }
1934 }
1935 DDI->eraseFromParent();
1936 Changed = true;
1937 };
1938
1939 for_each(DVRs, LowerOne);
1940
1941 if (Changed)
1942 for (BasicBlock &BB : F)
1944
1945 return Changed;
1946}
1947
1948/// Propagate dbg.value records through the newly inserted PHIs.
1950 SmallVectorImpl<PHINode *> &InsertedPHIs) {
1951 assert(BB && "No BasicBlock to clone DbgVariableRecord(s) from.");
1952 if (InsertedPHIs.size() == 0)
1953 return;
1954
1955 // Map existing PHI nodes to their DbgVariableRecords.
1957 for (auto &I : *BB) {
1958 for (DbgVariableRecord &DVR : filterDbgVars(I.getDbgRecordRange())) {
1959 for (Value *V : DVR.location_ops())
1960 if (auto *Loc = dyn_cast_or_null<PHINode>(V))
1961 DbgValueMap.insert({Loc, &DVR});
1962 }
1963 }
1964 if (DbgValueMap.size() == 0)
1965 return;
1966
1967 // Map a pair of the destination BB and old DbgVariableRecord to the new
1968 // DbgVariableRecord, so that if a DbgVariableRecord is being rewritten to use
1969 // more than one of the inserted PHIs in the same destination BB, we can
1970 // update the same DbgVariableRecord with all the new PHIs instead of creating
1971 // one copy for each.
1973 NewDbgValueMap;
1974 // Then iterate through the new PHIs and look to see if they use one of the
1975 // previously mapped PHIs. If so, create a new DbgVariableRecord that will
1976 // propagate the info through the new PHI. If we use more than one new PHI in
1977 // a single destination BB with the same old dbg.value, merge the updates so
1978 // that we get a single new DbgVariableRecord with all the new PHIs.
1979 for (auto PHI : InsertedPHIs) {
1980 BasicBlock *Parent = PHI->getParent();
1981 // Avoid inserting a debug-info record into an EH block.
1982 if (Parent->getFirstNonPHIIt()->isEHPad())
1983 continue;
1984 for (auto VI : PHI->operand_values()) {
1985 auto V = DbgValueMap.find(VI);
1986 if (V != DbgValueMap.end()) {
1987 DbgVariableRecord *DbgII = cast<DbgVariableRecord>(V->second);
1988 auto NewDI = NewDbgValueMap.find({Parent, DbgII});
1989 if (NewDI == NewDbgValueMap.end()) {
1990 DbgVariableRecord *NewDbgII = DbgII->clone();
1991 NewDI = NewDbgValueMap.insert({{Parent, DbgII}, NewDbgII}).first;
1992 }
1993 DbgVariableRecord *NewDbgII = NewDI->second;
1994 // If PHI contains VI as an operand more than once, we may
1995 // replaced it in NewDbgII; confirm that it is present.
1996 if (is_contained(NewDbgII->location_ops(), VI))
1997 NewDbgII->replaceVariableLocationOp(VI, PHI);
1998 }
1999 }
2000 }
2001 // Insert the new DbgVariableRecords into their destination blocks.
2002 for (auto DI : NewDbgValueMap) {
2003 BasicBlock *Parent = DI.first.first;
2004 DbgVariableRecord *NewDbgII = DI.second;
2005 auto InsertionPt = Parent->getFirstInsertionPt();
2006 assert(InsertionPt != Parent->end() && "Ill-formed basic block");
2007
2008 Parent->insertDbgRecordBefore(NewDbgII, InsertionPt);
2009 }
2010}
2011
2013 DIBuilder &Builder, uint8_t DIExprFlags,
2014 int Offset) {
2016
2017 auto ReplaceOne = [&](DbgVariableRecord *DII) {
2018 assert(DII->getVariable() && "Missing variable");
2019 auto *DIExpr = DII->getExpression();
2020 DIExpr = DIExpression::prepend(DIExpr, DIExprFlags, Offset);
2021 DII->setExpression(DIExpr);
2022 DII->replaceVariableLocationOp(Address, NewAddress);
2023 };
2024
2025 for_each(DVRDeclares, ReplaceOne);
2026
2027 return !DVRDeclares.empty();
2028}
2029
2031 DILocalVariable *DIVar,
2032 DIExpression *DIExpr, Value *NewAddress,
2033 DbgVariableRecord *DVR,
2034 DIBuilder &Builder, int Offset) {
2035 assert(DIVar && "Missing variable");
2036
2037 // This is an alloca-based dbg.value/DbgVariableRecord. The first thing it
2038 // should do with the alloca pointer is dereference it. Otherwise we don't
2039 // know how to handle it and give up.
2040 if (!DIExpr || DIExpr->getNumElements() < 1 ||
2041 DIExpr->getElement(0) != dwarf::DW_OP_deref)
2042 return;
2043
2044 // Insert the offset before the first deref.
2045 if (Offset)
2046 DIExpr = DIExpression::prepend(DIExpr, 0, Offset);
2047
2048 DVR->setExpression(DIExpr);
2049 DVR->replaceVariableLocationOp(0u, NewAddress);
2050}
2051
2053 DIBuilder &Builder, int Offset) {
2055 findDbgValues(AI, DPUsers);
2056
2057 // Replace any DbgVariableRecords that use this alloca.
2058 for (DbgVariableRecord *DVR : DPUsers)
2059 updateOneDbgValueForAlloca(DVR->getDebugLoc(), DVR->getVariable(),
2060 DVR->getExpression(), NewAllocaAddress, DVR,
2061 Builder, Offset);
2062}
2063
2066 findDbgUsers(&I, DbgRecords);
2067 salvageDebugInfoForDbgValues(I, DbgRecords);
2068}
2069
2070/// Salvage the address of \p Assign, which the caller has checked is \p I. An
2071/// address we cannot salvage stays as it is rather than stopping the caller,
2072/// which counts the record as processed either way and goes on to salvage its
2073/// variable location.
2075 assert(Assign.isDbgAssign() && Assign.getAddress() == &I &&
2076 "dbg.assign must use salvaged instruction as its address");
2077 assert(!Assign.getAddressExpression()->getFragmentInfo().has_value() &&
2078 "address-expression shouldn't have fragment info");
2079
2080 // The address component of a dbg.assign cannot be variadic.
2081 uint64_t CurrentLocOps = 0;
2082 SmallVector<Value *, 4> AdditionalValues;
2084 Value *NewAddress =
2085 salvageDebugInfoImpl(I, CurrentLocOps, Ops, AdditionalValues);
2086
2087 // Keep an address we cannot salvage. If I is deleted, its remaining metadata
2088 // use is replaced with poison.
2089 if (!NewAddress)
2090 return;
2091
2093 Assign.getAddressExpression(), Ops, 0, /*StackValue=*/false);
2094 assert(!SalvagedExpr->getFragmentInfo().has_value() &&
2095 "address-expression shouldn't have fragment info");
2096
2097 SalvagedExpr = SalvagedExpr->foldConstantMath();
2098
2099 // Salvage succeeds if no additional values are required.
2100 if (AdditionalValues.empty()) {
2101 Assign.setAddress(NewAddress);
2102 Assign.setAddressExpression(SalvagedExpr);
2103 } else {
2104 Assign.setKillAddress();
2105 }
2106}
2107
2108/// Rewrite \p DVR's variable location in terms of \p I's operands. Return false
2109/// and leave the record alone when the instruction cannot be salvaged. Return
2110/// true once it can, including when the location ends up killed.
2112 // These are arbitrary chosen limits on the maximum number of values and the
2113 // maximum size of a debug expression we can salvage up to, used for
2114 // performance reasons.
2115 const unsigned MaxDebugArgs = 16;
2116 const unsigned MaxExpressionSize = 128;
2117
2118 // Do not add DW_OP_stack_value for DbgDeclare and DbgAddr, because they
2119 // are implicitly pointing out the value as a DWARF memory location
2120 // description.
2121 const bool StackValue = !DVR.isAddressOfVariable();
2122 auto LocationOps = DVR.location_ops();
2123 assert(is_contained(LocationOps, &I) &&
2124 "DbgVariableRecord must use salvaged instruction as its location");
2125 SmallVector<Value *, 4> AdditionalValues;
2126 // 'I' may appear more than once in DVR's location ops, and each use of 'I'
2127 // must be updated in the DIExpression and potentially have additional
2128 // values added; thus we call salvageDebugInfoImpl for each 'I' instance in
2129 // LocationOps.
2130 Value *Replacement = nullptr;
2131 DIExpression *SalvagedExpr = DVR.getExpression();
2132 auto LocIt = find(LocationOps, &I);
2133 while (SalvagedExpr && LocIt != LocationOps.end()) {
2135 unsigned LocationIndex = std::distance(LocationOps.begin(), LocIt);
2136 uint64_t CurrentLocOps = SalvagedExpr->getNumLocationOperands();
2137 Replacement = salvageDebugInfoImpl(I, CurrentLocOps, Ops, AdditionalValues);
2138 if (!Replacement)
2139 break;
2140 SalvagedExpr = DIExpression::appendOpsToArg(SalvagedExpr, Ops,
2141 LocationIndex, StackValue);
2142 LocIt = std::find(++LocIt, LocationOps.end(), &I);
2143 }
2144 // The failure conditions in salvageDebugInfoImpl do not depend on
2145 // CurrentLocOps, so failure can only occur on the first occurrence.
2146 if (!Replacement)
2147 return false;
2148
2149 SalvagedExpr = SalvagedExpr->foldConstantMath();
2150 DVR.replaceVariableLocationOp(&I, Replacement);
2151 const bool FitsExpressionLimit =
2152 SalvagedExpr->getNumElements() <= MaxExpressionSize;
2153 if (AdditionalValues.empty() && FitsExpressionLimit) {
2154 DVR.setExpression(SalvagedExpr);
2155 } else if (!DVR.isAddressOfVariable() && FitsExpressionLimit &&
2156 DVR.getNumVariableLocationOps() + AdditionalValues.size() <=
2157 MaxDebugArgs) {
2158 DVR.addVariableLocationOps(AdditionalValues, SalvagedExpr);
2159 } else {
2160 // Do not salvage using DIArgList for dbg.addr/dbg.declare, as it is
2161 // currently only valid for stack value expressions.
2162 // Also do not salvage if the resulting DIArgList would contain an
2163 // unreasonably large number of values.
2164 DVR.setKillLocation();
2165 }
2166 LLVM_DEBUG(dbgs() << "SALVAGE: " << DVR << '\n');
2167 return true;
2168}
2169
2172 bool ProcessedAnyUse = false;
2173
2174 for (auto *DVR : DbgRecords) {
2175 // replaceVariableLocationOp also updates a matching dbg.assign address, so
2176 // salvage the address before changing the variable location.
2177 if (DVR->isDbgAssign()) {
2178 if (DVR->getAddress() == &I) {
2180 ProcessedAnyUse = true;
2181 }
2182 if (DVR->getValue() != &I)
2183 continue;
2184 }
2185 if (!salvageDbgVariableLocation(I, *DVR))
2186 break;
2187 ProcessedAnyUse = true;
2188 }
2189
2190 if (ProcessedAnyUse)
2191 return;
2192
2193 for (auto *DVR : DbgRecords)
2194 DVR->setKillLocation();
2195}
2196
2198 uint64_t CurrentLocOps,
2200 SmallVectorImpl<Value *> &AdditionalValues) {
2201 unsigned BitWidth = DL.getIndexSizeInBits(GEP->getPointerAddressSpace());
2202 // Rewrite a GEP into a DIExpression.
2203 SmallMapVector<Value *, APInt, 4> VariableOffsets;
2204 APInt ConstantOffset(BitWidth, 0);
2205 if (!GEP->collectOffset(DL, BitWidth, VariableOffsets, ConstantOffset))
2206 return nullptr;
2207 if (!VariableOffsets.empty() && !CurrentLocOps) {
2208 Opcodes.insert(Opcodes.begin(), {dwarf::DW_OP_LLVM_arg, 0});
2209 CurrentLocOps = 1;
2210 }
2211 for (const auto &Offset : VariableOffsets) {
2212 AdditionalValues.push_back(Offset.first);
2213 assert(Offset.second.isStrictlyPositive() &&
2214 "Expected strictly positive multiplier for offset.");
2215 Opcodes.append({dwarf::DW_OP_LLVM_arg, CurrentLocOps++, dwarf::DW_OP_constu,
2216 Offset.second.getZExtValue(), dwarf::DW_OP_mul,
2217 dwarf::DW_OP_plus});
2218 }
2219 DIExpression::appendOffset(Opcodes, ConstantOffset.getSExtValue());
2220 return GEP->getOperand(0);
2221}
2222
2224 switch (Opcode) {
2225 case Instruction::Add:
2226 return dwarf::DW_OP_plus;
2227 case Instruction::Sub:
2228 return dwarf::DW_OP_minus;
2229 case Instruction::Mul:
2230 return dwarf::DW_OP_mul;
2231 case Instruction::SDiv:
2232 return dwarf::DW_OP_div;
2233 case Instruction::SRem:
2234 return dwarf::DW_OP_mod;
2235 case Instruction::Or:
2236 return dwarf::DW_OP_or;
2237 case Instruction::And:
2238 return dwarf::DW_OP_and;
2239 case Instruction::Xor:
2240 return dwarf::DW_OP_xor;
2241 case Instruction::Shl:
2242 return dwarf::DW_OP_shl;
2243 case Instruction::LShr:
2244 return dwarf::DW_OP_shr;
2245 case Instruction::AShr:
2246 return dwarf::DW_OP_shra;
2247 default:
2248 // TODO: Salvage from each kind of binop we know about.
2249 return 0;
2250 }
2251}
2252
2253static void handleSSAValueOperands(uint64_t CurrentLocOps,
2255 SmallVectorImpl<Value *> &AdditionalValues,
2256 Instruction *I) {
2257 if (!CurrentLocOps) {
2258 Opcodes.append({dwarf::DW_OP_LLVM_arg, 0});
2259 CurrentLocOps = 1;
2260 }
2261 Opcodes.append({dwarf::DW_OP_LLVM_arg, CurrentLocOps});
2262 AdditionalValues.push_back(I->getOperand(1));
2263}
2264
2267 SmallVectorImpl<Value *> &AdditionalValues) {
2268 // Handle binary operations with constant integer operands as a special case.
2269 auto *ConstInt = dyn_cast<ConstantInt>(BI->getOperand(1));
2270 // Values wider than 64 bits cannot be represented within a DIExpression.
2271 if (ConstInt && ConstInt->getBitWidth() > 64)
2272 return nullptr;
2273
2274 Instruction::BinaryOps BinOpcode = BI->getOpcode();
2275 // Push any Constant Int operand onto the expression stack.
2276 if (ConstInt) {
2277 uint64_t Val = ConstInt->getSExtValue();
2278 // Add or Sub Instructions with a constant operand can potentially be
2279 // simplified.
2280 if (BinOpcode == Instruction::Add || BinOpcode == Instruction::Sub) {
2281 uint64_t Offset = BinOpcode == Instruction::Add ? Val : -int64_t(Val);
2283 return BI->getOperand(0);
2284 }
2285 Opcodes.append({dwarf::DW_OP_constu, Val});
2286 } else {
2287 handleSSAValueOperands(CurrentLocOps, Opcodes, AdditionalValues, BI);
2288 }
2289
2290 // Add salvaged binary operator to expression stack, if it has a valid
2291 // representation in a DIExpression.
2292 uint64_t DwarfBinOp = getDwarfOpForBinOp(BinOpcode);
2293 if (!DwarfBinOp)
2294 return nullptr;
2295 Opcodes.push_back(DwarfBinOp);
2296 return BI->getOperand(0);
2297}
2298
2300 // The signedness of the operation is implicit in the typed stack, signed and
2301 // unsigned instructions map to the same DWARF opcode.
2302 switch (Pred) {
2303 case CmpInst::ICMP_EQ:
2304 return dwarf::DW_OP_eq;
2305 case CmpInst::ICMP_NE:
2306 return dwarf::DW_OP_ne;
2307 case CmpInst::ICMP_UGT:
2308 case CmpInst::ICMP_SGT:
2309 return dwarf::DW_OP_gt;
2310 case CmpInst::ICMP_UGE:
2311 case CmpInst::ICMP_SGE:
2312 return dwarf::DW_OP_ge;
2313 case CmpInst::ICMP_ULT:
2314 case CmpInst::ICMP_SLT:
2315 return dwarf::DW_OP_lt;
2316 case CmpInst::ICMP_ULE:
2317 case CmpInst::ICMP_SLE:
2318 return dwarf::DW_OP_le;
2319 default:
2320 return 0;
2321 }
2322}
2323
2326 SmallVectorImpl<Value *> &AdditionalValues) {
2327 // Handle icmp operations with constant integer operands as a special case.
2328 auto *ConstInt = dyn_cast<ConstantInt>(Icmp->getOperand(1));
2329 // Values wider than 64 bits cannot be represented within a DIExpression.
2330 if (ConstInt && ConstInt->getBitWidth() > 64)
2331 return nullptr;
2332 // Push any Constant Int operand onto the expression stack.
2333 if (ConstInt) {
2334 if (Icmp->isSigned())
2335 Opcodes.push_back(dwarf::DW_OP_consts);
2336 else
2337 Opcodes.push_back(dwarf::DW_OP_constu);
2338 uint64_t Val = ConstInt->getSExtValue();
2339 Opcodes.push_back(Val);
2340 } else {
2341 handleSSAValueOperands(CurrentLocOps, Opcodes, AdditionalValues, Icmp);
2342 }
2343
2344 // Add salvaged binary operator to expression stack, if it has a valid
2345 // representation in a DIExpression.
2346 uint64_t DwarfIcmpOp = getDwarfOpForIcmpPred(Icmp->getPredicate());
2347 if (!DwarfIcmpOp)
2348 return nullptr;
2349 Opcodes.push_back(DwarfIcmpOp);
2350 return Icmp->getOperand(0);
2351}
2352
2355 SmallVectorImpl<Value *> &AdditionalValues) {
2356 auto &M = *I.getModule();
2357 auto &DL = M.getDataLayout();
2358
2359 if (auto *CI = dyn_cast<CastInst>(&I)) {
2360 Value *FromValue = CI->getOperand(0);
2361 // No-op casts are irrelevant for debug info.
2362 if (CI->isNoopCast(DL)) {
2363 return FromValue;
2364 }
2365
2366 Type *Type = CI->getType();
2367 if (Type->isPointerTy())
2368 Type = DL.getIntPtrType(Type);
2369 // Casts other than Trunc, SExt, or ZExt to scalar types cannot be salvaged.
2370 if (Type->isVectorTy() ||
2373 return nullptr;
2374
2375 llvm::Type *FromType = FromValue->getType();
2376 if (FromType->isPointerTy())
2377 FromType = DL.getIntPtrType(FromType);
2378
2379 unsigned FromTypeBitSize = FromType->getScalarSizeInBits();
2380 unsigned ToTypeBitSize = Type->getScalarSizeInBits();
2381
2382 auto ExtOps = DIExpression::getExtOps(FromTypeBitSize, ToTypeBitSize,
2383 isa<SExtInst>(&I));
2384 Ops.append(ExtOps.begin(), ExtOps.end());
2385 return FromValue;
2386 }
2387
2388 if (auto *GEP = dyn_cast<GetElementPtrInst>(&I))
2389 return getSalvageOpsForGEP(GEP, DL, CurrentLocOps, Ops, AdditionalValues);
2390 if (auto *BI = dyn_cast<BinaryOperator>(&I))
2391 return getSalvageOpsForBinOp(BI, CurrentLocOps, Ops, AdditionalValues);
2392 if (auto *IC = dyn_cast<ICmpInst>(&I))
2393 return getSalvageOpsForIcmpOp(IC, CurrentLocOps, Ops, AdditionalValues);
2394
2395 // *Not* to do: we should not attempt to salvage load instructions,
2396 // because the validity and lifetime of a dbg.value containing
2397 // DW_OP_deref becomes difficult to analyze. See PR40628 for examples.
2398 return nullptr;
2399}
2400
2401/// A replacement for a dbg.value expression.
2402using DbgValReplacement = std::optional<DIExpression *>;
2403
2404/// Point debug users of \p From to \p To using exprs given by \p RewriteExpr,
2405/// possibly moving/undefing users to prevent use-before-def. Returns true if
2406/// changes are made.
2408 Instruction &From, Value &To, Instruction &DomPoint, DominatorTree &DT,
2409 function_ref<DbgValReplacement(DbgVariableRecord &DVR)> RewriteDVRExpr) {
2410 // Find debug users of From.
2412 findDbgUsers(&From, DPUsers);
2413 if (DPUsers.empty())
2414 return false;
2415
2416 // Prevent use-before-def of To.
2417 bool Changed = false;
2418
2419 SmallPtrSet<DbgVariableRecord *, 1> UndefOrSalvageDVR;
2420 if (isa<Instruction>(&To)) {
2421 bool DomPointAfterFrom = From.getNextNode() == &DomPoint;
2422
2423 // DbgVariableRecord implementation of the above.
2424 for (auto *DVR : DPUsers) {
2425 Instruction *MarkedInstr = DVR->getMarker()->MarkedInstr;
2426 Instruction *NextNonDebug = MarkedInstr;
2427
2428 // It's common to see a debug user between From and DomPoint. Move it
2429 // after DomPoint to preserve the variable update without any reordering.
2430 if (DomPointAfterFrom && NextNonDebug == &DomPoint) {
2431 LLVM_DEBUG(dbgs() << "MOVE: " << *DVR << '\n');
2432 DVR->removeFromParent();
2433 DomPoint.getParent()->insertDbgRecordAfter(DVR, &DomPoint);
2434 Changed = true;
2435
2436 // Users which otherwise aren't dominated by the replacement value must
2437 // be salvaged or deleted.
2438 } else if (!DT.dominates(&DomPoint, MarkedInstr)) {
2439 UndefOrSalvageDVR.insert(DVR);
2440 }
2441 }
2442 }
2443
2444 // Update debug users without use-before-def risk.
2445 for (auto *DVR : DPUsers) {
2446 if (UndefOrSalvageDVR.count(DVR))
2447 continue;
2448
2449 DbgValReplacement DVRepl = RewriteDVRExpr(*DVR);
2450 if (!DVRepl)
2451 continue;
2452
2453 DVR->replaceVariableLocationOp(&From, &To);
2454 DVR->setExpression(*DVRepl);
2455 LLVM_DEBUG(dbgs() << "REWRITE: " << DVR << '\n');
2456 Changed = true;
2457 }
2458
2459 if (!UndefOrSalvageDVR.empty()) {
2460 // Try to salvage the remaining debug users.
2461 salvageDebugInfo(From);
2462 Changed = true;
2463 }
2464
2465 return Changed;
2466}
2467
2468/// Check if a bitcast between a value of type \p FromTy to type \p ToTy would
2469/// losslessly preserve the bits and semantics of the value. This predicate is
2470/// symmetric, i.e swapping \p FromTy and \p ToTy should give the same result.
2471///
2472/// Note that Type::canLosslesslyBitCastTo is not suitable here because it
2473/// allows semantically unequivalent bitcasts, such as <2 x i64> -> <4 x i32>,
2474/// and also does not allow lossless pointer <-> integer conversions.
2476 Type *ToTy) {
2477 // Trivially compatible types.
2478 if (FromTy == ToTy)
2479 return true;
2480
2481 // Handle compatible pointer <-> integer conversions.
2482 if (FromTy->isIntOrPtrTy() && ToTy->isIntOrPtrTy()) {
2483 bool SameSize = DL.getTypeSizeInBits(FromTy) == DL.getTypeSizeInBits(ToTy);
2484 bool LosslessConversion = !DL.isNonIntegralPointerType(FromTy) &&
2485 !DL.isNonIntegralPointerType(ToTy);
2486 return SameSize && LosslessConversion;
2487 }
2488
2489 // TODO: This is not exhaustive.
2490 return false;
2491}
2492
2494 Instruction &DomPoint, DominatorTree &DT) {
2495 // Exit early if From has no debug users.
2496 if (!From.isUsedByMetadata())
2497 return false;
2498
2499 assert(&From != &To && "Can't replace something with itself");
2500
2501 Type *FromTy = From.getType();
2502 Type *ToTy = To.getType();
2503
2504 auto IdentityDVR = [&](DbgVariableRecord &DVR) -> DbgValReplacement {
2505 return DVR.getExpression();
2506 };
2507
2508 // Handle no-op conversions.
2509 Module &M = *From.getModule();
2510 const DataLayout &DL = M.getDataLayout();
2511 if (isBitCastSemanticsPreserving(DL, FromTy, ToTy))
2512 return rewriteDebugUsers(From, To, DomPoint, DT, IdentityDVR);
2513
2514 // Handle integer-to-integer widening and narrowing.
2515 // FIXME: Use DW_OP_convert when it's available everywhere.
2516 if (FromTy->isIntegerTy() && ToTy->isIntegerTy()) {
2517 uint64_t FromBits = FromTy->getIntegerBitWidth();
2518 uint64_t ToBits = ToTy->getIntegerBitWidth();
2519 assert(FromBits != ToBits && "Unexpected no-op conversion");
2520
2521 // When the width of the result grows, assume that a debugger will only
2522 // access the low `FromBits` bits when inspecting the source variable.
2523 if (FromBits < ToBits)
2524 return rewriteDebugUsers(From, To, DomPoint, DT, IdentityDVR);
2525
2526 // The width of the result has shrunk. Use sign/zero extension to describe
2527 // the source variable's high bits.
2528 auto SignOrZeroExtDVR = [&](DbgVariableRecord &DVR) -> DbgValReplacement {
2529 DILocalVariable *Var = DVR.getVariable();
2530
2531 // Without knowing signedness, sign/zero extension isn't possible.
2532 auto Signedness = Var->getSignedness();
2533 if (!Signedness)
2534 return std::nullopt;
2535
2536 bool Signed = *Signedness == DIBasicType::Signedness::Signed;
2537 return DIExpression::appendExt(DVR.getExpression(), ToBits, FromBits,
2538 Signed);
2539 };
2540 return rewriteDebugUsers(From, To, DomPoint, DT, SignOrZeroExtDVR);
2541 }
2542
2543 // TODO: Floating-point conversions, vectors.
2544 return false;
2545}
2546
2548 Instruction *I, SmallVectorImpl<Value *> &PoisonedValues) {
2549 bool Changed = false;
2550 // RemoveDIs: erase debug-info on this instruction manually.
2551 I->dropDbgRecords();
2552 for (Use &U : I->operands()) {
2553 Value *Op = U.get();
2554 if (isa<Instruction>(Op) && !Op->getType()->isTokenTy()) {
2555 U.set(PoisonValue::get(Op->getType()));
2556 PoisonedValues.push_back(Op);
2557 Changed = true;
2558 }
2559 }
2560
2561 return Changed;
2562}
2563
2565 unsigned NumDeadInst = 0;
2566 // Delete the instructions backwards, as it has a reduced likelihood of
2567 // having to update as many def-use and use-def chains.
2568 Instruction *EndInst = BB->getTerminator(); // Last not to be deleted.
2571
2572 while (EndInst != &BB->front()) {
2573 // Delete the next to last instruction.
2574 Instruction *Inst = &*--EndInst->getIterator();
2575 if (!Inst->use_empty() && !Inst->getType()->isTokenTy())
2577 if (Inst->isEHPad() || Inst->getType()->isTokenTy()) {
2578 // EHPads can't have DbgVariableRecords attached to them, but it might be
2579 // possible for things with token type.
2580 Inst->dropDbgRecords();
2581 EndInst = Inst;
2582 continue;
2583 }
2584 ++NumDeadInst;
2585 // RemoveDIs: erasing debug-info must be done manually.
2586 Inst->dropDbgRecords();
2587 Inst->eraseFromParent();
2588 }
2589 return NumDeadInst;
2590}
2591
2592unsigned llvm::changeToUnreachable(Instruction *I, bool PreserveLCSSA,
2593 DomTreeUpdater *DTU,
2594 MemorySSAUpdater *MSSAU) {
2595 BasicBlock *BB = I->getParent();
2596
2597 if (MSSAU)
2598 MSSAU->changeToUnreachable(I);
2599
2600 SmallPtrSet<BasicBlock *, 8> UniqueSuccessors;
2601
2602 // Loop over all of the successors, removing BB's entry from any PHI
2603 // nodes.
2604 for (BasicBlock *Successor : successors(BB)) {
2605 Successor->removePredecessor(BB, PreserveLCSSA);
2606 if (DTU)
2607 UniqueSuccessors.insert(Successor);
2608 }
2609 auto *UI = new UnreachableInst(I->getContext(), I->getIterator());
2610 UI->setDebugLoc(I->getDebugLoc());
2611
2612 // All instructions after this are dead.
2613 unsigned NumInstrsRemoved = 0;
2614 BasicBlock::iterator BBI = I->getIterator(), BBE = BB->end();
2615 while (BBI != BBE) {
2616 if (!BBI->use_empty())
2617 BBI->replaceAllUsesWith(PoisonValue::get(BBI->getType()));
2618 BBI++->eraseFromParent();
2619 ++NumInstrsRemoved;
2620 }
2621 if (DTU) {
2623 Updates.reserve(UniqueSuccessors.size());
2624 for (BasicBlock *UniqueSuccessor : UniqueSuccessors)
2625 Updates.push_back({DominatorTree::Delete, BB, UniqueSuccessor});
2626 DTU->applyUpdates(Updates);
2627 }
2629 return NumInstrsRemoved;
2630}
2631
2633 SmallVector<Value *, 8> Args(II->args());
2635 II->getOperandBundlesAsDefs(OpBundles);
2636 CallInst *NewCall = CallInst::Create(II->getFunctionType(),
2637 II->getCalledOperand(), Args, OpBundles);
2638 NewCall->setCallingConv(II->getCallingConv());
2639 NewCall->setAttributes(II->getAttributes());
2640 NewCall->copyMetadata(*II);
2641
2642 // If the invoke had profile metadata, try converting them for CallInst.
2643 uint64_t TotalWeight;
2644 if (NewCall->extractProfTotalWeight(TotalWeight)) {
2645 // Set the total weight if it fits into i32, otherwise reset.
2646 MDBuilder MDB(NewCall->getContext());
2647 auto NewWeights = uint32_t(TotalWeight) != TotalWeight
2648 ? nullptr
2649 : MDB.createBranchWeights({uint32_t(TotalWeight)});
2650 NewCall->setMetadata(LLVMContext::MD_prof, NewWeights);
2651 }
2652
2653 return NewCall;
2654}
2655
2656// changeToCall - Convert the specified invoke into a normal call.
2659 NewCall->takeName(II);
2660 NewCall->insertBefore(II->getIterator());
2661 II->replaceAllUsesWith(NewCall);
2662
2663 // Follow the call by a branch to the normal destination.
2664 BasicBlock *NormalDestBB = II->getNormalDest();
2665 auto *BI = UncondBrInst::Create(NormalDestBB, II->getIterator());
2666 // Although it takes place after the call itself, the new branch is still
2667 // performing part of the control-flow functionality of the invoke, so we use
2668 // II's DebugLoc.
2669 BI->setDebugLoc(II->getDebugLoc());
2670
2671 // Update PHI nodes in the unwind destination
2672 BasicBlock *BB = II->getParent();
2673 BasicBlock *UnwindDestBB = II->getUnwindDest();
2674 UnwindDestBB->removePredecessor(BB);
2675 II->eraseFromParent();
2676 if (DTU)
2677 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}});
2678 return NewCall;
2679}
2680
2682 BasicBlock *UnwindEdge,
2683 DomTreeUpdater *DTU) {
2684 BasicBlock *BB = CI->getParent();
2685
2686 // Convert this function call into an invoke instruction. First, split the
2687 // basic block.
2688 BasicBlock *Split = SplitBlock(BB, CI, DTU, /*LI=*/nullptr, /*MSSAU*/ nullptr,
2689 CI->getName() + ".noexc");
2690
2691 // Delete the unconditional branch inserted by SplitBlock
2692 BB->back().eraseFromParent();
2693
2694 // Create the new invoke instruction.
2695 SmallVector<Value *, 8> InvokeArgs(CI->args());
2697
2698 CI->getOperandBundlesAsDefs(OpBundles);
2699
2700 // Note: we're round tripping operand bundles through memory here, and that
2701 // can potentially be avoided with a cleverer API design that we do not have
2702 // as of this time.
2703
2704 InvokeInst *II =
2706 UnwindEdge, InvokeArgs, OpBundles, CI->getName(), BB);
2707 II->setDebugLoc(CI->getDebugLoc());
2708 II->setCallingConv(CI->getCallingConv());
2709 II->setAttributes(CI->getAttributes());
2710 II->setMetadata(LLVMContext::MD_prof, CI->getMetadata(LLVMContext::MD_prof));
2711
2712 if (DTU)
2713 DTU->applyUpdates({{DominatorTree::Insert, BB, UnwindEdge}});
2714
2715 // Make sure that anything using the call now uses the invoke! This also
2716 // updates the CallGraph if present, because it uses a WeakTrackingVH.
2718
2719 // Delete the original call
2720 Split->front().eraseFromParent();
2721 return Split;
2722}
2723
2725 DomTreeUpdater *DTU, bool FoldInstsToUnreachable) {
2727 BasicBlock *BB = &F.front();
2728 Worklist.push_back(BB);
2729 Reachable[BB->getNumber()] = true;
2730 bool Changed = false;
2731 do {
2732 BB = Worklist.pop_back_val();
2733
2734 // Do a scan of the basic block, turning any obviously unreachable
2735 // instructions into LLVM unreachable insts. The instruction combining pass
2736 // canonicalizes unreachable insts into stores to null or undef.
2737 // Note that it traverses the whole instruction list, so it may incur
2738 // significant performance overhead.
2739 if (FoldInstsToUnreachable) {
2740 for (Instruction &I : *BB) {
2741 if (auto *CI = dyn_cast<CallInst>(&I)) {
2742 Value *Callee = CI->getCalledOperand();
2743 // Handle intrinsic calls.
2744 if (Function *F = dyn_cast<Function>(Callee)) {
2745 auto IntrinsicID = F->getIntrinsicID();
2746 // Assumptions that are known to be false are equivalent to
2747 // unreachable. Also, if the condition is undefined, then we make
2748 // the choice most beneficial to the optimizer, and choose that to
2749 // also be unreachable.
2750 if (IntrinsicID == Intrinsic::assume) {
2751 if (match(CI->getArgOperand(0),
2752 m_CombineOr(m_Zero(), m_Undef()))) {
2753 // Don't insert a call to llvm.trap right before the
2754 // unreachable.
2755 changeToUnreachable(CI, false, DTU);
2756 Changed = true;
2757 break;
2758 }
2759 } else if (IntrinsicID == Intrinsic::experimental_guard) {
2760 // A call to the guard intrinsic bails out of the current
2761 // compilation unit if the predicate passed to it is false. If the
2762 // predicate is a constant false, then we know the guard will bail
2763 // out of the current compile unconditionally, so all code
2764 // following it is dead.
2765 //
2766 // Note: unlike in llvm.assume, it is not "obviously profitable"
2767 // for guards to treat `undef` as `false` since a guard on `undef`
2768 // can still be useful for widening.
2769 if (match(CI->getArgOperand(0), m_Zero()))
2770 if (!isa<UnreachableInst>(CI->getNextNode())) {
2771 changeToUnreachable(CI->getNextNode(), false, DTU);
2772 Changed = true;
2773 break;
2774 }
2775 }
2776 } else if ((isa<ConstantPointerNull>(Callee) &&
2777 !NullPointerIsDefined(CI->getFunction(),
2778 cast<PointerType>(Callee->getType())
2779 ->getAddressSpace())) ||
2780 isa<UndefValue>(Callee)) {
2781 changeToUnreachable(CI, false, DTU);
2782 Changed = true;
2783 break;
2784 }
2785 if (CI->doesNotReturn() && !CI->isMustTailCall()) {
2786 // If we found a call to a no-return function, insert an unreachable
2787 // instruction after it. Make sure there isn't *already* one there
2788 // though.
2789 if (!isa<UnreachableInst>(CI->getNextNode())) {
2790 // Don't insert a call to llvm.trap right before the unreachable.
2791 changeToUnreachable(CI->getNextNode(), false, DTU);
2792 Changed = true;
2793 }
2794 break;
2795 }
2796 } else if (auto *SI = dyn_cast<StoreInst>(&I)) {
2797 // Store to undef and store to null are undefined and used to signal
2798 // that they should be changed to unreachable by passes that can't
2799 // modify the CFG.
2800
2801 // Don't touch volatile stores.
2802 if (SI->isVolatile())
2803 continue;
2804
2805 Value *Ptr = SI->getOperand(1);
2806
2807 if (isa<UndefValue>(Ptr) ||
2809 !NullPointerIsDefined(SI->getFunction(),
2810 SI->getPointerAddressSpace()))) {
2811 changeToUnreachable(SI, false, DTU);
2812 Changed = true;
2813 break;
2814 }
2815 }
2816 }
2817
2818 Instruction *Terminator = BB->getTerminator();
2819 if (auto *II = dyn_cast<InvokeInst>(Terminator)) {
2820 // Turn invokes that call 'nounwind' functions into ordinary calls.
2821 Value *Callee = II->getCalledOperand();
2822 if ((isa<ConstantPointerNull>(Callee) &&
2823 !NullPointerIsDefined(BB->getParent())) ||
2824 isa<UndefValue>(Callee)) {
2825 changeToUnreachable(II, false, DTU);
2826 Changed = true;
2827 } else {
2828 if (II->doesNotReturn() &&
2829 !isa<UnreachableInst>(II->getNormalDest()->front())) {
2830 // If we found an invoke of a no-return function,
2831 // create a new empty basic block with an `unreachable` terminator,
2832 // and set it as the normal destination for the invoke,
2833 // unless that is already the case.
2834 // Note that the original normal destination could have other uses.
2835 BasicBlock *OrigNormalDest = II->getNormalDest();
2836 OrigNormalDest->removePredecessor(II->getParent());
2837 LLVMContext &Ctx = II->getContext();
2838 BasicBlock *UnreachableNormalDest = BasicBlock::Create(
2839 Ctx, OrigNormalDest->getName() + ".unreachable",
2840 II->getFunction(), OrigNormalDest);
2841 Reachable.resize(II->getFunction()->getMaxBlockNumber());
2842 auto *UI = new UnreachableInst(Ctx, UnreachableNormalDest);
2843 UI->setDebugLoc(DebugLoc::getTemporary());
2844 II->setNormalDest(UnreachableNormalDest);
2845 if (DTU)
2846 DTU->applyUpdates(
2847 {{DominatorTree::Delete, BB, OrigNormalDest},
2848 {DominatorTree::Insert, BB, UnreachableNormalDest}});
2849 Changed = true;
2850 }
2851 if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(&F)) {
2852 if (II->use_empty() && !II->mayHaveSideEffects()) {
2853 // jump to the normal destination branch.
2854 BasicBlock *NormalDestBB = II->getNormalDest();
2855 BasicBlock *UnwindDestBB = II->getUnwindDest();
2856 UncondBrInst::Create(NormalDestBB, II->getIterator());
2857 UnwindDestBB->removePredecessor(II->getParent());
2858 II->eraseFromParent();
2859 if (DTU)
2860 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}});
2861 } else
2862 changeToCall(II, DTU);
2863 Changed = true;
2864 }
2865 }
2866 } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(Terminator)) {
2867 // Remove catchpads which cannot be reached.
2868 struct CatchPadDenseMapInfo {
2869 static unsigned getHashValue(CatchPadInst *CatchPad) {
2870 return static_cast<unsigned>(hash_combine_range(
2871 CatchPad->value_op_begin(), CatchPad->value_op_end()));
2872 }
2873
2874 static bool isEqual(CatchPadInst *LHS, CatchPadInst *RHS) {
2875 return LHS->isIdenticalTo(RHS);
2876 }
2877 };
2878
2879 SmallDenseMap<BasicBlock *, int, 8> NumPerSuccessorCases;
2880 // Set of unique CatchPads.
2882 CatchPadDenseMapInfo,
2884 HandlerSet;
2886 for (CatchSwitchInst::handler_iterator I = CatchSwitch->handler_begin(),
2887 E = CatchSwitch->handler_end();
2888 I != E; ++I) {
2889 BasicBlock *HandlerBB = *I;
2890 if (DTU)
2891 ++NumPerSuccessorCases[HandlerBB];
2892 auto *CatchPad = cast<CatchPadInst>(HandlerBB->getFirstNonPHIIt());
2893 if (!HandlerSet.insert({CatchPad, Empty}).second) {
2894 if (DTU)
2895 --NumPerSuccessorCases[HandlerBB];
2896 CatchSwitch->removeHandler(I);
2897 --I;
2898 --E;
2899 Changed = true;
2900 }
2901 }
2902 if (DTU) {
2903 std::vector<DominatorTree::UpdateType> Updates;
2904 for (const auto &I : NumPerSuccessorCases)
2905 if (I.second == 0)
2906 Updates.push_back({DominatorTree::Delete, BB, I.first});
2907 DTU->applyUpdates(Updates);
2908 }
2909 }
2910
2911 Changed |= ConstantFoldTerminator(BB, true, nullptr, DTU);
2912 }
2913 for (BasicBlock *Successor : successors(BB)) {
2914 if (!Reachable[Successor->getNumber()]) {
2915 Worklist.push_back(Successor);
2916 Reachable[Successor->getNumber()] = true;
2917 }
2918 }
2919 } while (!Worklist.empty());
2920 return Changed;
2921}
2922
2924 Instruction *TI = BB->getTerminator();
2925
2926 if (auto *II = dyn_cast<InvokeInst>(TI))
2927 return changeToCall(II, DTU);
2928
2929 Instruction *NewTI;
2930 BasicBlock *UnwindDest;
2931
2932 if (auto *CRI = dyn_cast<CleanupReturnInst>(TI)) {
2933 NewTI = CleanupReturnInst::Create(CRI->getCleanupPad(), nullptr, CRI->getIterator());
2934 UnwindDest = CRI->getUnwindDest();
2935 } else if (auto *CatchSwitch = dyn_cast<CatchSwitchInst>(TI)) {
2936 auto *NewCatchSwitch = CatchSwitchInst::Create(
2937 CatchSwitch->getParentPad(), nullptr, CatchSwitch->getNumHandlers(),
2938 CatchSwitch->getName(), CatchSwitch->getIterator());
2939 for (BasicBlock *PadBB : CatchSwitch->handlers())
2940 NewCatchSwitch->addHandler(PadBB);
2941
2942 NewTI = NewCatchSwitch;
2943 UnwindDest = CatchSwitch->getUnwindDest();
2944 } else {
2945 llvm_unreachable("Could not find unwind successor");
2946 }
2947
2948 NewTI->takeName(TI);
2949 NewTI->setDebugLoc(TI->getDebugLoc());
2950 UnwindDest->removePredecessor(BB);
2951 TI->replaceAllUsesWith(NewTI);
2952 TI->eraseFromParent();
2953 if (DTU)
2954 DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDest}});
2955 return NewTI;
2956}
2957
2958/// removeUnreachableBlocks - Remove blocks that are not reachable, even
2959/// if they are in a dead cycle. Return true if a change was made, false
2960/// otherwise.
2962 MemorySSAUpdater *MSSAU,
2963 bool FoldInstsToUnreachable) {
2964 SmallVector<bool, 16> Reachable(F.getMaxBlockNumber());
2965 bool Changed = markAliveBlocks(F, Reachable, DTU, FoldInstsToUnreachable);
2966
2967 // Are there any blocks left to actually delete?
2968 SmallSetVector<BasicBlock *, 8> BlocksToRemove;
2969 for (BasicBlock &BB : F) {
2970 // Skip reachable basic blocks
2971 if (Reachable[BB.getNumber()])
2972 continue;
2973 // Skip already-deleted blocks
2974 if (DTU && DTU->isBBPendingDeletion(&BB))
2975 continue;
2976 BlocksToRemove.insert(&BB);
2977 }
2978
2979 if (BlocksToRemove.empty())
2980 return Changed;
2981
2982 Changed = true;
2983 NumRemoved += BlocksToRemove.size();
2984
2985 if (MSSAU)
2986 MSSAU->removeBlocks(BlocksToRemove);
2987
2988 DeleteDeadBlocks(BlocksToRemove.takeVector(), DTU);
2989
2990 return Changed;
2991}
2992
2993/// If AAOnly is set, only intersect alias analysis metadata and preserve other
2994/// known metadata. Unknown metadata is always dropped.
2996 bool DoesKMove, bool AAOnly = false) {
2998 K->getAllMetadataOtherThanDebugLoc(Metadata);
2999 for (const auto &MD : Metadata) {
3000 unsigned Kind = MD.first;
3001 MDNode *JMD = J->getMetadata(Kind);
3002 MDNode *KMD = MD.second;
3003
3004 // TODO: Assert that this switch is exhaustive for fixed MD kinds.
3005 switch (Kind) {
3006 default:
3007 K->setMetadata(Kind, nullptr); // Remove unknown metadata
3008 break;
3009 case LLVMContext::MD_dbg:
3010 llvm_unreachable("getAllMetadataOtherThanDebugLoc returned a MD_dbg");
3011 case LLVMContext::MD_DIAssignID:
3012 if (!AAOnly)
3013 K->mergeDIAssignID(J);
3014 break;
3015 case LLVMContext::MD_tbaa:
3016 if (DoesKMove)
3017 K->setMetadata(Kind, MDNode::getMostGenericTBAA(JMD, KMD));
3018 break;
3019 case LLVMContext::MD_alias_scope:
3020 if (DoesKMove)
3021 K->setMetadata(Kind, MDNode::getMostGenericAliasScope(JMD, KMD));
3022 break;
3023 case LLVMContext::MD_noalias:
3024 case LLVMContext::MD_mem_parallel_loop_access:
3025 if (DoesKMove)
3026 K->setMetadata(Kind, MDNode::intersect(JMD, KMD));
3027 break;
3028 case LLVMContext::MD_access_group:
3029 if (DoesKMove)
3030 K->setMetadata(LLVMContext::MD_access_group,
3032 break;
3033 case LLVMContext::MD_range:
3034 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3035 K->setMetadata(Kind, MDNode::getMostGenericRange(JMD, KMD));
3036 break;
3037 case LLVMContext::MD_nofpclass:
3038 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3039 K->setMetadata(Kind, MDNode::getMostGenericNoFPClass(JMD, KMD));
3040 break;
3041 case LLVMContext::MD_fpmath:
3042 if (!AAOnly)
3043 K->setMetadata(Kind, MDNode::getMostGenericFPMath(JMD, KMD));
3044 break;
3045 case LLVMContext::MD_invariant_load:
3046 case LLVMContext::MD_invariant_group:
3047 // If K moves, only keep the invariant metadata if it is present on
3048 // both instructions; otherwise the invariant would be asserted on a
3049 // path (J's) that never promised it. If K does not move, K stays on
3050 // its original path, so its existing metadata remains valid.
3051 if (DoesKMove)
3052 K->setMetadata(Kind, JMD);
3053 break;
3054 case LLVMContext::MD_nonnull:
3055 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3056 K->setMetadata(Kind, JMD);
3057 break;
3058 // Keep empty cases for prof, mmra, memprof, and callsite to prevent them
3059 // from being removed as unknown metadata. The actual merging is handled
3060 // separately below.
3061 case LLVMContext::MD_prof:
3062 case LLVMContext::MD_mmra:
3063 case LLVMContext::MD_memprof:
3064 case LLVMContext::MD_callsite:
3065 break;
3066 case LLVMContext::MD_callee_type:
3067 if (!AAOnly) {
3068 K->setMetadata(LLVMContext::MD_callee_type,
3070 }
3071 break;
3072 case LLVMContext::MD_callees:
3073 // If K moves, it replaces J on J's path and must allow J's callees as
3074 // well. If K does not move, its callees remain valid.
3075 if (!AAOnly && DoesKMove)
3076 K->setMetadata(Kind, MDNode::getMergedCalleesMetadata(KMD, JMD));
3077 break;
3078 case LLVMContext::MD_align:
3079 if (!AAOnly && (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef)))
3080 K->setMetadata(
3082 break;
3083 case LLVMContext::MD_dereferenceable:
3084 case LLVMContext::MD_dereferenceable_or_null:
3085 if (!AAOnly && DoesKMove)
3086 K->setMetadata(Kind,
3088 break;
3089 case LLVMContext::MD_preserve_access_index:
3090 // Preserve !preserve.access.index in K.
3091 break;
3092 case LLVMContext::MD_noundef:
3093 // If K does move, keep noundef if it is present in both instructions.
3094 if (!AAOnly && DoesKMove)
3095 K->setMetadata(Kind, JMD);
3096 break;
3097 case LLVMContext::MD_nontemporal:
3098 // Preserve !nontemporal if it is present on both instructions.
3099 if (!AAOnly)
3100 K->setMetadata(Kind, JMD);
3101 break;
3102 case LLVMContext::MD_mem_cache_hint:
3103 // Preserve !mem.cache_hint only if it is present and equivalent on both
3104 // instructions.
3105 if (!AAOnly && KMD != JMD)
3106 K->setMetadata(Kind, nullptr);
3107 break;
3108 case LLVMContext::MD_noalias_addrspace:
3109 if (DoesKMove)
3110 K->setMetadata(Kind,
3112 break;
3113 case LLVMContext::MD_nosanitize:
3114 // Preserve !nosanitize if both K and J have it.
3115 K->setMetadata(Kind, JMD);
3116 break;
3117 case LLVMContext::MD_captures:
3118 K->setMetadata(
3120 K->getContext(), MDNode::toCaptureComponents(JMD) |
3122 break;
3123 case LLVMContext::MD_alloc_token:
3124 if (!AAOnly && KMD != JMD)
3125 K->setMetadata(Kind, MDNode::getMergedAllocTokenMetadata(KMD, JMD));
3126 break;
3127 }
3128 }
3129
3130 // Merge MMRAs.
3131 // This is handled separately because we also want to handle cases where K
3132 // doesn't have tags but J does.
3133 auto JMMRA = J->getMetadata(LLVMContext::MD_mmra);
3134 auto KMMRA = K->getMetadata(LLVMContext::MD_mmra);
3135 if (JMMRA || KMMRA) {
3136 K->setMetadata(LLVMContext::MD_mmra,
3137 MMRAMetadata::combine(K->getContext(), JMMRA, KMMRA));
3138 }
3139
3140 // Merge memprof metadata.
3141 // Handle separately to support cases where only one instruction has the
3142 // metadata.
3143 auto *JMemProf = J->getMetadata(LLVMContext::MD_memprof);
3144 auto *KMemProf = K->getMetadata(LLVMContext::MD_memprof);
3145 if (!AAOnly && (JMemProf || KMemProf)) {
3146 K->setMetadata(LLVMContext::MD_memprof,
3147 MDNode::getMergedMemProfMetadata(KMemProf, JMemProf));
3148 }
3149
3150 // Merge callsite metadata.
3151 // Handle separately to support cases where only one instruction has the
3152 // metadata.
3153 auto *JCallSite = J->getMetadata(LLVMContext::MD_callsite);
3154 auto *KCallSite = K->getMetadata(LLVMContext::MD_callsite);
3155 if (!AAOnly && (JCallSite || KCallSite)) {
3156 K->setMetadata(LLVMContext::MD_callsite,
3157 MDNode::getMergedCallsiteMetadata(KCallSite, JCallSite));
3158 }
3159
3160 // Merge prof metadata.
3161 // Handle separately to support cases where only one instruction has the
3162 // metadata.
3163 auto *JProf = J->getMetadata(LLVMContext::MD_prof);
3164 auto *KProf = K->getMetadata(LLVMContext::MD_prof);
3165 if (!AAOnly && (JProf || KProf)) {
3166 // We do not need to merge metadata if we have select instructions and the
3167 // one we're keeping (K) does not move (explicitly merging would drop the
3168 // information in this case). Otherwise, explicitly handle the merging.
3169 if (DoesKMove || (!isa<SelectInst>(J) || !isa<SelectInst>(K)) ||
3171 K->setMetadata(LLVMContext::MD_prof,
3172 MDNode::getMergedProfMetadata(KProf, JProf, K, J));
3173 }
3174}
3175
3177 bool DoesKMove) {
3178 combineMetadata(K, J, DoesKMove);
3179}
3180
3182 combineMetadata(K, J, /*DoesKMove=*/true, /*AAOnly=*/true);
3183}
3184
3185void llvm::copyMetadataForLoad(LoadInst &Dest, const LoadInst &Source) {
3187 Source.getAllMetadata(MD);
3188 MDBuilder MDB(Dest.getContext());
3189 Type *NewType = Dest.getType();
3190 const DataLayout &DL = Source.getDataLayout();
3191 for (const auto &MDPair : MD) {
3192 unsigned ID = MDPair.first;
3193 MDNode *N = MDPair.second;
3194 // Note, essentially every kind of metadata should be preserved here! This
3195 // routine is supposed to clone a load instruction changing *only its type*.
3196 // The only metadata it makes sense to drop is metadata which is invalidated
3197 // when the pointer type changes. This should essentially never be the case
3198 // in LLVM, but we explicitly switch over only known metadata to be
3199 // conservatively correct. If you are adding metadata to LLVM which pertains
3200 // to loads, you almost certainly want to add it here.
3201 switch (ID) {
3202 case LLVMContext::MD_dbg:
3203 case LLVMContext::MD_tbaa:
3204 case LLVMContext::MD_prof:
3205 case LLVMContext::MD_fpmath:
3206 case LLVMContext::MD_tbaa_struct:
3207 case LLVMContext::MD_invariant_load:
3208 case LLVMContext::MD_alias_scope:
3209 case LLVMContext::MD_noalias:
3210 case LLVMContext::MD_nontemporal:
3211 case LLVMContext::MD_mem_cache_hint:
3212 case LLVMContext::MD_mem_parallel_loop_access:
3213 case LLVMContext::MD_access_group:
3214 case LLVMContext::MD_noundef:
3215 case LLVMContext::MD_noalias_addrspace:
3216 case LLVMContext::MD_invariant_group:
3217 case LLVMContext::MD_mmra:
3218 // All of these directly apply.
3219 Dest.setMetadata(ID, N);
3220 break;
3221
3222 case LLVMContext::MD_nonnull:
3223 copyNonnullMetadata(Source, N, Dest);
3224 break;
3225
3226 case LLVMContext::MD_align:
3227 case LLVMContext::MD_dereferenceable:
3228 case LLVMContext::MD_dereferenceable_or_null:
3229 // These only directly apply if the new type is also a pointer.
3230 if (NewType->isPointerTy())
3231 Dest.setMetadata(ID, N);
3232 break;
3233
3234 case LLVMContext::MD_range:
3235 copyRangeMetadata(DL, Source, N, Dest);
3236 break;
3237
3238 case LLVMContext::MD_nofpclass:
3239 // This only applies if the floating-point type interpretation. This
3240 // should handle degenerate cases like casting between a scalar and single
3241 // element vector.
3242 if (NewType->getScalarType() == Source.getType()->getScalarType())
3243 Dest.setMetadata(ID, N);
3244 break;
3245 }
3246 }
3247}
3248
3250 bool DoesKMove) {
3251 auto *ReplInst = dyn_cast<Instruction>(Repl);
3252 if (!ReplInst)
3253 return;
3254
3255 // Patch the replacement so that it is not more restrictive than the value
3256 // being replaced.
3257 WithOverflowInst *UnusedWO;
3258 // When replacing the result of a llvm.*.with.overflow intrinsic with a
3259 // overflowing binary operator, nuw/nsw flags may no longer hold.
3260 if (isa<OverflowingBinaryOperator>(ReplInst) &&
3262 ReplInst->dropPoisonGeneratingFlags();
3263 // Note that if 'I' is a load being replaced by some operation,
3264 // for example, by an arithmetic operation, then andIRFlags()
3265 // would just erase all math flags from the original arithmetic
3266 // operation, which is clearly not wanted and not needed.
3267 else if (!isa<LoadInst>(I))
3268 ReplInst->andIRFlags(I);
3269
3270 // Handle attributes.
3271 if (auto *CB1 = dyn_cast<CallBase>(ReplInst)) {
3272 if (auto *CB2 = dyn_cast<CallBase>(I)) {
3273 bool Success = CB1->tryIntersectAttributes(CB2);
3274 assert(Success && "We should not be trying to sink callbases "
3275 "with non-intersectable attributes");
3276 // For NDEBUG Compile.
3277 (void)Success;
3278 }
3279 }
3280
3281 // FIXME: If both the original and replacement value are part of the
3282 // same control-flow region (meaning that the execution of one
3283 // guarantees the execution of the other), then we can combine the
3284 // noalias scopes here and do better than the general conservative
3285 // answer used in combineMetadata().
3286
3287 // In general, GVN unifies expressions over different control-flow
3288 // regions, and so we need a conservative combination of the noalias
3289 // scopes.
3290 combineMetadataForCSE(ReplInst, I, DoesKMove);
3291}
3292
3293template <typename ShouldReplaceFn>
3294static unsigned replaceDominatedUsesWith(Value *From, Value *To,
3295 const ShouldReplaceFn &ShouldReplace) {
3296 assert(From->getType() == To->getType());
3297
3298 unsigned Count = 0;
3299 for (Use &U : llvm::make_early_inc_range(From->uses())) {
3300 auto *II = dyn_cast<IntrinsicInst>(U.getUser());
3301 if (II && II->getIntrinsicID() == Intrinsic::fake_use)
3302 continue;
3303 if (!ShouldReplace(U))
3304 continue;
3305 LLVM_DEBUG(dbgs() << "Replace dominated use of '";
3306 From->printAsOperand(dbgs());
3307 dbgs() << "' with " << *To << " in " << *U.getUser() << "\n");
3308 U.set(To);
3309 ++Count;
3310 }
3311 return Count;
3312}
3313
3315 assert(From->getType() == To->getType());
3316 auto *BB = From->getParent();
3317 unsigned Count = 0;
3318
3319 for (Use &U : llvm::make_early_inc_range(From->uses())) {
3320 auto *I = cast<Instruction>(U.getUser());
3321 if (I->getParent() == BB)
3322 continue;
3323 U.set(To);
3324 ++Count;
3325 }
3326 return Count;
3327}
3328
3330 DominatorTree &DT,
3331 const BasicBlockEdge &Root) {
3332 auto Dominates = [&](const Use &U) { return DT.dominates(Root, U); };
3333 return ::replaceDominatedUsesWith(From, To, Dominates);
3334}
3335
3337 DominatorTree &DT,
3338 const BasicBlock *BB) {
3339 auto Dominates = [&](const Use &U) { return DT.dominates(BB, U); };
3340 return ::replaceDominatedUsesWith(From, To, Dominates);
3341}
3342
3344 DominatorTree &DT,
3345 const Instruction *I) {
3346 auto Dominates = [&](const Use &U) { return DT.dominates(I, U); };
3347 return ::replaceDominatedUsesWith(From, To, Dominates);
3348}
3349
3351 Value *From, Value *To, DominatorTree &DT, const BasicBlockEdge &Root,
3352 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3353 auto DominatesAndShouldReplace = [&](const Use &U) {
3354 return DT.dominates(Root, U) && ShouldReplace(U, To);
3355 };
3356 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3357}
3358
3360 Value *From, Value *To, DominatorTree &DT, const BasicBlock *BB,
3361 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3362 auto DominatesAndShouldReplace = [&](const Use &U) {
3363 return DT.dominates(BB, U) && ShouldReplace(U, To);
3364 };
3365 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3366}
3367
3369 Value *From, Value *To, DominatorTree &DT, const Instruction *I,
3370 function_ref<bool(const Use &U, const Value *To)> ShouldReplace) {
3371 auto DominatesAndShouldReplace = [&](const Use &U) {
3372 return DT.dominates(I, U) && ShouldReplace(U, To);
3373 };
3374 return ::replaceDominatedUsesWith(From, To, DominatesAndShouldReplace);
3375}
3376
3378 const TargetLibraryInfo &TLI) {
3379 // Check if the function is specifically marked as a gc leaf function.
3380 if (Call->hasFnAttr("gc-leaf-function"))
3381 return true;
3382 if (const Function *F = Call->getCalledFunction()) {
3383 if (F->hasFnAttribute("gc-leaf-function"))
3384 return true;
3385
3386 if (auto IID = F->getIntrinsicID()) {
3387 // Most LLVM intrinsics do not take safepoints.
3388 return IID != Intrinsic::experimental_gc_statepoint &&
3389 IID != Intrinsic::experimental_deoptimize &&
3390 IID != Intrinsic::memcpy_element_unordered_atomic &&
3391 IID != Intrinsic::memmove_element_unordered_atomic;
3392 }
3393 }
3394
3395 // Lib calls can be materialized by some passes, and won't be
3396 // marked as 'gc-leaf-function.' All available Libcalls are
3397 // GC-leaf.
3398 return TLI.has(TLI.getLibFunc(*Call));
3399}
3400
3402 LoadInst &NewLI) {
3403 auto *NewTy = NewLI.getType();
3404
3405 // This only directly applies if the new type is also a pointer.
3406 if (NewTy->isPointerTy()) {
3407 NewLI.setMetadata(LLVMContext::MD_nonnull, N);
3408 return;
3409 }
3410
3411 // The only other translation we can do is to integral loads with !range
3412 // metadata.
3413 if (!NewTy->isIntegerTy())
3414 return;
3415
3416 MDBuilder MDB(NewLI.getContext());
3417 const Value *Ptr = OldLI.getPointerOperand();
3418 auto *ITy = cast<IntegerType>(NewTy);
3419 auto *NullInt = ConstantExpr::getPtrToInt(
3421 auto *NonNullInt = ConstantExpr::getAdd(NullInt, ConstantInt::get(ITy, 1));
3422 NewLI.setMetadata(LLVMContext::MD_range,
3423 MDB.createRange(NonNullInt, NullInt));
3424}
3425
3427 MDNode *N, LoadInst &NewLI) {
3428 auto *NewTy = NewLI.getType();
3429 // Simply copy the metadata if the type did not change.
3430 if (NewTy == OldLI.getType()) {
3431 NewLI.setMetadata(LLVMContext::MD_range, N);
3432 return;
3433 }
3434
3435 // Give up unless it is converted to a pointer where there is a single very
3436 // valuable mapping we can do reliably.
3437 // FIXME: It would be nice to propagate this in more ways, but the type
3438 // conversions make it hard.
3439 if (!NewTy->isPointerTy())
3440 return;
3441
3442 unsigned BitWidth = DL.getPointerTypeSizeInBits(NewTy);
3443 if (BitWidth == OldLI.getType()->getScalarSizeInBits() &&
3444 !getConstantRangeFromMetadata(*N).contains(APInt(BitWidth, 0))) {
3445 MDNode *NN = MDNode::get(OldLI.getContext(), {});
3446 NewLI.setMetadata(LLVMContext::MD_nonnull, NN);
3447 }
3448}
3449
3452 findDbgUsers(&I, DPUsers);
3453 for (auto *DVR : DPUsers)
3454 DVR->eraseFromParent();
3455}
3456
3458 BasicBlock *BB) {
3459 // Since we are moving the instructions out of its basic block, we do not
3460 // retain their original debug locations (DILocations) and debug intrinsic
3461 // instructions.
3462 //
3463 // Doing so would degrade the debugging experience.
3464 //
3465 // FIXME: Issue #152767: debug info should also be the same as the
3466 // original branch, **if** the user explicitly indicated that (for sampling
3467 // PGO)
3468 //
3469 // Currently, when hoisting the instructions, we take the following actions:
3470 // - Remove their debug intrinsic instructions.
3471 // - Set their debug locations to the values from the insertion point.
3472 //
3473 // As per PR39141 (comment #8), the more fundamental reason why the dbg.values
3474 // need to be deleted, is because there will not be any instructions with a
3475 // DILocation in either branch left after performing the transformation. We
3476 // can only insert a dbg.value after the two branches are joined again.
3477 //
3478 // See PR38762, PR39243 for more details.
3479 //
3480 // TODO: Extend llvm.dbg.value to take more than one SSA Value (PR39141) to
3481 // encode predicated DIExpressions that yield different results on different
3482 // code paths.
3483
3484 for (BasicBlock::iterator II = BB->begin(), IE = BB->end(); II != IE;) {
3485 Instruction *I = &*II;
3486 I->dropUBImplyingAttrsAndMetadata();
3487 if (I->isUsedByMetadata())
3488 dropDebugUsers(*I);
3489 // RemoveDIs: drop debug-info too as the following code does.
3490 I->dropDbgRecords();
3491 if (isa<PseudoProbeInst>(I)) {
3492 // Remove pseudo probe Intrinsics.
3493 II = I->eraseFromParent();
3494 continue;
3495 }
3496 I->setDebugLoc(InsertPt->getDebugLoc());
3497 ++II;
3498 }
3499 DomBlock->splice(InsertPt->getIterator(), BB, BB->begin(),
3500 BB->getTerminator()->getIterator());
3501}
3502
3504 Type &Ty) {
3505 // Create integer constant expression.
3506 auto createIntegerExpression = [&DIB](const Constant &CV) -> DIExpression * {
3507 const APInt &API = cast<ConstantInt>(&CV)->getValue();
3508 std::optional<int64_t> InitIntOpt;
3509 if (API.getBitWidth() == 1)
3510 InitIntOpt = API.tryZExtValue();
3511 else
3512 InitIntOpt = API.trySExtValue();
3513 return InitIntOpt ? DIB.createConstantValueExpression(
3514 static_cast<uint64_t>(*InitIntOpt))
3515 : nullptr;
3516 };
3517
3518 if (isa<ConstantInt>(C))
3519 return createIntegerExpression(C);
3520
3521 auto *FP = dyn_cast<ConstantFP>(&C);
3522 if (FP && Ty.isFloatingPointTy() && Ty.getScalarSizeInBits() <= 64) {
3523 const APFloat &APF = FP->getValueAPF();
3524 APInt const &API = APF.bitcastToAPInt();
3525 if (uint64_t Temp = API.getZExtValue())
3526 return DIB.createConstantValueExpression(Temp);
3527 return DIB.createConstantValueExpression(*API.getRawData());
3528 }
3529
3530 if (!Ty.isPointerTy())
3531 return nullptr;
3532
3534 return DIB.createConstantValueExpression(0);
3535
3536 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(&C))
3537 if (CE->getOpcode() == Instruction::IntToPtr) {
3538 const Value *V = CE->getOperand(0);
3539 if (auto CI = dyn_cast_or_null<ConstantInt>(V))
3540 return createIntegerExpression(*CI);
3541 }
3542 return nullptr;
3543}
3544
3546 auto RemapDebugOperands = [&Mapping](auto *DV, auto Set) {
3547 for (auto *Op : Set) {
3548 auto I = Mapping.find(Op);
3549 if (I != Mapping.end())
3550 DV->replaceVariableLocationOp(Op, I->second, /*AllowEmpty=*/true);
3551 }
3552 };
3553 auto RemapAssignAddress = [&Mapping](auto *DA) {
3554 auto I = Mapping.find(DA->getAddress());
3555 if (I != Mapping.end())
3556 DA->setAddress(I->second);
3557 };
3558 for (DbgVariableRecord &DVR : filterDbgVars(Inst->getDbgRecordRange())) {
3559 RemapDebugOperands(&DVR, DVR.location_ops());
3560 if (DVR.isDbgAssign())
3561 RemapAssignAddress(&DVR);
3562 }
3563}
3564
3565namespace {
3566
3567/// A potential constituent of a bitreverse or bswap expression. See
3568/// collectBitParts for a fuller explanation.
3569struct BitPart {
3570 BitPart(Value *P, unsigned BW) : Provider(P) {
3571 Provenance.resize(BW);
3572 }
3573
3574 /// The Value that this is a bitreverse/bswap of.
3575 Value *Provider;
3576
3577 /// The "provenance" of each bit. Provenance[A] = B means that bit A
3578 /// in Provider becomes bit B in the result of this expression.
3579 SmallVector<int8_t, 32> Provenance; // int8_t means max size is i128.
3580
3581 enum { Unset = -1 };
3582};
3583
3584} // end anonymous namespace
3585
3586/// Analyze the specified subexpression and see if it is capable of providing
3587/// pieces of a bswap or bitreverse. The subexpression provides a potential
3588/// piece of a bswap or bitreverse if it can be proved that each non-zero bit in
3589/// the output of the expression came from a corresponding bit in some other
3590/// value. This function is recursive, and the end result is a mapping of
3591/// bitnumber to bitnumber. It is the caller's responsibility to validate that
3592/// the bitnumber to bitnumber mapping is correct for a bswap or bitreverse.
3593///
3594/// For example, if the current subexpression is "(shl i32 %X, 24)" then we know
3595/// that the expression deposits the low byte of %X into the high byte of the
3596/// result and that all other bits are zero. This expression is accepted and a
3597/// BitPart is returned with Provider set to %X and Provenance[24-31] set to
3598/// [0-7].
3599///
3600/// For vector types, all analysis is performed at the per-element level. No
3601/// cross-element analysis is supported (shuffle/insertion/reduction), and all
3602/// constant masks must be splatted across all elements.
3603///
3604/// To avoid revisiting values, the BitPart results are memoized into the
3605/// provided map. To avoid unnecessary copying of BitParts, BitParts are
3606/// constructed in-place in the \c BPS map. Because of this \c BPS needs to
3607/// store BitParts objects, not pointers. As we need the concept of a nullptr
3608/// BitParts (Value has been analyzed and the analysis failed), we use an
3609/// Optional type instead to provide the same functionality.
3610///
3611/// Because we pass around references into \c BPS, we must use a container that
3612/// does not invalidate internal references (std::map instead of DenseMap).
3613static const std::optional<BitPart> &
3614collectBitParts(Value *V, bool MatchBSwaps, bool MatchBitReversals,
3615 std::map<Value *, std::optional<BitPart>> &BPS, int Depth,
3616 bool &FoundRoot) {
3617 auto [I, Inserted] = BPS.try_emplace(V);
3618 if (!Inserted)
3619 return I->second;
3620
3621 auto &Result = I->second;
3622 auto BitWidth = V->getType()->getScalarSizeInBits();
3623
3624 // Can't do integer/elements > 128 bits.
3625 if (BitWidth > 128)
3626 return Result;
3627
3628 // Prevent stack overflow by limiting the recursion depth
3630 LLVM_DEBUG(dbgs() << "collectBitParts max recursion depth reached.\n");
3631 return Result;
3632 }
3633
3634 if (auto *I = dyn_cast<Instruction>(V)) {
3635 Value *X, *Y;
3636 const APInt *C;
3637
3638 // If this is an or instruction, it may be an inner node of the bswap.
3639 if (match(V, m_Or(m_Value(X), m_Value(Y)))) {
3640 // Check we have both sources and they are from the same provider.
3641 const auto &A = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3642 Depth + 1, FoundRoot);
3643 if (!A || !A->Provider)
3644 return Result;
3645
3646 const auto &B = collectBitParts(Y, MatchBSwaps, MatchBitReversals, BPS,
3647 Depth + 1, FoundRoot);
3648 if (!B || A->Provider != B->Provider)
3649 return Result;
3650
3651 // Try and merge the two together.
3652 Result = BitPart(A->Provider, BitWidth);
3653 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx) {
3654 if (A->Provenance[BitIdx] != BitPart::Unset &&
3655 B->Provenance[BitIdx] != BitPart::Unset &&
3656 A->Provenance[BitIdx] != B->Provenance[BitIdx])
3657 return Result = std::nullopt;
3658
3659 if (A->Provenance[BitIdx] == BitPart::Unset)
3660 Result->Provenance[BitIdx] = B->Provenance[BitIdx];
3661 else
3662 Result->Provenance[BitIdx] = A->Provenance[BitIdx];
3663 }
3664
3665 return Result;
3666 }
3667
3668 // If this is a logical shift by a constant, recurse then shift the result.
3669 if (match(V, m_LogicalShift(m_Value(X), m_APInt(C)))) {
3670 const APInt &BitShift = *C;
3671
3672 // Ensure the shift amount is defined.
3673 if (BitShift.uge(BitWidth))
3674 return Result;
3675
3676 // For bswap-only, limit shift amounts to whole bytes, for an early exit.
3677 if (!MatchBitReversals && (BitShift.getZExtValue() % 8) != 0)
3678 return Result;
3679
3680 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3681 Depth + 1, FoundRoot);
3682 if (!Res)
3683 return Result;
3684 Result = Res;
3685
3686 // Perform the "shift" on BitProvenance.
3687 auto &P = Result->Provenance;
3688 if (I->getOpcode() == Instruction::Shl) {
3689 P.erase(std::prev(P.end(), BitShift.getZExtValue()), P.end());
3690 P.insert(P.begin(), BitShift.getZExtValue(), BitPart::Unset);
3691 } else {
3692 P.erase(P.begin(), std::next(P.begin(), BitShift.getZExtValue()));
3693 P.insert(P.end(), BitShift.getZExtValue(), BitPart::Unset);
3694 }
3695
3696 return Result;
3697 }
3698
3699 // If this is a logical 'and' with a mask that clears bits, recurse then
3700 // unset the appropriate bits.
3701 if (match(V, m_And(m_Value(X), m_APInt(C)))) {
3702 const APInt &AndMask = *C;
3703
3704 // Check that the mask allows a multiple of 8 bits for a bswap, for an
3705 // early exit.
3706 unsigned NumMaskedBits = AndMask.popcount();
3707 if (!MatchBitReversals && (NumMaskedBits % 8) != 0)
3708 return Result;
3709
3710 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3711 Depth + 1, FoundRoot);
3712 if (!Res)
3713 return Result;
3714 Result = Res;
3715
3716 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3717 // If the AndMask is zero for this bit, clear the bit.
3718 if (AndMask[BitIdx] == 0)
3719 Result->Provenance[BitIdx] = BitPart::Unset;
3720 return Result;
3721 }
3722
3723 // If this is a zext instruction zero extend the result.
3724 if (match(V, m_ZExt(m_Value(X)))) {
3725 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3726 Depth + 1, FoundRoot);
3727 if (!Res)
3728 return Result;
3729
3730 Result = BitPart(Res->Provider, BitWidth);
3731 auto NarrowBitWidth = X->getType()->getScalarSizeInBits();
3732 for (unsigned BitIdx = 0; BitIdx < NarrowBitWidth; ++BitIdx)
3733 Result->Provenance[BitIdx] = Res->Provenance[BitIdx];
3734 for (unsigned BitIdx = NarrowBitWidth; BitIdx < BitWidth; ++BitIdx)
3735 Result->Provenance[BitIdx] = BitPart::Unset;
3736 return Result;
3737 }
3738
3739 // If this is a truncate instruction, extract the lower bits.
3740 if (match(V, m_Trunc(m_Value(X)))) {
3741 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3742 Depth + 1, FoundRoot);
3743 if (!Res)
3744 return Result;
3745
3746 Result = BitPart(Res->Provider, BitWidth);
3747 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3748 Result->Provenance[BitIdx] = Res->Provenance[BitIdx];
3749 return Result;
3750 }
3751
3752 // BITREVERSE - most likely due to us previously matching a partial
3753 // bitreverse.
3754 if (match(V, m_BitReverse(m_Value(X)))) {
3755 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3756 Depth + 1, FoundRoot);
3757 if (!Res)
3758 return Result;
3759
3760 Result = BitPart(Res->Provider, BitWidth);
3761 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3762 Result->Provenance[(BitWidth - 1) - BitIdx] = Res->Provenance[BitIdx];
3763 return Result;
3764 }
3765
3766 // BSWAP - most likely due to us previously matching a partial bswap.
3767 if (match(V, m_BSwap(m_Value(X)))) {
3768 const auto &Res = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3769 Depth + 1, FoundRoot);
3770 if (!Res)
3771 return Result;
3772
3773 unsigned ByteWidth = BitWidth / 8;
3774 Result = BitPart(Res->Provider, BitWidth);
3775 for (unsigned ByteIdx = 0; ByteIdx < ByteWidth; ++ByteIdx) {
3776 unsigned ByteBitOfs = ByteIdx * 8;
3777 for (unsigned BitIdx = 0; BitIdx < 8; ++BitIdx)
3778 Result->Provenance[(BitWidth - 8 - ByteBitOfs) + BitIdx] =
3779 Res->Provenance[ByteBitOfs + BitIdx];
3780 }
3781 return Result;
3782 }
3783
3784 // Funnel 'double' shifts take 3 operands, 2 inputs and the shift
3785 // amount (modulo).
3786 // fshl(X,Y,Z): (X << (Z % BW)) | (Y >> (BW - (Z % BW)))
3787 // fshr(X,Y,Z): (X << (BW - (Z % BW))) | (Y >> (Z % BW))
3788 if (match(V, m_FShl(m_Value(X), m_Value(Y), m_APInt(C))) ||
3789 match(V, m_FShr(m_Value(X), m_Value(Y), m_APInt(C)))) {
3790 // We can treat fshr as a fshl by flipping the modulo amount.
3791 unsigned ModAmt = C->urem(BitWidth);
3792 if (cast<IntrinsicInst>(I)->getIntrinsicID() == Intrinsic::fshr)
3793 ModAmt = BitWidth - ModAmt;
3794
3795 // For bswap-only, limit shift amounts to whole bytes, for an early exit.
3796 if (!MatchBitReversals && (ModAmt % 8) != 0)
3797 return Result;
3798
3799 // Check we have both sources and they are from the same provider.
3800 const auto &LHS = collectBitParts(X, MatchBSwaps, MatchBitReversals, BPS,
3801 Depth + 1, FoundRoot);
3802 if (!LHS || !LHS->Provider)
3803 return Result;
3804
3805 const auto &RHS = collectBitParts(Y, MatchBSwaps, MatchBitReversals, BPS,
3806 Depth + 1, FoundRoot);
3807 if (!RHS || LHS->Provider != RHS->Provider)
3808 return Result;
3809
3810 unsigned StartBitRHS = BitWidth - ModAmt;
3811 Result = BitPart(LHS->Provider, BitWidth);
3812 for (unsigned BitIdx = 0; BitIdx < StartBitRHS; ++BitIdx)
3813 Result->Provenance[BitIdx + ModAmt] = LHS->Provenance[BitIdx];
3814 for (unsigned BitIdx = 0; BitIdx < ModAmt; ++BitIdx)
3815 Result->Provenance[BitIdx] = RHS->Provenance[BitIdx + StartBitRHS];
3816 return Result;
3817 }
3818 }
3819
3820 // If we've already found a root input value then we're never going to merge
3821 // these back together.
3822 if (FoundRoot)
3823 return Result;
3824
3825 // Okay, we got to something that isn't a shift, 'or', 'and', etc. This must
3826 // be the root input value to the bswap/bitreverse.
3827 FoundRoot = true;
3828 Result = BitPart(V, BitWidth);
3829 for (unsigned BitIdx = 0; BitIdx < BitWidth; ++BitIdx)
3830 Result->Provenance[BitIdx] = BitIdx;
3831 return Result;
3832}
3833
3834static bool bitTransformIsCorrectForBSwap(unsigned From, unsigned To,
3835 unsigned BitWidth) {
3836 if (From % 8 != To % 8)
3837 return false;
3838 // Convert from bit indices to byte indices and check for a byte reversal.
3839 From >>= 3;
3840 To >>= 3;
3841 BitWidth >>= 3;
3842 return From == BitWidth - To - 1;
3843}
3844
3845static bool bitTransformIsCorrectForBitReverse(unsigned From, unsigned To,
3846 unsigned BitWidth) {
3847 return From == BitWidth - To - 1;
3848}
3849
3851 Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
3852 SmallVectorImpl<Instruction *> &InsertedInsts) {
3853 if (!match(I, m_Or(m_Value(), m_Value())) &&
3854 !match(I, m_FShl(m_Value(), m_Value(), m_Value())) &&
3855 !match(I, m_FShr(m_Value(), m_Value(), m_Value())) &&
3856 !match(I, m_BSwap(m_Value())))
3857 return false;
3858 if (!MatchBSwaps && !MatchBitReversals)
3859 return false;
3860 Type *ITy = I->getType();
3861 if (!ITy->isIntOrIntVectorTy() || ITy->getScalarSizeInBits() == 1 ||
3862 ITy->getScalarSizeInBits() > 128)
3863 return false; // Can't do integer/elements > 128 bits.
3864
3865 // Try to find all the pieces corresponding to the bswap.
3866 bool FoundRoot = false;
3867 std::map<Value *, std::optional<BitPart>> BPS;
3868 const auto &Res =
3869 collectBitParts(I, MatchBSwaps, MatchBitReversals, BPS, 0, FoundRoot);
3870 if (!Res)
3871 return false;
3872 ArrayRef<int8_t> BitProvenance = Res->Provenance;
3873 assert(all_of(BitProvenance,
3874 [](int8_t I) { return I == BitPart::Unset || 0 <= I; }) &&
3875 "Illegal bit provenance index");
3876
3877 // If the upper bits are zero, then attempt to perform as a truncated op.
3878 Type *DemandedTy = ITy;
3879 if (BitProvenance.back() == BitPart::Unset) {
3880 while (!BitProvenance.empty() && BitProvenance.back() == BitPart::Unset)
3881 BitProvenance = BitProvenance.drop_back();
3882 if (BitProvenance.empty())
3883 return false; // TODO - handle null value?
3884 DemandedTy = Type::getIntNTy(I->getContext(), BitProvenance.size());
3885 if (auto *IVecTy = dyn_cast<VectorType>(ITy))
3886 DemandedTy = VectorType::get(DemandedTy, IVecTy);
3887 }
3888
3889 // Check BitProvenance hasn't found a source larger than the result type.
3890 unsigned DemandedBW = DemandedTy->getScalarSizeInBits();
3891 if (DemandedBW > ITy->getScalarSizeInBits())
3892 return false;
3893
3894 // Now, is the bit permutation correct for a bswap or a bitreverse? We can
3895 // only byteswap values with an even number of bytes.
3896 APInt DemandedMask = APInt::getAllOnes(DemandedBW);
3897 bool OKForBSwap = MatchBSwaps && (DemandedBW % 16) == 0;
3898 bool OKForBitReverse = MatchBitReversals;
3899 for (unsigned BitIdx = 0;
3900 (BitIdx < DemandedBW) && (OKForBSwap || OKForBitReverse); ++BitIdx) {
3901 if (BitProvenance[BitIdx] == BitPart::Unset) {
3902 DemandedMask.clearBit(BitIdx);
3903 continue;
3904 }
3905 OKForBSwap &= bitTransformIsCorrectForBSwap(BitProvenance[BitIdx], BitIdx,
3906 DemandedBW);
3907 OKForBitReverse &= bitTransformIsCorrectForBitReverse(BitProvenance[BitIdx],
3908 BitIdx, DemandedBW);
3909 }
3910
3911 Intrinsic::ID Intrin;
3912 if (OKForBSwap)
3913 Intrin = Intrinsic::bswap;
3914 else if (OKForBitReverse)
3915 Intrin = Intrinsic::bitreverse;
3916 else
3917 return false;
3918
3919 Function *F =
3920 Intrinsic::getOrInsertDeclaration(I->getModule(), Intrin, DemandedTy);
3921 Value *Provider = Res->Provider;
3922
3923 // We may need to truncate the provider.
3924 if (DemandedTy != Provider->getType()) {
3925 auto *Trunc =
3926 CastInst::CreateIntegerCast(Provider, DemandedTy, false, "trunc", I->getIterator());
3927 InsertedInsts.push_back(Trunc);
3928 Provider = Trunc;
3929 }
3930
3931 Instruction *Result = CallInst::Create(F, Provider, "rev", I->getIterator());
3932 InsertedInsts.push_back(Result);
3933
3934 if (!DemandedMask.isAllOnes()) {
3935 auto *Mask = ConstantInt::get(DemandedTy, DemandedMask);
3936 Result = BinaryOperator::Create(Instruction::And, Result, Mask, "mask", I->getIterator());
3937 InsertedInsts.push_back(Result);
3938 }
3939
3940 // We may need to zeroextend back to the result type.
3941 if (ITy != Result->getType()) {
3942 auto *ExtInst = CastInst::CreateIntegerCast(Result, ITy, false, "zext", I->getIterator());
3943 InsertedInsts.push_back(ExtInst);
3944 }
3945
3946 return true;
3947}
3948
3949// CodeGen has special handling for some string functions that may replace
3950// them with target-specific intrinsics. Since that'd skip our interceptors
3951// in ASan/MSan/TSan/DFSan, and thus make us miss some memory accesses,
3952// we mark affected calls as NoBuiltin, which will disable optimization
3953// in CodeGen.
3955 CallInst *CI, const TargetLibraryInfo *TLI) {
3956 Function *F = CI->getCalledFunction();
3957 if (F && !F->hasLocalLinkage() && F->hasName() &&
3958 TLI->hasOptimizedCodeGen(TLI->getLibFunc(F->getName())) &&
3959 !F->doesNotAccessMemory())
3960 CI->addFnAttr(Attribute::NoBuiltin);
3961}
3962
3964 const auto *Op = I->getOperand(OpIdx);
3965 // We can't have a PHI with a metadata or token type.
3966 if (Op->getType()->isMetadataTy() || Op->getType()->isTokenLikeTy())
3967 return false;
3968
3969 // swifterror pointers can only be used by a load, store, or as a swifterror
3970 // argument; swifterror pointers are not allowed to be used in select or phi
3971 // instructions.
3972 if (Op->isSwiftError())
3973 return false;
3974
3975 // Cannot replace alloca argument with phi/select.
3976 if (I->isLifetimeStartOrEnd())
3977 return false;
3978
3979 // Early exit.
3981 return true;
3982
3983 switch (I->getOpcode()) {
3984 default:
3985 return true;
3986 case Instruction::Call:
3987 case Instruction::Invoke: {
3988 const auto &CB = cast<CallBase>(*I);
3989
3990 // Can't handle inline asm. Skip it.
3991 if (CB.isInlineAsm())
3992 return false;
3993
3994 // Constant bundle operands may need to retain their constant-ness for
3995 // correctness.
3996 if (CB.isBundleOperand(OpIdx))
3997 return false;
3998
3999 if (OpIdx < CB.arg_size()) {
4000 // Some variadic intrinsics require constants in the variadic arguments,
4001 // which currently aren't markable as immarg.
4002 if (isa<IntrinsicInst>(CB) &&
4003 OpIdx >= CB.getFunctionType()->getNumParams()) {
4004 // This is known to be OK for stackmap.
4005 return CB.getIntrinsicID() == Intrinsic::experimental_stackmap;
4006 }
4007
4008 // gcroot is a special case, since it requires a constant argument which
4009 // isn't also required to be a simple ConstantInt.
4010 if (CB.getIntrinsicID() == Intrinsic::gcroot)
4011 return false;
4012
4013 // threadlocal_address is a special case as it requires its only
4014 // argument to be a thread local global.
4015 if (CB.getIntrinsicID() == Intrinsic::threadlocal_address)
4016 return false;
4017
4018 // Some intrinsic operands are required to be immediates.
4019 return !CB.paramHasAttr(OpIdx, Attribute::ImmArg);
4020 }
4021
4022 // It is never allowed to replace the call argument to an intrinsic, but it
4023 // may be possible for a call.
4024 return !isa<IntrinsicInst>(CB);
4025 }
4026 case Instruction::ShuffleVector:
4027 // Shufflevector masks are constant.
4028 return OpIdx != 2;
4029 case Instruction::Switch:
4030 case Instruction::ExtractValue:
4031 // All operands apart from the first are constant.
4032 return OpIdx == 0;
4033 case Instruction::InsertValue:
4034 // All operands apart from the first and the second are constant.
4035 return OpIdx < 2;
4036 case Instruction::Alloca:
4037 // Static allocas (constant size in the entry block) are handled by
4038 // prologue/epilogue insertion so they're free anyway. We definitely don't
4039 // want to make them non-constant.
4040 return !cast<AllocaInst>(I)->isStaticAlloca();
4041 case Instruction::GetElementPtr:
4042 if (OpIdx == 0)
4043 return true;
4045 for (auto E = std::next(It, OpIdx); It != E; ++It)
4046 if (It.isStruct())
4047 return false;
4048 return true;
4049 }
4050}
4051
4053 // First: Check if it's a constant
4054 if (Constant *C = dyn_cast<Constant>(Condition))
4055 return ConstantExpr::getNot(C);
4056
4057 // Second: If the condition is already inverted, return the original value
4058 Value *NotCondition;
4059 if (match(Condition, m_Not(m_Value(NotCondition))))
4060 return NotCondition;
4061
4062 BasicBlock *Parent = nullptr;
4063 Instruction *Inst = dyn_cast<Instruction>(Condition);
4064 if (Inst)
4065 Parent = Inst->getParent();
4066 else if (Argument *Arg = dyn_cast<Argument>(Condition))
4067 Parent = &Arg->getParent()->getEntryBlock();
4068 assert(Parent && "Unsupported condition to invert");
4069
4070 // Third: Check all the users for an invert
4071 for (User *U : Condition->users())
4073 if (I->getParent() == Parent && match(I, m_Not(m_Specific(Condition))))
4074 return I;
4075
4076 // Last option: Create a new instruction
4077 auto *Inverted =
4078 BinaryOperator::CreateNot(Condition, Condition->getName() + ".inv");
4079 if (Inst && !isa<PHINode>(Inst))
4080 Inverted->insertAfter(Inst->getIterator());
4081 else
4082 Inverted->insertBefore(Parent->getFirstInsertionPt());
4083 return Inverted;
4084}
4085
4087 // Note: We explicitly check for attributes rather than using cover functions
4088 // because some of the cover functions include the logic being implemented.
4089
4090 bool Changed = false;
4091 // readnone + not convergent implies nosync
4092 if (!F.hasFnAttribute(Attribute::NoSync) &&
4093 F.doesNotAccessMemory() && !F.isConvergent()) {
4094 F.setNoSync();
4095 Changed = true;
4096 }
4097
4098 // readonly implies nofree
4099 if (!F.hasFnAttribute(Attribute::NoFree) && F.onlyReadsMemory()) {
4100 F.setDoesNotFreeMemory();
4101 Changed = true;
4102 }
4103
4104 // willreturn implies mustprogress
4105 if (!F.hasFnAttribute(Attribute::MustProgress) && F.willReturn()) {
4106 F.setMustProgress();
4107 Changed = true;
4108 }
4109
4110 // TODO: There are a bunch of cases of restrictive memory effects we
4111 // can infer by inspecting arguments of argmemonly-ish functions.
4112
4113 return Changed;
4114}
4115
4117#ifndef NDEBUG
4118 if (Opcode)
4119 assert(Opcode == I.getOpcode() &&
4120 "can only use mergeFlags on instructions with matching opcodes");
4121 else
4122 Opcode = I.getOpcode();
4123#endif
4125 HasNUW &= I.hasNoUnsignedWrap();
4126 HasNSW &= I.hasNoSignedWrap();
4127 }
4128 if (auto *DisjointOp = dyn_cast<PossiblyDisjointInst>(&I))
4129 IsDisjoint &= DisjointOp->isDisjoint();
4130}
4131
4133 I.dropPoisonGeneratingFlags();
4134 if (I.getOpcode() == Instruction::Add ||
4135 (I.getOpcode() == Instruction::Mul && AllKnownNonZero)) {
4136 if (HasNUW)
4137 I.setHasNoUnsignedWrap();
4138 if (HasNSW && (AllKnownNonNegative || HasNUW))
4139 I.setHasNoSignedWrap();
4140 }
4141 if (auto *DisjointOp = dyn_cast<PossiblyDisjointInst>(&I))
4142 DisjointOp->setIsDisjoint(IsDisjoint);
4143}
static unsigned getIntrinsicID(const SDNode *N)
const TargetLowering & TLI
SDValue Pred
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
uint64_t 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:665
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:176
static bool isEqualImpl(SimpleValue LHS, SimpleValue RHS)
Definition EarlyCSE.cpp:284
#define DEBUG_TYPE
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.
SmallVector< MachineOperand, 4 > 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:925
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:1661
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:2475
static void salvageDbgAssignAddress(Instruction &I, DbgVariableRecord &Assign)
Salvage the address of Assign, which the caller has checked is I.
Definition Local.cpp:2074
uint64_t getDwarfOpForBinOp(Instruction::BinaryOps Opcode)
Definition Local.cpp:2223
static bool PhiHasDebugValue(DILocalVariable *DIVar, DIExpression *DIExpr, PHINode *APN)
===------------------------------------------------------------------—===// Dbg Intrinsic utilities
Definition Local.cpp:1637
static void gatherIncomingValuesToPhi(PHINode *PN, IncomingValueMap &IncomingValues)
Update a block-to-value map with the non-undef values found in a phi.
Definition Local.cpp:962
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:2995
static void handleSSAValueOperands(uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues, Instruction *I)
Definition Local.cpp:2253
std::optional< DIExpression * > DbgValReplacement
A replacement for a dbg.value expression.
Definition Local.cpp:2402
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:2407
Value * getSalvageOpsForBinOp(BinaryOperator *BI, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2265
static DIExpression * dropInitialDeref(const DIExpression *DIExpr)
Definition Local.cpp:1697
static bool salvageDbgVariableLocation(Instruction &I, DbgVariableRecord &DVR)
Rewrite DVR's variable location in terms of I's operands.
Definition Local.cpp:2111
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:1002
Value * getSalvageOpsForGEP(GetElementPtrInst *GEP, const DataLayout &DL, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2197
static bool CanRedirectPredsOfEmptyBBToSucc(BasicBlock *BB, BasicBlock *Succ, const SmallPtrSetImpl< BasicBlock * > &BBPreds, BasicBlock *&CommonPred)
Definition Local.cpp:1036
static void replacePoisonWithUndefIfMixed(PHINode *PN, ArrayRef< unsigned > UndefOps)
If the incoming values of a phi at UndefOps are a mix of undef and poison, replace the poison values ...
Definition Local.cpp:981
Value * getSalvageOpsForIcmpOp(ICmpInst *Icmp, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Opcodes, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2324
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 mayHaveSharedPredecessor(BasicBlock *Succ, const SmallPtrSetImpl< BasicBlock * > &BBPreds)
Return true if one of BBPreds may branch to Succ.
Definition Local.cpp:848
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"))
uint64_t getDwarfOpForIcmpPred(CmpInst::Predicate Pred)
Definition Local.cpp:2299
static void redirectValuesFromPredecessorsToPhi(BasicBlock *BB, const PredBlockVector &BBPreds, PHINode *PN, BasicBlock *CommonPred, bool HasSharedPreds)
Replace a value flowing from a block to a phi with potentially multiple instances of that value flowi...
Definition Local.cpp:1103
static bool bitTransformIsCorrectForBSwap(unsigned From, unsigned To, unsigned BitWidth)
Definition Local.cpp:3834
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:3614
static bool EliminateDuplicatePHINodesNaiveImpl(BasicBlock *BB, SmallPtrSetImpl< PHINode * > &ToRemove)
Definition Local.cpp:1431
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:868
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:2030
static bool EliminateDuplicatePHINodesSetBasedImpl(BasicBlock *BB, SmallPtrSetImpl< PHINode * > &ToRemove)
Definition Local.cpp:1468
static bool markAliveBlocks(Function &F, SmallVectorImpl< bool > &Reachable, DomTreeUpdater *DTU, bool FoldInstsToUnreachable)
Definition Local.cpp:2724
SmallVector< BasicBlock *, 16 > PredBlockVector
Definition Local.cpp:924
static void insertDbgValueOrDbgVariableRecord(DIBuilder &Builder, Value *DV, DILocalVariable *DIVar, DIExpression *DIExpr, const DebugLoc &NewLoc, BasicBlock::iterator Instr)
Definition Local.cpp:1686
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:1069
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:939
static const unsigned BitPartRecursionMaxDepth
Definition Local.cpp:120
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:1802
static bool bitTransformIsCorrectForBitReverse(unsigned From, unsigned To, unsigned BitWidth)
Definition Local.cpp:3845
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:1572
static APInt getAllOnes(unsigned numBits)
Return an APInt of a specified width with all bits set.
Definition APInt.h:230
void clearBit(unsigned BitPosition)
Set a given bit to 0.
Definition APInt.h:1426
uint64_t getZExtValue() const
Get zero extended value.
Definition APInt.h:1560
unsigned popcount() const
Count the number of bits set.
Definition APInt.h:1690
bool isAllOnes() const
Determine if all bits are set. This is true for zero-width values.
Definition APInt.h:367
unsigned getBitWidth() const
Return the number of bits in the APInt.
Definition APInt.h:1508
const uint64_t * getRawData() const
This function returns a pointer to the internal storage of the APInt.
Definition APInt.h:571
std::optional< int64_t > trySExtValue() const
Get sign extended value if possible.
Definition APInt.h:1594
int64_t getSExtValue() const
Get sign extended value.
Definition APInt.h:1582
bool uge(const APInt &RHS) const
Unsigned greater or equal comparison.
Definition APInt.h:1225
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:453
unsigned getNumber() const
Definition BasicBlock.h:95
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:440
iterator_range< const_phi_iterator > phis() const
Returns a range that iterates over the phis in the basic block.
Definition BasicBlock.h:509
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:465
bool hasAddressTaken() const
Returns true if there are any uses of this basic block other than direct branches,...
Definition BasicBlock.h:666
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:463
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:461
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:638
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:44
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
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:226
static DebugLoc getTemporary()
Definition DebugLoc.h:152
iterator find(const_arg_type_t< KeyT > Val)
Definition DenseMap.h:766
DenseMapIterator< KeyT, ValueT, KeyInfoT, BucketT, true > const_iterator
Definition DenseMap.h:679
std::pair< iterator, bool > insert_or_assign(const KeyT &Key, V &&Val)
Definition DenseMap.h:899
iterator end()
Definition DenseMap.h:686
unsigned size() const
Definition DenseMap.h:717
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition DenseMap.h:827
Implements a dense probed hash-table based set.
Definition DenseSet.h:283
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:803
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:2990
LLVM_ABI unsigned getNumSuccessors() const LLVM_READONLY
Return the number of successors that this instruction has.
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.
user_iterator_impl< Instruction > user_iterator
Specialize the methods defined in Value, as we know that an instruction can only be used by other ins...
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.
iterator_range< user_iterator > users()
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:76
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:92
Metadata node.
Definition Metadata.h:1081
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 LLVM_ABI MDNode * getMergedCalleesMetadata(MDNode *A, MDNode *B)
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
Definition Metadata.h:1579
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:1245
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:39
iterator find(const KeyT &Key)
Definition MapVector.h:157
iterator end()
Definition MapVector.h:70
bool empty() const
Definition MapVector.h:80
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
Definition MapVector.h:127
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:68
const DataLayout & getDataLayout() const
Get the data layout for the module's target platform.
Definition Module.h:325
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.
void insert_range(Range &&R)
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:346
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.
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:352
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:283
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
Definition Type.cpp:299
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition Type.h:258
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:277
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
Definition Type.h:363
LLVM_ABI unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
Definition Type.cpp:222
bool isIntOrPtrTy() const
Return true if this is an integer type or a pointer type.
Definition Type.h:265
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition Type.h:252
bool isTokenTy() const
Return true if this is 'token'.
Definition Type.h:231
static LLVM_ABI IntegerType * getIntNTy(LLVMContext &C, unsigned N)
Definition Type.cpp:303
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:471
static LLVM_ABI ValueAsMetadata * get(Value *V)
Definition Metadata.cpp:512
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:257
LLVM_ABI void replaceAllUsesWith(Value *V)
Change all uses of this to point to a new Value.
Definition Value.cpp:548
LLVMContext & getContext() const
All values hold a context through their type.
Definition Value.h:260
iterator_range< user_iterator > users()
Definition Value.h:428
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:560
bool use_empty() const
Definition Value.h:348
static constexpr unsigned MaxAlignmentExponent
The maximum alignment for instructions.
Definition Value.h:800
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:556
iterator_range< use_iterator > uses()
Definition Value.h:382
bool hasName() const
Definition Value.h:263
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
Definition Value.cpp:314
LLVM_ABI void takeName(Value *V)
Transfer the name from V to this value.
Definition Value.cpp:395
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:210
void reserve(size_t Size)
Grow the DenseSet so that it can contain at least NumEntries items before resizing again.
Definition DenseSet.h:94
static constexpr bool isKnownGE(const FixedOrScalableQuantity &LHS, const FixedOrScalableQuantity &RHS)
Definition TypeSize.h:238
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
#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.
is_zero< true > m_Zero()
Match any null constant or a vector with all elements equal to 0.
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)
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:1781
LLVM_ABI bool RemoveRedundantDbgInstrs(BasicBlock *BB)
Try to remove redundant dbg.value instructions from given basic block.
LLVM_ABI cl::opt< bool > ProfcheckDisableMetadataFixes
Definition LoopInfo.cpp:61
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:1748
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:2564
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:1755
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:2681
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:3350
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 Align getOrEnforceKnownAlignment(Value *V, MaybeAlign PrefAlign, const DataLayout &DL, const Instruction *CtxI=nullptr, AssumptionCache *AC=nullptr, const DominatorTree *DT=nullptr)
Try to ensure that the alignment of V is at least PrefAlign bytes.
Definition Local.cpp:1607
LLVM_ABI void setExplicitlyUnknownBranchWeightsIfProfiled(Instruction &I, StringRef PassName, const Function *F=nullptr)
Like setExplicitlyUnknownBranchWeights(...), but only sets unknown branch weights in the new instruct...
LLVM_ABI unsigned replaceNonLocalUsesWith(Instruction *From, Value *To)
Definition Local.cpp:3314
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:1837
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:2657
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:3185
LLVM_ABI void InsertDebugValueAtStoreLoc(DbgVariableRecord *DVR, StoreInst *SI, DIBuilder &Builder)
===------------------------------------------------------------------—===// Dbg Intrinsic utilities
Definition Local.cpp:1752
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:2675
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:3545
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:649
LLVM_ABI void computeKnownBits(const Value *V, KnownBits &Known, const DataLayout &DL, AssumptionCache *AC=nullptr, const Instruction *CtxI=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...
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:1949
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:2547
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:2961
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:1762
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:408
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:1185
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:3850
LLVM_ABI MDNode * getValidBranchWeightMDNode(const Instruction &I)
Get the valid branch weights metadata node.
LLVM_ABI bool LowerDbgDeclare(Function &F)
Lowers dbg.declare records into appropriate set of dbg.value records.
Definition Local.cpp:1865
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:3503
LLVM_ABI CallInst * createCallMatchingInvoke(InvokeInst *II)
Create a call that matches the invoke II in terms of arguments, attributes, debug information,...
Definition Local.cpp:2632
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:2170
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:1703
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:2923
LLVM_ABI void patchReplacementInstruction(Instruction *I, Value *Repl, bool DoesKMove=false)
Patch the replacement so that it is not more restrictive than the value being replaced.
Definition Local.cpp:3249
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:415
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:3329
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:2592
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:2493
LLVM_ABI Value * salvageDebugInfoImpl(Instruction &I, uint64_t CurrentLocOps, SmallVectorImpl< uint64_t > &Ops, SmallVectorImpl< Value * > &AdditionalValues)
Definition Local.cpp:2353
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:3176
LLVM_ABI void dropDebugUsers(Instruction &I)
Remove the debug intrinsic instructions for the given instruction.
Definition Local.cpp:3450
@ 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:3457
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:3426
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:3401
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:3963
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:2052
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:1558
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:2035
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:1963
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:3181
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:4086
LLVM_ABI Value * invertCondition(Value *Condition)
Invert the given true/false value, possibly reusing an existing copy.
Definition Local.cpp:4052
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
Definition Hashing.h:307
LLVM_ABI void DeleteDeadBlocks(ArrayRef< BasicBlock * > BBs, DomTreeUpdater *DTU=nullptr, bool KeepOneInputPHIs=false)
Delete the specified blocks from BB.
@ End
Run the machine verifier once, at the end of the pipeline.
Definition CodeGen.h:320
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:3954
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:1550
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:3377
hash_code hash_combine_range(InputIteratorT first, InputIteratorT last)
Compute a hash_code for a sequence of values.
Definition Hashing.h:287
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:2012
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:881
#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
static constexpr Align fromLog2(unsigned Log2Value)
Returns an alignment of 1 << Log2Value bytes.
Definition Alignment.h:73
This struct is a compact representation of a valid (power of two) or undefined (0) alignment.
Definition Alignment.h:111
std::optional< unsigned > Opcode
Opcode of merged instructions.
Definition Local.h:590
LLVM_ABI void mergeFlags(Instruction &I)
Merge in the no-wrap flags from I.
Definition Local.cpp:4116
LLVM_ABI void applyFlags(Instruction &I)
Apply the no-wrap flags to I if applicable.
Definition Local.cpp:4132
A MapVector that performs no allocations if smaller than a certain size.
Definition MapVector.h:344