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