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