LLVM: lib/IR/IntrinsicInst.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

32#include

33

34using namespace llvm;

35

37 switch (IID) {

38 case Intrinsic::objc_autorelease:

39 case Intrinsic::objc_autoreleasePoolPop:

40 case Intrinsic::objc_autoreleasePoolPush:

41 case Intrinsic::objc_autoreleaseReturnValue:

42 case Intrinsic::objc_copyWeak:

43 case Intrinsic::objc_destroyWeak:

44 case Intrinsic::objc_initWeak:

45 case Intrinsic::objc_loadWeak:

46 case Intrinsic::objc_loadWeakRetained:

47 case Intrinsic::objc_moveWeak:

48 case Intrinsic::objc_release:

49 case Intrinsic::objc_retain:

50 case Intrinsic::objc_retainAutorelease:

51 case Intrinsic::objc_retainAutoreleaseReturnValue:

52 case Intrinsic::objc_retainAutoreleasedReturnValue:

53 case Intrinsic::objc_retainBlock:

54 case Intrinsic::objc_storeStrong:

55 case Intrinsic::objc_storeWeak:

56 case Intrinsic::objc_unsafeClaimAutoreleasedReturnValue:

57 case Intrinsic::objc_retainedObject:

58 case Intrinsic::objc_unretainedObject:

59 case Intrinsic::objc_unretainedPointer:

60 case Intrinsic::objc_retain_autorelease:

61 case Intrinsic::objc_sync_enter:

62 case Intrinsic::objc_sync_exit:

63 return true;

64 default:

65 return false;

66 }

67}

68

69

70

71

72

73

76 assert(MD && "First operand of DbgVariableIntrinsic should be non-null.");

77

80 }

81

85

88}

89

94

98

101 assert(MD && "First operand of DbgVariableIntrinsic should be non-null.");

103 return AL->getArgs()[OpIdx]->getValue();

105 return nullptr;

108 "Attempted to get location operand from DbgVariableIntrinsic with none.");

110 assert(OpIdx == 0 && "Operand Index must be 0 for a debug intrinsic with a "

111 "single location operand.");

112 return V->getValue();

113}

114

120

123 bool AllowEmpty) {

124

125

126 auto ReplaceDbgAssignAddress = [this, OldValue, NewValue]() -> bool {

128 if (!DAI || OldValue != DAI->getAddress())

129 return false;

130 DAI->setAddress(NewValue);

131 return true;

132 };

133 bool DbgAssignAddrReplaced = ReplaceDbgAssignAddress();

134 (void)DbgAssignAddrReplaced;

135

136 assert(NewValue && "Values must be non-null");

138 auto OldIt = find(Locations, OldValue);

139 if (OldIt == Locations.end()) {

140 if (AllowEmpty || DbgAssignAddrReplaced)

141 return;

142 assert(DbgAssignAddrReplaced &&

143 "OldValue must be dbg.assign addr if unused in DIArgList");

144 return;

145 }

146

147 assert(OldIt != Locations.end() && "OldValue must be a current location");

150 ? NewValue

154 }

157 for (auto *VMD : Locations)

161}

163 Value *NewValue) {

167 ? NewValue

171 }

179}

180

184 NewValues.size()) &&

185 "NewExpr for debug variable intrinsic does not reference every "

186 "location operand.");

187 assert(is\_contained(NewValues, nullptr) && "New values must be non-null");

192 for (auto *VMD : NewValues)

196}

197

199 if (auto Fragment = getExpression()->getFragmentInfo())

200 return Fragment->SizeInBits;

202}

203

207 return V->getValue();

208

209

211 return nullptr;

212}

213

217

222

228

233

238

244

250

255

264

270

275

277 unsigned NumOperands = arg_size();

280 if (MAV)

281 MD = MAV->getMetadata();

283 return std::nullopt;

285}

286

287std::optionalfp::ExceptionBehavior

289 unsigned NumOperands = arg_size();

292 if (MAV)

293 MD = MAV->getMetadata();

295 return std::nullopt;

297}

298

301 if (Except) {

303 return false;

304 }

305

306 std::optional Rounding = getRoundingMode();

307 if (Rounding) {

309 return false;

310 }

311

312 return true;

313}

314

336

340

342

343 unsigned NumArgs = arg_size() - 1;

344

345

347 NumArgs -= 1;

348

349

351 NumArgs -= 1;

352

353 return NumArgs;

354}

355

359

363 auto ElemCount = VT->getElementCount();

364 return ElemCount;

365 };

366

368 if (!VPMask) {

371 "Unexpected VP intrinsic without mask operand");

372 return GetVectorLengthOfType(getType());

373 }

374 return GetVectorLengthOfType(VPMask->getType());

375}

376

382

387

393

398

399std::optional

401 switch (IntrinsicID) {

402 default:

403 return std::nullopt;

404

405#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \

406 case Intrinsic::VPID: \

407 return MASKPOS;

408#include "llvm/IR/VPIntrinsics.def"

409 }

410}

411

412std::optional

414 switch (IntrinsicID) {

415 default:

416 return std::nullopt;

417

418#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \

419 case Intrinsic::VPID: \

420 return VLENPOS;

421#include "llvm/IR/VPIntrinsics.def"

422 }

423}

424

425

426

428 std::optional PtrParamOpt =

430 assert(PtrParamOpt && "no pointer argument!");

432}

433

434

440

441std::optional

443 switch (VPID) {

444 default:

445 return std::nullopt;

446 case Intrinsic::vp_store:

447 case Intrinsic::vp_scatter:

448 case Intrinsic::experimental_vp_strided_store:

449 return 1;

450 case Intrinsic::vp_load:

451 case Intrinsic::vp_load_ff:

452 case Intrinsic::vp_gather:

453 case Intrinsic::experimental_vp_strided_load:

454 return 0;

455 }

456}

457

458

461 if (!DataParamOpt)

462 return nullptr;

464}

465

467 switch (VPID) {

468 default:

469 return std::nullopt;

470 case Intrinsic::vp_store:

471 case Intrinsic::vp_scatter:

472 case Intrinsic::experimental_vp_strided_store:

473 return 0;

474 }

475}

476

478 switch (ID) {

479 default:

480 break;

481#define BEGIN_REGISTER_VP_INTRINSIC(VPID, MASKPOS, VLENPOS) \

482 case Intrinsic::VPID: \

483 return true;

484#include "llvm/IR/VPIntrinsics.def"

485 }

486 return false;

487}

488

490 return ::isVPIntrinsic(ID);

491}

492

493

494constexpr static std::optional

496 switch (ID) {

497 default:

498 break;

499#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:

500#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) return Instruction::OPC;

501#define END_REGISTER_VP_INTRINSIC(VPID) break;

502#include "llvm/IR/VPIntrinsics.def"

503 }

504 return std::nullopt;

505}

506

507std::optional

509 return ::getFunctionalOpcodeForVP(ID);

510}

511

512

513constexpr static std::optionalIntrinsic::ID

515 switch (ID) {

516 default:

517 break;

518#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:

519#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) return Intrinsic::INTRIN;

520#define END_REGISTER_VP_INTRINSIC(VPID) break;

521#include "llvm/IR/VPIntrinsics.def"

522 }

523 return std::nullopt;

524}

525

526std::optionalIntrinsic::ID

528 return ::getFunctionalIntrinsicIDForVP(ID);

529}

530

532 switch (ID) {

533 default:

534 break;

535#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:

536#define VP_PROPERTY_NO_FUNCTIONAL return true;

537#define END_REGISTER_VP_INTRINSIC(VPID) break;

538#include "llvm/IR/VPIntrinsics.def"

539 }

540 return false;

541}

542

543

544

545#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) \

546 static_assert(doesVPHaveNoFunctionalEquivalent(Intrinsic::VPID) || \

547 getFunctionalOpcodeForVP(Intrinsic::VPID) || \

548 getFunctionalIntrinsicIDForVP(Intrinsic::VPID));

549#include "llvm/IR/VPIntrinsics.def"

550

551

552std::optionalIntrinsic::ID

554 switch (ID) {

555 default:

556 break;

557#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:

558#define VP_PROPERTY_CONSTRAINEDFP(CID) return Intrinsic::CID;

559#define END_REGISTER_VP_INTRINSIC(VPID) break;

560#include "llvm/IR/VPIntrinsics.def"

561 }

562 return std::nullopt;

563}

564

566 switch (IROPC) {

567 default:

568 break;

569

570#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) break;

571#define VP_PROPERTY_FUNCTIONAL_OPC(OPC) case Instruction::OPC:

572#define END_REGISTER_VP_INTRINSIC(VPID) return Intrinsic::VPID;

573#include "llvm/IR/VPIntrinsics.def"

574 }

576}

577

580 return Id;

581

582 switch (Id) {

583 default:

584 break;

585#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) break;

586#define VP_PROPERTY_FUNCTIONAL_INTRINSIC(INTRIN) case Intrinsic::INTRIN:

587#define END_REGISTER_VP_INTRINSIC(VPID) return Intrinsic::VPID;

588#include "llvm/IR/VPIntrinsics.def"

589 }

591}

592

594 return ::getForIntrinsic(Id);

595}

596

599

601

602

604 if (!VLParam)

605 return true;

606

607

608

609

610

611

612

613 if (EC.isScalable()) {

614

617 return VScaleFactor >= EC.getKnownMinValue();

618 return (EC.getKnownMinValue() == 1) && match(VLParam, m_VScale());

619 }

620

621

623 if (!VLConst)

624 return false;

625

626 uint64_t VLNum = VLConst->getZExtValue();

627 if (VLNum >= EC.getKnownMinValue())

628 return true;

629

630 return false;

631}

632

637 switch (VPID) {

638 default: {

639 Type *OverloadTy = Params[0]->getType();

641 OverloadTy =

643

645 break;

646 }

647 case Intrinsic::vp_trunc:

648 case Intrinsic::vp_sext:

649 case Intrinsic::vp_zext:

650 case Intrinsic::vp_fptoui:

651 case Intrinsic::vp_fptosi:

652 case Intrinsic::vp_uitofp:

653 case Intrinsic::vp_sitofp:

654 case Intrinsic::vp_fptrunc:

655 case Intrinsic::vp_fpext:

656 case Intrinsic::vp_ptrtoint:

657 case Intrinsic::vp_inttoptr:

658 case Intrinsic::vp_lrint:

659 case Intrinsic::vp_llrint:

660 case Intrinsic::vp_cttz_elts:

662 M, VPID, {ReturnType, Params[0]->getType()});

663 break;

664 case Intrinsic::vp_is_fpclass:

666 break;

667 case Intrinsic::vp_merge:

668 case Intrinsic::vp_select:

670 break;

671 case Intrinsic::vp_load:

673 M, VPID, {ReturnType, Params[0]->getType()});

674 break;

675 case Intrinsic::vp_load_ff:

677 M, VPID, {ReturnType->getStructElementType(0), Params[0]->getType()});

678 break;

679 case Intrinsic::experimental_vp_strided_load:

681 M, VPID, {ReturnType, Params[0]->getType(), Params[1]->getType()});

682 break;

683 case Intrinsic::vp_gather:

685 M, VPID, {ReturnType, Params[0]->getType()});

686 break;

687 case Intrinsic::vp_store:

689 M, VPID, {Params[0]->getType(), Params[1]->getType()});

690 break;

691 case Intrinsic::experimental_vp_strided_store:

693 M, VPID,

694 {Params[0]->getType(), Params[1]->getType(), Params[2]->getType()});

695 break;

696 case Intrinsic::vp_scatter:

698 M, VPID, {Params[0]->getType(), Params[1]->getType()});

699 break;

700 case Intrinsic::experimental_vp_splat:

702 break;

703 }

704 assert(VPFunc && "Could not declare VP intrinsic");

705 return VPFunc;

706}

707

709 switch (ID) {

710 case Intrinsic::vp_reduce_add:

711 case Intrinsic::vp_reduce_mul:

712 case Intrinsic::vp_reduce_and:

713 case Intrinsic::vp_reduce_or:

714 case Intrinsic::vp_reduce_xor:

715 case Intrinsic::vp_reduce_smax:

716 case Intrinsic::vp_reduce_smin:

717 case Intrinsic::vp_reduce_umax:

718 case Intrinsic::vp_reduce_umin:

719 case Intrinsic::vp_reduce_fmax:

720 case Intrinsic::vp_reduce_fmin:

721 case Intrinsic::vp_reduce_fmaximum:

722 case Intrinsic::vp_reduce_fminimum:

723 case Intrinsic::vp_reduce_fadd:

724 case Intrinsic::vp_reduce_fmul:

725 return true;

726 default:

727 return false;

728 }

729}

730

732

735 return false;

736}

737

739 switch (ID) {

740 default:

741 return false;

742 case Intrinsic::vp_fcmp:

743 case Intrinsic::vp_icmp:

744 return true;

745 }

746}

747

749 switch (ID) {

750 default:

751 break;

752#define BEGIN_REGISTER_VP_INTRINSIC(VPID, ...) case Intrinsic::VPID:

753#define VP_PROPERTY_BINARYOP return true;

754#define END_REGISTER_VP_INTRINSIC(VPID) break;

755#include "llvm/IR/VPIntrinsics.def"

756 }

757 return false;

758}

759

777

784

788

792

793std::optional

796 return 1;

797 return std::nullopt;

798}

799

800std::optional

803 return 0;

804 return std::nullopt;

805}

806

809 case Intrinsic::uadd_with_overflow:

810 case Intrinsic::sadd_with_overflow:

811 case Intrinsic::uadd_sat:

812 case Intrinsic::sadd_sat:

813 return Instruction::Add;

814 case Intrinsic::usub_with_overflow:

815 case Intrinsic::ssub_with_overflow:

816 case Intrinsic::usub_sat:

817 case Intrinsic::ssub_sat:

818 return Instruction::Sub;

819 case Intrinsic::umul_with_overflow:

820 case Intrinsic::smul_with_overflow:

821 return Instruction::Mul;

822 default:

824 }

825}

826

829 case Intrinsic::sadd_with_overflow:

830 case Intrinsic::ssub_with_overflow:

831 case Intrinsic::smul_with_overflow:

832 case Intrinsic::sadd_sat:

833 case Intrinsic::ssub_sat:

834 return true;

835 default:

836 return false;

837 }

838}

839

846

850 return Token;

851

852

855

856

857

860

861

864

865 assert(InvokeBB && "safepoints should have unique landingpads");

867 "safepoint block should be well formed");

868

870}

871

882

893

897 M, llvm::Intrinsic::experimental_convergence_anchor);

900}

901

905 M, llvm::Intrinsic::experimental_convergence_entry);

908}

909

915 M, llvm::Intrinsic::experimental_convergence_loop);

916 llvm::Value *BundleArgs[] = {ParentToken};

920}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

This file contains the declarations for the subclasses of Constant, which represent the different fla...

static ValueAsMetadata * getAsMetadata(Value *V)

Module.h This file contains the declarations for the Module class.

static constexpr std::optional< Intrinsic::ID > getFunctionalIntrinsicIDForVP(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:514

static constexpr std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:495

static ICmpInst::Predicate getIntPredicateFromMD(const Value *Op)

Definition IntrinsicInst.cpp:760

static constexpr bool doesVPHaveNoFunctionalEquivalent(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:531

constexpr bool isVPIntrinsic(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:477

static constexpr Intrinsic::ID getForIntrinsic(Intrinsic::ID Id)

Definition IntrinsicInst.cpp:578

static FCmpInst::Predicate getFPPredicateFromMD(const Value *Op)

Definition IntrinsicInst.cpp:315

MachineInstr unsigned OpIdx

This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...

ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...

size_t size() const

size - Get the array size.

LLVM Basic Block Representation.

LLVM_ABI const_iterator getFirstInsertionPt() const

Returns an iterator to the first instruction in this block that is suitable for inserting a non-PHI i...

const Function * getParent() const

Return the enclosing method, or null if none.

const Instruction * getTerminator() const LLVM_READONLY

Returns the terminator instruction if the block is well formed or null if the block is not well forme...

LLVM_ABI const Module * getModule() const

Return the module owning the function this basic block belongs to, or nullptr if the function does no...

LLVM_ABI unsigned getNoWrapKind() const

Returns one of OBO::NoSignedWrap or OBO::NoUnsignedWrap.

Definition IntrinsicInst.cpp:840

LLVM_ABI bool isSigned() const

Whether the intrinsic is signed or unsigned.

Definition IntrinsicInst.cpp:827

LLVM_ABI Instruction::BinaryOps getBinaryOp() const

Returns the binary operation underlying the intrinsic.

Definition IntrinsicInst.cpp:807

MaybeAlign getParamAlign(unsigned ArgNo) const

Extract the alignment for a call or parameter (0=unknown).

Value * getArgOperand(unsigned i) const

void setArgOperand(unsigned i, Value *v)

unsigned arg_size() const

static CallInst * Create(FunctionType *Ty, Value *F, const Twine &NameStr="", InsertPosition InsertBefore=nullptr)

Predicate

This enumeration lists the possible predicates for CmpInst subclasses.

@ FCMP_OEQ

0 0 0 1 True if ordered and equal

@ ICMP_SLT

signed less than

@ ICMP_SLE

signed less or equal

@ FCMP_OLT

0 1 0 0 True if ordered and less than

@ FCMP_ULE

1 1 0 1 True if unordered, less than, or equal

@ FCMP_OGT

0 0 1 0 True if ordered and greater than

@ FCMP_OGE

0 0 1 1 True if ordered and greater than or equal

@ ICMP_UGE

unsigned greater or equal

@ ICMP_UGT

unsigned greater than

@ ICMP_SGT

signed greater than

@ FCMP_ULT

1 1 0 0 True if unordered or less than

@ FCMP_ONE

0 1 1 0 True if ordered and operands are unequal

@ FCMP_UEQ

1 0 0 1 True if unordered or equal

@ ICMP_ULT

unsigned less than

@ FCMP_UGT

1 0 1 0 True if unordered or greater than

@ FCMP_OLE

0 1 0 1 True if ordered and less than or equal

@ FCMP_ORD

0 1 1 1 True if ordered (no nans)

@ ICMP_SGE

signed greater or equal

@ FCMP_UNE

1 1 1 0 True if unordered or not equal

@ ICMP_ULE

unsigned less or equal

@ FCMP_UGE

1 0 1 1 True if unordered, greater than, or equal

@ FCMP_UNO

1 0 0 0 True if unordered: isnan(X) | isnan(Y)

This is the shared class of boolean and integer constants.

LLVM_ABI FCmpInst::Predicate getPredicate() const

Definition IntrinsicInst.cpp:337

LLVM_ABI std::optional< fp::ExceptionBehavior > getExceptionBehavior() const

Definition IntrinsicInst.cpp:288

LLVM_ABI std::optional< RoundingMode > getRoundingMode() const

Definition IntrinsicInst.cpp:276

LLVM_ABI unsigned getNonMetadataArgCount() const

Definition IntrinsicInst.cpp:341

static LLVM_ABI bool classof(const IntrinsicInst *I)

Definition IntrinsicInst.cpp:356

LLVM_ABI bool isDefaultFPEnvironment() const

Definition IntrinsicInst.cpp:299

Represents calls to the llvm.experimintal.convergence.* intrinsics.

static LLVM_ABI ConvergenceControlInst * CreateAnchor(BasicBlock &BB)

Definition IntrinsicInst.cpp:894

static LLVM_ABI ConvergenceControlInst * CreateLoop(BasicBlock &BB, ConvergenceControlInst *Parent)

Definition IntrinsicInst.cpp:911

static LLVM_ABI ConvergenceControlInst * CreateEntry(BasicBlock &BB)

Definition IntrinsicInst.cpp:902

static LLVM_ABI DIArgList * get(LLVMContext &Context, ArrayRef< ValueAsMetadata * > Args)

LLVM_ABI std::optional< uint64_t > getSizeInBits() const

Determines the size of the variable's type.

LLVM_ABI void setValue(Value *V)

Definition IntrinsicInst.cpp:234

LLVM_ABI void setAssignId(DIAssignID *New)

Definition IntrinsicInst.cpp:214

LLVM_ABI void setKillAddress()

Kill the address component.

Definition IntrinsicInst.cpp:223

LLVM_ABI bool isKillAddress() const

Check whether this kills the address component.

Definition IntrinsicInst.cpp:229

Metadata * getRawAddress() const

LLVM_ABI Value * getAddress() const

Definition IntrinsicInst.cpp:204

LLVM_ABI void setAddress(Value *V)

Definition IntrinsicInst.cpp:218

LLVM_ABI iterator_range< location_op_iterator > location_ops() const

Get the locations corresponding to the variable referenced by the debug info intrinsic.

Definition IntrinsicInst.cpp:91

LLVM_ABI void addVariableLocationOps(ArrayRef< Value * > NewValues, DIExpression *NewExpr)

Adding a new location operand will always result in this intrinsic using an ArgList,...

Definition IntrinsicInst.cpp:181

LLVM_ABI void replaceVariableLocationOp(Value *OldValue, Value *NewValue, bool AllowEmpty=false)

Definition IntrinsicInst.cpp:121

LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const

Definition IntrinsicInst.cpp:95

DILocalVariable * getVariable() const

unsigned getNumVariableLocationOps() const

void setOperand(unsigned i, Value *v)

LLVM_ABI std::optional< uint64_t > getFragmentSizeInBits() const

Get the size (in bits) of the variable, or fragment of the variable that is described.

Definition IntrinsicInst.cpp:198

DIExpression * getExpression() const

void setArgOperand(unsigned i, Value *v)

RawLocationWrapper getWrappedLocation() const

LLVM_ABI const Value * getStatepoint() const

The statepoint with which this gc.relocate is associated.

Definition IntrinsicInst.cpp:847

LLVM_ABI Value * getBasePtr() const

Definition IntrinsicInst.cpp:872

unsigned getBasePtrIndex() const

The index into the associate statepoint's argument list which contains the base pointer of the pointe...

LLVM_ABI Value * getDerivedPtr() const

Definition IntrinsicInst.cpp:883

unsigned getDerivedPtrIndex() const

The index into the associate statepoint's argument list which contains the pointer whose relocation t...

LLVM_ABI void setCallee(Value *Callee)

Definition IntrinsicInst.cpp:271

LLVM_ABI Value * getCallee() const

Definition IntrinsicInst.cpp:265

LLVM_ABI ConstantInt * getIndex() const

Definition IntrinsicInst.cpp:245

LLVM_ABI void setIndex(uint32_t Idx)

Definition IntrinsicInst.cpp:251

LLVM_ABI ConstantInt * getNumCounters() const

Definition IntrinsicInst.cpp:239

static bool classof(const IntrinsicInst *I)

LLVM_ABI Value * getStep() const

Definition IntrinsicInst.cpp:256

static bool classof(const IntrinsicInst *I)

LLVM_ABI const Module * getModule() const

Return the module owning the function this instruction belongs to or nullptr it the function does not...

static LLVM_ABI bool mayLowerToFunctionCall(Intrinsic::ID IID)

Check if the intrinsic might lower into a regular function call in the course of IR transformations.

Definition IntrinsicInst.cpp:36

Intrinsic::ID getIntrinsicID() const

Return the intrinsic ID of this intrinsic.

This is an important class for using LLVM in a threaded context.

A Module instance is used to store all the information related to an LLVM module.

static LLVM_ABI PoisonValue * get(Type *T)

Static factory methods - Return an 'poison' object of the specified type.

Metadata * getRawLocation() const

LLVM_ABI iterator_range< location_op_iterator > location_ops() const

Get the locations corresponding to the variable referenced by the debug info intrinsic.

Definition IntrinsicInst.cpp:74

LLVM_ABI Value * getVariableLocationOp(unsigned OpIdx) const

Definition IntrinsicInst.cpp:99

void push_back(const T &Elt)

This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.

A switch()-like statement whose cases are string literals.

StringSwitch & Case(StringLiteral S, T Value)

The instances of the Type class are immutable: once they are created, they are never changed.

static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)

static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)

static LLVM_ABI UndefValue * get(Type *T)

Static factory methods - Return an 'undef' object of the specified type.

unsigned getNumOperands() const

static LLVM_ABI bool isVPBinOp(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:748

static LLVM_ABI bool isVPCast(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:731

static LLVM_ABI bool isVPCmp(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:738

LLVM_ABI CmpInst::Predicate getPredicate() const

Definition IntrinsicInst.cpp:778

static LLVM_ABI std::optional< unsigned > getMaskParamPos(Intrinsic::ID IntrinsicID)

Definition IntrinsicInst.cpp:400

LLVM_ABI bool canIgnoreVectorLengthParam() const

Definition IntrinsicInst.cpp:597

LLVM_ABI void setMaskParam(Value *)

Definition IntrinsicInst.cpp:383

static LLVM_ABI std::optional< unsigned > getFunctionalOpcodeForVP(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:508

static LLVM_ABI std::optional< unsigned > getMemoryDataParamPos(Intrinsic::ID)

Definition IntrinsicInst.cpp:466

LLVM_ABI Value * getVectorLengthParam() const

Definition IntrinsicInst.cpp:388

static LLVM_ABI std::optional< Intrinsic::ID > getFunctionalIntrinsicIDForVP(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:527

LLVM_ABI void setVectorLengthParam(Value *)

Definition IntrinsicInst.cpp:394

static LLVM_ABI std::optional< unsigned > getVectorLengthParamPos(Intrinsic::ID IntrinsicID)

Definition IntrinsicInst.cpp:413

static LLVM_ABI Intrinsic::ID getForOpcode(unsigned OC)

The llvm.vp.* intrinsics for this instruction Opcode.

Definition IntrinsicInst.cpp:565

static LLVM_ABI Function * getOrInsertDeclarationForParams(Module *M, Intrinsic::ID, Type *ReturnType, ArrayRef< Value * > Params)

Declares a llvm.vp.

Definition IntrinsicInst.cpp:633

static LLVM_ABI std::optional< unsigned > getMemoryPointerParamPos(Intrinsic::ID)

Definition IntrinsicInst.cpp:442

static LLVM_ABI bool isVPIntrinsic(Intrinsic::ID)

Definition IntrinsicInst.cpp:489

LLVM_ABI Value * getMemoryDataParam() const

Definition IntrinsicInst.cpp:459

static LLVM_ABI Intrinsic::ID getForIntrinsic(Intrinsic::ID Id)

The llvm.vp.

Definition IntrinsicInst.cpp:593

LLVM_ABI Value * getMemoryPointerParam() const

Definition IntrinsicInst.cpp:435

LLVM_ABI MaybeAlign getPointerAlignment() const

Definition IntrinsicInst.cpp:427

LLVM_ABI Value * getMaskParam() const

Definition IntrinsicInst.cpp:377

LLVM_ABI ElementCount getStaticVectorLength() const

Definition IntrinsicInst.cpp:360

static LLVM_ABI std::optional< Intrinsic::ID > getConstrainedIntrinsicIDForVP(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:553

static LLVM_ABI bool isVPReduction(Intrinsic::ID ID)

Definition IntrinsicInst.cpp:708

LLVM_ABI unsigned getStartParamPos() const

Definition IntrinsicInst.cpp:789

LLVM_ABI unsigned getVectorParamPos() const

Definition IntrinsicInst.cpp:785

LLVM Value Representation.

Type * getType() const

All values are typed, get the type of this value.

LLVM_ABI LLVMContext & getContext() const

All values hold a context through their type.

A range adaptor for a pair of iterators.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

LLVM_ABI Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > Tys={})

Look up the Function declaration of the intrinsic id in the Module M.

LLVM_ABI bool hasConstrainedFPRoundingModeOperand(ID QID)

Returns true if the intrinsic ID is for one of the "ConstrainedFloating-Point Intrinsics" that take r...

LLVM_ABI bool isConstrainedFPIntrinsic(ID QID)

Returns true if the intrinsic ID is for one of the "ConstrainedFloating-Point Intrinsics".

bool match(Val *V, const Pattern &P)

class_match< ConstantInt > m_ConstantInt()

Match an arbitrary ConstantInt and ignore it.

IntrinsicID_match m_VScale()

Matches a call to llvm.vscale().

BinaryOp_match< LHS, RHS, Instruction::Mul > m_Mul(const LHS &L, const RHS &R)

@ ebIgnore

This corresponds to "fpexcept.ignore".

This is an optimization pass for GlobalISel generic memory operations.

auto find(R &&Range, const T &Val)

Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.

decltype(auto) dyn_cast(const From &Val)

dyn_cast - Return the argument parameter cast to the specified type.

bool isa(const From &Val)

isa - Return true if the parameter to the template is an instance of one of the template type argu...

OperandBundleDefT< Value * > OperandBundleDef

LLVM_ABI std::optional< fp::ExceptionBehavior > convertStrToExceptionBehavior(StringRef)

Returns a valid ExceptionBehavior enumerator when given a string valid as input in constrained intrin...

DWARFExpression::Operation Op

@ NearestTiesToEven

roundTiesToEven.

decltype(auto) cast(const From &Val)

cast - Return the argument parameter cast to the specified type.

LLVM_ABI std::optional< RoundingMode > convertStrToRoundingMode(StringRef)

Returns a valid RoundingMode enumerator when given a string that is valid as input in constrained int...

bool is_contained(R &&Range, const E &Element)

Returns true if Element is found in Range.

This struct is a compact representation of a valid (power of two) or undefined (0) alignment.