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