1//===- llvm/Transforms/Utils/BypassSlowDivision.h --------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file contains an optimization for div and rem on architectures that 11// execute short instructions significantly faster than longer instructions. 12// For example, on Intel Atom 32-bit divides are slow enough that during 13// runtime it is profitable to check the value of the operands, and if they are 14// positive and less than 256 use an unsigned 8-bit divide. 15// 16//===----------------------------------------------------------------------===// 17 18#ifndef TRANSFORMS_UTILS_BYPASSSLOWDIVISION_H 19#define TRANSFORMS_UTILS_BYPASSSLOWDIVISION_H 20 21#include "llvm/Function.h" 22 23namespace llvm { 24 25/// This optimization identifies DIV instructions that can be 26/// profitably bypassed and carried out with a shorter, faster divide. 27bool bypassSlowDivision(Function &F, 28 Function::iterator &I, 29 const DenseMap<Type *, Type *> &BypassTypeMap); 30 31} // End llvm namespace 32 33#endif 34