LLVM 23.0.0git
LegalizeDAG.cpp File Reference
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/FloatingPointMode.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/RuntimeLibcallUtil.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/CodeGen/TargetFrameLowering.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/CodeGen/ValueTypes.h"
#include "llvm/CodeGenTypes/MachineValueType.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include <cassert>
#include <cstdint>
#include <tuple>
#include <utility>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "legalizedag"

Functions

static MachineMemOperandgetStackAlignedMMO (SDValue StackPtr, MachineFunction &MF, bool isObjectScalable)
static bool ExpandBVWithShuffles (SDNode *Node, SelectionDAG &DAG, const TargetLowering &TLI, SDValue &Res)
static bool isSinCosLibcallAvailable (SDNode *Node, const TargetLowering &TLI)
 Return true if sincos or __sincos_stret libcall is available.
static bool useSinCos (SDNode *Node)
 Only issue sincos libcall if both sin and cos are needed.
static bool canUseFastMathLibcall (const SDNode *Node)
 Return if we can use the FAST_* variant of a math libcall for the node.
static MVT getPromotedVectorElementType (const TargetLowering &TLI, MVT EltVT, MVT NewEltVT)

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "legalizedag"

Definition at line 59 of file LegalizeDAG.cpp.

Function Documentation

◆ canUseFastMathLibcall()

bool canUseFastMathLibcall ( const SDNode * Node)
static

Return if we can use the FAST_* variant of a math libcall for the node.

FIXME: This is just guessing, we probably should have unique specific sets flags required per libcall.

Definition at line 4662 of file LegalizeDAG.cpp.

◆ ExpandBVWithShuffles()

◆ getPromotedVectorElementType()

MVT getPromotedVectorElementType ( const TargetLowering & TLI,
MVT EltVT,
MVT NewEltVT )
static

◆ getStackAlignedMMO()

◆ isSinCosLibcallAvailable()

bool isSinCosLibcallAvailable ( SDNode * Node,
const TargetLowering & TLI )
static

Return true if sincos or __sincos_stret libcall is available.

Definition at line 2425 of file LegalizeDAG.cpp.

References llvm::TargetLoweringBase::getLibcallImpl(), llvm::RTLIB::getSINCOS(), and llvm::RTLIB::getSINCOS_STRET().

◆ useSinCos()

bool useSinCos ( SDNode * Node)
static

Only issue sincos libcall if both sin and cos are needed.

Definition at line 2432 of file LegalizeDAG.cpp.

References llvm::ISD::FCOS, llvm::ISD::FSIN, llvm::ISD::FSINCOS, llvm::SDValue::getNode(), and llvm::SDNode::users().