<div dir="ltr">Oops.<div>Will remove, thanks!</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 27, 2016 at 5:06 PM, Robinson, Paul <span dir="ltr"><<a href="mailto:paul.robinson@sony.com" target="_blank">paul.robinson@sony.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
<br>
> -----Original Message-----<br>
> From: llvm-commits [mailto:<a href="mailto:llvm-commits-bounces@lists.llvm.org">llvm-commits-bounces@lists.llvm.org</a>] On Behalf<br>
> Of Michael Kuperstein via llvm-commits<br>
> Sent: Friday, June 24, 2016 4:32 PM<br>
> To: <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> Subject: [llvm] r273747 - [PM] Port float2int to the new pass manager<br>
><br>
> Author: mkuper<br>
> Date: Fri Jun 24 18:32:02 2016<br>
> New Revision: 273747<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273747&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273747&view=rev</a><br>
> Log:<br>
> [PM] Port float2int to the new pass manager<br>
><br>
> Differential Revision: <a href="http://reviews.llvm.org/D21704" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21704</a><br>
><br>
> Added:<br>
>     llvm/trunk/include/llvm/Transforms/Scalar/Float2Int.h<br>
> Modified:<br>
>     llvm/trunk/include/llvm/InitializePasses.h<br>
>     llvm/trunk/lib/Passes/PassBuilder.cpp<br>
>     llvm/trunk/lib/Passes/PassRegistry.def<br>
>     llvm/trunk/lib/Transforms/Scalar/Float2Int.cpp<br>
>     llvm/trunk/lib/Transforms/Scalar/Scalar.cpp<br>
>     llvm/trunk/test/Transforms/Float2Int/basic.ll<br>
><br>
> Modified: llvm/trunk/include/llvm/InitializePasses.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/include/llvm/InitializePasses.h?rev=273747&r1=273746&r2<br>
> =273747&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/include/llvm/InitializePasses.h (original)<br>
> +++ llvm/trunk/include/llvm/InitializePasses.h Fri Jun 24 18:32:02 2016<br>
> @@ -124,7 +124,7 @@ void initializeExpandPostRAPass(PassRegi<br>
>  void initializeExternalAAWrapperPassPass(PassRegistry&);<br>
>  void initializeFinalizeMachineBundlesPass(PassRegistry&);<br>
>  void initializeFlattenCFGPassPass(PassRegistry&);<br>
> -void initializeFloat2IntPass(PassRegistry&);<br>
> +void initializeFloat2IntLegacyPassPass(PassRegistry&);<br>
>  void initializeForceFunctionAttrsLegacyPassPass(PassRegistry&);<br>
>  void initializeForwardControlFlowIntegrityPass(PassRegistry&);<br>
>  void initializeFuncletLayoutPass(PassRegistry &);<br>
><br>
> Added: llvm/trunk/include/llvm/Transforms/Scalar/Float2Int.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/include/llvm/Transforms/Scalar/Float2Int.h?rev=273747&v<br>
> iew=auto<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/include/llvm/Transforms/Scalar/Float2Int.h (added)<br>
> +++ llvm/trunk/include/llvm/Transforms/Scalar/Float2Int.h Fri Jun 24<br>
> 18:32:02 2016<br>
> @@ -0,0 +1,52 @@<br>
> +//===-- Float2Int.h - Demote floating point ops to work on integers -----<br>
> --===//<br>
> +//<br>
> +//                     The LLVM Compiler Infrastructure<br>
> +//<br>
> +// This file is distributed under the University of Illinois Open Source<br>
> +// License. See LICENSE.TXT for details.<br>
> +//<br>
> +//===--------------------------------------------------------------------<br>
> --===//<br>
> +//<br>
> +// This file provides the Float2Int pass, which aims to demote floating<br>
> +// point operations to work on integers, where that is losslessly<br>
> possible.<br>
> +//<br>
> +//===--------------------------------------------------------------------<br>
> --===//<br>
> +<br>
> +#ifndef LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H<br>
> +#define LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H<br>
> +<br>
> +#include "llvm/ADT/EquivalenceClasses.h"<br>
> +#include "llvm/ADT/MapVector.h"<br>
> +#include "llvm/IR/ConstantRange.h"<br>
> +#include "llvm/IR/Function.h"<br>
> +#include "llvm/IR/PassManager.h"<br>
> +<br>
> +namespace llvm {<br>
> +/// Pass to remove unused function declarations.<br>
<br>
</div></div>Dangling comment?<br>
--paulr<br>
<div class="HOEnZb"><div class="h5"><br>
> +class Float2IntPass : public PassInfoMixin<Float2IntPass> {<br>
> +public:<br>
> +  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);<br>
> +<br>
> +  // Glue for old PM.<br>
> +  bool runImpl(Function &F);<br>
> +<br>
> +private:<br>
> +  void findRoots(Function &F, SmallPtrSet<Instruction *, 8> &Roots);<br>
> +  ConstantRange seen(Instruction *I, ConstantRange R);<br>
> +  ConstantRange badRange();<br>
> +  ConstantRange unknownRange();<br>
> +  ConstantRange validateRange(ConstantRange R);<br>
> +  void walkBackwards(const SmallPtrSetImpl<Instruction *> &Roots);<br>
> +  void walkForwards();<br>
> +  bool validateAndTransform();<br>
> +  Value *convert(Instruction *I, Type *ToTy);<br>
> +  void cleanup();<br>
> +<br>
> +  MapVector<Instruction *, ConstantRange> SeenInsts;<br>
> +  SmallPtrSet<Instruction *, 8> Roots;<br>
> +  EquivalenceClasses<Instruction *> ECs;<br>
> +  MapVector<Instruction *, Value *> ConvertedInsts;<br>
> +  LLVMContext *Ctx;<br>
> +};<br>
> +}<br>
> +#endif // LLVM_TRANSFORMS_SCALAR_FLOAT2INT_H<br>
><br>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=273747&r1=273746&r2=2737<br>
> 47&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)<br>
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Fri Jun 24 18:32:02 2016<br>
> @@ -75,6 +75,7 @@<br>
>  #include "llvm/Transforms/Scalar/DCE.h"<br>
>  #include "llvm/Transforms/Scalar/DeadStoreElimination.h"<br>
>  #include "llvm/Transforms/Scalar/EarlyCSE.h"<br>
> +#include "llvm/Transforms/Scalar/Float2Int.h"<br>
>  #include "llvm/Transforms/Scalar/GVN.h"<br>
>  #include "llvm/Transforms/Scalar/GuardWidening.h"<br>
>  #include "llvm/Transforms/Scalar/IndVarSimplify.h"<br>
><br>
> Modified: llvm/trunk/lib/Passes/PassRegistry.def<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/lib/Passes/PassRegistry.def?rev=273747&r1=273746&r2=273<br>
> 747&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/lib/Passes/PassRegistry.def (original)<br>
> +++ llvm/trunk/lib/Passes/PassRegistry.def Fri Jun 24 18:32:02 2016<br>
> @@ -129,6 +129,7 @@ FUNCTION_PASS("dse", DSEPass())<br>
>  FUNCTION_PASS("early-cse", EarlyCSEPass())<br>
>  FUNCTION_PASS("instcombine", InstCombinePass())<br>
>  FUNCTION_PASS("invalidate<all>", InvalidateAllAnalysesPass())<br>
> +FUNCTION_PASS("float2int", Float2IntPass())<br>
>  FUNCTION_PASS("no-op-function", NoOpFunctionPass())<br>
>  FUNCTION_PASS("loweratomic", LowerAtomicPass())<br>
>  FUNCTION_PASS("lower-expect", LowerExpectIntrinsicPass())<br>
><br>
> Modified: llvm/trunk/lib/Transforms/Scalar/Float2Int.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/lib/Transforms/Scalar/Float2Int.cpp?rev=273747&r1=27374<br>
> 6&r2=273747&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/lib/Transforms/Scalar/Float2Int.cpp (original)<br>
> +++ llvm/trunk/lib/Transforms/Scalar/Float2Int.cpp Fri Jun 24 18:32:02<br>
> 2016<br>
> @@ -13,14 +13,13 @@<br>
>  //===--------------------------------------------------------------------<br>
> --===//<br>
><br>
>  #define DEBUG_TYPE "float2int"<br>
> +<br>
> +#include "llvm/Transforms/Scalar/Float2Int.h"<br>
>  #include "llvm/ADT/APInt.h"<br>
>  #include "llvm/ADT/APSInt.h"<br>
> -#include "llvm/ADT/EquivalenceClasses.h"<br>
> -#include "llvm/ADT/MapVector.h"<br>
>  #include "llvm/ADT/SmallVector.h"<br>
>  #include "llvm/Analysis/AliasAnalysis.h"<br>
>  #include "llvm/Analysis/GlobalsModRef.h"<br>
> -#include "llvm/IR/ConstantRange.h"<br>
>  #include "llvm/IR/Constants.h"<br>
>  #include "llvm/IR/IRBuilder.h"<br>
>  #include "llvm/IR/InstIterator.h"<br>
> @@ -52,41 +51,31 @@ MaxIntegerBW("float2int-max-integer-bw",<br>
>                        "(default=64)"));<br>
><br>
>  namespace {<br>
> -  struct Float2Int : public FunctionPass {<br>
> +  struct Float2IntLegacyPass : public FunctionPass {<br>
>      static char ID; // Pass identification, replacement for typeid<br>
> -    Float2Int() : FunctionPass(ID) {<br>
> -      initializeFloat2IntPass(*PassRegistry::getPassRegistry());<br>
> +    Float2IntLegacyPass() : FunctionPass(ID) {<br>
> +<br>
> initializeFloat2IntLegacyPassPass(*PassRegistry::getPassRegistry());<br>
> +    }<br>
> +<br>
> +    bool runOnFunction(Function &F) override {<br>
> +      if (skipFunction(F))<br>
> +        return false;<br>
> +<br>
> +      return Impl.runImpl(F);<br>
>      }<br>
><br>
> -    bool runOnFunction(Function &F) override;<br>
>      void getAnalysisUsage(AnalysisUsage &AU) const override {<br>
>        AU.setPreservesCFG();<br>
>        AU.addPreserved<GlobalsAAWrapperPass>();<br>
>      }<br>
><br>
> -    void findRoots(Function &F, SmallPtrSet<Instruction*,8> &Roots);<br>
> -    ConstantRange seen(Instruction *I, ConstantRange R);<br>
> -    ConstantRange badRange();<br>
> -    ConstantRange unknownRange();<br>
> -    ConstantRange validateRange(ConstantRange R);<br>
> -    void walkBackwards(const SmallPtrSetImpl<Instruction*> &Roots);<br>
> -    void walkForwards();<br>
> -    bool validateAndTransform();<br>
> -    Value *convert(Instruction *I, Type *ToTy);<br>
> -    void cleanup();<br>
> -<br>
> -    MapVector<Instruction*, ConstantRange > SeenInsts;<br>
> -    SmallPtrSet<Instruction*,8> Roots;<br>
> -    EquivalenceClasses<Instruction*> ECs;<br>
> -    MapVector<Instruction*, Value*> ConvertedInsts;<br>
> -    LLVMContext *Ctx;<br>
> +  private:<br>
> +    Float2IntPass Impl;<br>
>    };<br>
>  }<br>
><br>
> -char Float2Int::ID = 0;<br>
> -INITIALIZE_PASS_BEGIN(Float2Int, "float2int", "Float to int", false,<br>
> false)<br>
> -INITIALIZE_PASS_DEPENDENCY(GlobalsAAWrapperPass)<br>
> -INITIALIZE_PASS_END(Float2Int, "float2int", "Float to int", false, false)<br>
> +char Float2IntLegacyPass::ID = 0;<br>
> +INITIALIZE_PASS(Float2IntLegacyPass, "float2int", "Float to int", false,<br>
> false)<br>
><br>
>  // Given a FCmp predicate, return a matching ICmp predicate if one<br>
>  // exists, otherwise return BAD_ICMP_PREDICATE.<br>
> @@ -128,7 +117,7 @@ static Instruction::BinaryOps mapBinOpco<br>
><br>
>  // Find the roots - instructions that convert from the FP domain to<br>
>  // integer domain.<br>
> -void Float2Int::findRoots(Function &F, SmallPtrSet<Instruction*,8><br>
> &Roots) {<br>
> +void Float2IntPass::findRoots(Function &F, SmallPtrSet<Instruction*,8><br>
> &Roots) {<br>
>    for (auto &I : instructions(F)) {<br>
>      if (isa<VectorType>(I.getType()))<br>
>        continue;<br>
> @@ -148,7 +137,7 @@ void Float2Int::findRoots(Function &F, S<br>
>  }<br>
><br>
>  // Helper - mark I as having been traversed, having range R.<br>
> -ConstantRange Float2Int::seen(Instruction *I, ConstantRange R) {<br>
> +ConstantRange Float2IntPass::seen(Instruction *I, ConstantRange R) {<br>
>    DEBUG(dbgs() << "F2I: " << *I << ":" << R << "\n");<br>
>    if (SeenInsts.find(I) != SeenInsts.end())<br>
>      SeenInsts.find(I)->second = R;<br>
> @@ -158,13 +147,13 @@ ConstantRange Float2Int::seen(Instructio<br>
>  }<br>
><br>
>  // Helper - get a range representing a poison value.<br>
> -ConstantRange Float2Int::badRange() {<br>
> +ConstantRange Float2IntPass::badRange() {<br>
>    return ConstantRange(MaxIntegerBW + 1, true);<br>
>  }<br>
> -ConstantRange Float2Int::unknownRange() {<br>
> +ConstantRange Float2IntPass::unknownRange() {<br>
>    return ConstantRange(MaxIntegerBW + 1, false);<br>
>  }<br>
> -ConstantRange Float2Int::validateRange(ConstantRange R) {<br>
> +ConstantRange Float2IntPass::validateRange(ConstantRange R) {<br>
>    if (R.getBitWidth() > MaxIntegerBW + 1)<br>
>      return badRange();<br>
>    return R;<br>
> @@ -184,7 +173,7 @@ ConstantRange Float2Int::validateRange(C<br>
><br>
>  // Breadth-first walk of the use-def graph; determine the set of nodes<br>
>  // we care about and eagerly determine if some of them are poisonous.<br>
> -void Float2Int::walkBackwards(const SmallPtrSetImpl<Instruction*> &Roots)<br>
> {<br>
> +void Float2IntPass::walkBackwards(const SmallPtrSetImpl<Instruction*><br>
> &Roots) {<br>
>    std::deque<Instruction*> Worklist(Roots.begin(), Roots.end());<br>
>    while (!Worklist.empty()) {<br>
>      Instruction *I = Worklist.back();<br>
> @@ -245,7 +234,7 @@ void Float2Int::walkBackwards(const Smal<br>
><br>
>  // Walk forwards down the list of seen instructions, so we visit defs<br>
> before<br>
>  // uses.<br>
> -void Float2Int::walkForwards() {<br>
> +void Float2IntPass::walkForwards() {<br>
>    for (auto &It : reverse(SeenInsts)) {<br>
>      if (It.second != unknownRange())<br>
>        continue;<br>
> @@ -356,7 +345,7 @@ void Float2Int::walkForwards() {<br>
>  }<br>
><br>
>  // If there is a valid transform to be done, do it.<br>
> -bool Float2Int::validateAndTransform() {<br>
> +bool Float2IntPass::validateAndTransform() {<br>
>    bool MadeChange = false;<br>
><br>
>    // Iterate over every disjoint partition of the def-use graph.<br>
> @@ -438,7 +427,7 @@ bool Float2Int::validateAndTransform() {<br>
>    return MadeChange;<br>
>  }<br>
><br>
> -Value *Float2Int::convert(Instruction *I, Type *ToTy) {<br>
> +Value *Float2IntPass::convert(Instruction *I, Type *ToTy) {<br>
>    if (ConvertedInsts.find(I) != ConvertedInsts.end())<br>
>      // Already converted this instruction.<br>
>      return ConvertedInsts[I];<br>
> @@ -510,15 +499,12 @@ Value *Float2Int::convert(Instruction *I<br>
>  }<br>
><br>
>  // Perform dead code elimination on the instructions we just modified.<br>
> -void Float2Int::cleanup() {<br>
> +void Float2IntPass::cleanup() {<br>
>    for (auto &I : reverse(ConvertedInsts))<br>
>      I.first->eraseFromParent();<br>
>  }<br>
><br>
> -bool Float2Int::runOnFunction(Function &F) {<br>
> -  if (skipFunction(F))<br>
> -    return false;<br>
> -<br>
> +bool Float2IntPass::runImpl(Function &F) {<br>
>    DEBUG(dbgs() << "F2I: Looking at function " << F.getName() << "\n");<br>
>    // Clear out all state.<br>
>    ECs = EquivalenceClasses<Instruction*>();<br>
> @@ -539,4 +525,17 @@ bool Float2Int::runOnFunction(Function &<br>
>    return Modified;<br>
>  }<br>
><br>
> -FunctionPass *llvm::createFloat2IntPass() { return new Float2Int(); }<br>
> +namespace llvm {<br>
> +FunctionPass *createFloat2IntPass() { return new Float2IntLegacyPass(); }<br>
> +<br>
> +PreservedAnalyses Float2IntPass::run(Function &F, FunctionAnalysisManager<br>
> &) {<br>
> +  if (!runImpl(F))<br>
> +    return PreservedAnalyses::all();<br>
> +  else {<br>
> +    //FIXME: setPreservesCFG is not currently supported in the new PM.<br>
> +    PreservedAnalyses PA;<br>
> +    PA.preserve<GlobalsAA>();<br>
> +    return PA;<br>
> +  }<br>
> +}<br>
> +} // End namespace llvm<br>
><br>
> Modified: llvm/trunk/lib/Transforms/Scalar/Scalar.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/lib/Transforms/Scalar/Scalar.cpp?rev=273747&r1=273746&r<br>
> 2=273747&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/lib/Transforms/Scalar/Scalar.cpp (original)<br>
> +++ llvm/trunk/lib/Transforms/Scalar/Scalar.cpp Fri Jun 24 18:32:02 2016<br>
> @@ -84,7 +84,7 @@ void llvm::initializeScalarOpts(PassRegi<br>
>    initializeLoadCombinePass(Registry);<br>
>    initializePlaceBackedgeSafepointsImplPass(Registry);<br>
>    initializePlaceSafepointsPass(Registry);<br>
> -  initializeFloat2IntPass(Registry);<br>
> +  initializeFloat2IntLegacyPassPass(Registry);<br>
>    initializeLoopDistributePass(Registry);<br>
>    initializeLoopLoadEliminationPass(Registry);<br>
>    initializeLoopSimplifyCFGLegacyPassPass(Registry);<br>
><br>
> Modified: llvm/trunk/test/Transforms/Float2Int/basic.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-</a><br>
> project/llvm/trunk/test/Transforms/Float2Int/basic.ll?rev=273747&r1=273746<br>
> &r2=273747&view=diff<br>
> ==========================================================================<br>
> ====<br>
> --- llvm/trunk/test/Transforms/Float2Int/basic.ll (original)<br>
> +++ llvm/trunk/test/Transforms/Float2Int/basic.ll Fri Jun 24 18:32:02 2016<br>
> @@ -1,4 +1,5 @@<br>
>  ; RUN: opt < %s -float2int -S | FileCheck %s<br>
> +; RUN: opt < %s -passes='float2int' -S | FileCheck %s<br>
><br>
>  ;<br>
>  ; Positive tests<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>