LLVM API Documentation
#include "llvm/Transforms/Utils/IntegerDivision.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include <utility>
Go to the source code of this file.
Defines | |
#define | DEBUG_TYPE "integer-division" |
Functions | |
static Value * | generateSignedRemainderCode (Value *Dividend, Value *Divisor, IRBuilder<> &Builder) |
static Value * | generatedUnsignedRemainderCode (Value *Dividend, Value *Divisor, IRBuilder<> &Builder) |
static Value * | generateSignedDivisionCode (Value *Dividend, Value *Divisor, IRBuilder<> &Builder) |
static Value * | generateUnsignedDivisionCode (Value *Dividend, Value *Divisor, IRBuilder<> &Builder) |
#define DEBUG_TYPE "integer-division" |
Definition at line 26 of file IntegerDivision.cpp.
static Value* generatedUnsignedRemainderCode | ( | Value * | Dividend, |
Value * | Divisor, | ||
IRBuilder<> & | Builder | ||
) | [static] |
Generate code to compute the remainder of two unsigned integers. Returns the remainder. Builder's insert point should be pointing where the caller wants code generated, e.g. at the urem instruction. This will generate a udiv in the process, and Builder's insert point will be pointing at the udiv (if present, i.e. not folded), ready to be expanded if the user wishes
Definition at line 80 of file IntegerDivision.cpp.
References llvm::IRBuilder< preserveNames, T, Inserter >::CreateMul(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateUDiv(), and llvm::IRBuilderBase::SetInsertPoint().
Referenced by llvm::expandRemainder().
static Value* generateSignedDivisionCode | ( | Value * | Dividend, |
Value * | Divisor, | ||
IRBuilder<> & | Builder | ||
) | [static] |
Generate code to divide two signed integers. Returns the quotient, rounded towards 0. Builder's insert point should be pointing where the caller wants code generated, e.g. at the sdiv instruction. This will generate a udiv in the process, and Builder's insert point will be pointing at the udiv (if present, i.e. not folded), ready to be expanded if the user wishes.
Definition at line 104 of file IntegerDivision.cpp.
References llvm::IRBuilder< preserveNames, T, Inserter >::CreateAShr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateUDiv(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateXor(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt64(), llvm::Type::getIntegerBitWidth(), llvm::Value::getType(), and llvm::IRBuilderBase::SetInsertPoint().
Referenced by llvm::expandDivision().
static Value* generateSignedRemainderCode | ( | Value * | Dividend, |
Value * | Divisor, | ||
IRBuilder<> & | Builder | ||
) | [static] |
Generate code to compute the remainder of two signed integers. Returns the remainder, which will have the sign of the dividend. Builder's insert point should be pointing where the caller wants code generated, e.g. at the srem instruction. This will generate a urem in the process, and Builder's insert point will be pointing at the uren (if present, i.e. not folded), ready to be expanded if the user wishes
Definition at line 34 of file IntegerDivision.cpp.
References llvm::IRBuilder< preserveNames, T, Inserter >::CreateAShr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateURem(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateXor(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt64(), llvm::Type::getIntegerBitWidth(), llvm::Value::getType(), and llvm::IRBuilderBase::SetInsertPoint().
Referenced by llvm::expandRemainder().
static Value* generateUnsignedDivisionCode | ( | Value * | Dividend, |
Value * | Divisor, | ||
IRBuilder<> & | Builder | ||
) | [static] |
Generates code to divide two unsigned scalar 32-bit or 64-bit integers. Returns the quotient, rounded towards 0. Builder's insert point should point where the caller wants code generated, e.g. at the udiv instruction.
Definition at line 151 of file IntegerDivision.cpp.
References llvm::PHINode::addIncoming(), llvm::BasicBlock::begin(), llvm::BasicBlock::Create(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateAdd(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateAnd(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateAShr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateBr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateCall2(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpEQ(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpUGT(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateLShr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateOr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreatePHI(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSelect(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateShl(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateSub(), llvm::ISD::CTLZ, llvm::Instruction::eraseFromParent(), F(), llvm::IntegerType::getBitWidth(), llvm::IRBuilderBase::getContext(), llvm::Intrinsic::getDeclaration(), llvm::IRBuilderBase::GetInsertBlock(), llvm::IRBuilderBase::GetInsertPoint(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt64(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), llvm::ConstantInt::getSigned(), llvm::BasicBlock::getTerminator(), llvm::IRBuilderBase::getTrue(), llvm::Value::getType(), llvm::IRBuilderBase::SetInsertPoint(), llvm::Value::setName(), and llvm::BasicBlock::splitBasicBlock().
Referenced by llvm::expandDivision().