LLVM 23.0.0git
X86.h
Go to the documentation of this file.
1//===-- X86.h - Top-level interface for X86 representation ------*- 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 entry points for global functions defined in the x86
10// target library, as used by the LLVM JIT.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_X86_X86_H
15#define LLVM_LIB_TARGET_X86_X86_H
16
18#include "llvm/IR/Analysis.h"
19#include "llvm/IR/Module.h"
20#include "llvm/IR/PassManager.h"
21#include "llvm/PassInfo.h"
24
25namespace llvm {
26
27class FunctionPass;
29class PassRegistry;
31class X86Subtarget;
33
34/// This pass converts a legalized DAG into a X86-specific DAG, ready for
35/// instruction scheduling.
37
38/// This pass initializes a global base register for PIC on x86-32.
40 : public OptionalPassInfoMixin<X86GlobalBaseRegPass> {
41public:
44};
45
47
48/// This pass combines multiple accesses to local-dynamic TLS variables so that
49/// the TLS base address for the module is only fetched once per execution path
50/// through the function.
52 : public OptionalPassInfoMixin<X86CleanupLocalDynamicTLSPass> {
53public:
56};
57
59
60/// This function returns a pass which converts floating-point register
61/// references and pseudo instructions into floating-point stack references and
62/// physical instructions.
63class X86FPStackifierPass : public OptionalPassInfoMixin<X86FPStackifierPass> {
64public:
67};
68
70
71/// This pass inserts AVX vzeroupper instructions before each call to avoid
72/// transition penalty between functions encoded with AVX and SSE.
74 : public OptionalPassInfoMixin<X86InsertVZeroUpperPass> {
75public:
78};
79
81/// This pass inserts ENDBR instructions before indirect jump/call
82/// destinations as part of CET IBT mechanism.
84 : public OptionalPassInfoMixin<X86IndirectBranchTrackingPass> {
85public:
88};
89
91
92/// Return a pass that pads short functions with NOOPs.
93/// This will prevent a stall when returning on the Atom.
95
96/// Return a pass that selectively replaces certain instructions (like add,
97/// sub, inc, dec, some shifts, and some multiplies) by equivalent LEA
98/// instructions, in order to eliminate execution delays in some processors.
99class X86FixupLEAsPass : public OptionalPassInfoMixin<X86FixupLEAsPass> {
100public:
103};
104
106
107/// Return a pass that replaces equivalent slower instructions with faster
108/// ones.
110 : public OptionalPassInfoMixin<X86FixupInstTuningPass> {
111public:
114};
115
117
118/// Return a pass that reduces the size of vector constant pool loads.
120 : public OptionalPassInfoMixin<X86FixupInstTuningPass> {
121public:
124};
125
127
128/// Return a pass that removes redundant LEA instructions and redundant address
129/// recalculations.
130class X86OptimizeLEAsPass : public OptionalPassInfoMixin<X86OptimizeLEAsPass> {
131public:
134};
135
137
138/// Return a pass that transforms setcc + movzx pairs into xor + setcc.
139class X86FixupSetCCPass : public OptionalPassInfoMixin<X86FixupSetCCPass> {
140public:
143};
144
146
147/// Return a pass that avoids creating store forward block issues in the
148/// hardware.
150 : public OptionalPassInfoMixin<X86AvoidStoreForwardingBlocksPass> {
151public:
154};
155
157
158/// Return a pass that lowers EFLAGS copy pseudo instructions.
160 : public OptionalPassInfoMixin<X86FlagsCopyLoweringPass> {
161public:
164};
165
167
168/// Return a pass that expands DynAlloca pseudo-instructions.
170 : public OptionalPassInfoMixin<X86DynAllocaExpanderPass> {
171public:
174};
175
177
178/// Return a pass that config the tile registers.
179class X86TileConfigPass : public OptionalPassInfoMixin<X86TileConfigPass> {
180public:
183};
184
186
187/// Return a pass that preconfig the tile registers before fast reg allocation.
189 : public OptionalPassInfoMixin<X86FastPreTileConfigPass> {
190public:
193};
194
196
197/// Return a pass that config the tile registers after fast reg allocation.
199 : public OptionalPassInfoMixin<X86FastTileConfigPass> {
200public:
203};
204
206
207/// Return a pass that insert pseudo tile config instruction.
209 : public OptionalPassInfoMixin<X86PreTileConfigPass> {
210public:
213};
214
216
217/// Return a pass that lower the tile copy instruction.
219 : public OptionalPassInfoMixin<X86LowerTileCopyPass> {
220public:
223};
224
226
227/// Return a pass that inserts int3 at the end of the function if it ends with a
228/// CALL instruction. The pass does the same for each funclet as well. This
229/// ensures that the open interval of function start and end PCs contains all
230/// return addresses for the benefit of the Windows x64 unwinder.
232 : public RequiredPassInfoMixin<X86AvoidTrailingCallPass> {
233public:
236};
237
239
240/// Return a pass that optimizes the code-size of x86 call sequences. This is
241/// done by replacing esp-relative movs with pushes.
243 : public OptionalPassInfoMixin<X86CallFrameOptimizationPass> {
244public:
247};
248
250
251/// Return an IR pass that inserts EH registration stack objects and explicit
252/// EH state updates. This pass must run after EH preparation, which does
253/// Windows-specific but architecture-neutral preparation.
254class X86WinEHStatePass : public OptionalPassInfoMixin<X86WinEHStatePass> {
255public:
256 X86WinEHStatePass() = default;
258};
259
261
262/// Return a Machine IR pass that expands X86-specific pseudo
263/// instructions into a sequence of actual instructions. This pass
264/// must run after prologue/epilogue insertion and before lowering
265/// the MachineInstr to MC.
266class X86ExpandPseudoPass : public OptionalPassInfoMixin<X86ExpandPseudoPass> {
267public:
270};
271
273
274/// This pass converts X86 cmov instructions into branch when profitable.
276 : public OptionalPassInfoMixin<X86CmovConversionPass> {
277public:
280};
281
283
284/// Return a Machine IR pass that selectively replaces
285/// certain byte and word instructions by equivalent 32 bit instructions,
286/// in order to eliminate partial register usage, false dependences on
287/// the upper portions of registers, and to save code size.
288class X86FixupBWInstsPass : public OptionalPassInfoMixin<X86FixupBWInstsPass> {
289public:
292};
293
295
296/// Return a Machine IR pass that reassigns instruction chains from one domain
297/// to another, when profitable.
299 : public OptionalPassInfoMixin<X86DomainReassignmentPass> {
300public:
303};
304
306
307/// This pass compress instructions from EVEX space to legacy/VEX/EVEX space when
308/// possible in order to reduce code size or facilitate HW decoding.
309class X86CompressEVEXPass : public OptionalPassInfoMixin<X86CompressEVEXPass> {
310public:
313};
314
316
317/// This pass creates the thunks for the retpoline feature.
319
320/// This pass replaces ret instructions with jmp's to __x86_return thunk.
321class X86ReturnThunksPass : public OptionalPassInfoMixin<X86ReturnThunksPass> {
322public:
325};
326
328
329/// This pass insert wait instruction after X87 instructions which could raise
330/// fp exceptions when strict-fp enabled.
332 : public OptionalPassInfoMixin<X86InsertX87WaitPass> {
333public:
335};
336
338
339/// This pass optimizes arithmetic based on knowledge that is only used by
340/// a reduction sequence and is therefore safe to reassociate in interesting
341/// ways.
343 : public OptionalPassInfoMixin<X86PartialReductionPass> {
344private:
345 const X86TargetMachine *TM;
346
347public:
350};
351
353
354/// // Analyzes and emits pseudos to support Win x64 Unwind V2.
356 : public OptionalPassInfoMixin<X86WinEHUnwindV2Pass> {
357public:
361};
362
364
365/// The pass transforms load/store <256 x i32> to AMX load/store intrinsics
366/// or split the data to two <128 x i32>.
367class X86LowerAMXTypePass : public RequiredPassInfoMixin<X86LowerAMXTypePass> {
368private:
369 const TargetMachine *TM;
370
371public:
372 X86LowerAMXTypePass(const TargetMachine *TM) : TM(TM) {}
374};
375
376FunctionPass *createX86LowerAMXTypeLegacyPass();
377
378// Suppresses APX features for relocations for supporting older linkers.
380 : public OptionalPassInfoMixin<X86SuppressAPXForRelocationPass> {
381public:
384};
385
387
388/// The pass transforms amx intrinsics to scalar operation if the function has
389/// optnone attribute or it is O0.
391 : public RequiredPassInfoMixin<X86LowerAMXIntrinsicsPass> {
392private:
393 const TargetMachine *TM;
394
395public:
398};
399
401
402InstructionSelector *createX86InstructionSelector(const X86TargetMachine &TM,
403 const X86Subtarget &,
404 const X86RegisterBankInfo &);
405
407 : public OptionalPassInfoMixin<X86PostLegalizerCombinerPass> {
408public:
411};
412
414
416 : public PassInfoMixin<X86PreLegalizerCombinerPass> {
417public:
420};
421
423
425 : public OptionalPassInfoMixin<X86LoadValueInjectionLoadHardeningPass> {
426public:
429};
430
432
434 : public OptionalPassInfoMixin<X86LoadValueInjectionRetHardeningPass> {
435public:
438};
439
441
443 : public OptionalPassInfoMixin<
444 X86SpeculativeExecutionSideEffectSuppressionPass> {
445public:
448};
449
451
453 : public OptionalPassInfoMixin<X86SpeculativeLoadHardeningPass> {
454public:
457};
458
460
462 : public OptionalPassInfoMixin<X86ArgumentStackSlotPass> {
463public:
466};
467
469
503 PassRegistry &);
510
511namespace X86AS {
512enum : unsigned {
513 GS = 256,
514 FS = 257,
515 SS = 258,
518 PTR64 = 272
519};
520} // End X86AS namespace
521
522} // End llvm namespace
523
524#endif
Module.h This file contains the declarations for the Module class.
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:54
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
FunctionPass class - This class is used to implement most global optimizations.
Definition Pass.h:314
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:67
PassRegistry - This class manages the registration and intitialization of the pass subsystem as appli...
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
Primary interface to the complete machine description for the target machine.
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that avoids creating store forward block issues in the hardware.
Definition X86.h:150
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that inserts int3 at the end of the function if it ends with a CALL instruction.
Definition X86.h:232
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that optimizes the code-size of x86 call sequences.
Definition X86.h:243
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass combines multiple accesses to local-dynamic TLS variables so that the TLS base address for ...
Definition X86.h:52
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass converts X86 cmov instructions into branch when profitable.
Definition X86.h:276
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass compress instructions from EVEX space to legacy/VEX/EVEX space when possible in order to re...
Definition X86.h:309
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a Machine IR pass that reassigns instruction chains from one domain to another,...
Definition X86.h:299
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that expands DynAlloca pseudo-instructions.
Definition X86.h:170
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a Machine IR pass that expands X86-specific pseudo instructions into a sequence of actual inst...
Definition X86.h:266
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This function returns a pass which converts floating-point register references and pseudo instruction...
Definition X86.h:63
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that preconfig the tile registers before fast reg allocation.
Definition X86.h:189
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that config the tile registers after fast reg allocation.
Definition X86.h:199
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a Machine IR pass that selectively replaces certain byte and word instructions by equivalent 3...
Definition X86.h:288
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that replaces equivalent slower instructions with faster ones.
Definition X86.h:110
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that selectively replaces certain instructions (like add, sub, inc, dec,...
Definition X86.h:99
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that transforms setcc + movzx pairs into xor + setcc.
Definition X86.h:139
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that reduces the size of vector constant pool loads.
Definition X86.h:120
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that lowers EFLAGS copy pseudo instructions.
Definition X86.h:160
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass initializes a global base register for PIC on x86-32.
Definition X86.h:40
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass inserts ENDBR instructions before indirect jump/call destinations as part of CET IBT mechan...
Definition X86.h:84
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass inserts AVX vzeroupper instructions before each call to avoid transition penalty between fu...
Definition X86.h:74
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass insert wait instruction after X87 instructions which could raise fp exceptions when strict-...
Definition X86.h:332
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
X86LowerAMXIntrinsicsPass(const TargetMachine *TM)
Definition X86.h:396
X86LowerAMXTypePass(const TargetMachine *TM)
Definition X86.h:372
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
Return a pass that lower the tile copy instruction.
Definition X86.h:219
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that removes redundant LEA instructions and redundant address recalculations.
Definition X86.h:130
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
X86PartialReductionPass(const X86TargetMachine *TM)
Definition X86.h:348
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that insert pseudo tile config instruction.
Definition X86.h:209
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This class provides the information for the target register banks.
This pass replaces ret instructions with jmp's to __x86_return thunk.
Definition X86.h:321
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that config the tile registers.
Definition X86.h:179
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Pass manager infrastructure for declaring and invalidating analyses.
@ PTR32_UPTR
Definition X86.h:517
@ PTR64
Definition X86.h:518
@ PTR32_SPTR
Definition X86.h:516
This is an optimization pass for GlobalISel generic memory operations.
void initializeX86LoadValueInjectionLoadHardeningLegacyPass(PassRegistry &)
FunctionPass * createX86LowerAMXIntrinsicsLegacyPass()
FunctionPass * createX86CompressEVEXLegacyPass()
FunctionPass * createX86FastTileConfigLegacyPass()
void initializeX86PartialReductionLegacyPass(PassRegistry &)
FunctionPass * createX86DomainReassignmentLegacyPass()
FunctionPass * createX86ExpandPseudoLegacyPass()
Returns an instance of the pseudo instruction expansion pass.
FunctionPass * createX86OptimizeLEAsLegacyPass()
void initializeCompressEVEXLegacyPass(PassRegistry &)
void initializeX86PostLegalizerCombinerLegacyPass(PassRegistry &)
FunctionPass * createX86DynAllocaExpanderLegacyPass()
void initializeX86DomainReassignmentLegacyPass(PassRegistry &)
FunctionPass * createX86TileConfigLegacyPass()
FunctionPass * createX86AvoidStoreForwardingBlocksLegacyPass()
void initializeX86LowerAMXIntrinsicsLegacyPassPass(PassRegistry &)
FunctionPass * createX86InsertX87WaitLegacyPass()
FunctionPass * createX86PartialReductionLegacyPass()
void initializeX86CmovConversionLegacyPass(PassRegistry &)
AnalysisManager< MachineFunction > MachineFunctionAnalysisManager
void initializeX86DynAllocaExpanderLegacyPass(PassRegistry &)
FunctionPass * createX86FixupSetCCLegacyPass()
void initializeX86FastPreTileConfigLegacyPass(PassRegistry &)
FunctionPass * createX86SpeculativeExecutionSideEffectSuppressionLegacyPass()
FunctionPass * createX86LoadValueInjectionLoadHardeningLegacyPass()
FunctionPass * createX86PadShortFunctions()
Return a pass that pads short functions with NOOPs.
void initializeX86IndirectBranchTrackingLegacyPass(PassRegistry &)
void initializeX86FastTileConfigLegacyPass(PassRegistry &)
void initializeX86FixupVectorConstantsLegacyPass(PassRegistry &)
FunctionPass * createX86IndirectBranchTrackingLegacyPass()
void initializeX86AsmPrinterPass(PassRegistry &)
FunctionPass * createX86LowerTileCopyLegacyPass()
void initializeX86ExpandPseudoLegacyPass(PassRegistry &)
FunctionPass * createX86CmovConversionLegacyPass()
FunctionPass * createX86ArgumentStackSlotLegacyPass()
void initializeX86SpeculativeExecutionSideEffectSuppressionLegacyPass(PassRegistry &)
void initializeX86FixupInstTuningLegacyPass(PassRegistry &)
void initializeX86FlagsCopyLoweringLegacyPass(PassRegistry &)
FunctionPass * createX86PostLegalizerCombinerLegacy()
void initializeX86AvoidTrailingCallLegacyPassPass(PassRegistry &)
FunctionPass * createX86ISelDag(X86TargetMachine &TM, CodeGenOptLevel OptLevel)
This pass converts a legalized DAG into a X86-specific DAG, ready for instruction scheduling.
FunctionPass * createX86FixupLEAsLegacyPass()
FunctionPass * createX86CallFrameOptimizationLegacyPass()
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:82
void initializeX86CallFrameOptimizationLegacyPass(PassRegistry &)
FunctionPass * createX86FlagsCopyLoweringLegacyPass()
FunctionPass * createCleanupLocalDynamicTLSLegacyPass()
void initializeX86FixupBWInstLegacyPass(PassRegistry &)
void initializeX86LoadValueInjectionRetHardeningLegacyPass(PassRegistry &)
void initializeX86FPStackifierLegacyPass(PassRegistry &)
void initializeX86LowerTileCopyLegacyPass(PassRegistry &)
void initializeX86SpeculativeLoadHardeningLegacyPass(PassRegistry &)
void initializeX86TileConfigLegacyPass(PassRegistry &)
void initializeFixupLEAsLegacyPass(PassRegistry &)
FunctionPass * createX86PreTileConfigLegacyPass()
FunctionPass * createX86InsertVZeroUpperLegacyPass()
FunctionPass * createX86SpeculativeLoadHardeningLegacyPass()
void initializeX86LowerAMXTypeLegacyPassPass(PassRegistry &)
FunctionPass * createX86ReturnThunksLegacyPass()
void initializeX86ArgumentStackSlotLegacyPass(PassRegistry &)
FunctionPass * createX86FixupBWInstsLegacyPass()
FunctionPass * createX86PreLegalizerCombinerLegacy()
FunctionPass * createX86FPStackifierLegacyPass()
void initializeX86PreTileConfigLegacyPass(PassRegistry &)
FunctionPass * createX86SuppressAPXForRelocationLegacyPass()
FunctionPass * createX86FastPreTileConfigLegacyPass()
FunctionPass * createX86LoadValueInjectionRetHardeningLegacyPass()
FunctionPass * createX86LowerAMXTypeLegacyPass()
void initializeX86ReturnThunksLegacyPass(PassRegistry &)
void initializeX86PreLegalizerCombinerLegacyPass(PassRegistry &)
void initializeX86SuppressAPXForRelocationLegacyPass(PassRegistry &)
FunctionPass * createX86WinEHStateLegacyPass()
FunctionPass * createX86FixupVectorConstantsLegacyPass()
void initializeX86FixupSetCCLegacyPass(PassRegistry &)
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
void initializeWinEHStateLegacyPass(PassRegistry &)
FunctionPass * createX86IndirectThunksPass()
This pass creates the thunks for the retpoline feature.
FunctionPass * createX86WinEHUnwindV2LegacyPass()
FunctionPass * createX86FixupInstTuningLegacyPass()
void initializeX86ExecutionDomainFixPass(PassRegistry &)
void initializeX86DAGToDAGISelLegacyPass(PassRegistry &)
void initializeX86OptimizeLEAsLegacyPass(PassRegistry &)
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
void initializeX86AvoidSFBLegacyPass(PassRegistry &)
void initializeX86WinEHUnwindV2LegacyPass(PassRegistry &)
FunctionPass * createX86AvoidTrailingCallLegacyPass()
InstructionSelector * createX86InstructionSelector(const X86TargetMachine &TM, const X86Subtarget &, const X86RegisterBankInfo &)
FunctionPass * createX86GlobalBaseRegLegacyPass()
A CRTP mix-in for passes that can be skipped.
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition PassManager.h:89
A CRTP mix-in for passes that should not be skipped.