LLVM 20.0.0git
Classes | Namespaces | Macros | Enumerations | Functions
TargetLowering.h File Reference

This file describes how to lower LLVM code to machine code. More...

#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/CodeGen/DAGCombine.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/LowLevelTypeUtils.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/RuntimeLibcallUtil.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/CodeGen/TargetCallingConv.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/RuntimeLibcalls.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Alignment.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include <algorithm>
#include <cassert>
#include <climits>
#include <cstdint>
#include <iterator>
#include <map>
#include <string>
#include <utility>
#include <vector>
#include "llvm/IR/ConstrainedOps.def"

Go to the source code of this file.

Classes

struct  llvm::MemOp
 
class  llvm::TargetLoweringBase
 This base class for TargetLowering contains the SelectionDAG-independent parts that can be used from the rest of CodeGen. More...
 
class  llvm::TargetLoweringBase::ArgListEntry
 
struct  llvm::TargetLoweringBase::CondMergingParams
 
class  llvm::TargetLoweringBase::ValueTypeActionImpl
 
struct  llvm::TargetLoweringBase::IntrinsicInfo
 
struct  llvm::TargetLoweringBase::AddrMode
 This represents an addressing mode of: BaseGV + BaseOffs + BaseReg + Scale*ScaleReg + ScalableOffset*vscale If BaseGV is null, there is no BaseGV. More...
 
class  llvm::TargetLowering
 This class defines information used to lower LLVM code to legal SelectionDAG operators that the target instruction selector can accept natively. More...
 
struct  llvm::TargetLowering::TargetLoweringOpt
 A convenience struct that encapsulates a DAG, and two SDValues for returning information from TargetLowering to its clients that want to combine. More...
 
struct  llvm::TargetLowering::DAGCombinerInfo
 
struct  llvm::TargetLowering::PtrAuthInfo
 This structure contains the information necessary for lowering pointer-authenticating indirect calls. More...
 
struct  llvm::TargetLowering::CallLoweringInfo
 This structure contains all information that is necessary for lowering calls. More...
 
struct  llvm::TargetLowering::MakeLibCallOptions
 This structure is used to pass arguments to makeLibCall function. More...
 
struct  llvm::TargetLowering::AsmOperandInfo
 This contains information for each constraint that we are lowering. More...
 

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::Sched
 

Macros

#define DAG_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN)    case ISD::STRICT_##DAGN: EqOpc = ISD::DAGN; break;
 
#define CMP_INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC, DAGN)    case ISD::STRICT_##DAGN: EqOpc = ISD::SETCC; break;
 

Enumerations

enum  llvm::Sched::Preference : uint8_t {
  llvm::Sched::None , llvm::Sched::Source , llvm::Sched::RegPressure , llvm::Sched::Hybrid ,
  llvm::Sched::ILP , llvm::Sched::VLIW , llvm::Sched::Fast , llvm::Sched::Linearize ,
  llvm::Sched::Last = Linearize
}
 

Functions

void llvm::GetReturnInfo (CallingConv::ID CC, Type *ReturnType, AttributeList attr, SmallVectorImpl< ISD::OutputArg > &Outs, const TargetLowering &TLI, const DataLayout &DL)
 Given an LLVM IR type and return type attributes, compute the return value EVTs and flags, and optionally also the offsets, if the return value is being lowered to memory.
 

Detailed Description

This file describes how to lower LLVM code to machine code.

This has two main components:

  1. Which ValueTypes are natively supported by the target.
  2. Which operations are supported for supported ValueTypes.
  3. Cost thresholds for alternative implementations of certain operations.

In addition it has a few other components, like information about FP immediates.

Definition in file TargetLowering.h.

Macro Definition Documentation

◆ CMP_INSTRUCTION

#define CMP_INSTRUCTION (   NAME,
  NARG,
  ROUND_MODE,
  INTRINSIC,
  DAGN 
)     case ISD::STRICT_##DAGN: EqOpc = ISD::SETCC; break;

◆ DAG_INSTRUCTION

#define DAG_INSTRUCTION (   NAME,
  NARG,
  ROUND_MODE,
  INTRINSIC,
  DAGN 
)     case ISD::STRICT_##DAGN: EqOpc = ISD::DAGN; break;