LLVM  7.0.0svn
Macros | Functions | Variables
AMDGPUCodeGenPrepare.cpp File Reference

This pass does misc. More...

#include "AMDGPU.h"
#include "AMDGPUSubtarget.h"
#include "AMDGPUTargetMachine.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/DivergenceAnalysis.h"
#include "llvm/Analysis/Loads.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include <cassert>
#include <iterator>
Include dependency graph for AMDGPUCodeGenPrepare.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "amdgpu-codegenprepare"
 

Functions

static bool promotedOpIsNSW (const Instruction &I)
 
static bool promotedOpIsNUW (const Instruction &I)
 
static bool shouldKeepFDivF32 (Value *Num, bool UnsafeDiv, bool HasDenormals)
 
static bool hasUnsafeFPMath (const Function &F)
 
static std::pair< Value *, Value * > getMul64 (IRBuilder<> &Builder, Value *LHS, Value *RHS)
 
static ValuegetMulHu (IRBuilder<> &Builder, Value *LHS, Value *RHS)
 
 INITIALIZE_PASS_BEGIN (AMDGPUCodeGenPrepare, DEBUG_TYPE, "AMDGPU IR optimizations", false, false) INITIALIZE_PASS_END(AMDGPUCodeGenPrepare
 

Variables

 DEBUG_TYPE
 
AMDGPU IR optimizations
 
AMDGPU IR false
 

Detailed Description

This pass does misc.

AMDGPU optimizations on IR before instruction selection.

Definition in file AMDGPUCodeGenPrepare.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "amdgpu-codegenprepare"

Definition at line 46 of file AMDGPUCodeGenPrepare.cpp.

Referenced by getMulHu().

Function Documentation

◆ getMul64()

static std::pair<Value*, Value*> getMul64 ( IRBuilder<> &  Builder,
Value LHS,
Value RHS 
)
static

◆ getMulHu()

static Value* getMulHu ( IRBuilder<> &  Builder,
Value LHS,
Value RHS 
)
static

Definition at line 496 of file AMDGPUCodeGenPrepare.cpp.

References assert(), llvm::BitsToFloat(), llvm::ComputeNumSignBits(), llvm::Instruction::copyFastMathFlags(), llvm::Instruction::copyMetadata(), llvm::IRBuilder< T, Inserter >::CreateAdd(), llvm::IRBuilder< T, Inserter >::CreateAnd(), llvm::IRBuilder< T, Inserter >::CreateAShr(), llvm::IRBuilder< T, Inserter >::CreateBinOp(), llvm::IRBuilder< T, Inserter >::CreateBitCast(), llvm::IRBuilder< T, Inserter >::CreateExtractElement(), llvm::IRBuilder< T, Inserter >::CreateFCmpOGE(), llvm::IRBuilder< T, Inserter >::CreateFDiv(), llvm::IRBuilder< T, Inserter >::CreateFMul(), llvm::IRBuilder< T, Inserter >::CreateFNeg(), llvm::IRBuilder< T, Inserter >::CreateFPToSI(), llvm::IRBuilder< T, Inserter >::CreateFPToUI(), llvm::IRBuilder< T, Inserter >::CreateICmpEQ(), llvm::IRBuilder< T, Inserter >::CreateICmpUGE(), llvm::IRBuilder< T, Inserter >::CreateInsertElement(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilder< T, Inserter >::CreateLoad(), llvm::IRBuilder< T, Inserter >::CreateMul(), llvm::IRBuilder< T, Inserter >::CreateNeg(), llvm::IRBuilder< T, Inserter >::CreateOr(), llvm::IRBuilder< T, Inserter >::CreateSelect(), llvm::IRBuilder< T, Inserter >::CreateSExt(), llvm::IRBuilder< T, Inserter >::CreateSIToFP(), llvm::IRBuilder< T, Inserter >::CreateSub(), llvm::IRBuilder< T, Inserter >::CreateTrunc(), llvm::IRBuilder< T, Inserter >::CreateUIToFP(), llvm::IRBuilder< T, Inserter >::CreateXor(), llvm::IRBuilder< T, Inserter >::CreateZExt(), DEBUG_TYPE, E, llvm::Instruction::eraseFromParent(), F(), llvm::ConstantInt::get(), llvm::ConstantFP::get(), llvm::ConstantAsMetadata::get(), llvm::PointerType::get(), llvm::MDNode::get(), llvm::UndefValue::get(), llvm::AMDGPUTargetMachine::getAMDGPUAS(), llvm::Instruction::getDebugLoc(), llvm::IRBuilderBase::getFastMathFlags(), llvm::IRBuilderBase::getFloatTy(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt32Ty(), llvm::IRBuilderBase::getIntNTy(), llvm::IntrinsicInst::getIntrinsicID(), llvm::Instruction::getMetadata(), getMul64(), llvm::BinaryOperator::getOpcode(), llvm::User::getOperand(), llvm::LoadInst::getPointerAddressSpace(), llvm::LoadInst::getPointerOperand(), llvm::Type::getScalarSizeInBits(), llvm::TargetMachine::getSubtarget(), llvm::Value::getType(), llvm::ConstantInt::getValue(), hasUnsafeFPMath(), I, INITIALIZE_PASS_BEGIN(), INITIALIZE_PASS_DEPENDENCY, llvm::Type::isIntegerTy(), llvm::APInt::isNullValue(), LowAndHigh, llvm::Lower, llvm::LLVMContext::MD_range, llvm::Mod, llvm::AMDGPUISD::RCP, llvm::Value::replaceAllUsesWith(), runOnFunction(), llvm::IRBuilderBase::SetCurrentDebugLocation(), llvm::FastMathFlags::setFast(), llvm::IRBuilderBase::setFastMathFlags(), llvm::Instruction::setMetadata(), llvm::ARM_MB::ST, llvm::SystemZISD::TM, and llvm::APInt::zext().

◆ hasUnsafeFPMath()

static bool hasUnsafeFPMath ( const Function F)
static

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( AMDGPUCodeGenPrepare  ,
DEBUG_TYPE  ,
"AMDGPU IR optimizations ,
false  ,
false   
)

Referenced by getMulHu().

◆ promotedOpIsNSW()

static bool promotedOpIsNSW ( const Instruction I)
static

◆ promotedOpIsNUW()

static bool promotedOpIsNUW ( const Instruction I)
static

◆ shouldKeepFDivF32()

static bool shouldKeepFDivF32 ( Value Num,
bool  UnsafeDiv,
bool  HasDenormals 
)
static

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 914 of file AMDGPUCodeGenPrepare.cpp.

◆ false

AMDGPU IR false

Definition at line 914 of file AMDGPUCodeGenPrepare.cpp.

◆ optimizations

AMDGPU IR optimizations

Definition at line 914 of file AMDGPUCodeGenPrepare.cpp.