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