LLVM: include/llvm/CodeGen/ISDOpcodes.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CODEGEN_ISDOPCODES_H

14#define LLVM_CODEGEN_ISDOPCODES_H

15

17

18namespace llvm {

19

20

21

22

23namespace ISD {

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

41

42

43

45

46

48

49

50

51

53

54

55

56

57

58

59

60

63

64

65

66

67

69

70

85

86

87

88

89

91

92

94

95

96

97

98

99

102

103

104

105

106

108

109

110

111

113

114

115

116

117

118

119

121

122

123

126

127

128

129

131

132

133

134

136

137

138

139

140

142

143

144

145

146

148

149

150

151

152

154

155

156

158

159

160

161

162

163

166

167

168

169

177

179

180

181

182

184

185

186

187

188

189

191

192

193

194

195

196

197

199

200

201

202

203

204

206

207

208

210

211

212

213

214

216

217

219

220

221

222

224

225

226

227

228

230

231

232

233

234

235

237

238

239

240

241

242

244

245

253

254

255

256

259

260

261

264

265

266

268

269

270

271

272

273

274

275

278

279

280

281

282

283

284

285

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

312

313

314

315

316

317

318

319

322

323

324

325

326

327

328

329

332

333

336

337

340

341

342

343

344

345

346

349

350

351

352

353

354

355

358

359

360

361

362

363

364

365

368

369

370

371

372

373

376

377

378

379

382

383

384

385

386

389

390

391

392

395

396

402

403

404

405

406

413

414

415

416

417

452

453

454

455

456

459

460

461

462

463

466

467

468

469

470

471

472

473

474

475

476

477

478

479

481

482

483

484

486

487

488

489

490

493

494

496

497

499

500

501

503

504

505

506

507

509

510

511

513

514

516

517

518

519

520

521

523

524

525

526

527

528

529

531

532

533

534

535

536

537

538

540

541

542

543

544

545

546

547

548

549

551

552

553

554

555

556

557

559

560

561

562

563

564

565

566

567

568

569

570

571

572

573

575

576

577

578

579

580

581

582

583

584

585

586

587

589

590

591

592

593

594

596

597

598

599

600

602

603

604

605

607

608

609

610

611

612

613

614

616

617

618

619

620

621

622

623

624

625

626

628

629

630

631

632

633

634

636

637

638

639

640

641

643

644

645

646

647

648

649

650

652

653

654

655

656

657

658

659

660

662

663

664

665

666

667

668

670

671

672

673

676

677

678

679

682

683

684

687

688

689

690

691

694

695

696

701

702

703

704

707

708

712

713

714

715

716

718

719

720

721

722

723

724

725

726

727

728

729

730

731

732

733

734

742

743

750

751

754

755

756

758

759

760

761

762

763

764

765

767

768

769

770

771

773

774

775

776

777

778

779

781

782

783

784

785

786

787

789

790

791

792

793

797

798

799

800

801

802

803

804

806

807

808

809

810

812

813

815

816

818

819

820

821

822

823

824

825

826

827

828

829

830

831

833

835

837

838

839

840

843

844

845

846

847

848

850

851

852

853

854

855

856

857

858

859

861

862

863

864

865

866

867

868

869

870

872

873

874

875

876

877

878

879

880

881

883

884

885

886

889

890

891

892

893

894

895

896

897

898

899

900

901

902

903

904

905

908

909

910

911

912

913

914

915

916

917

918

919

921

922

923

924

925

926

927

928

929

930

932

933

934

935

937

938

940

941

942

943

944

945

946

947

948

949

950

951

952

953

955

956

957

959

960

961

962

963

968

969

970

971

972

977

978

979

980

996

998

1000

1001

1002

1003

1005

1023

1024

1025

1026

1027

1028

1029

1030

1033

1034

1035

1036

1037

1038

1039

1040

1041

1042

1043

1046

1047

1048

1049

1052

1053

1054

1057

1058

1060

1061

1062

1063

1065

1066

1067

1068

1070

1071

1072

1074

1075

1076

1077

1079

1080

1081

1082

1084

1085

1086

1088

1089

1090

1091

1093

1094

1095

1097

1098

1099

1100

1101

1104

1105

1106

1107

1108

1109

1110

1111

1113

1114

1115

1116

1117

1119

1120

1121

1122

1124

1125

1126

1128

1129

1130

1132

1133

1134

1135

1136

1137

1138

1139

1140

1142

1143

1144

1145

1146

1147

1149

1150

1151

1152

1153

1154

1155

1156

1157

1158

1159

1160

1161

1162

1163

1164

1166

1167

1169

1170

1171

1172

1174

1175

1176

1177

1178

1180

1181

1182

1183

1185

1186

1187

1189

1190

1191

1192

1194

1195

1196

1198

1199

1200

1201

1202

1203

1204

1205

1206

1207

1208

1209

1210

1213

1214

1215

1216

1218

1219

1220

1221

1223

1224

1225

1228

1229

1230

1232

1233

1235

1236

1237

1239

1240

1241

1243

1244

1246

1247

1248

1249

1250

1251

1252

1254

1255

1256

1257

1258

1260

1261

1263

1264

1265

1266

1267

1268

1269

1271

1272

1273

1274

1275

1277

1278

1280

1281

1283

1284

1285

1287

1288

1289

1290

1291

1293

1294

1295

1297

1298

1300

1301

1302

1303

1305

1306

1307

1309

1310

1311

1313

1314

1315

1316

1317

1318

1320

1321

1322

1323

1324

1326

1327

1328

1329

1330

1331

1332

1353

1354

1355

1356

1357

1358

1359

1362

1363

1364

1365

1366

1367

1368

1369

1370

1371

1374

1375

1376

1379

1380

1381

1382

1384

1385

1386

1387

1388

1389

1390

1393

1394

1395

1396

1397

1399

1400

1401

1403

1404

1405

1406

1408

1409

1410

1411

1412

1413

1414

1415

1416

1419

1420

1421

1422

1423

1424

1425

1426

1427

1428

1429

1430

1431

1434

1437

1438

1441

1442

1443

1453

1454

1455

1456

1458

1459

1460

1461

1462

1464

1465

1466#define BEGIN_REGISTER_VP_SDNODE(VPSDID, ...) VPSDID,

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

1468

1469

1473

1474

1475

1477

1478

1479

1480

1482

1483

1484

1486

1487

1488

1489

1491

1492

1493

1496

1497

1500}

1501

1502

1503

1505

1506

1507

1509

1510

1512

1513

1515

1516

1518

1519

1520std::optional getVPMaskIdx(unsigned Opcode);

1521

1522

1524

1525

1526std::optional getBaseOpcodeForVP(unsigned Opcode, bool hasFPExcept);

1527

1528

1530

1531

1532

1533

1534

1535

1536

1537

1538

1539

1540

1541

1542

1543

1544

1545

1546

1547

1548

1549

1550

1551

1552

1553

1554

1555

1556

1557

1558

1560

1562

1563

1564

1565

1566

1567

1568

1569

1570

1571

1573

1575

1578}

1579

1580

1581

1582

1583

1584

1585

1586

1587

1588

1589

1591

1593

1595

1596

1597

1598

1599

1600

1601

1602

1603

1604

1605

1606

1607

1608

1609

1611

1612 SETFALSE,

1613 SETOEQ,

1614 SETOGT,

1615 SETOGE,

1616 SETOLT,

1617 SETOLE,

1618 SETONE,

1619 SETO,

1620 SETUO,

1621 SETUEQ,

1622 SETUGT,

1623 SETUGE,

1624 SETULT,

1625 SETULE,

1626 SETUNE,

1627 SETTRUE,

1628

1629 SETFALSE2,

1630 SETEQ,

1631 SETGT,

1632 SETGE,

1633 SETLT,

1634 SETLE,

1635 SETNE,

1636 SETTRUE2,

1637

1640

1641

1642

1645}

1646

1647

1648

1651}

1652

1653

1654

1656 return Code == SETEQ || Code == SETNE;

1657}

1658

1659

1660

1663}

1664

1665

1666

1667

1669

1670

1671

1672

1674 return ((int)Cond >> 3) & 3;

1675}

1676

1677

1678

1680

1684}

1685

1690}

1691

1692namespace GlobalISel {

1693

1694

1695

1696

1697

1698

1700}

1701

1702

1703

1705

1706

1707

1708

1710

1711

1712

1713

1715

1716}

1717

1718}

1719

1720#endif

PowerPC Reduce CR logical Operation

const SmallVectorImpl< MachineOperand > & Cond

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

CondCode getSetCCInverse(CondCode Operation, bool isIntegerLike)

Return the operation corresponding to !(X op Y), where 'op' is a valid SetCC operation.

CondCode getSetCCAndOperation(CondCode Op1, CondCode Op2, EVT Type)

Return the result of a logical AND between different comparisons of identical values: ((X op1 Y) & (X...

NodeType

ISD::NodeType enum - This enum defines the target-independent operators for a SelectionDAG.

@ SETCC

SetCC operator - This evaluates to a true value iff the condition is true.

@ MERGE_VALUES

MERGE_VALUES - This node takes multiple discrete operands and returns them all as its individual resu...

@ STACKRESTORE

STACKRESTORE has two operands, an input chain and a pointer to restore to it returns an output chain.

@ STACKSAVE

STACKSAVE - STACKSAVE has one operand, an input chain.

@ MDNODE_SDNODE

MDNODE_SDNODE - This is a node that holdes an MDNode*, which is used to reference metadata in the IR.

@ STRICT_FSETCC

STRICT_FSETCC/STRICT_FSETCCS - Constrained versions of SETCC, used for floating-point operands only.

@ DELETED_NODE

DELETED_NODE - This is an illegal value that is used to catch errors.

@ SET_FPENV

Sets the current floating-point environment.

@ VECREDUCE_SEQ_FADD

Generic reduction nodes.

@ MLOAD

Masked load and store - consecutive vector load and store operations with additional mask operand tha...

@ EH_SJLJ_LONGJMP

OUTCHAIN = EH_SJLJ_LONGJMP(INCHAIN, buffer) This corresponds to the eh.sjlj.longjmp intrinsic.

@ FGETSIGN

INT = FGETSIGN(FP) - Return the sign bit of the specified floating point value as an integer 0/1 valu...

@ SMUL_LOHI

SMUL_LOHI/UMUL_LOHI - Multiply two integers of type iN, producing a signed/unsigned value of type i[2...

@ INSERT_SUBVECTOR

INSERT_SUBVECTOR(VECTOR1, VECTOR2, IDX) - Returns a vector with VECTOR2 inserted into VECTOR1.

@ JUMP_TABLE_DEBUG_INFO

JUMP_TABLE_DEBUG_INFO - Jumptable debug info.

@ BSWAP

Byte Swap and Counting operators.

@ SMULFIX

RESULT = [US]MULFIX(LHS, RHS, SCALE) - Perform fixed point multiplication on 2 integers with the same...

@ VAEND

VAEND, VASTART - VAEND and VASTART have three operands: an input chain, pointer, and a SRCVALUE.

@ ATOMIC_STORE

OUTCHAIN = ATOMIC_STORE(INCHAIN, val, ptr) This corresponds to "store atomic" instruction.

@ ADDC

Carry-setting nodes for multiple precision addition and subtraction.

@ FRAME_TO_ARGS_OFFSET

FRAME_TO_ARGS_OFFSET - This node represents offset from frame pointer to first (possible) on-stack ar...

@ RESET_FPENV

Set floating-point environment to default state.

@ FMAD

FMAD - Perform a * b + c, while getting the same result as the separately rounded operations.

@ ADD

Simple integer binary arithmetic operators.

@ LOAD

LOAD and STORE have token chains as their first operand, then the same operands as an LLVM load/store...

@ SMULFIXSAT

Same as the corresponding unsaturated fixed point instructions, but the result is clamped between the...

@ SET_FPMODE

Sets the current dynamic floating-point control modes.

@ ANY_EXTEND

ANY_EXTEND - Used for integer types. The high bits are undefined.

@ FMA

FMA - Perform a * b + c with no intermediate rounding step.

@ VECTOR_FIND_LAST_ACTIVE

@ FATAN2

FATAN2 - atan2, inspired by libm.

@ INTRINSIC_VOID

OUTCHAIN = INTRINSIC_VOID(INCHAIN, INTRINSICID, arg1, arg2, ...) This node represents a target intrin...

@ EH_SJLJ_SETUP_DISPATCH

OUTCHAIN = EH_SJLJ_SETUP_DISPATCH(INCHAIN) The target initializes the dispatch table here.

@ ATOMIC_CMP_SWAP_WITH_SUCCESS

Val, Success, OUTCHAIN = ATOMIC_CMP_SWAP_WITH_SUCCESS(INCHAIN, ptr, cmp, swap) N.b.

@ SINT_TO_FP

[SU]INT_TO_FP - These operators convert integers (whose interpreted sign depends on the first letter)...

@ CONCAT_VECTORS

CONCAT_VECTORS(VECTOR0, VECTOR1, ...) - Given a number of values of vector type with the same length ...

@ VECREDUCE_FMAX

FMIN/FMAX nodes can have flags, for NaN/NoNaN variants.

@ FADD

Simple binary floating point operators.

@ VECREDUCE_FMAXIMUM

FMINIMUM/FMAXIMUM nodes propatate NaNs and signed zeroes using the llvm.minimum and llvm....

@ ABS

ABS - Determine the unsigned absolute value of a signed integer value of the same bitwidth.

@ MEMBARRIER

MEMBARRIER - Compiler barrier only; generate a no-op.

@ ATOMIC_FENCE

OUTCHAIN = ATOMIC_FENCE(INCHAIN, ordering, scope) This corresponds to the fence instruction.

@ RESET_FPMODE

Sets default dynamic floating-point control modes.

@ SIGN_EXTEND_VECTOR_INREG

SIGN_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register sign-extension of the low ...

@ SDIVREM

SDIVREM/UDIVREM - Divide two integers and produce both a quotient and remainder result.

@ FP16_TO_FP

FP16_TO_FP, FP_TO_FP16 - These operators are used to perform promotions and truncation for half-preci...

@ FPTRUNC_ROUND

FPTRUNC_ROUND - This corresponds to the fptrunc_round intrinsic.

@ FAKE_USE

FAKE_USE represents a use of the operand but does not do anything.

@ BITCAST

BITCAST - This operator converts between integer, vector and FP values, as if the value was stored to...

@ BUILD_PAIR

BUILD_PAIR - This is the opposite of EXTRACT_ELEMENT in some ways.

@ INIT_TRAMPOLINE

INIT_TRAMPOLINE - This corresponds to the init_trampoline intrinsic.

@ FLDEXP

FLDEXP - ldexp, inspired by libm (op0 * 2**op1).

@ SDIVFIX

RESULT = [US]DIVFIX(LHS, RHS, SCALE) - Perform fixed point division on 2 integers with the same width...

@ STRICT_FSQRT

Constrained versions of libm-equivalent floating point intrinsics.

@ BUILTIN_OP_END

BUILTIN_OP_END - This must be the last enum value in this list.

@ SRCVALUE

SRCVALUE - This is a node type that holds a Value* that is used to make reference to a value in the L...

@ EH_LABEL

EH_LABEL - Represents a label in mid basic block used to track locations needed for debug and excepti...

@ EH_RETURN

OUTCHAIN = EH_RETURN(INCHAIN, OFFSET, HANDLER) - This node represents 'eh_return' gcc dwarf builtin,...

@ ANNOTATION_LABEL

ANNOTATION_LABEL - Represents a mid basic block label used by annotations.

@ SET_ROUNDING

Set rounding mode.

@ SIGN_EXTEND

Conversion operators.

@ AVGCEILS

AVGCEILS/AVGCEILU - Rounding averaging add - Add two integers using an integer of type i[N+2],...

@ SCALAR_TO_VECTOR

SCALAR_TO_VECTOR(VAL) - This represents the operation of loading a scalar value into element 0 of the...

@ PREALLOCATED_SETUP

PREALLOCATED_SETUP - This has 2 operands: an input chain and a SRCVALUE with the preallocated call Va...

@ READSTEADYCOUNTER

READSTEADYCOUNTER - This corresponds to the readfixedcounter intrinsic.

@ ADDROFRETURNADDR

ADDROFRETURNADDR - Represents the llvm.addressofreturnaddress intrinsic.

@ BR

Control flow instructions. These all have token chains.

@ VECREDUCE_FADD

These reductions have relaxed evaluation order semantics, and have a single vector operand.

@ CTTZ_ZERO_UNDEF

Bit counting operators with an undefined result for zero inputs.

@ TargetIndex

TargetIndex - Like a constant pool entry, but with completely target-dependent semantics.

@ PREFETCH

PREFETCH - This corresponds to a prefetch intrinsic.

@ FSINCOS

FSINCOS - Compute both fsin and fcos as a single operation.

@ SETCCCARRY

Like SetCC, ops #0 and #1 are the LHS and RHS operands to compare, but op #2 is a boolean indicating ...

@ FNEG

Perform various unary floating-point operations inspired by libm.

@ BR_CC

BR_CC - Conditional branch.

@ SSUBO

Same for subtraction.

@ PREALLOCATED_ARG

PREALLOCATED_ARG - This has 3 operands: an input chain, a SRCVALUE with the preallocated call Value,...

@ BRIND

BRIND - Indirect branch.

@ BR_JT

BR_JT - Jumptable branch.

@ GC_TRANSITION_START

GC_TRANSITION_START/GC_TRANSITION_END - These operators mark the beginning and end of GC transition s...

@ VECTOR_INTERLEAVE

VECTOR_INTERLEAVE(VEC1, VEC2) - Returns two vectors with all input and output vectors having the same...

@ STEP_VECTOR

STEP_VECTOR(IMM) - Returns a scalable vector whose lanes are comprised of a linear sequence of unsign...

@ FCANONICALIZE

Returns platform specific canonical encoding of a floating point number.

@ IS_FPCLASS

Performs a check of floating point class property, defined by IEEE-754.

@ SSUBSAT

RESULT = [US]SUBSAT(LHS, RHS) - Perform saturation subtraction on 2 integers with the same bit width ...

@ SELECT

Select(COND, TRUEVAL, FALSEVAL).

@ ATOMIC_LOAD

Val, OUTCHAIN = ATOMIC_LOAD(INCHAIN, ptr) This corresponds to "load atomic" instruction.

@ UNDEF

UNDEF - An undefined node.

@ EXTRACT_ELEMENT

EXTRACT_ELEMENT - This is used to get the lower or upper (determined by a Constant,...

@ SPLAT_VECTOR

SPLAT_VECTOR(VAL) - Returns a vector with the scalar value VAL duplicated in all lanes.

@ AssertAlign

AssertAlign - These nodes record if a register contains a value that has a known alignment and the tr...

@ VACOPY

VACOPY - VACOPY has 5 operands: an input chain, a destination pointer, a source pointer,...

@ BasicBlock

Various leaf nodes.

@ CopyFromReg

CopyFromReg - This node indicates that the input value is a virtual or physical register that is defi...

@ SADDO

RESULT, BOOL = [SU]ADDO(LHS, RHS) - Overflow-aware nodes for addition.

@ TargetGlobalAddress

TargetGlobalAddress - Like GlobalAddress, but the DAG does no folding or anything else with this node...

@ ARITH_FENCE

ARITH_FENCE - This corresponds to a arithmetic fence intrinsic.

@ VECREDUCE_ADD

Integer reductions may have a result type larger than the vector element type.

@ GET_ROUNDING

Returns current rounding mode: -1 Undefined 0 Round to 0 1 Round to nearest, ties to even 2 Round to ...

@ MULHU

MULHU/MULHS - Multiply high - Multiply two integers of type iN, producing an unsigned/signed value of...

@ CLEANUPRET

CLEANUPRET - Represents a return from a cleanup block funclet.

@ GET_FPMODE

Reads the current dynamic floating-point control modes.

@ GET_FPENV

Gets the current floating-point environment.

@ SHL

Shift and rotation operations.

@ VECTOR_SHUFFLE

VECTOR_SHUFFLE(VEC1, VEC2) - Returns a vector, of the same type as VEC1/VEC2.

@ PtrAuthGlobalAddress

A ptrauth constant.

@ EXTRACT_SUBVECTOR

EXTRACT_SUBVECTOR(VECTOR, IDX) - Returns a subvector from VECTOR.

@ FMINNUM_IEEE

FMINNUM_IEEE/FMAXNUM_IEEE - Perform floating-point minimumNumber or maximumNumber on two values,...

@ EntryToken

EntryToken - This is the marker used to indicate the start of a region.

@ READ_REGISTER

READ_REGISTER, WRITE_REGISTER - This node represents llvm.register on the DAG, which implements the n...

@ EXTRACT_VECTOR_ELT

EXTRACT_VECTOR_ELT(VECTOR, IDX) - Returns a single element from VECTOR identified by the (potentially...

@ CopyToReg

CopyToReg - This node has three operands: a chain, a register number to set to this value,...

@ ZERO_EXTEND

ZERO_EXTEND - Used for integer types, zeroing the new bits.

@ DEBUGTRAP

DEBUGTRAP - Trap intended to get the attention of a debugger.

@ SELECT_CC

Select with condition operator - This selects between a true value and a false value (ops #2 and #3) ...

@ VSCALE

VSCALE(IMM) - Returns the runtime scaling factor used to calculate the number of elements within a sc...

@ ATOMIC_CMP_SWAP

Val, OUTCHAIN = ATOMIC_CMP_SWAP(INCHAIN, ptr, cmp, swap) For double-word atomic operations: ValLo,...

@ LOCAL_RECOVER

LOCAL_RECOVER - Represents the llvm.localrecover intrinsic.

@ FMINNUM

FMINNUM/FMAXNUM - Perform floating-point minimum or maximum on two values.

@ UBSANTRAP

UBSANTRAP - Trap with an immediate describing the kind of sanitizer failure.

@ SSHLSAT

RESULT = [US]SHLSAT(LHS, RHS) - Perform saturation left shift.

@ SMULO

Same for multiplication.

@ DYNAMIC_STACKALLOC

DYNAMIC_STACKALLOC - Allocate some number of bytes on the stack aligned to a specified boundary.

@ ANY_EXTEND_VECTOR_INREG

ANY_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register any-extension of the low la...

@ SIGN_EXTEND_INREG

SIGN_EXTEND_INREG - This operator atomically performs a SHL/SRA pair to sign extend a small value in ...

@ SMIN

[US]{MIN/MAX} - Binary minimum or maximum of signed or unsigned integers.

@ VECTOR_REVERSE

VECTOR_REVERSE(VECTOR) - Returns a vector, of the same type as VECTOR, whose elements are shuffled us...

@ LIFETIME_START

This corresponds to the llvm.lifetime.

@ SDIVFIXSAT

Same as the corresponding unsaturated fixed point instructions, but the result is clamped between the...

@ FP_EXTEND

X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.

@ GLOBAL_OFFSET_TABLE

The address of the GOT.

@ VSELECT

Select with a vector condition (op #0) and two vector operands (ops #1 and #2), returning a vector re...

@ UADDO_CARRY

Carry-using nodes for multiple precision addition and subtraction.

@ STRICT_SINT_TO_FP

STRICT_[US]INT_TO_FP - Convert a signed or unsigned integer to a floating point value.

@ MGATHER

Masked gather and scatter - load and store operations for a vector of random addresses with additiona...

@ HANDLENODE

HANDLENODE node - Used as a handle for various purposes.

@ PCMARKER

PCMARKER - This corresponds to the pcmarker intrinsic.

@ INLINEASM_BR

INLINEASM_BR - Branching version of inline asm. Used by asm-goto.

@ EH_DWARF_CFA

EH_DWARF_CFA - This node represents the pointer to the DWARF Canonical Frame Address (CFA),...

@ BF16_TO_FP

BF16_TO_FP, FP_TO_BF16 - These operators are used to perform promotions and truncation for bfloat16.

@ FRAMEADDR

FRAMEADDR, RETURNADDR - These nodes represent llvm.frameaddress and llvm.returnaddress on the DAG.

@ STRICT_FP_ROUND

X = STRICT_FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type down to the precision ...

@ STRICT_FP_TO_SINT

STRICT_FP_TO_[US]INT - Convert a floating point value to a signed or unsigned integer.

@ FMINIMUM

FMINIMUM/FMAXIMUM - NaN-propagating minimum/maximum that also treat -0.0 as less than 0....

@ FP_TO_SINT

FP_TO_[US]INT - Convert a floating point value to a signed or unsigned integer.

@ READCYCLECOUNTER

READCYCLECOUNTER - This corresponds to the readcyclecounter intrinsic.

@ TargetConstant

TargetConstant* - Like Constant*, but the DAG does not do any folding, simplification,...

@ STRICT_FP_EXTEND

X = STRICT_FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.

@ AND

Bitwise operators - logical and, logical or, logical xor.

@ TRAP

TRAP - Trapping instruction.

@ INTRINSIC_WO_CHAIN

RESULT = INTRINSIC_WO_CHAIN(INTRINSICID, arg1, arg2, ...) This node represents a target intrinsic fun...

@ GET_FPENV_MEM

Gets the current floating-point environment.

@ PSEUDO_PROBE

Pseudo probe for AutoFDO, as a place holder in a basic block to improve the sample counts quality.

@ SCMP

[US]CMP - 3-way comparison of signed or unsigned integers.

@ CARRY_FALSE

CARRY_FALSE - This node is used when folding other nodes, like ADDC/SUBC, which indicate the carry re...

@ AVGFLOORS

AVGFLOORS/AVGFLOORU - Averaging add - Add two integers using an integer of type i[N+1],...

@ ADDE

Carry-using nodes for multiple precision addition and subtraction.

@ STRICT_FADD

Constrained versions of the binary floating point operators.

@ SPLAT_VECTOR_PARTS

SPLAT_VECTOR_PARTS(SCALAR1, SCALAR2, ...) - Returns a vector with the scalar values joined together a...

@ FREEZE

FREEZE - FREEZE(VAL) returns an arbitrary value if VAL is UNDEF (or is evaluated to UNDEF),...

@ INSERT_VECTOR_ELT

INSERT_VECTOR_ELT(VECTOR, VAL, IDX) - Returns VECTOR with the element at IDX replaced with VAL.

@ TokenFactor

TokenFactor - This node takes multiple tokens as input and produces a single token result.

@ VECTOR_SPLICE

VECTOR_SPLICE(VEC1, VEC2, IMM) - Returns a subvector of the same type as VEC1/VEC2 from CONCAT_VECTOR...

@ ATOMIC_SWAP

Val, OUTCHAIN = ATOMIC_SWAP(INCHAIN, ptr, amt) Val, OUTCHAIN = ATOMIC_LOAD_[OpName](INCHAIN,...

@ FFREXP

FFREXP - frexp, extract fractional and exponent component of a floating-point value.

@ FP_ROUND

X = FP_ROUND(Y, TRUNC) - Rounding 'Y' from a larger floating point type down to the precision of the ...

@ VECTOR_COMPRESS

VECTOR_COMPRESS(Vec, Mask, Passthru) consecutively place vector elements based on mask e....

@ SPONENTRY

SPONENTRY - Represents the llvm.sponentry intrinsic.

@ ZERO_EXTEND_VECTOR_INREG

ZERO_EXTEND_VECTOR_INREG(Vector) - This operator represents an in-register zero-extension of the low ...

@ ADDRSPACECAST

ADDRSPACECAST - This operator converts between pointers of different address spaces.

@ EXPERIMENTAL_VECTOR_HISTOGRAM

@ INLINEASM

INLINEASM - Represents an inline asm block.

@ FP_TO_SINT_SAT

FP_TO_[US]INT_SAT - Convert floating point value in operand 0 to a signed or unsigned scalar integer ...

@ EH_SJLJ_SETJMP

RESULT, OUTCHAIN = EH_SJLJ_SETJMP(INCHAIN, buffer) This corresponds to the eh.sjlj....

@ TRUNCATE

TRUNCATE - Completely drop the high bits.

@ VAARG

VAARG - VAARG has four operands: an input chain, a pointer, a SRCVALUE, and the alignment.

@ BRCOND

BRCOND - Conditional branch.

@ SHL_PARTS

SHL_PARTS/SRA_PARTS/SRL_PARTS - These operators are used for expanded integer shift operations.

@ CATCHRET

CATCHRET - Represents a return from a catch block funclet.

@ AssertSext

AssertSext, AssertZext - These nodes record if a register contains a value that has already been zero...

@ FCOPYSIGN

FCOPYSIGN(X, Y) - Return the value of X with the sign of Y.

@ SADDSAT

RESULT = [US]ADDSAT(LHS, RHS) - Perform saturation addition on 2 integers with the same bit width (W)...

@ CALLSEQ_START

CALLSEQ_START/CALLSEQ_END - These operators mark the beginning and end of a call sequence,...

@ VECTOR_DEINTERLEAVE

VECTOR_DEINTERLEAVE(VEC1, VEC2) - Returns two vectors with all input and output vectors having the sa...

@ GET_DYNAMIC_AREA_OFFSET

GET_DYNAMIC_AREA_OFFSET - get offset from native SP to the address of the most recent dynamic alloca.

@ SET_FPENV_MEM

Sets the current floating point environment.

@ FMINIMUMNUM

FMINIMUMNUM/FMAXIMUMNUM - minimumnum/maximumnum that is same with FMINNUM_IEEE and FMAXNUM_IEEE besid...

@ TRUNCATE_SSAT_S

TRUNCATE_[SU]SAT_[SU] - Truncate for saturated operand [SU] located in middle, prefix for SAT means i...

@ ABDS

ABDS/ABDU - Absolute difference - Return the absolute difference between two numbers interpreted as s...

@ ADJUST_TRAMPOLINE

ADJUST_TRAMPOLINE - This corresponds to the adjust_trampoline intrinsic.

@ SADDO_CARRY

Carry-using overflow-aware nodes for multiple precision addition and subtraction.

@ INTRINSIC_W_CHAIN

RESULT,OUTCHAIN = INTRINSIC_W_CHAIN(INCHAIN, INTRINSICID, arg1, ...) This node represents a target in...

@ BUILD_VECTOR

BUILD_VECTOR(ELT0, ELT1, ELT2, ELT3,...) - Return a fixed-width vector with the specified,...

bool isIndexTypeSigned(MemIndexType IndexType)

bool isExtVecInRegOpcode(unsigned Opcode)

NodeType getExtForLoadExtType(bool IsFP, LoadExtType)

bool isFPEqualitySetCC(CondCode Code)

Return true if this is a setcc instruction that performs an equality comparison when used with floati...

bool isExtOpcode(unsigned Opcode)

static const int LAST_LOADEXT_TYPE

bool isVPBinaryOp(unsigned Opcode)

Whether this is a vector-predicated binary operation opcode.

CondCode getSetCCInverse(CondCode Operation, EVT Type)

Return the operation corresponding to !(X op Y), where 'op' is a valid SetCC operation.

std::optional< unsigned > getBaseOpcodeForVP(unsigned Opcode, bool hasFPExcept)

Translate this VP Opcode to its corresponding non-VP Opcode.

bool isBitwiseLogicOp(unsigned Opcode)

Whether this is bitwise logic opcode.

bool isTrueWhenEqual(CondCode Cond)

Return true if the specified condition returns true if the two operands to the condition are equal.

std::optional< unsigned > getVPMaskIdx(unsigned Opcode)

The operand position of the vector mask.

static const int LAST_MEM_INDEX_TYPE

unsigned getUnorderedFlavor(CondCode Cond)

This function returns 0 if the condition is always false if an operand is a NaN, 1 if the condition i...

std::optional< unsigned > getVPExplicitVectorLengthIdx(unsigned Opcode)

The operand position of the explicit vector length parameter.

CondCode getSetCCSwappedOperands(CondCode Operation)

Return the operation corresponding to (Y op X) when given the operation for (X op Y).

std::optional< unsigned > getVPForBaseOpcode(unsigned Opcode)

Translate this non-VP Opcode to its corresponding VP Opcode.

MemIndexType

MemIndexType enum - This enum defines how to interpret MGATHER/SCATTER's index parameter when calcula...

bool isSignedIntSetCC(CondCode Code)

Return true if this is a setcc instruction that performs a signed comparison when used with integer o...

NodeType getInverseMinMaxOpcode(unsigned MinMaxOpc)

Given a MinMaxOpc of ISD::(U|S)MIN or ISD::(U|S)MAX, returns ISD::(U|S)MAX and ISD::(U|S)MIN,...

bool isVPReduction(unsigned Opcode)

Whether this is a vector-predicated reduction opcode.

MemIndexedMode

MemIndexedMode enum - This enum defines the load / store indexed addressing modes.

CondCode

ISD::CondCode enum - These are ordered carefully to make the bitfields below work out,...

NodeType getVecReduceBaseOpcode(unsigned VecReduceOpcode)

Get underlying scalar opcode for VECREDUCE opcode.

LoadExtType

LoadExtType enum - This enum defines the three variants of LOADEXT (load with extension).

bool isUnsignedIntSetCC(CondCode Code)

Return true if this is a setcc instruction that performs an unsigned comparison when used with intege...

static const int LAST_INDEXED_MODE

bool isVPOpcode(unsigned Opcode)

Whether this is a vector-predicated Opcode.

CondCode getSetCCOrOperation(CondCode Op1, CondCode Op2, EVT Type)

Return the result of a logical OR between different comparisons of identical values: ((X op1 Y) | (X ...

bool isIntEqualitySetCC(CondCode Code)

Return true if this is a setcc instruction that performs an equality comparison when used with intege...

This is an optimization pass for GlobalISel generic memory operations.