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 LLVM_TRANSFORMS_UTILS_BYPASSSLOWDIVISION_H 19 #define LLVM_TRANSFORMS_UTILS_BYPASSSLOWDIVISION_H 20 21 #include "llvm/ADT/DenseMap.h" 22 #include "llvm/IR/Function.h" 23 24 namespace llvm { 25 26 /// This optimization identifies DIV instructions in a BB that can be 27 /// profitably bypassed and carried out with a shorter, faster divide. 28 /// 29 /// This optimization may add basic blocks immediately after BB; for obvious 30 /// reasons, you shouldn't pass those blocks to bypassSlowDivision. 31 bool bypassSlowDivision( 32 BasicBlock *BB, const DenseMap<unsigned int, unsigned int> &BypassWidth); 33 34 } // End llvm namespace 35 36 #endif 37