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