LLVM API Documentation
#include "llvm/Transforms/Scalar.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
#include "llvm/Instructions.h"
#include "llvm/Pass.h"
#include "llvm/Assembly/Writer.h"
#include "llvm/Support/CFG.h"
#include "llvm/Support/Debug.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/Statistic.h"
#include <algorithm>
#include <iostream>
Include dependency graph for Reassociate.cpp:
Go to the source code of this file.
Defines | |
#define | DEBUG_TYPE "reassociate" |
Functions | |
bool | operator< (const ValueEntry &LHS, const ValueEntry &RHS) |
static void | PrintOps (Instruction *I, const std::vector< ValueEntry > &Ops) |
FunctionPass * | llvm::createReassociatePass () |
static bool | isUnmovableInstruction (Instruction *I) |
static BinaryOperator * | isReassociableOp (Value *V, unsigned Opcode) |
static Instruction * | LowerNegateToMultiply (Instruction *Neg) |
static Value * | NegateValue (Value *V, Instruction *BI) |
static Instruction * | BreakUpSubtract (Instruction *Sub) |
static Instruction * | ConvertShiftToMul (Instruction *Shl) |
static unsigned | FindInOperandList (std::vector< ValueEntry > &Ops, unsigned i, Value *X) |
static Value * | EmitAddTreeOfValues (Instruction *I, std::vector< Value * > &Ops) |
static void | FindSingleUseMultiplyFactors (Value *V, std::vector< Value * > &Factors) |
Variables | |
Statistic | NumLinear ("reassociate","Number of insts linearized") |
Statistic | NumChanged ("reassociate","Number of insts reassociated") |
Statistic | NumSwapped ("reassociate","Number of insts with operands swapped") |
Statistic | NumAnnihil ("reassociate","Number of expr tree annihilated") |
Statistic | NumFactor ("reassociate","Number of multiplies factored") |
RegisterOpt< Reassociate > | X ("reassociate","Reassociate expressions") |
#define DEBUG_TYPE "reassociate" |
Definition at line 23 of file Reassociate.cpp.
static Instruction* BreakUpSubtract | ( | Instruction * | Sub | ) | [static] |
BreakUpSubtract - If we have (X-Y), and if either X is an add, or if this is only used by an add, transform this into (X+(0-Y)) to promote better reassociation.
Definition at line 394 of file Reassociate.cpp.
References DEBUG, llvm::Instruction::eraseFromParent(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Value::hasOneUse(), isReassociableOp(), Name, NegateValue(), llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), and llvm::Value::use_back().
static Instruction* ConvertShiftToMul | ( | Instruction * | Shl | ) | [static] |
ConvertShiftToMul - If this is a shift of a reassociable multiply or is used by one, change this into a multiply by a constant to assist with further reassociation.
Definition at line 425 of file Reassociate.cpp.
References llvm::Instruction::eraseFromParent(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Value::hasOneUse(), isReassociableOp(), Name, llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), and llvm::Value::use_back().
static Value* EmitAddTreeOfValues | ( | Instruction * | I, | |
std::vector< Value * > & | Ops | |||
) | [static] |
EmitAddTreeOfValues - Emit a tree of add instructions, summing Ops together and returning the result. Insert the tree before I.
Definition at line 463 of file Reassociate.cpp.
static unsigned FindInOperandList | ( | std::vector< ValueEntry > & | Ops, | |
unsigned | i, | |||
Value * | X | |||
) | [static] |
FindSingleUseMultiplyFactors - If V is a single-use multiply, recursively add its operands as factors, otherwise add V to the list of factors.
Definition at line 503 of file Reassociate.cpp.
References llvm::BinaryOperator::getOpcode(), llvm::BinaryOperator::getOperand(), and V.
static BinaryOperator* isReassociableOp | ( | Value * | V, | |
unsigned | Opcode | |||
) | [static] |
isReassociableOp - Return true if V is an instruction of the specified opcode and if it only has one use.
Definition at line 176 of file Reassociate.cpp.
References V.
Referenced by BreakUpSubtract(), and ConvertShiftToMul().
static bool isUnmovableInstruction | ( | Instruction * | I | ) | [static] |
Definition at line 109 of file Reassociate.cpp.
References Alloca, Call, llvm::Instruction::getOpcode(), llvm::SPII::Load, and PHI.
static Instruction* LowerNegateToMultiply | ( | Instruction * | Neg | ) | [static] |
LowerNegateToMultiply - Replace 0-X with X*-1.
Definition at line 185 of file Reassociate.cpp.
References llvm::Instruction::eraseFromParent(), llvm::Value::getName(), llvm::User::getOperand(), llvm::Value::getType(), llvm::Type::isFloatingPoint(), llvm::Value::replaceAllUsesWith(), and llvm::Value::setName().
static Value* NegateValue | ( | Value * | V, | |
Instruction * | BI | |||
) | [static] |
Definition at line 359 of file Reassociate.cpp.
References llvm::Value::getName(), llvm::BinaryOperator::getOpcode(), llvm::BinaryOperator::getOperand(), llvm::Value::hasOneUse(), llvm::Instruction::moveBefore(), llvm::Value::setName(), llvm::BinaryOperator::setOperand(), and V.
Referenced by BreakUpSubtract().
bool @809::operator< | ( | const ValueEntry & | LHS, | |
const ValueEntry & | RHS | |||
) | [inline, static] |
Definition at line 51 of file Reassociate.cpp.
static void PrintOps | ( | Instruction * | I, | |
const std::vector< ValueEntry > & | Ops | |||
) | [static] |
PrintOps - Print out the expression identified in the Ops list.
Definition at line 58 of file Reassociate.cpp.
References llvm::Instruction::getOpcode(), llvm::GlobalValue::getParent(), llvm::BasicBlock::getParent(), llvm::Instruction::getParent(), M, Op, and llvm::WriteAsOperand().
bool MadeChange |
Definition at line 71 of file Reassociate.cpp.
Statistic NumAnnihil("reassociate","Number of expr tree annihilated") [static] |
Statistic NumChanged("reassociate","Number of insts reassociated") [static] |
Statistic NumSwapped("reassociate","Number of insts with operands swapped") [static] |
Definition at line 48 of file Reassociate.cpp.
unsigned Rank |
Definition at line 47 of file Reassociate.cpp.
std::map<BasicBlock*, unsigned> RankMap |
Definition at line 69 of file Reassociate.cpp.
std::map<Value*, unsigned> ValueRankMap |
Definition at line 70 of file Reassociate.cpp.
RegisterOpt<Reassociate> X("reassociate","Reassociate expressions") [static] |