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