LLVM 20.0.0git
Macros | Functions | Variables
X86VZeroUpper.cpp File Reference
#include "X86.h"
#include "X86InstrInfo.h"
#include "X86Subtarget.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "x86-vzeroupper"
 

Functions

 STATISTIC (NumVZU, "Number of vzeroupper instructions inserted")
 
static bool isYmmOrZmmReg (unsigned Reg)
 VZEROUPPER cleans state that is related to Y/ZMM0-15 only.
 
static bool checkFnHasLiveInYmmOrZmm (MachineRegisterInfo &MRI)
 
static bool clobbersAllYmmAndZmmRegs (const MachineOperand &MO)
 
static bool hasYmmOrZmmReg (MachineInstr &MI)
 
static bool callHasRegMask (MachineInstr &MI)
 Check if given call instruction has a RegMask operand.
 

Variables

static cl::opt< boolUseVZeroUpper ("x86-use-vzeroupper", cl::Hidden, cl::desc("Minimize AVX to SSE transition penalty"), cl::init(true))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "x86-vzeroupper"

Definition at line 40 of file X86VZeroUpper.cpp.

Function Documentation

◆ callHasRegMask()

static bool callHasRegMask ( MachineInstr MI)
static

Check if given call instruction has a RegMask operand.

Definition at line 173 of file X86VZeroUpper.cpp.

References assert(), and MI.

◆ checkFnHasLiveInYmmOrZmm()

static bool checkFnHasLiveInYmmOrZmm ( MachineRegisterInfo MRI)
static

Definition at line 138 of file X86VZeroUpper.cpp.

References isYmmOrZmmReg(), and MRI.

◆ clobbersAllYmmAndZmmRegs()

static bool clobbersAllYmmAndZmmRegs ( const MachineOperand MO)
static

Definition at line 146 of file X86VZeroUpper.cpp.

References llvm::MachineOperand::clobbersPhysReg().

Referenced by hasYmmOrZmmReg().

◆ hasYmmOrZmmReg()

static bool hasYmmOrZmmReg ( MachineInstr MI)
static

Definition at line 158 of file X86VZeroUpper.cpp.

References clobbersAllYmmAndZmmRegs(), isYmmOrZmmReg(), and MI.

◆ isYmmOrZmmReg()

static bool isYmmOrZmmReg ( unsigned  Reg)
static

VZEROUPPER cleans state that is related to Y/ZMM0-15 only.

Thus, there is no need to check for Y/ZMM16 and above.

Definition at line 133 of file X86VZeroUpper.cpp.

Referenced by checkFnHasLiveInYmmOrZmm(), and hasYmmOrZmmReg().

◆ STATISTIC()

STATISTIC ( NumVZU  ,
"Number of vzeroupper instructions inserted"   
)

Variable Documentation

◆ UseVZeroUpper

cl::opt< bool > UseVZeroUpper("x86-use-vzeroupper", cl::Hidden, cl::desc("Minimize AVX to SSE transition penalty"), cl::init(true)) ( "x86-use-vzeroupper"  ,
cl::Hidden  ,
cl::desc("Minimize AVX to SSE transition penalty")  ,
cl::init(true  
)
static