LLVM 24.0.0git
Instruction.h
Go to the documentation of this file.
1//===-- llvm/Instruction.h - Instruction class definition -------*- C++ -*-===//
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 file contains the declaration of the Instruction class, which is the
10// base class for all of the LLVM instructions.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_IR_INSTRUCTION_H
15#define LLVM_IR_INSTRUCTION_H
16
17#include "llvm/ADT/ArrayRef.h"
18#include "llvm/ADT/Bitfields.h"
19#include "llvm/ADT/StringRef.h"
20#include "llvm/ADT/ilist_node.h"
21#include "llvm/IR/DebugLoc.h"
23#include "llvm/IR/User.h"
24#include "llvm/IR/Value.h"
27#include "llvm/Support/ModRef.h"
28#include <cstdint>
29#include <utility>
30
31namespace llvm {
32
33class BasicBlock;
34class DataLayout;
35class DbgMarker;
36class FastMathFlags;
37class MDNode;
38class Module;
39struct AAMDNodes;
40class DbgRecord;
41
42template <> struct ilist_alloc_traits<Instruction> {
43 static inline void deleteNode(Instruction *V);
44};
45
48
53
54public:
55 InsertPosition(std::nullptr_t) : InsertAt() {}
57 InsertPosition(InstListType::iterator InsertAt) : InsertAt(InsertAt) {}
58 operator InstListType::iterator() const { return InsertAt; }
59 bool isValid() const { return InsertAt.isValid(); }
60 BasicBlock *getBasicBlock() { return InsertAt.getNodeParent(); }
61};
62
63class Instruction : public User,
64 public ilist_node_with_parent<Instruction, BasicBlock,
65 ilist_iterator_bits<true>,
66 ilist_parent<BasicBlock>> {
67public:
70
71 /// Iterator type that casts an operand to a basic block.
72 ///
73 /// All terminators store successors as adjacent operands.
75 : iterator_adaptor_base<succ_iterator, op_iterator,
76 std::random_access_iterator_tag, BasicBlock *,
77 ptrdiff_t, BasicBlock *, BasicBlock *> {
78 succ_iterator() = default;
80
81 BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
82 BasicBlock *operator->() const { return operator*(); }
83
84 op_iterator getUse() const { return I; }
85 };
86
87 /// The const version of `succ_iterator`.
89 : iterator_adaptor_base<const_succ_iterator, const_op_iterator,
90 std::random_access_iterator_tag,
91 const BasicBlock *, ptrdiff_t, const BasicBlock *,
92 const BasicBlock *> {
96
97 const BasicBlock *operator*() const { return cast<BasicBlock>(*I); }
98 const BasicBlock *operator->() const { return operator*(); }
99
100 const_op_iterator getUse() const { return I; }
101 };
102
103private:
104 DebugLoc DbgLoc; // 'dbg' Metadata cache.
105
106 friend class Value;
107 /// Index of first metadata attachment in context, or zero.
108 unsigned MetadataIndex = 0;
109
110 /// Relative order of this instruction in its parent basic block. Used for
111 /// O(1) local dominance checks between instructions.
112 mutable unsigned Order = 0;
113
114 /// Optional marker recording the position for debugging information that
115 /// takes effect immediately before this instruction. Null unless there is
116 /// debugging information present.
117 DbgMarker *DebugMarker = nullptr;
118
119public:
120 DbgMarker *getDbgMarker() const { return DebugMarker; }
121
122 /// Clone any debug-info attached to \p From onto this instruction. Used to
123 /// copy debugging information from one block to another, when copying entire
124 /// blocks. \see DebugProgramInstruction.h , because the ordering of
125 /// DbgRecords is still important, fine grain control of which instructions
126 /// are moved and where they go is necessary.
127 /// \p From The instruction to clone debug-info from.
128 /// \p from_here Optional iterator to limit DbgRecords cloned to be a range
129 /// from
130 /// from_here to end().
131 /// \p InsertAtHead Whether the cloned DbgRecords should be placed at the end
132 /// or the beginning of existing DbgRecords attached to this.
133 /// \returns A range over the newly cloned DbgRecords.
135 const Instruction *From,
136 std::optional<simple_ilist<DbgRecord>::iterator> FromHere = std::nullopt,
137 bool InsertAtHead = false);
138
139 /// Return a range over the DbgRecords attached to this instruction.
143
144 /// Return an iterator to the position of the "Next" DbgRecord after this
145 /// instruction, or std::nullopt. This is the position to pass to
146 /// BasicBlock::reinsertInstInDbgRecords when re-inserting an instruction.
147 LLVM_ABI std::optional<simple_ilist<DbgRecord>::iterator>
148 getDbgReinsertionPosition();
149
150 /// Returns true if any DbgRecords are attached to this instruction.
151 LLVM_ABI bool hasDbgRecords() const;
152
153 /// Transfer any DbgRecords on the position \p It onto this instruction,
154 /// by simply adopting the sequence of DbgRecords (which is efficient) if
155 /// possible, by merging two sequences otherwise.
156 LLVM_ABI void adoptDbgRecords(BasicBlock *BB, InstListType::iterator It,
157 bool InsertAtHead);
158
159 /// Erase any DbgRecords attached to this instruction.
160 LLVM_ABI void dropDbgRecords();
161
162 /// Erase a single DbgRecord \p I that is attached to this instruction.
163 LLVM_ABI void dropOneDbgRecord(DbgRecord *I);
164
165 /// Handle the debug-info implications of this instruction being removed. Any
166 /// attached DbgRecords need to "fall" down onto the next instruction.
167 LLVM_ABI void handleMarkerRemoval();
168
169protected:
170 // All 16 bits of `Value::SubclassData` are available for subclasses of
171 // `Instruction` to use.
173
174 // Template alias so that all Instruction storing alignment use the same
175 // definiton.
176 // Valid alignments are powers of two from 2^0 to 2^MaxAlignmentExponent =
177 // 2^32. We store them as Log2(Alignment), so we need 6 bits to encode the 33
178 // possible values.
179 template <unsigned Offset>
181 typename Bitfield::Element<unsigned, Offset, 6,
183
184 template <unsigned Offset>
186
187 template <unsigned Offset>
191
192protected:
193 LLVM_ABI ~Instruction(); // Use deleteValue() to delete a generic Instruction.
194
195public:
196 Instruction(const Instruction &) = delete;
198
199 /// Specialize the methods defined in Value, as we know that an instruction
200 /// can only be used by other instructions.
221
237 const Instruction *user_back() const { return *user_begin(); }
238
239 /// Return the module owning the function this instruction belongs to
240 /// or nullptr it the function does not have a module.
241 ///
242 /// Note: this is undefined behavior if the instruction does not have a
243 /// parent, or the parent basic block does not have a parent function.
244 LLVM_ABI const Module *getModule() const;
246 return const_cast<Module *>(
247 static_cast<const Instruction *>(this)->getModule());
248 }
249
250 /// Return the function this instruction belongs to.
251 ///
252 /// Note: it is undefined behavior to call this on an instruction not
253 /// currently inserted into a function.
254 LLVM_ABI const Function *getFunction() const;
256 return const_cast<Function *>(
257 static_cast<const Instruction *>(this)->getFunction());
258 }
259
260 /// Get the data layout of the module this instruction belongs to.
261 ///
262 /// Requires the instruction to have a parent module.
263 LLVM_ABI const DataLayout &getDataLayout() const;
264
265 /// This method unlinks 'this' from the containing basic block, but does not
266 /// delete it.
267 LLVM_ABI void removeFromParent();
268
269 /// This method unlinks 'this' from the containing basic block and deletes it.
270 ///
271 /// \returns an iterator pointing to the element after the erased one
272 LLVM_ABI InstListType::iterator eraseFromParent();
273
274 /// Insert an unlinked instruction into a basic block immediately before
275 /// the specified position.
276 LLVM_ABI void insertBefore(InstListType::iterator InsertPos);
277
278 /// Insert an unlinked instruction into a basic block immediately after the
279 /// specified instruction.
280 LLVM_ABI void insertAfter(Instruction *InsertPos);
281
282 /// Insert an unlinked instruction into a basic block immediately after the
283 /// specified position.
284 LLVM_ABI void insertAfter(InstListType::iterator InsertPos);
285
286 /// Inserts an unlinked instruction into \p ParentBB at position \p It and
287 /// returns the iterator of the inserted instruction.
288 LLVM_ABI InstListType::iterator insertInto(BasicBlock *ParentBB,
289 InstListType::iterator It);
290
291 LLVM_ABI void insertBefore(BasicBlock &BB, InstListType::iterator InsertPos);
292
293 /// Unlink this instruction from its current basic block and insert it into
294 /// the basic block that MovePos lives in, right before MovePos.
295 LLVM_ABI void moveBefore(InstListType::iterator InsertPos);
296
297 /// Perform a \ref moveBefore operation, while signalling that the caller
298 /// intends to preserve the original ordering of instructions. This implicitly
299 /// means that any adjacent debug-info should move with this instruction.
300 LLVM_ABI void moveBeforePreserving(InstListType::iterator MovePos);
301
302 /// Perform a \ref moveBefore operation, while signalling that the caller
303 /// intends to preserve the original ordering of instructions. This implicitly
304 /// means that any adjacent debug-info should move with this instruction.
305 LLVM_ABI void moveBeforePreserving(BasicBlock &BB, InstListType::iterator I);
306
307private:
308 /// RemoveDIs project: all other moves implemented with this method,
309 /// centralising debug-info updates into one place.
310 void moveBeforeImpl(BasicBlock &BB, InstListType::iterator I, bool Preserve);
311
312public:
313 /// Unlink this instruction and insert into BB before I.
314 ///
315 /// \pre I is a valid iterator into BB.
316 LLVM_ABI void moveBefore(BasicBlock &BB, InstListType::iterator I);
317
318 /// Unlink this instruction from its current basic block and insert it into
319 /// the basic block that MovePos lives in, right after MovePos.
320 LLVM_ABI void moveAfter(Instruction *MovePos);
321
322 /// Unlink this instruction from its current basic block and insert it into
323 /// the basic block that MovePos lives in, right after MovePos.
324 LLVM_ABI void moveAfter(InstListType::iterator MovePos);
325
326 /// See \ref moveBeforePreserving .
327 LLVM_ABI void moveAfterPreserving(Instruction *MovePos);
328
329 /// Given an instruction Other in the same basic block as this instruction,
330 /// return true if this instruction comes before Other. In this worst case,
331 /// this takes linear time in the number of instructions in the block. The
332 /// results are cached, so in common cases when the block remains unmodified,
333 /// it takes constant time.
334 LLVM_ABI bool comesBefore(const Instruction *Other) const;
335
336 /// Get the first insertion point at which the result of this instruction
337 /// is defined. This is *not* the directly following instruction in a number
338 /// of cases, e.g. phi nodes or terminators that return values. This function
339 /// may return null if the insertion after the definition is not possible,
340 /// e.g. due to a catchswitch terminator.
341 LLVM_ABI std::optional<InstListType::iterator> getInsertionPointAfterDef();
342
343 //===--------------------------------------------------------------------===//
344 // Subclass classification.
345 //===--------------------------------------------------------------------===//
346
347 /// Returns a member of one of the enums like Instruction::Add.
348 unsigned getOpcode() const { return getValueID() - InstructionVal; }
349
350 const char *getOpcodeName() const { return getOpcodeName(getOpcode()); }
351 bool isTerminator() const { return isTerminator(getOpcode()); }
352 bool isUnaryOp() const { return isUnaryOp(getOpcode()); }
353 bool isBinaryOp() const { return isBinaryOp(getOpcode()); }
354 bool isIntDivRem() const { return isIntDivRem(getOpcode()); }
355 bool isFPDivRem() const { return isFPDivRem(getOpcode()); }
356 bool isShift() const { return isShift(getOpcode()); }
357 bool isCast() const { return isCast(getOpcode()); }
358 bool isFuncletPad() const { return isFuncletPad(getOpcode()); }
360
361 /// It checks if this instruction is the only user of at least one of
362 /// its operands.
363 LLVM_ABI bool isOnlyUserOfAnyOperand();
364
365 LLVM_ABI static const char *getOpcodeName(unsigned Opcode);
366
367 static inline bool isTerminator(unsigned Opcode) {
368 return Opcode >= TermOpsBegin && Opcode < TermOpsEnd;
369 }
370
371 static inline bool isUnaryOp(unsigned Opcode) {
372 return Opcode >= UnaryOpsBegin && Opcode < UnaryOpsEnd;
373 }
374 static inline bool isBinaryOp(unsigned Opcode) {
375 return Opcode >= BinaryOpsBegin && Opcode < BinaryOpsEnd;
376 }
377
378 static inline bool isIntDivRem(unsigned Opcode) {
379 return Opcode == UDiv || Opcode == SDiv || Opcode == URem || Opcode == SRem;
380 }
381
382 static inline bool isFPDivRem(unsigned Opcode) {
383 return Opcode == FDiv || Opcode == FRem;
384 }
385
386 /// Determine if the Opcode is one of the shift instructions.
387 static inline bool isShift(unsigned Opcode) {
388 return Opcode >= Shl && Opcode <= AShr;
389 }
390
391 /// Return true if this is a logical shift left or a logical shift right.
392 inline bool isLogicalShift() const {
393 return getOpcode() == Shl || getOpcode() == LShr;
394 }
395
396 /// Return true if this is an arithmetic shift right.
397 inline bool isArithmeticShift() const {
398 return getOpcode() == AShr;
399 }
400
401 /// Determine if the Opcode is and/or/xor.
402 static inline bool isBitwiseLogicOp(unsigned Opcode) {
403 return Opcode == And || Opcode == Or || Opcode == Xor;
404 }
405
406 /// Return true if this is and/or/xor.
407 inline bool isBitwiseLogicOp() const {
408 return isBitwiseLogicOp(getOpcode());
409 }
410
411 /// Determine if the Opcode is one of the CastInst instructions.
412 static inline bool isCast(unsigned Opcode) {
413 return Opcode >= CastOpsBegin && Opcode < CastOpsEnd;
414 }
415
416 /// Determine if the Opcode is one of the FuncletPadInst instructions.
417 static inline bool isFuncletPad(unsigned Opcode) {
418 return Opcode >= FuncletPadOpsBegin && Opcode < FuncletPadOpsEnd;
419 }
420
421 /// Returns true if the Opcode is a "special" terminator that does more than
422 /// branch to a successor (e.g. have a side effect or return a value).
423 static inline bool isSpecialTerminator(unsigned Opcode) {
424 switch (Opcode) {
425 case Instruction::CatchSwitch:
426 case Instruction::CatchRet:
427 case Instruction::CleanupRet:
428 case Instruction::Invoke:
429 case Instruction::Resume:
430 case Instruction::CallBr:
431 return true;
432 default:
433 return false;
434 }
435 }
436
437 //===--------------------------------------------------------------------===//
438 // Metadata manipulation.
439 //===--------------------------------------------------------------------===//
440
441 /// Return true if this instruction has any metadata attached to it.
442 bool hasMetadata() const { return DbgLoc || MetadataIndex != 0; }
443
444 // Return true if this instruction contains loop metadata other than
445 // a debug location
446 LLVM_ABI bool hasNonDebugLocLoopMetadata() const;
447
448 /// Return true if this instruction has metadata attached to it other than a
449 /// debug location.
450 bool hasMetadataOtherThanDebugLoc() const { return MetadataIndex != 0; }
451
452 /// Return true if this instruction has the given type of metadata attached.
453 bool hasMetadata(unsigned KindID) const {
454 return getMetadata(KindID) != nullptr;
455 }
456
457 /// Return true if this instruction has the given type of metadata attached.
458 bool hasMetadata(StringRef Kind) const {
459 return getMetadata(Kind) != nullptr;
460 }
461
462 /// Get the metadata of given kind attached to this Instruction.
463 /// If the metadata is not found then return null.
464 MDNode *getMetadata(unsigned KindID) const {
465 // Handle 'dbg' as a special case since it is not stored in the hash table.
466 if (KindID == LLVMContext::MD_dbg)
467 return DbgLoc.getAsMDNode();
469 : nullptr;
470 }
471
472 /// Get the metadata of given kind attached to this Instruction.
473 /// If the metadata is not found then return null.
475 if (!hasMetadata()) return nullptr;
476 return getMetadataImpl(Kind);
477 }
478
479 /// Get all metadata attached to this Instruction. The first element of each
480 /// pair returned is the KindID, the second element is the metadata value.
481 /// This list is returned sorted by the KindID.
482 void
483 getAllMetadata(SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const {
484 if (hasMetadata())
485 getAllMetadataImpl(MDs);
486 }
487
488 /// This does the same thing as getAllMetadata, except that it filters out the
489 /// debug location.
491 SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const {
493 }
494
495 /// Set the metadata of the specified kind to the specified node. This updates
496 /// or replaces metadata if already present, or removes it if Node is null.
497 LLVM_ABI void setMetadata(unsigned KindID, MDNode *Node);
498 LLVM_ABI void setMetadata(StringRef Kind, MDNode *Node);
499
500 /// Copy metadata from \p SrcInst to this instruction. \p WL, if not empty,
501 /// specifies the list of meta data that needs to be copied. If \p WL is
502 /// empty, all meta data will be copied.
503 LLVM_ABI void copyMetadata(const Instruction &SrcInst,
505
506 /// Copy debug, profile, and memprof metadata from \p SrcInst to this
507 /// instruction without copying alias-analysis or type-dependent metadata.
508 /// TODO: Include additional metadata in the future if appropriate.
509 LLVM_ABI void copyProfileAndDebugMetadata(const Instruction &SrcInst);
510
511 /// Erase all metadata that matches the predicate.
512 LLVM_ABI void eraseMetadataIf(function_ref<bool(unsigned, MDNode *)> Pred);
513
514 /// If the instruction has "branch_weights" MD_prof metadata and the MDNode
515 /// has three operands (including name string), swap the order of the
516 /// metadata.
517 LLVM_ABI void swapProfMetadata();
518
519 /// Drop all unknown metadata except for debug locations.
520 /// @{
521 /// Passes are required to drop metadata they don't understand. This is a
522 /// convenience method for passes to do so.
523 /// dropUBImplyingAttrsAndUnknownMetadata should be used instead of
524 /// this API if the Instruction being modified is a call.
525 LLVM_ABI void dropUnknownNonDebugMetadata(ArrayRef<unsigned> KnownIDs = {});
526 /// @}
527
528 /// Adds an !annotation metadata node with \p Annotation to this instruction.
529 /// If this instruction already has !annotation metadata, append \p Annotation
530 /// to the existing node.
531 LLVM_ABI void addAnnotationMetadata(StringRef Annotation);
532 /// Adds an !annotation metadata node with an array of \p Annotations
533 /// as a tuple to this instruction. If this instruction already has
534 /// !annotation metadata, append the tuple to
535 /// the existing node.
536 LLVM_ABI void addAnnotationMetadata(SmallVector<StringRef> Annotations);
537 /// Returns the AA metadata for this instruction.
538 LLVM_ABI AAMDNodes getAAMetadata() const;
539
540 /// Sets the AA metadata on this instruction from the AAMDNodes structure.
541 LLVM_ABI void setAAMetadata(const AAMDNodes &N);
542
543 /// Sets the nosanitize metadata on this instruction.
544 LLVM_ABI void setNoSanitizeMetadata();
545
546 /// Retrieve total raw weight values of a branch.
547 /// Returns true on success with profile total weights filled in.
548 /// Returns false if no metadata was found.
549 LLVM_ABI bool extractProfTotalWeight(uint64_t &TotalVal) const;
550
551 /// Set the debug location information for this instruction.
552 void setDebugLoc(DebugLoc Loc) { DbgLoc = std::move(Loc).getCopied(); }
553
554 /// Return the debug location for this node as a DebugLoc.
555 const DebugLoc &getDebugLoc() const { return DbgLoc; }
556
557 /// Fetch the debug location for this node, unless this is a debug intrinsic,
558 /// in which case fetch the debug location of the next non-debug node.
559 LLVM_DEPRECATED_WITH_FIXIT("Use getDebugLoc() instead", "getDebugLoc")
560 LLVM_ABI const DebugLoc &getStableDebugLoc() const;
561
562 /// Set or clear the nuw flag on this instruction, which must be an operator
563 /// which supports this flag. See LangRef.html for the meaning of this flag.
564 LLVM_ABI void setHasNoUnsignedWrap(bool b = true);
565
566 /// Set or clear the nsw flag on this instruction, which must be an operator
567 /// which supports this flag. See LangRef.html for the meaning of this flag.
568 LLVM_ABI void setHasNoSignedWrap(bool b = true);
569
570 /// Set or clear the exact flag on this instruction, which must be an operator
571 /// which supports this flag. See LangRef.html for the meaning of this flag.
572 LLVM_ABI void setIsExact(bool b = true);
573
574 /// Set or clear the nneg flag on this instruction, which must be a zext
575 /// instruction.
576 LLVM_ABI void setNonNeg(bool b = true);
577
578 /// Determine whether the no unsigned wrap flag is set.
580
581 /// Determine whether the no signed wrap flag is set.
583
584 /// Determine whether the the nneg flag is set.
585 LLVM_ABI bool hasNonNeg() const LLVM_READONLY;
586
587 /// Return true if this operator has flags which may cause this instruction
588 /// to evaluate to poison despite having non-poison inputs.
589 LLVM_ABI bool hasPoisonGeneratingFlags() const LLVM_READONLY;
590
591 /// Drops flags that may cause this instruction to evaluate to poison despite
592 /// having non-poison inputs.
593 LLVM_ABI void dropPoisonGeneratingFlags();
594
595 /// Return true if this instruction has poison-generating metadata.
596 LLVM_ABI bool hasPoisonGeneratingMetadata() const LLVM_READONLY;
597
598 /// Drops metadata that may generate poison.
599 LLVM_ABI void dropPoisonGeneratingMetadata();
600
601 /// Return true if this instruction has poison-generating attribute.
602 LLVM_ABI bool hasPoisonGeneratingAttributes() const LLVM_READONLY;
603
604 /// Drops attributes that may generate poison.
605 LLVM_ABI void dropPoisonGeneratingAttributes();
606
607 /// Return true if this instruction has poison-generating flags,
608 /// attributes or metadata.
613
614 /// Drops flags, attributes and metadata that may generate poison.
620
621 /// This function drops non-debug unknown metadata (through
622 /// dropUnknownNonDebugMetadata). For calls, it also drops parameter and
623 /// return attributes that can cause undefined behaviour. Both of these should
624 /// be done by passes which move instructions in IR.
625 LLVM_ABI void
626 dropUBImplyingAttrsAndUnknownMetadata(ArrayRef<unsigned> KnownIDs = {});
627
628 /// Drop any attributes or metadata that can cause immediate undefined
629 /// behavior. Retain other attributes/metadata on a best-effort basis, as well
630 /// as those passed in `Keep`. This should be used when speculating
631 /// instructions.
632 LLVM_ABI void dropUBImplyingAttrsAndMetadata(ArrayRef<unsigned> Keep = {});
633
634 /// Return true if this instruction has UB-implying attributes
635 /// that can cause immediate undefined behavior.
636 LLVM_ABI bool hasUBImplyingAttrs() const LLVM_READONLY;
637
638 /// Determine whether the exact flag is set.
639 LLVM_ABI bool isExact() const LLVM_READONLY;
640
641 /// Set or clear all fast-math-flags on this instruction, which must be an
642 /// operator which supports this flag. See LangRef.html for the meaning of
643 /// this flag.
644 LLVM_ABI void setFast(bool B);
645
646 /// Set or clear the reassociation flag on this instruction, which must be
647 /// an operator which supports this flag. See LangRef.html for the meaning of
648 /// this flag.
649 LLVM_ABI void setHasAllowReassoc(bool B);
650
651 /// Set or clear the no-nans flag on this instruction, which must be an
652 /// operator which supports this flag. See LangRef.html for the meaning of
653 /// this flag.
654 LLVM_ABI void setHasNoNaNs(bool B);
655
656 /// Set or clear the no-infs flag on this instruction, which must be an
657 /// operator which supports this flag. See LangRef.html for the meaning of
658 /// this flag.
659 LLVM_ABI void setHasNoInfs(bool B);
660
661 /// Set or clear the no-signed-zeros flag on this instruction, which must be
662 /// an operator which supports this flag. See LangRef.html for the meaning of
663 /// this flag.
664 LLVM_ABI void setHasNoSignedZeros(bool B);
665
666 /// Set or clear the allow-reciprocal flag on this instruction, which must be
667 /// an operator which supports this flag. See LangRef.html for the meaning of
668 /// this flag.
669 LLVM_ABI void setHasAllowReciprocal(bool B);
670
671 /// Set or clear the allow-contract flag on this instruction, which must be
672 /// an operator which supports this flag. See LangRef.html for the meaning of
673 /// this flag.
674 LLVM_ABI void setHasAllowContract(bool B);
675
676 /// Set or clear the approximate-math-functions flag on this instruction,
677 /// which must be an operator which supports this flag. See LangRef.html for
678 /// the meaning of this flag.
679 LLVM_ABI void setHasApproxFunc(bool B);
680
681 /// Convenience function for setting multiple fast-math flags on this
682 /// instruction, which must be an operator which supports these flags. See
683 /// LangRef.html for the meaning of these flags.
684 LLVM_ABI void setFastMathFlags(FastMathFlags FMF);
685
686 /// Convenience function for transferring all fast-math flag values to this
687 /// instruction, which must be an operator which supports these flags. See
688 /// LangRef.html for the meaning of these flags.
689 LLVM_ABI void copyFastMathFlags(FastMathFlags FMF);
690
691 /// Determine whether all fast-math-flags are set.
692 LLVM_ABI bool isFast() const LLVM_READONLY;
693
694 /// Determine whether the allow-reassociation flag is set.
695 LLVM_ABI bool hasAllowReassoc() const LLVM_READONLY;
696
697 /// Determine whether the no-NaNs flag is set.
698 LLVM_ABI bool hasNoNaNs() const LLVM_READONLY;
699
700 /// Determine whether the no-infs flag is set.
701 LLVM_ABI bool hasNoInfs() const LLVM_READONLY;
702
703 /// Determine whether the no-signed-zeros flag is set.
704 LLVM_ABI bool hasNoSignedZeros() const LLVM_READONLY;
705
706 /// Determine whether the allow-reciprocal flag is set.
707 LLVM_ABI bool hasAllowReciprocal() const LLVM_READONLY;
708
709 /// Determine whether the allow-contract flag is set.
710 LLVM_ABI bool hasAllowContract() const LLVM_READONLY;
711
712 /// Determine whether the approximate-math-functions flag is set.
713 LLVM_ABI bool hasApproxFunc() const LLVM_READONLY;
714
715 /// Convenience function for getting all the fast-math flags, which must be an
716 /// operator which supports these flags. See LangRef.html for the meaning of
717 /// these flags.
719
720 /// Convenience function for getting fast-math flags, or default-constructed
721 /// FastMathFlags when not a FPMathOperator.
722 LLVM_ABI FastMathFlags getFastMathFlagsOrNone() const LLVM_READONLY;
723
724 /// Copy I's fast-math flags
725 LLVM_ABI void copyFastMathFlags(const Instruction *I);
726
727 /// Convenience method to copy supported exact, fast-math, and (optionally)
728 /// wrapping flags from V to this instruction.
729 LLVM_ABI void copyIRFlags(const Value *V, bool IncludeWrapFlags = true);
730
731 /// Logical 'and' of any supported wrapping, exact, and fast-math flags of
732 /// V and this instruction.
733 LLVM_ABI void andIRFlags(const Value *V);
734
735 /// Merge 2 debug locations and apply it to the Instruction. If the
736 /// instruction is a CallIns, we need to traverse the inline chain to find
737 /// the common scope. This is not efficient for N-way merging as each time
738 /// you merge 2 iterations, you need to rebuild the hashmap to find the
739 /// common scope. However, we still choose this API because:
740 /// 1) Simplicity: it takes 2 locations instead of a list of locations.
741 /// 2) In worst case, it increases the complexity from O(N*I) to
742 /// O(2*N*I), where N is # of Instructions to merge, and I is the
743 /// maximum level of inline stack. So it is still linear.
744 /// 3) Merging of call instructions should be extremely rare in real
745 /// applications, thus the N-way merging should be in code path.
746 /// The DebugLoc attached to this instruction will be overwritten by the
747 /// merged DebugLoc.
748 LLVM_ABI void applyMergedLocation(DebugLoc LocA, DebugLoc LocB);
749
750 /// Updates the debug location given that the instruction has been hoisted
751 /// from a block to a predecessor of that block.
752 /// Note: it is undefined behavior to call this on an instruction not
753 /// currently inserted into a function.
754 LLVM_ABI void updateLocationAfterHoist();
755
756 /// Drop the instruction's debug location. This does not guarantee removal
757 /// of the !dbg source location attachment, as it must set a line 0 location
758 /// with scope information attached on call instructions. To guarantee
759 /// removal of the !dbg attachment, use the \ref setDebugLoc() API.
760 /// Note: it is undefined behavior to call this on an instruction not
761 /// currently inserted into a function.
762 LLVM_ABI void dropLocation();
763
764 /// Merge the DIAssignID metadata from this instruction and those attached to
765 /// instructions in \p SourceInstructions. This process performs a RAUW on
766 /// the MetadataAsValue uses of the merged DIAssignID nodes. Not every
767 /// instruction in \p SourceInstructions needs to have DIAssignID
768 /// metadata. If none of them do then nothing happens. If this instruction
769 /// does not have a DIAssignID attachment but at least one in \p
770 /// SourceInstructions does then the merged one will be attached to
771 /// it. However, instructions without attachments in \p SourceInstructions
772 /// are not modified.
773 LLVM_ABI void
774 mergeDIAssignID(ArrayRef<const Instruction *> SourceInstructions);
775
776private:
777 // These are all implemented in Metadata.cpp.
778 LLVM_ABI MDNode *getMetadataImpl(StringRef Kind) const;
779 LLVM_ABI void
780 getAllMetadataImpl(SmallVectorImpl<std::pair<unsigned, MDNode *>> &) const;
781
782 /// Update the LLVMContext ID-to-Instruction(s) mapping. If \p ID is nullptr
783 /// then clear the mapping for this instruction.
784 void updateDIAssignIDMapping(DIAssignID *ID);
785
786public:
787 //===--------------------------------------------------------------------===//
788 // Predicates and helper methods.
789 //===--------------------------------------------------------------------===//
790
791 /// Return true if the instruction is associative:
792 ///
793 /// Associative operators satisfy: x op (y op z) === (x op y) op z
794 ///
795 /// In LLVM, the Add, Mul, And, Or, and Xor operators are associative.
796 ///
798 static bool isAssociative(unsigned Opcode) {
799 return Opcode == And || Opcode == Or || Opcode == Xor ||
800 Opcode == Add || Opcode == Mul;
801 }
802
803 /// Return true if the instruction is commutative:
804 ///
805 /// Commutative operators satisfy: (x op y) === (y op x)
806 ///
807 /// In LLVM, these are the commutative operators, plus SetEQ and SetNE, when
808 /// applied to any type.
809 ///
810 LLVM_ABI bool isCommutative() const LLVM_READONLY;
811
812 /// Checks if the operand is commutative. In commutative operations, not all
813 /// operands might commutable, e.g. for fmuladd only 2 first operands are
814 /// commutable.
815 LLVM_ABI bool isCommutableOperand(unsigned Op) const LLVM_READONLY;
816
817 static bool isCommutative(unsigned Opcode) {
818 switch (Opcode) {
819 case Add: case FAdd:
820 case Mul: case FMul:
821 case And: case Or: case Xor:
822 return true;
823 default:
824 return false;
825 }
826 }
827
828 /// Return true if the instruction is idempotent:
829 ///
830 /// Idempotent operators satisfy: x op x === x
831 ///
832 /// In LLVM, the And and Or operators are idempotent.
833 ///
834 bool isIdempotent() const { return isIdempotent(getOpcode()); }
835 static bool isIdempotent(unsigned Opcode) {
836 return Opcode == And || Opcode == Or;
837 }
838
839 /// Return true if the instruction is nilpotent:
840 ///
841 /// Nilpotent operators satisfy: x op x === Id,
842 ///
843 /// where Id is the identity for the operator, i.e. a constant such that
844 /// x op Id === x and Id op x === x for all x.
845 ///
846 /// In LLVM, the Xor operator is nilpotent.
847 ///
848 bool isNilpotent() const { return isNilpotent(getOpcode()); }
849 static bool isNilpotent(unsigned Opcode) {
850 return Opcode == Xor;
851 }
852
853 /// Return memory effects of the instruction. argmem here refers to the
854 /// operands of the instruction.
855 LLVM_ABI MemoryEffects getMemoryEffects() const LLVM_READONLY;
856
857 /// Return true if this instruction may modify memory.
858 LLVM_ABI bool mayWriteToMemory() const LLVM_READONLY;
859
860 /// Return true if this instruction may read memory.
861 LLVM_ABI bool mayReadFromMemory() const LLVM_READONLY;
862
863 /// Return true if this instruction may read or write memory.
864 bool mayReadOrWriteMemory() const {
866 }
867
868 /// Return true if this instruction has an AtomicOrdering of unordered or
869 /// higher.
870 LLVM_ABI bool isAtomic() const LLVM_READONLY;
871
872 /// Return true if this atomic instruction loads from memory.
873 LLVM_ABI bool hasAtomicLoad() const LLVM_READONLY;
874
875 /// Return true if this atomic instruction stores to memory.
876 LLVM_ABI bool hasAtomicStore() const LLVM_READONLY;
877
878 /// Return true if this instruction has a volatile memory access.
879 LLVM_ABI bool isVolatile() const LLVM_READONLY;
880
881 /// Return true if this instruction may synchronize, in the sense that it
882 /// may introduce a synchronizes-with edge.
883 LLVM_ABI bool maySynchronize() const LLVM_READONLY;
884
885 /// Return the type this instruction accesses in memory, if any.
887
888 /// Return true if this instruction may throw an exception.
889 ///
890 /// If IncludePhaseOneUnwind is set, this will also include cases where
891 /// phase one unwinding may unwind past this frame due to skipping of
892 /// cleanup landingpads.
893 LLVM_ABI bool
894 mayThrow(bool IncludePhaseOneUnwind = false) const LLVM_READONLY;
895
896 /// Return true if this instruction behaves like a memory fence: it can load
897 /// or store to memory location without being given a memory location.
898 bool isFenceLike() const {
899 switch (getOpcode()) {
900 default:
901 return false;
902 // This list should be kept in sync with the list in mayWriteToMemory for
903 // all opcodes which don't have a memory location.
904 case Instruction::Fence:
905 case Instruction::CatchPad:
906 case Instruction::CatchRet:
907 case Instruction::Call:
908 case Instruction::Invoke:
909 return true;
910 }
911 }
912
913 /// Return true if the instruction may have side effects.
914 ///
915 /// Side effects are:
916 /// * Writing to memory.
917 /// * Unwinding.
918 /// * Not returning (e.g. an infinite loop).
919 ///
920 /// Note that this does not consider malloc and alloca to have side
921 /// effects because the newly allocated memory is completely invisible to
922 /// instructions which don't use the returned value. For cases where this
923 /// matters, isSafeToSpeculativelyExecute may be more appropriate.
925
926 /// Return true if the instruction can be removed if the result is unused.
927 ///
928 /// When constant folding some instructions cannot be removed even if their
929 /// results are unused. Specifically terminator instructions and calls that
930 /// may have side effects cannot be removed without semantically changing the
931 /// generated program.
932 LLVM_ABI bool isSafeToRemove() const LLVM_READONLY;
933
934 /// Return true if the instruction will return (unwinding is considered as
935 /// a form of returning control flow here).
936 LLVM_ABI bool willReturn() const LLVM_READONLY;
937
938 /// Return true if the instruction is a variety of EH-block.
939 bool isEHPad() const {
940 switch (getOpcode()) {
941 case Instruction::CatchSwitch:
942 case Instruction::CatchPad:
943 case Instruction::CleanupPad:
944 case Instruction::LandingPad:
945 return true;
946 default:
947 return false;
948 }
949 }
950
951 /// Return true if the instruction is a llvm.lifetime.start or
952 /// llvm.lifetime.end marker.
953 LLVM_ABI bool isLifetimeStartOrEnd() const LLVM_READONLY;
954
955 /// Return true if the instruction is a DbgInfoIntrinsic or PseudoProbeInst.
956 LLVM_ABI bool isDebugOrPseudoInst() const LLVM_READONLY;
957
958 /// Create a copy of 'this' instruction that is identical in all ways except
959 /// the following:
960 /// * The instruction has no parent
961 /// * The instruction has no name
962 ///
963 LLVM_ABI Instruction *clone() const;
964
965 /// Return true if the specified instruction is exactly identical to the
966 /// current one. This means that all operands match and any extra information
967 /// (e.g. load is volatile) agree.
968 LLVM_ABI bool isIdenticalTo(const Instruction *I) const LLVM_READONLY;
969
970 /// This is like isIdenticalTo, except that it ignores the
971 /// SubclassOptionalData flags, which may specify conditions under which the
972 /// instruction's result is undefined.
973 LLVM_ABI bool
974 isIdenticalToWhenDefined(const Instruction *I,
975 bool IntersectAttrs = false) const LLVM_READONLY;
976
977 /// When checking for operation equivalence (using isSameOperationAs) it is
978 /// sometimes useful to ignore certain attributes.
980 /// Check for equivalence ignoring load/store alignment.
982 /// Check for equivalence treating a type and a vector of that type
983 /// as equivalent.
985 /// Check for equivalence with intersected callbase attrs.
987 /// Check for equivalence by comparing call targets.
989 };
990
991 /// This function determines if the specified instruction executes the same
992 /// operation as the current one. This means that the opcodes, type, operand
993 /// types and any other factors affecting the operation must be the same. This
994 /// is similar to isIdenticalTo except the operands themselves don't have to
995 /// be identical.
996 /// @returns true if the specified instruction is the same operation as
997 /// the current one.
998 /// Determine if one instruction is the same operation as another.
999 LLVM_ABI bool isSameOperationAs(const Instruction *I,
1000 unsigned flags = 0) const LLVM_READONLY;
1001
1002 /// This function determines if the speficied instruction has the same
1003 /// "special" characteristics as the current one. This means that opcode
1004 /// specific details are the same. As a common example, if we are comparing
1005 /// loads, then hasSameSpecialState would compare the alignments (among
1006 /// other things).
1007 /// @returns true if the specific instruction has the same opcde specific
1008 /// characteristics as the current one. Determine if one instruction has the
1009 /// same state as another.
1010 LLVM_ABI bool
1011 hasSameSpecialState(const Instruction *I2, bool IgnoreAlignment = false,
1012 bool IntersectAttrs = false) const LLVM_READONLY;
1013
1014 /// Return true if there are any uses of this instruction in blocks other than
1015 /// the specified block. Note that PHI nodes are considered to evaluate their
1016 /// operands in the corresponding predecessor block.
1017 LLVM_ABI bool isUsedOutsideOfBlock(const BasicBlock *BB) const LLVM_READONLY;
1018
1019 /// Return the number of successors that this instruction has. The instruction
1020 /// must be a terminator.
1021 LLVM_ABI unsigned getNumSuccessors() const LLVM_READONLY;
1022
1023 /// Return the specified successor. This instruction must be a terminator.
1024 LLVM_ABI BasicBlock *getSuccessor(unsigned Idx) const LLVM_READONLY;
1025
1026 /// Update the specified successor to point at the provided block. This
1027 /// instruction must be a terminator.
1028 LLVM_ABI void setSuccessor(unsigned Idx, BasicBlock *BB);
1029
1032 auto Ops = static_cast<const Instruction *>(this)->successors();
1033 Use *Begin = const_cast<Use *>(Ops.begin().getUse());
1034 Use *End = const_cast<Use *>(Ops.end().getUse());
1035 return make_range(succ_iterator(Begin), succ_iterator(End));
1036 }
1037
1038 /// Replace specified successor OldBB to point at the provided block.
1039 /// This instruction must be a terminator.
1040 LLVM_ABI void replaceSuccessorWith(BasicBlock *OldBB, BasicBlock *NewBB);
1041
1042 /// Methods for support type inquiry through isa, cast, and dyn_cast:
1043 static bool classof(const Value *V) {
1044 return V->getValueID() >= Value::InstructionVal;
1045 }
1046
1047 //----------------------------------------------------------------------
1048 // Exported enumerations.
1049 //
1050 enum TermOps { // These terminate basic blocks
1051#define FIRST_TERM_INST(N) TermOpsBegin = N,
1052#define HANDLE_TERM_INST(N, OPC, CLASS) OPC = N,
1053#define LAST_TERM_INST(N) TermOpsEnd = N+1
1054#include "llvm/IR/Instruction.def"
1055 };
1056
1058#define FIRST_UNARY_INST(N) UnaryOpsBegin = N,
1059#define HANDLE_UNARY_INST(N, OPC, CLASS) OPC = N,
1060#define LAST_UNARY_INST(N) UnaryOpsEnd = N+1
1061#include "llvm/IR/Instruction.def"
1062 };
1063
1065#define FIRST_BINARY_INST(N) BinaryOpsBegin = N,
1066#define HANDLE_BINARY_INST(N, OPC, CLASS) OPC = N,
1067#define LAST_BINARY_INST(N) BinaryOpsEnd = N+1
1068#include "llvm/IR/Instruction.def"
1069 };
1070
1072#define FIRST_MEMORY_INST(N) MemoryOpsBegin = N,
1073#define HANDLE_MEMORY_INST(N, OPC, CLASS) OPC = N,
1074#define LAST_MEMORY_INST(N) MemoryOpsEnd = N+1
1075#include "llvm/IR/Instruction.def"
1076 };
1077
1078 enum CastOps {
1079#define FIRST_CAST_INST(N) CastOpsBegin = N,
1080#define HANDLE_CAST_INST(N, OPC, CLASS) OPC = N,
1081#define LAST_CAST_INST(N) CastOpsEnd = N+1
1082#include "llvm/IR/Instruction.def"
1083 };
1084
1086#define FIRST_FUNCLETPAD_INST(N) FuncletPadOpsBegin = N,
1087#define HANDLE_FUNCLETPAD_INST(N, OPC, CLASS) OPC = N,
1088#define LAST_FUNCLETPAD_INST(N) FuncletPadOpsEnd = N+1
1089#include "llvm/IR/Instruction.def"
1090 };
1091
1093#define FIRST_OTHER_INST(N) OtherOpsBegin = N,
1094#define HANDLE_OTHER_INST(N, OPC, CLASS) OPC = N,
1095#define LAST_OTHER_INST(N) OtherOpsEnd = N+1
1096#include "llvm/IR/Instruction.def"
1097 };
1098
1099private:
1100 friend class SymbolTableListTraits<Instruction, ilist_iterator_bits<true>,
1101 ilist_parent<BasicBlock>>;
1102 friend class BasicBlock; // For renumbering and DebugMarker.
1103 friend class DbgMarker; // For DebugMarker.
1104
1105 // Shadow Value::setValueSubclassData with a private forwarding method so that
1106 // subclasses cannot accidentally use it.
1107 void setValueSubclassData(unsigned short D) {
1109 }
1110
1111 unsigned short getSubclassDataFromValue() const {
1113 }
1114
1115protected:
1116 // Instruction subclasses can stick up to 16 bits of stuff into the
1117 // SubclassData field of instruction with these members.
1118
1119 template <typename BitfieldElement>
1120 typename BitfieldElement::Type getSubclassData() const {
1121 return Bitfield::get<BitfieldElement>(getSubclassDataFromValue());
1122 }
1123
1124 template <typename BitfieldElement>
1125 void setSubclassData(typename BitfieldElement::Type Value) {
1126 auto Storage = getSubclassDataFromValue();
1128 setValueSubclassData(Storage);
1129 }
1130
1131 LLVM_ABI Instruction(Type *Ty, unsigned iType, AllocInfo AllocInfo,
1132 InsertPosition InsertBefore = nullptr);
1133
1134private:
1135 /// Create a copy of this instruction.
1136 Instruction *cloneImpl() const;
1137};
1138
1140 V->deleteValue();
1141}
1142
1143} // end namespace llvm
1144
1145#endif // LLVM_IR_INSTRUCTION_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
aarch64 promote const
unsigned uint64_t
Atomic ordering constants.
basic Basic Alias true
This file implements methods to test, set and extract typed bits from packed unsigned integers.
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
#define LLVM_ABI
Definition Compiler.h:215
#define LLVM_DEPRECATED_WITH_FIXIT(MSG, FIX)
Definition Compiler.h:263
#define LLVM_READONLY
Definition Compiler.h:338
static StringRef getOpcodeName(uint8_t Opcode, uint8_t OpcodeBase)
static bool hasNoSignedWrap(BinaryOperator &I)
static bool hasNoUnsignedWrap(BinaryOperator &I)
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
static MemAccessTy getAccessType(const TargetTransformInfo &TTI, Instruction *Inst, Value *OperandVal)
Return the type of the memory being accessed.
#define I(x, y, z)
Definition MD5.cpp:57
static bool mayHaveSideEffects(MachineInstr &MI)
static unsigned getFastMathFlags(const MachineInstr &I, const SPIRVSubtarget &ST)
static Function * getFunction(FunctionType *Ty, const Twine &Name, Module *M)
static bool isAssociative(const COFFSection &Section)
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
LLVM Basic Block Representation.
Definition BasicBlock.h:62
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Per-instruction record of debug-info.
Base class for non-instruction debug metadata records that have positions within IR.
A debug info location.
Definition DebugLoc.h:126
Convenience struct for specifying and reasoning about fast-math flags.
Definition FMF.h:23
bool isValid() const
Definition Instruction.h:59
InsertPosition(InstListType::iterator InsertAt)
Definition Instruction.h:57
BasicBlock * getBasicBlock()
Definition Instruction.h:60
InsertPosition(std::nullptr_t)
Definition Instruction.h:55
BitfieldElement::Type getSubclassData() const
typename Bitfield::Element< unsigned, Offset, 6, Value::MaxAlignmentExponent > AlignmentBitfieldElementT
bool hasMetadata(unsigned KindID) const
Return true if this instruction has the given type of metadata attached.
static bool isBinaryOp(unsigned Opcode)
bool isArithmeticShift() const
Return true if this is an arithmetic shift right.
typename Bitfield::Element< AtomicOrdering, Offset, 3, AtomicOrdering::LAST > AtomicOrderingBitfieldElementT
LLVM_ABI bool hasPoisonGeneratingAttributes() const LLVM_READONLY
Return true if this instruction has poison-generating attribute.
iterator_range< user_iterator > materialized_users()
bool hasMetadata(StringRef Kind) const
Return true if this instruction has the given type of metadata attached.
static bool isFPDivRem(unsigned Opcode)
bool isCast() const
static bool isBitwiseLogicOp(unsigned Opcode)
Determine if the Opcode is and/or/xor.
bool mayReadOrWriteMemory() const
Return true if this instruction may read or write memory.
static bool isShift(unsigned Opcode)
Determine if the Opcode is one of the shift instructions.
Function * getFunction()
LLVM_ABI bool mayWriteToMemory() const LLVM_READONLY
Return true if this instruction may modify memory.
iterator_range< const_user_iterator > users() const
static bool isSpecialTerminator(unsigned Opcode)
Returns true if the Opcode is a "special" terminator that does more than branch to a successor (e....
iterator_range< simple_ilist< DbgRecord >::iterator > getDbgRecordRange() const
Return a range over the DbgRecords attached to this instruction.
static bool isCast(unsigned Opcode)
Determine if the Opcode is one of the CastInst instructions.
const_user_iterator user_end() const
const DebugLoc & getDebugLoc() const
Return the debug location for this node as a DebugLoc.
LLVM_ABI bool isAssociative() const LLVM_READONLY
Return true if the instruction is associative:
Instruction & operator=(const Instruction &)=delete
DbgMarker * getDbgMarker() const
user_iterator_impl< Instruction > user_iterator
Specialize the methods defined in Value, as we know that an instruction can only be used by other ins...
bool hasMetadataOtherThanDebugLoc() const
Return true if this instruction has metadata attached to it other than a debug location.
LLVM_ABI bool isCommutative() const LLVM_READONLY
Return true if the instruction is commutative:
typename Bitfield::Element< bool, Offset, 1 > BoolBitfieldElementT
bool hasMetadata() const
Return true if this instruction has any metadata attached to it.
Module * getModule()
bool isBinaryOp() const
bool isEHPad() const
Return true if the instruction is a variety of EH-block.
static bool classof(const Value *V)
Methods for support type inquiry through isa, cast, and dyn_cast:
Instruction * user_back()
static bool isIdempotent(unsigned Opcode)
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
bool isFuncletPad() const
user_iterator materialized_user_begin()
bool isTerminator() const
bool hasPoisonGeneratingAnnotations() const
Return true if this instruction has poison-generating flags, attributes or metadata.
LLVM_ABI bool hasPoisonGeneratingFlags() const LLVM_READONLY
Return true if this operator has flags which may cause this instruction to evaluate to poison despite...
bool isNilpotent() const
Return true if the instruction is nilpotent:
LLVM_ABI bool mayReadFromMemory() const LLVM_READONLY
Return true if this instruction may read memory.
iterator_range< user_iterator > users()
LLVM_ABI iterator_range< const_succ_iterator > successors() const LLVM_READONLY
void dropPoisonGeneratingAnnotations()
Drops flags, attributes and metadata that may generate poison.
const char * getOpcodeName() const
const Instruction * user_back() const
bool isFPDivRem() const
user_iterator user_begin()
OperationEquivalenceFlags
When checking for operation equivalence (using isSameOperationAs) it is sometimes useful to ignore ce...
@ CompareIgnoringAlignment
Check for equivalence ignoring load/store alignment.
@ CompareUsingScalarTypes
Check for equivalence treating a type and a vector of that type as equivalent.
@ CompareCallTargets
Check for equivalence by comparing call targets.
@ CompareUsingIntersectedAttrs
Check for equivalence with intersected callbase attrs.
MDNode * getMetadata(StringRef Kind) const
Get the metadata of given kind attached to this Instruction.
void getAllMetadata(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Get all metadata attached to this Instruction.
bool isLogicalShift() const
Return true if this is a logical shift left or a logical shift right.
void getAllMetadataOtherThanDebugLoc(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
This does the same thing as getAllMetadata, except that it filters out the debug location.
static bool isFuncletPad(unsigned Opcode)
Determine if the Opcode is one of the FuncletPadInst instructions.
static bool isUnaryOp(unsigned Opcode)
unsigned getOpcode() const
Returns a member of one of the enums like Instruction::Add.
user_iterator user_end()
static bool isNilpotent(unsigned Opcode)
user_iterator_impl< const Instruction > const_user_iterator
LLVM_ABI void dropPoisonGeneratingMetadata()
Drops metadata that may generate poison.
bool isBitwiseLogicOp() const
Return true if this is and/or/xor.
bool isShift() const
static bool isTerminator(unsigned Opcode)
bool isFenceLike() const
Return true if this instruction behaves like a memory fence: it can load or store to memory location ...
LLVM_ABI void dropPoisonGeneratingFlags()
Drops flags that may cause this instruction to evaluate to poison despite having non-poison inputs.
const_user_iterator user_begin() const
LLVM_ABI void dropPoisonGeneratingAttributes()
Drops attributes that may generate poison.
friend class DbgMarker
iterator_range< const_user_iterator > materialized_users() const
Bitfield::Element< uint16_t, 0, 16 > OpaqueField
LLVM_ABI bool hasPoisonGeneratingMetadata() const LLVM_READONLY
Return true if this instruction has poison-generating metadata.
bool isUnaryOp() const
Instruction(const Instruction &)=delete
void setDebugLoc(DebugLoc Loc)
Set the debug location information for this instruction.
const_user_iterator materialized_user_begin() const
static bool isIntDivRem(unsigned Opcode)
bool isIdempotent() const
Return true if the instruction is idempotent:
friend class Value
friend class BasicBlock
Various leaf nodes.
SymbolTableList< Instruction, ilist_iterator_bits< true >, ilist_parent< BasicBlock > > InstListType
Definition Instruction.h:68
bool isIntDivRem() const
void setSubclassData(typename BitfieldElement::Type Value)
bool isSpecialTerminator() const
Metadata node.
Definition Metadata.h:1081
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
List that automatically updates parent links and symbol tables.
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:46
A Use represents the edge between a Value definition and its users.
Definition Use.h:35
Use * op_iterator
Definition User.h:254
User(Type *ty, unsigned vty, AllocInfo AllocInfo)
Definition User.h:119
const Use * const_op_iterator
Definition User.h:255
unsigned short getSubclassDataFromValue() const
Definition Value.h:860
Use * UseList
Definition Value.h:121
void assertModuleIsMaterialized() const
Definition Value.h:339
LLVM_ABI void getAllMetadata(SmallVectorImpl< std::pair< unsigned, MDNode * > > &MDs) const
Appends all metadata attached to this value to MDs, sorting by KindID.
unsigned getValueID() const
Return an ID for the concrete type of this object.
Definition Value.h:545
bool hasUseList() const
Check if this Value has a use-list.
Definition Value.h:346
LLVM_ABI MDNode * getMetadataImpl(unsigned KindID) const LLVM_READONLY
Get metadata for the given kind, if any.
void setValueSubclassData(unsigned short D)
Definition Value.h:861
static constexpr unsigned MaxAlignmentExponent
The maximum alignment for instructions.
Definition Value.h:800
An efficient, type-erasing, non-owning reference to a callable.
typename base_list_type::iterator iterator
Definition ilist.h:121
A range adaptor for a pair of iterators.
ilist_select_iterator_type< OptionsT, false, false > iterator
This file defines the ilist_node class template, which is a convenient base class for creating classe...
@ BasicBlock
Various leaf nodes.
Definition ISDOpcodes.h:83
friend class Instruction
Iterator for Instructions in a `BasicBlock.
Definition BasicBlock.h:73
This is an optimization pass for GlobalISel generic memory operations.
@ Offset
Definition DWP.cpp:577
auto successors(const MachineBasicBlock *BB)
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
MemoryEffectsBase< IRMemLocation > MemoryEffects
Summary of how a function affects memory in the program.
Definition ModRef.h:356
iterator_range< simple_ilist< DbgRecord >::iterator > getDbgRecordRange(DbgMarker *DebugMarker)
Inline helper to return a range of DbgRecords attached to a marker.
AtomicOrdering
Atomic ordering for LLVM's memory model.
@ Other
Any other memory.
Definition ModRef.h:68
@ Mul
Product of integers.
@ Xor
Bitwise or logical XOR of integers.
@ FMul
Product of floats.
@ Add
Sum of integers.
@ FAdd
Sum of floats.
DWARFExpression::Operation Op
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
Definition Casting.h:559
Instruction::const_succ_iterator const_succ_iterator
Definition CFG.h:127
#define N
A collection of metadata nodes that might be associated with a memory access used by the alias-analys...
Definition Metadata.h:774
Summary of memprof metadata on allocations.
Describes an element of a Bitfield.
Definition Bitfields.h:176
static Bitfield::Type get(StorageType Packed)
Unpacks the field from the Packed value.
Definition Bitfields.h:207
static void set(StorageType &Packed, typename Bitfield::Type Value)
Sets the typed value in the provided Packed value.
Definition Bitfields.h:223
const BasicBlock * operator->() const
Definition Instruction.h:98
const BasicBlock * operator*() const
Definition Instruction.h:97
const_succ_iterator(const_op_iterator I)
Definition Instruction.h:94
const_op_iterator getUse() const
Iterator type that casts an operand to a basic block.
Definition Instruction.h:77
BasicBlock * operator->() const
Definition Instruction.h:82
BasicBlock * operator*() const
Definition Instruction.h:81
Matching combinators.
Use delete by default for iplist and ilist.
Definition ilist.h:41
static void deleteNode(NodeTy *V)
Definition ilist.h:42
Option to add a pointer to this list's owner in every node.