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.
39class X86GlobalBaseRegPass : public PassInfoMixin<X86GlobalBaseRegPass> {
40public:
43};
44
46
47/// This pass combines multiple accesses to local-dynamic TLS variables so that
48/// the TLS base address for the module is only fetched once per execution path
49/// through the function.
51 : public PassInfoMixin<X86CleanupLocalDynamicTLSPass> {
52public:
55};
56
58
59/// This function returns a pass which converts floating-point register
60/// references and pseudo instructions into floating-point stack references and
61/// physical instructions.
62class X86FPStackifierPass : public PassInfoMixin<X86FPStackifierPass> {
63public:
66};
67
69
70/// This pass inserts AVX vzeroupper instructions before each call to avoid
71/// transition penalty between functions encoded with AVX and SSE.
72class X86InsertVZeroUpperPass : public PassInfoMixin<X86InsertVZeroUpperPass> {
73public:
76};
77
79/// This pass inserts ENDBR instructions before indirect jump/call
80/// destinations as part of CET IBT mechanism.
82 : public PassInfoMixin<X86IndirectBranchTrackingPass> {
83public:
86};
87
89
90/// Return a pass that pads short functions with NOOPs.
91/// This will prevent a stall when returning on the Atom.
93
94/// Return a pass that selectively replaces certain instructions (like add,
95/// sub, inc, dec, some shifts, and some multiplies) by equivalent LEA
96/// instructions, in order to eliminate execution delays in some processors.
97class X86FixupLEAsPass : public PassInfoMixin<X86FixupLEAsPass> {
98public:
101};
102
104
105/// Return a pass that replaces equivalent slower instructions with faster
106/// ones.
107class X86FixupInstTuningPass : public PassInfoMixin<X86FixupInstTuningPass> {
108public:
111};
112
114
115/// Return a pass that reduces the size of vector constant pool loads.
117 : public PassInfoMixin<X86FixupInstTuningPass> {
118public:
121};
122
124
125/// Return a pass that removes redundant LEA instructions and redundant address
126/// recalculations.
127class X86OptimizeLEAsPass : public PassInfoMixin<X86OptimizeLEAsPass> {
128public:
131};
132
134
135/// Return a pass that transforms setcc + movzx pairs into xor + setcc.
136class X86FixupSetCCPass : public PassInfoMixin<X86FixupSetCCPass> {
137public:
140};
141
143
144/// Return a pass that avoids creating store forward block issues in the
145/// hardware.
147 : public PassInfoMixin<X86AvoidStoreForwardingBlocksPass> {
148public:
151};
152
154
155/// Return a pass that lowers EFLAGS copy pseudo instructions.
157 : public PassInfoMixin<X86FlagsCopyLoweringPass> {
158public:
161};
162
164
165/// Return a pass that expands DynAlloca pseudo-instructions.
167 : public PassInfoMixin<X86DynAllocaExpanderPass> {
168public:
171};
172
174
175/// Return a pass that config the tile registers.
176class X86TileConfigPass : public PassInfoMixin<X86TileConfigPass> {
177public:
180};
181
183
184/// Return a pass that preconfig the tile registers before fast reg allocation.
186 : public PassInfoMixin<X86FastPreTileConfigPass> {
187public:
190};
191
193
194/// Return a pass that config the tile registers after fast reg allocation.
195class X86FastTileConfigPass : public PassInfoMixin<X86FastTileConfigPass> {
196public:
199};
200
202
203/// Return a pass that insert pseudo tile config instruction.
204class X86PreTileConfigPass : public PassInfoMixin<X86PreTileConfigPass> {
205public:
208};
209
211
212/// Return a pass that lower the tile copy instruction.
213class X86LowerTileCopyPass : public PassInfoMixin<X86LowerTileCopyPass> {
214public:
217};
218
220
221/// Return a pass that inserts int3 at the end of the function if it ends with a
222/// CALL instruction. The pass does the same for each funclet as well. This
223/// ensures that the open interval of function start and end PCs contains all
224/// return addresses for the benefit of the Windows x64 unwinder.
226 : public PassInfoMixin<X86AvoidTrailingCallPass> {
227public:
230 static bool isRequired() { return true; }
231};
232
234
235/// Return a pass that optimizes the code-size of x86 call sequences. This is
236/// done by replacing esp-relative movs with pushes.
238 : public PassInfoMixin<X86CallFrameOptimizationPass> {
239public:
242};
243
245
246/// Return an IR pass that inserts EH registration stack objects and explicit
247/// EH state updates. This pass must run after EH preparation, which does
248/// Windows-specific but architecture-neutral preparation.
249class X86WinEHStatePass : public PassInfoMixin<X86WinEHStatePass> {
250public:
251 X86WinEHStatePass() = default;
253};
254
256
257/// Return a Machine IR pass that expands X86-specific pseudo
258/// instructions into a sequence of actual instructions. This pass
259/// must run after prologue/epilogue insertion and before lowering
260/// the MachineInstr to MC.
261class X86ExpandPseudoPass : public PassInfoMixin<X86ExpandPseudoPass> {
262public:
265};
266
268
269/// This pass converts X86 cmov instructions into branch when profitable.
270class X86CmovConversionPass : public PassInfoMixin<X86CmovConversionPass> {
271public:
274};
275
277
278/// Return a Machine IR pass that selectively replaces
279/// certain byte and word instructions by equivalent 32 bit instructions,
280/// in order to eliminate partial register usage, false dependences on
281/// the upper portions of registers, and to save code size.
282class X86FixupBWInstsPass : public PassInfoMixin<X86FixupBWInstsPass> {
283public:
286};
287
289
290/// Return a Machine IR pass that reassigns instruction chains from one domain
291/// to another, when profitable.
293 : public PassInfoMixin<X86DomainReassignmentPass> {
294public:
297};
298
300
301/// This pass compress instructions from EVEX space to legacy/VEX/EVEX space when
302/// possible in order to reduce code size or facilitate HW decoding.
303class X86CompressEVEXPass : public PassInfoMixin<X86CompressEVEXPass> {
304public:
307};
308
310
311/// This pass creates the thunks for the retpoline feature.
313
314/// This pass replaces ret instructions with jmp's to __x86_return thunk.
315class X86ReturnThunksPass : public PassInfoMixin<X86ReturnThunksPass> {
316public:
319};
320
322
323/// This pass insert wait instruction after X87 instructions which could raise
324/// fp exceptions when strict-fp enabled.
325class X86InsertX87WaitPass : public PassInfoMixin<X86InsertX87WaitPass> {
326public:
328};
329
331
332/// This pass optimizes arithmetic based on knowledge that is only used by
333/// a reduction sequence and is therefore safe to reassociate in interesting
334/// ways.
335class X86PartialReductionPass : public PassInfoMixin<X86PartialReductionPass> {
336private:
337 const X86TargetMachine *TM;
338
339public:
342};
343
345
346/// // Analyzes and emits pseudos to support Win x64 Unwind V2.
347class X86WinEHUnwindV2Pass : public PassInfoMixin<X86WinEHUnwindV2Pass> {
348public:
352};
353
355
356/// The pass transforms load/store <256 x i32> to AMX load/store intrinsics
357/// or split the data to two <128 x i32>.
358class X86LowerAMXTypePass : public PassInfoMixin<X86LowerAMXTypePass> {
359private:
360 const TargetMachine *TM;
361
362public:
363 X86LowerAMXTypePass(const TargetMachine *TM) : TM(TM) {}
365 static bool isRequired() { return true; }
366};
367
368FunctionPass *createX86LowerAMXTypeLegacyPass();
369
370// Suppresses APX features for relocations for supporting older linkers.
372 : public PassInfoMixin<X86SuppressAPXForRelocationPass> {
373public:
376};
377
379
380/// The pass transforms amx intrinsics to scalar operation if the function has
381/// optnone attribute or it is O0.
383 : public PassInfoMixin<X86LowerAMXIntrinsicsPass> {
384private:
385 const TargetMachine *TM;
386
387public:
390 static bool isRequired() { return true; }
391};
392
394
395InstructionSelector *createX86InstructionSelector(const X86TargetMachine &TM,
396 const X86Subtarget &,
397 const X86RegisterBankInfo &);
398
400 : public PassInfoMixin<X86PostLegalizerCombinerPass> {
401public:
404};
405
408
410 : public PassInfoMixin<X86LoadValueInjectionLoadHardeningPass> {
411public:
414};
415
417
419 : public PassInfoMixin<X86LoadValueInjectionRetHardeningPass> {
420public:
423};
424
426
428 : public PassInfoMixin<X86SpeculativeExecutionSideEffectSuppressionPass> {
429public:
432};
433
435
437 : public PassInfoMixin<X86SpeculativeLoadHardeningPass> {
438public:
441};
442
444
446 : public PassInfoMixin<X86ArgumentStackSlotPass> {
447public:
450};
451
453
487 PassRegistry &);
494
495namespace X86AS {
496enum : unsigned {
497 GS = 256,
498 FS = 257,
499 SS = 258,
502 PTR64 = 272
503};
504} // End X86AS namespace
505
506} // End llvm namespace
507
508#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:147
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:226
static bool isRequired()
Definition X86.h:230
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that optimizes the code-size of x86 call sequences.
Definition X86.h:238
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:51
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass converts X86 cmov instructions into branch when profitable.
Definition X86.h:270
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:303
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a Machine IR pass that reassigns instruction chains from one domain to another,...
Definition X86.h:293
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that expands DynAlloca pseudo-instructions.
Definition X86.h:167
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:261
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This function returns a pass which converts floating-point register references and pseudo instruction...
Definition X86.h:62
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that preconfig the tile registers before fast reg allocation.
Definition X86.h:186
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that config the tile registers after fast reg allocation.
Definition X86.h:195
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:282
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that replaces equivalent slower instructions with faster ones.
Definition X86.h:107
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that selectively replaces certain instructions (like add, sub, inc, dec,...
Definition X86.h:97
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that transforms setcc + movzx pairs into xor + setcc.
Definition X86.h:136
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that reduces the size of vector constant pool loads.
Definition X86.h:117
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that lowers EFLAGS copy pseudo instructions.
Definition X86.h:157
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass initializes a global base register for PIC on x86-32.
Definition X86.h:39
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:82
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass inserts AVX vzeroupper instructions before each call to avoid transition penalty between fu...
Definition X86.h:72
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
This pass insert wait instruction after X87 instructions which could raise fp exceptions when strict-...
Definition X86.h:325
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:388
static bool isRequired()
Definition X86.h:390
X86LowerAMXTypePass(const TargetMachine *TM)
Definition X86.h:363
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
static bool isRequired()
Definition X86.h:365
Return a pass that lower the tile copy instruction.
Definition X86.h:213
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that removes redundant LEA instructions and redundant address recalculations.
Definition X86.h:127
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM)
X86PartialReductionPass(const X86TargetMachine *TM)
Definition X86.h:340
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Return a pass that insert pseudo tile config instruction.
Definition X86.h:204
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:315
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:176
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:501
@ PTR64
Definition X86.h:502
@ PTR32_SPTR
Definition X86.h:500
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 initializeX86PreLegalizerCombinerPass(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 * createX86FPStackifierLegacyPass()
void initializeX86PreTileConfigLegacyPass(PassRegistry &)
FunctionPass * createX86SuppressAPXForRelocationLegacyPass()
FunctionPass * createX86FastPreTileConfigLegacyPass()
FunctionPass * createX86LoadValueInjectionRetHardeningLegacyPass()
FunctionPass * createX86LowerAMXTypeLegacyPass()
FunctionPass * createX86PreLegalizerCombiner()
void initializeX86ReturnThunksLegacyPass(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 to automatically provide informational APIs needed for passes.
Definition PassManager.h:70