LLVM: lib/Target/PowerPC/PPCInstrInfo.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_LIB_TARGET_POWERPC_PPCINSTRINFO_H

14#define LLVM_LIB_TARGET_POWERPC_PPCINSTRINFO_H

15

22

23#define GET_INSTRINFO_HEADER

24#include "PPCGenInstrInfo.inc"

25

26namespace llvm {

27

28

29

30

31

33

35

37

38

40

41

43

45

47

49

51

53

55

57};

58

59

60

62 unsigned Imm : 16;

65};

66

67

90

91

103

104

105#define NoInstr PPC::INSTRUCTION_LIST_END

106#define Pwr8LoadOpcodes \

107 {PPC::LWZ, \

108 PPC::LD, \

109 PPC::LFD, \

110 PPC::LFS, \

111 PPC::RESTORE_CR, \

112 PPC::RESTORE_CRBIT, \

113 PPC::LVX, \

114 PPC::LXVD2X, \

115 PPC::LXSDX, \

116 PPC::LXSSPX, \

117 PPC::SPILLTOVSR_LD, \

118 NoInstr, \

119 NoInstr, \

120 NoInstr, \

121 NoInstr, \

122 NoInstr, \

123 NoInstr, \

124 PPC::EVLDD, \

125 PPC::RESTORE_QUADWORD}

126

127#define Pwr9LoadOpcodes \

128 {PPC::LWZ, \

129 PPC::LD, \

130 PPC::LFD, \

131 PPC::LFS, \

132 PPC::RESTORE_CR, \

133 PPC::RESTORE_CRBIT, \

134 PPC::LVX, \

135 PPC::LXV, \

136 PPC::DFLOADf64, \

137 PPC::DFLOADf32, \

138 PPC::SPILLTOVSR_LD, \

139 NoInstr, \

140 NoInstr, \

141 NoInstr, \

142 NoInstr, \

143 NoInstr, \

144 NoInstr, \

145 NoInstr, \

146 PPC::RESTORE_QUADWORD}

147

148#define Pwr10LoadOpcodes \

149 {PPC::LWZ, \

150 PPC::LD, \

151 PPC::LFD, \

152 PPC::LFS, \

153 PPC::RESTORE_CR, \

154 PPC::RESTORE_CRBIT, \

155 PPC::LVX, \

156 PPC::LXV, \

157 PPC::DFLOADf64, \

158 PPC::DFLOADf32, \

159 PPC::SPILLTOVSR_LD, \

160 PPC::LXVP, \

161 PPC::RESTORE_ACC, \

162 PPC::RESTORE_UACC, \

163 NoInstr, \

164 NoInstr, \

165 NoInstr, \

166 NoInstr, \

167 PPC::RESTORE_QUADWORD}

168

169#define FutureLoadOpcodes \

170 {PPC::LWZ, \

171 PPC::LD, \

172 PPC::LFD, \

173 PPC::LFS, \

174 PPC::RESTORE_CR, \

175 PPC::RESTORE_CRBIT, \

176 PPC::LVX, \

177 PPC::LXV, \

178 PPC::DFLOADf64, \

179 PPC::DFLOADf32, \

180 PPC::SPILLTOVSR_LD, \

181 PPC::LXVP, \

182 PPC::RESTORE_ACC, \

183 PPC::RESTORE_UACC, \

184 PPC::RESTORE_WACC, \

185 PPC::RESTORE_DMRP, \

186 PPC::RESTORE_DMR, \

187 NoInstr, \

188 PPC::RESTORE_QUADWORD}

189

190#define Pwr8StoreOpcodes \

191 {PPC::STW, \

192 PPC::STD, \

193 PPC::STFD, \

194 PPC::STFS, \

195 PPC::SPILL_CR, \

196 PPC::SPILL_CRBIT, \

197 PPC::STVX, \

198 PPC::STXVD2X, \

199 PPC::STXSDX, \

200 PPC::STXSSPX, \

201 PPC::SPILLTOVSR_ST, \

202 NoInstr, \

203 NoInstr, \

204 NoInstr, \

205 NoInstr, \

206 NoInstr, \

207 NoInstr, \

208 PPC::EVSTDD, \

209 PPC::SPILL_QUADWORD}

210

211#define Pwr9StoreOpcodes \

212 {PPC::STW, \

213 PPC::STD, \

214 PPC::STFD, \

215 PPC::STFS, \

216 PPC::SPILL_CR, \

217 PPC::SPILL_CRBIT, \

218 PPC::STVX, \

219 PPC::STXV, \

220 PPC::DFSTOREf64, \

221 PPC::DFSTOREf32, \

222 PPC::SPILLTOVSR_ST, \

223 NoInstr, \

224 NoInstr, \

225 NoInstr, \

226 NoInstr, \

227 NoInstr, \

228 NoInstr, \

229 NoInstr, \

230 PPC::SPILL_QUADWORD}

231

232#define Pwr10StoreOpcodes \

233 {PPC::STW, \

234 PPC::STD, \

235 PPC::STFD, \

236 PPC::STFS, \

237 PPC::SPILL_CR, \

238 PPC::SPILL_CRBIT, \

239 PPC::STVX, \

240 PPC::STXV, \

241 PPC::DFSTOREf64, \

242 PPC::DFSTOREf32, \

243 PPC::SPILLTOVSR_ST, \

244 PPC::STXVP, \

245 PPC::SPILL_ACC, \

246 PPC::SPILL_UACC, \

247 NoInstr, \

248 NoInstr, \

249 NoInstr, \

250 NoInstr, \

251 PPC::SPILL_QUADWORD}

252

253#define FutureStoreOpcodes \

254 {PPC::STW, \

255 PPC::STD, \

256 PPC::STFD, \

257 PPC::STFS, \

258 PPC::SPILL_CR, \

259 PPC::SPILL_CRBIT, \

260 PPC::STVX, \

261 PPC::STXV, \

262 PPC::DFSTOREf64, \

263 PPC::DFSTOREf32, \

264 PPC::SPILLTOVSR_ST, \

265 PPC::STXVP, \

266 PPC::SPILL_ACC, \

267 PPC::SPILL_UACC, \

268 PPC::SPILL_WACC, \

269 PPC::SPILL_DMRP, \

270 PPC::SPILL_DMR, \

271 NoInstr, \

272 PPC::SPILL_QUADWORD}

273

274

275#define StoreOpcodesForSpill \

276 { Pwr8StoreOpcodes, Pwr9StoreOpcodes, Pwr10StoreOpcodes, FutureStoreOpcodes }

277#define LoadOpcodesForSpill \

278 { Pwr8LoadOpcodes, Pwr9LoadOpcodes, Pwr10LoadOpcodes, FutureLoadOpcodes }

279

280class PPCSubtarget;

288

289 void StoreRegToStackSlot(MachineFunction &MF, unsigned SrcReg, bool isKill,

293 unsigned DestReg, int FrameIdx,

296

297

298

300 unsigned OpNoForForwarding, MachineInstr **KilledDef) const;

301

302

304 unsigned OpNoForForwarding) const;

305

306

308 unsigned ConstantOpNo,

310

311

314 bool KillDefMI) const;

315

316

317

318

319

321 unsigned &OpNoForForwarding,

322 bool &SeenIntermediateUse) const;

323

324

325

327 unsigned OpNoForForwarding) const;

332 bool isImmElgibleForForwarding(const MachineOperand &ImmMO,

335 int64_t &Imm,

336 int64_t BaseImm = 0) const;

337 bool isRegElgibleForForwarding(const MachineOperand &RegMO,

340 bool &IsFwdFeederRegKilled,

341 bool &SeenIntermediateUse) const;

342 unsigned getSpillTarget() const;

346 int16_t getFMAOpIdxInfo(unsigned Opcode) const;

354 virtual void anchor();

355

356protected:

357

358

359

360

361

362

363

364

365

366

368 unsigned OpIdx1,

369 unsigned OpIdx2) const override;

370

371public:

373

376

377

378

379

380

382

398

400 unsigned CopyOpcodes[] = {PPC::OR, PPC::OR8, PPC::FMR,

401 PPC::VOR, PPC::XXLOR, PPC::XXLORf,

402 PPC::XSCPSGNDP, PPC::MCRF, PPC::CROR,

403 PPC::EVOR, -1U};

404 for (int i = 0; CopyOpcodes[i] != -1U; i++)

405 if (Opcode == CopyOpcodes[i])

406 return true;

407 return false;

408 }

409

417

424

435

442

445 unsigned *PredCost = nullptr) const override;

446

449 unsigned DefIdx,

451 unsigned UseIdx) const override;

453 SDNode *DefNode, unsigned DefIdx,

455 unsigned UseIdx) const override {

456 return PPCGenInstrInfo::getOperandLatency(ItinData, DefNode, DefIdx,

457 UseNode, UseIdx);

458 }

459

462 unsigned DefIdx) const override {

463

464

465

466 return false;

467 }

468

472

473

474

480

481

482

483

485 bool DoRegPressureReduce) const;

486

488

489

490

491

494 bool DoRegPressureReduce) const override;

495

496

497

498

499

503

504

505

506 void

509

511 bool Invert) const override;

512

513

514

515

516

517

518

519

520

522

523

524

527

530 unsigned &SubIdx) const override;

532 int &FrameIndex) const override;

535 int &FrameIndex) const override;

536

538 unsigned &SrcOpIdx2) const override;

539

542

543

544

548 bool AllowModify) const override;

550 int *BytesRemoved = nullptr) const override;

554 int *BytesAdded = nullptr) const override;

555

556

559 int &) const override;

563 Register FalseReg) const override;

564

567 bool KillSrc, bool RenamableDest = false,

568 bool RenamableSrc = false) const override;

569

573

576

577

578

579

582 unsigned SrcReg, bool isKill, int FrameIndex,

584

588

591

592

593

594

597 unsigned DestReg, int FrameIndex,

599

601

603

604 bool

606

609

612

613

614

615

617 unsigned NumCycles, unsigned ExtraPredCycles,

619 return true;

620 }

621

623 unsigned NumT, unsigned ExtraT,

625 unsigned NumF, unsigned ExtraF,

627

632

637

638

640

644

647

650

652 bool SkipDead) const override;

653

654

655

657 Register &SrcReg2, int64_t &Mask,

658 int64_t &Value) const override;

659

663

664

665

666

667

672

674

675

676

682

683

684

686 int64_t Offset1, bool OffsetIsScalable1,

688 int64_t Offset2, bool OffsetIsScalable2,

689 unsigned ClusterSize,

690 unsigned NumBytes) const override;

691

692

693

694 bool

697

698

699

700

702

704

705 std::pair<unsigned, unsigned>

707

710

711

713

714

716

719

721

722 std::pair<bool, bool>

725

726

731

732

739 unsigned BinOpDepth,

741

750 unsigned &XFormOpcode,

751 int64_t &OffsetOfImmInstr,

755 int64_t OffsetImm) const;

756

759 int64_t Imm) const;

760

762 bool PostRA) const;

763

764

765

767 bool &SeenIntermediateUse) const;

768

769

773 int64_t Imm) const;

774

775

776 bool isBDNZ(unsigned Opcode) const;

777

778

779

780

781

785

786

787

788 std::unique_ptrTargetInstrInfo::PipelinerLoopInfo

790};

791

792}

793

794#endif

unsigned const MachineRegisterInfo * MRI

MachineInstrBuilder & UseMI

MachineInstrBuilder MachineInstrBuilder & DefMI

MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL

MachineBasicBlock MachineBasicBlock::iterator MBBI

Register const TargetRegisterInfo * TRI

uint64_t IntrinsicInst * II

#define LoadOpcodesForSpill

Definition PPCInstrInfo.h:277

#define StoreOpcodesForSpill

Definition PPCInstrInfo.h:275

const SmallVectorImpl< MachineOperand > MachineBasicBlock * TBB

const SmallVectorImpl< MachineOperand > & Cond

This file defines the SmallSet class.

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

This is an important base class in LLVM.

Itinerary data supplied by a subtarget to be used by a target.

Instances of this class represent a single low-level machine instruction.

MachineInstrBundleIterator< MachineInstr > iterator

Representation of each machine instruction.

MachineOperand class - Representation of each machine instruction operand.

MachineRegisterInfo - Keep track of information for virtual and physical registers,...

Register isLoadFromStackSlot(const MachineInstr &MI, int &FrameIndex) const override

Register isStoreToStackSlot(const MachineInstr &MI, int &FrameIndex) const override

bool isSchedulingBoundary(const MachineInstr &MI, const MachineBasicBlock *MBB, const MachineFunction &MF) const override

bool getFMAPatterns(MachineInstr &Root, SmallVectorImpl< unsigned > &Patterns, bool DoRegPressureReduce) const

Return true when there is potentially a faster code sequence for a fma chain ending in Root.

bool combineRLWINM(MachineInstr &MI, MachineInstr **ToErase=nullptr) const

bool isReMaterializableImpl(const MachineInstr &MI) const override

PPCInstrInfo(const PPCSubtarget &STI)

const TargetRegisterClass * updatedRC(const TargetRegisterClass *RC) const

bool isPredicated(const MachineInstr &MI) const override

bool expandVSXMemPseudo(MachineInstr &MI) const

bool onlyFoldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, Register Reg) const

int getExtendResourceLenLimit() const override

On PowerPC, we try to reassociate FMA chain which will increase instruction size.

Definition PPCInstrInfo.h:521

bool isPrefixed(unsigned Opcode) const

Definition PPCInstrInfo.h:386

void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, const DebugLoc &DL, Register DestReg, Register SrcReg, bool KillSrc, bool RenamableDest=false, bool RenamableSrc=false) const override

void finalizeInsInstrs(MachineInstr &Root, unsigned &Pattern, SmallVectorImpl< MachineInstr * > &InsInstrs) const override

Fixup the placeholders we put in genAlternativeCodeSequence() for MachineCombiner.

MCInst getNop() const override

Return the noop instruction to use for a noop.

void storeRegToStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC, Register VReg, MachineInstr::MIFlag Flags=MachineInstr::NoFlags) const override

static int getRecordFormOpcode(unsigned Opcode)

MachineInstr * commuteInstructionImpl(MachineInstr &MI, bool NewMI, unsigned OpIdx1, unsigned OpIdx2) const override

Commutes the operands in the given instruction.

bool isXFormMemOp(unsigned Opcode) const

Definition PPCInstrInfo.h:383

const PPCRegisterInfo & getRegisterInfo() const

getRegisterInfo - TargetInstrInfo is a superset of MRegister info.

Definition PPCInstrInfo.h:381

CombinerObjective getCombinerObjective(unsigned Pattern) const override

unsigned getStoreOpcodeForSpill(const TargetRegisterClass *RC) const

unsigned getLoadOpcodeForSpill(const TargetRegisterClass *RC) const

void promoteInstr32To64ForElimEXTSW(const Register &Reg, MachineRegisterInfo *MRI, unsigned BinOpDepth, LiveVariables *LV) const

bool isTOCSaveMI(const MachineInstr &MI) const

ScheduleHazardRecognizer * CreateTargetPostRAHazardRecognizer(const InstrItineraryData *II, const ScheduleDAG *DAG) const override

CreateTargetPostRAHazardRecognizer - Return the postRA hazard recognizer to use for this target when ...

bool isSExt32To64(unsigned Opcode) const

Definition PPCInstrInfo.h:389

bool foldImmediate(MachineInstr &UseMI, MachineInstr &DefMI, Register Reg, MachineRegisterInfo *MRI) const override

bool isBDNZ(unsigned Opcode) const

Check Opcode is BDNZ (Decrement CTR and branch if it is still nonzero).

std::optional< unsigned > getOperandLatency(const InstrItineraryData *ItinData, SDNode *DefNode, unsigned DefIdx, SDNode *UseNode, unsigned UseIdx) const override

Definition PPCInstrInfo.h:452

bool reverseBranchCondition(SmallVectorImpl< MachineOperand > &Cond) const override

bool isZeroExtended(const unsigned Reg, const MachineRegisterInfo *MRI) const

Definition PPCInstrInfo.h:733

std::pair< unsigned, unsigned > decomposeMachineOperandsTargetFlags(unsigned TF) const override

std::pair< bool, bool > isSignOrZeroExtended(const unsigned Reg, const unsigned BinOpDepth, const MachineRegisterInfo *MRI) const

bool expandPostRAPseudo(MachineInstr &MI) const override

bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumCycles, unsigned ExtraPredCycles, BranchProbability Probability) const override

Definition PPCInstrInfo.h:616

void insertNoop(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const override

bool isValidToBeChangedReg(MachineInstr *ADDMI, unsigned Index, MachineInstr *&ADDIMI, int64_t &OffsetAddi, int64_t OffsetImm) const

bool optimizeCompareInstr(MachineInstr &CmpInstr, Register SrcReg, Register SrcReg2, int64_t Mask, int64_t Value, const MachineRegisterInfo *MRI) const override

ArrayRef< std::pair< unsigned, const char * > > getSerializableDirectMachineOperandTargetFlags() const override

std::optional< unsigned > getOperandLatency(const InstrItineraryData *ItinData, const MachineInstr &DefMI, unsigned DefIdx, const MachineInstr &UseMI, unsigned UseIdx) const override

void materializeImmPostRA(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, const DebugLoc &DL, Register Reg, int64_t Imm) const

bool isADDInstrEligibleForFolding(MachineInstr &ADDMI) const

bool isZExt32To64(unsigned Opcode) const

Definition PPCInstrInfo.h:392

bool areMemAccessesTriviallyDisjoint(const MachineInstr &MIa, const MachineInstr &MIb) const override

Return true if two MIs access different memory addresses and false otherwise.

bool SubsumesPredicate(ArrayRef< MachineOperand > Pred1, ArrayRef< MachineOperand > Pred2) const override

ScheduleHazardRecognizer * CreateTargetHazardRecognizer(const TargetSubtargetInfo *STI, const ScheduleDAG *DAG) const override

CreateTargetHazardRecognizer - Return the hazard recognizer to use for this target when scheduling th...

static bool isSameClassPhysRegCopy(unsigned Opcode)

Definition PPCInstrInfo.h:399

bool canInsertSelect(const MachineBasicBlock &, ArrayRef< MachineOperand > Cond, Register, Register, Register, int &, int &, int &) const override

bool getMemOperandsWithOffsetWidth(const MachineInstr &LdSt, SmallVectorImpl< const MachineOperand * > &BaseOps, int64_t &Offset, bool &OffsetIsScalable, LocationSize &Width, const TargetRegisterInfo *TRI) const override

Get the base operand and byte offset of an instruction that reads/writes memory.

void setSpecialOperandAttr(MachineInstr &MI, uint32_t Flags) const

bool isADDIInstrEligibleForFolding(MachineInstr &ADDIMI, int64_t &Imm) const

bool useMachineCombiner() const override

Definition PPCInstrInfo.h:469

void loadRegFromStackSlotNoUpd(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned DestReg, int FrameIndex, const TargetRegisterClass *RC) const

void loadRegFromStackSlot(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, Register DestReg, int FrameIndex, const TargetRegisterClass *RC, Register VReg, MachineInstr::MIFlag Flags=MachineInstr::NoFlags) const override

bool foldFrameOffset(MachineInstr &MI) const

bool isLoadFromConstantPool(MachineInstr *I) const

MachineInstr * findLoopInstr(MachineBasicBlock &PreHeader, SmallPtrSet< MachineBasicBlock *, 8 > &Visited) const

Find the hardware loop instruction used to set-up the specified loop.

unsigned removeBranch(MachineBasicBlock &MBB, int *BytesRemoved=nullptr) const override

unsigned getInstrLatency(const InstrItineraryData *ItinData, const MachineInstr &MI, unsigned *PredCost=nullptr) const override

void storeRegToStackSlotNoUpd(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, unsigned SrcReg, bool isKill, int FrameIndex, const TargetRegisterClass *RC) const

bool isProfitableToUnpredicate(MachineBasicBlock &TMBB, MachineBasicBlock &FMBB) const override

Definition PPCInstrInfo.h:633

bool isCoalescableExtInstr(const MachineInstr &MI, Register &SrcReg, Register &DstReg, unsigned &SubIdx) const override

bool convertToImmediateForm(MachineInstr &MI, SmallSet< Register, 4 > &RegsToUpdate, MachineInstr **KilledDef=nullptr) const

bool isAssociativeAndCommutative(const MachineInstr &Inst, bool Invert) const override

bool analyzeCompare(const MachineInstr &MI, Register &SrcReg, Register &SrcReg2, int64_t &Mask, int64_t &Value) const override

bool hasLowDefLatency(const TargetSchedModel &SchedModel, const MachineInstr &DefMI, unsigned DefIdx) const override

Definition PPCInstrInfo.h:460

bool isProfitableToDupForIfCvt(MachineBasicBlock &MBB, unsigned NumCycles, BranchProbability Probability) const override

Definition PPCInstrInfo.h:628

bool getMemOperandWithOffsetWidth(const MachineInstr &LdSt, const MachineOperand *&BaseOp, int64_t &Offset, LocationSize &Width, const TargetRegisterInfo *TRI) const

Return true if get the base operand, byte offset of an instruction and the memory width.

bool isMemriOp(unsigned Opcode) const

Definition PPCInstrInfo.h:395

unsigned insertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, ArrayRef< MachineOperand > Cond, const DebugLoc &DL, int *BytesAdded=nullptr) const override

static bool hasTLSFlag(unsigned TF)

Definition PPCInstrInfo.h:425

bool shouldReduceRegisterPressure(const MachineBasicBlock *MBB, const RegisterClassInfo *RegClassInfo) const override

On PowerPC, we leverage machine combiner pass to reduce register pressure when the register pressure ...

void genAlternativeCodeSequence(MachineInstr &Root, unsigned Pattern, SmallVectorImpl< MachineInstr * > &InsInstrs, SmallVectorImpl< MachineInstr * > &DelInstrs, DenseMap< Register, unsigned > &InstrIdxForVirtReg) const override

When getMachineCombinerPatterns() finds patterns, this function generates the instructions that could...

bool isSignExtended(const unsigned Reg, const MachineRegisterInfo *MRI) const

Definition PPCInstrInfo.h:727

void replaceInstrOperandWithImm(MachineInstr &MI, unsigned OpNo, int64_t Imm) const

unsigned getInstSizeInBytes(const MachineInstr &MI) const override

GetInstSize - Return the number of bytes of code the specified instruction may be.

std::unique_ptr< TargetInstrInfo::PipelinerLoopInfo > analyzeLoopForPipelining(MachineBasicBlock *LoopBB) const override

Analyze loop L, which must be a single-basic-block loop, and if the conditions can be understood enou...

bool shouldClusterMemOps(ArrayRef< const MachineOperand * > BaseOps1, int64_t Offset1, bool OffsetIsScalable1, ArrayRef< const MachineOperand * > BaseOps2, int64_t Offset2, bool OffsetIsScalable2, unsigned ClusterSize, unsigned NumBytes) const override

Returns true if the two given memory operations should be scheduled adjacent.

static bool hasPCRelFlag(unsigned TF)

Definition PPCInstrInfo.h:410

void replaceInstrWithLI(MachineInstr &MI, const LoadImmediateInfo &LII) const

bool isImmInstrEligibleForFolding(MachineInstr &MI, unsigned &BaseReg, unsigned &XFormOpcode, int64_t &OffsetOfImmInstr, ImmInstrInfo &III) const

bool PredicateInstruction(MachineInstr &MI, ArrayRef< MachineOperand > Pred) const override

bool getMachineCombinerPatterns(MachineInstr &Root, SmallVectorImpl< unsigned > &Patterns, bool DoRegPressureReduce) const override

Return true when there is potentially a faster code sequence for an instruction chain ending in <Root...

bool optimizeCmpPostRA(MachineInstr &MI) const

bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify) const override

const Constant * getConstantFromConstantPool(MachineInstr *I) const

bool ClobbersPredicate(MachineInstr &MI, std::vector< MachineOperand > &Pred, bool SkipDead) const override

static bool hasGOTFlag(unsigned TF)

Definition PPCInstrInfo.h:418

void insertSelect(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const DebugLoc &DL, Register DstReg, ArrayRef< MachineOperand > Cond, Register TrueReg, Register FalseReg) const override

bool findCommutedOpIndices(const MachineInstr &MI, unsigned &SrcOpIdx1, unsigned &SrcOpIdx2) const override

bool instrHasImmForm(unsigned Opc, bool IsVFReg, ImmInstrInfo &III, bool PostRA) const

MachineInstr * getDefMIPostRA(unsigned Reg, MachineInstr &MI, bool &SeenIntermediateUse) const

Wrapper class representing virtual and physical registers.

Represents one node in the SelectionDAG.

HazardRecognizer - This determines whether or not an instruction can be issued this cycle,...

SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.

SmallSet - This maintains a set of unique values, optimizing for the case when the set is small (less...

This class consists of common code factored out of the SmallVector class to reduce code duplication b...

virtual void setSpecialOperandAttr(MachineInstr &OldMI1, MachineInstr &OldMI2, MachineInstr &NewMI1, MachineInstr &NewMI2) const

This is an architecture-specific helper function of reassociateOps.

TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...

Provide an instruction scheduling machine model to CodeGen passes.

TargetSubtargetInfo - Generic base class for all target subtargets.

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

LLVM Value Representation.

@ ZExt32To64

This instruction produced a zero extended result.

@ SExt32To64

This instruction produced a sign extended result.

@ Prefixed

This instruction is prefixed.

@ MemriOp

This instruction takes a register+immediate memory operand.

@ XFormMemOp

This instruction is an X-Form memory operation.

@ MO_TPREL_PCREL_FLAG

MO_TPREL_PCREL_FLAG = MO_PCREL_FLAG | MO_TPREL_FLAG.

@ MO_GOT_TPREL_PCREL_FLAG

MO_GOT_TPREL_PCREL_FLAG - A combintaion of flags, if these bits are set they should produce the reloc...

@ MO_GOT_PCREL_FLAG

MO_GOT_PCREL_FLAG = MO_PCREL_FLAG | MO_GOT_FLAG.

@ MO_TLSGDM_FLAG

MO_TLSGDM_FLAG - If this bit is set the symbol reference is relative to the region handle of TLS Gene...

@ MO_PCREL_FLAG

MO_PCREL_FLAG - If this bit is set, the symbol reference is relative to the current instruction addre...

@ MO_TLSLD_FLAG

MO_TLSLD_FLAG - If this bit is set the symbol reference is relative to TLS Local Dynamic model.

@ MO_TLS_PCREL_FLAG

MO_TPREL_PCREL_FLAG = MO_PCREL_FLAG | MO_TLS.

@ MO_GOT_FLAG

MO_GOT_FLAG - If this bit is set the symbol reference is to be computed via the GOT.

@ MO_DTPREL_LO

These values identify relocations on immediates folded into memory operations.

@ MO_TLS

Symbol for VK_TLS fixup attached to an ADD instruction.

@ MO_TPREL_FLAG

MO_TPREL_FLAG - If this bit is set, the symbol reference is relative to the thread pointer and the sy...

@ MO_GOT_TLSLD_PCREL_FLAG

MO_GOT_TLSLD_PCREL_FLAG - A combintaion of flags, if these bits are set they should produce the reloc...

@ MO_TLSGD_FLAG

MO_TLSGD_FLAG - If this bit is set the symbol reference is relative to TLS General Dynamic model for ...

@ MO_GOT_TLSGD_PCREL_FLAG

MO_GOT_TLSGD_PCREL_FLAG - A combintaion of flags, if these bits are set they should produce the reloc...

This is an optimization pass for GlobalISel generic memory operations.

decltype(auto) get(const PointerIntPair< PointerTy, IntBits, IntType, PtrTraits, Info > &Pair)

CombinerObjective

The combiner's goal may differ based on which pattern it is attempting to optimize.

PPCMachineCombinerPattern

Definition PPCInstrInfo.h:92

@ REASSOC_XY_BCA

Definition PPCInstrInfo.h:99

@ REASSOC_XY_BAC

Definition PPCInstrInfo.h:100

@ REASSOC_XY_AMM_BMM

Definition PPCInstrInfo.h:94

@ REASSOC_XMM_AMM_BMM

Definition PPCInstrInfo.h:95

SpillOpcodeKey

Definition PPCInstrInfo.h:68

@ SOK_CRBitSpill

Definition PPCInstrInfo.h:74

@ SOK_VSXVectorSpill

Definition PPCInstrInfo.h:76

@ SOK_SpillToVSR

Definition PPCInstrInfo.h:79

@ SOK_Int4Spill

Definition PPCInstrInfo.h:69

@ SOK_PairedVecSpill

Definition PPCInstrInfo.h:80

@ SOK_VectorFloat8Spill

Definition PPCInstrInfo.h:77

@ SOK_UAccumulatorSpill

Definition PPCInstrInfo.h:82

@ SOK_PairedG8Spill

Definition PPCInstrInfo.h:87

@ SOK_DMRSpill

Definition PPCInstrInfo.h:85

@ SOK_VectorFloat4Spill

Definition PPCInstrInfo.h:78

@ SOK_Float8Spill

Definition PPCInstrInfo.h:71

@ SOK_Float4Spill

Definition PPCInstrInfo.h:72

@ SOK_VRVectorSpill

Definition PPCInstrInfo.h:75

@ SOK_WAccumulatorSpill

Definition PPCInstrInfo.h:83

@ SOK_SPESpill

Definition PPCInstrInfo.h:86

@ SOK_CRSpill

Definition PPCInstrInfo.h:73

@ SOK_AccumulatorSpill

Definition PPCInstrInfo.h:81

@ SOK_Int8Spill

Definition PPCInstrInfo.h:70

@ SOK_LastOpcodeSpill

Definition PPCInstrInfo.h:88

@ SOK_DMRpSpill

Definition PPCInstrInfo.h:84

Definition PPCInstrInfo.h:32

uint64_t SignedImm

Definition PPCInstrInfo.h:34

uint64_t IsSummingOperands

Definition PPCInstrInfo.h:56

uint64_t ImmOpcode

Definition PPCInstrInfo.h:50

uint64_t ImmOpNo

Definition PPCInstrInfo.h:48

uint64_t OpNoForForwarding

Definition PPCInstrInfo.h:46

uint64_t ImmMustBeMultipleOf

Definition PPCInstrInfo.h:36

uint64_t IsCommutative

Definition PPCInstrInfo.h:44

uint64_t ImmWidth

Definition PPCInstrInfo.h:52

uint64_t ZeroIsSpecialNew

Definition PPCInstrInfo.h:42

uint64_t TruncateImmTo

Definition PPCInstrInfo.h:54

uint64_t ZeroIsSpecialOrig

Definition PPCInstrInfo.h:39