[llvm-commits] [dragonegg] r166672 - in /dragonegg/trunk/src: ConstantConversion.cpp Convert.cpp TypeConversion.cpp

Hal Finkel hfinkel at anl.gov
Thu Oct 25 08:41:38 PDT 2012


----- Original Message -----
> From: "Micah Villmow" <Micah.Villmow at amd.com>
> To: "Duncan Sands" <baldrick at free.fr>, llvm-commits at cs.uiuc.edu
> Sent: Thursday, October 25, 2012 10:27:20 AM
> Subject: Re: [llvm-commits] [dragonegg] r166672 - in /dragonegg/trunk/src: ConstantConversion.cpp Convert.cpp
> TypeConversion.cpp
> 
> Thanks for cleaning this up Duncan.
> 
> Should I update getIntPtrType or is that the work that Hal has been
> doing?

If you mean updating getIntPtrType to return a vector for vector inputs; that is something that we could do, but it would require changing the return type, auditing all callers, etc. and I've not done that. I put a small wrapper into GVN for this purpose, but I'm unfamiliar with needs elsewhere.

 -Hal

> 
> Micah
> 
> > -----Original Message-----
> > From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> > bounces at cs.uiuc.edu] On Behalf Of Duncan Sands
> > Sent: Thursday, October 25, 2012 2:13 AM
> > To: llvm-commits at cs.uiuc.edu
> > Subject: [llvm-commits] [dragonegg] r166672 - in
> > /dragonegg/trunk/src:
> > ConstantConversion.cpp Convert.cpp TypeConversion.cpp
> > 
> > Author: baldrick
> > Date: Thu Oct 25 04:12:37 2012
> > New Revision: 166672
> > 
> > URL: http://llvm.org/viewvc/llvm-project?rev=166672&view=rev
> > Log:
> > Clean up after Micah's address space changes.  Note that this
> > assumes
> > that getIntPtrType will be fixed to return a vector of integers
> > when
> > passed a vector of pointers.
> > 
> > Modified:
> >     dragonegg/trunk/src/ConstantConversion.cpp
> >     dragonegg/trunk/src/Convert.cpp
> >     dragonegg/trunk/src/TypeConversion.cpp
> > 
> > Modified: dragonegg/trunk/src/ConstantConversion.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/dragonegg/trunk/src/ConstantConversion.cpp?rev=166672&r1=166671&
> > r2=166672&view=diff
> > ========================================================================
> > ======
> > --- dragonegg/trunk/src/ConstantConversion.cpp (original)
> > +++ dragonegg/trunk/src/ConstantConversion.cpp Thu Oct 25 04:12:37
> > 2012
> > @@ -559,16 +559,16 @@
> >      unsigned NumElts = TYPE_VECTOR_SUBPARTS(type);
> >      unsigned Stride = GET_MODE_BITSIZE(TYPE_MODE(elt_type));
> >      SmallVector<Constant*, 16> Vals(NumElts);
> > -    // FIXME: what is the address space here?
> > -    unsigned AS = 0;
> > -    IntegerType *IntPtrTy = getDataLayout().getIntPtrType(Context,
> > AS);
> >      for (unsigned i = 0; i != NumElts; ++i) {
> >        Vals[i] = ExtractRegisterFromConstantImpl(C, elt_type,
> >                                                  StartingBit+i*Stride,
> > Folder);
> >        // LLVM does not support vectors of pointers, so turn any
> > pointers into
> >        // integers.
> > -      if (isa<PointerType>(Vals[i]->getType()))
> > +      if (isa<PointerType>(Vals[i]->getType())) {
> > +        IntegerType *IntPtrTy =
> > +          getDataLayout().getIntPtrType(Vals[i]->getType());
> >          Vals[i] = Folder.CreatePtrToInt(Vals[i], IntPtrTy);
> > +      }
> >      }
> >      return ConstantVector::get(Vals);
> >    }
> > 
> > Modified: dragonegg/trunk/src/Convert.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/dragonegg/trunk/src/Convert.cpp?rev=166672&r1=166671&r2=166672&v
> > iew=diff
> > ========================================================================
> > ======
> > --- dragonegg/trunk/src/Convert.cpp (original)
> > +++ dragonegg/trunk/src/Convert.cpp Thu Oct 25 04:12:37 2012
> > @@ -840,10 +840,8 @@
> >          // bytes, but only 10 are copied.  If the object is really
> >          a
> > union
> >          // we might need the other bytes.  We must also be careful
> >          to
> > use
> >          // the smaller alignment.
> > -        // FIXME: Where do we get the address space?
> > -        unsigned AS = 0;
> >          Type *SBP = Type::getInt8PtrTy(Context);
> > -        Type *IntPtr = getDataLayout().getIntPtrType(Context, AS);
> > +        Type *IntPtr = getDataLayout().getIntPtrType(Context, 0);
> >          Value *Ops[5] = {
> >            Builder.CreateCast(Instruction::BitCast, Loc, SBP),
> >            Builder.CreateCast(Instruction::BitCast, AI, SBP), @@
> >            -1357,7
> > +1355,7 @@
> >                Builder.CreateBitCast(ResultLV.Ptr,
> > Type::getInt8PtrTy(Context));
> >              ResultLV.Ptr =
> >                Builder.CreateGEP(ResultLV.Ptr,
> > -
> > ConstantInt::get(TD.getIntPtrType(ResultLV.Ptr->getType()),
> > +
> > + ConstantInt::get(TD.getIntPtrType(Context, 0),
> >                                                   ReturnOffset),
> >                                  flag_verbose_asm ? "rtvl" : "");
> >              ResultLV.setAlignment(MinAlign(ResultLV.getAlignment(),
> > ReturnOffset)); @@ -1859,16 +1857,15 @@
> >    if (OrigEltTy->isIntegerTy())
> >      // Already an integer/vector of integer - nothing to do.
> >      return V;
> > -  unsigned VecElts = isa<VectorType>(OrigTy) ?
> > -    cast<VectorType>(OrigTy)->getNumElements() : 0;
> >    if (OrigEltTy->isPointerTy()) {
> >      // A pointer/vector of pointer - form a (vector of) pointer
> >      sized
> > integers.
> > -    Type *NewEltTy = TD.getIntPtrType(OrigEltTy);
> > -    Type *NewTy = VecElts ? VectorType::get(NewEltTy, VecElts) :
> > NewEltTy;
> > +    Type *NewTy = TD.getIntPtrType(OrigTy);
> >      return Builder.CreatePtrToInt(V, NewTy);
> >    }
> >    // Everything else.
> >    assert(OrigTy->isFPOrFPVectorTy() && "Expected a floating point
> > type!");
> > +  unsigned VecElts = isa<VectorType>(OrigTy) ?
> > +    cast<VectorType>(OrigTy)->getNumElements() : 0;
> >    unsigned BitWidth = OrigEltTy->getPrimitiveSizeInBits();
> >    Type *NewEltTy = IntegerType::get(Context, BitWidth);
> >    Type *NewTy = VecElts ? VectorType::get(NewEltTy, VecElts) :
> > NewEltTy; @@ -3480,8 +3477,9 @@
> >    if (Client.Offset) {
> >      Ptr = Builder.CreateBitCast(Ptr, Type::getInt8PtrTy(Context));
> >      Ptr = Builder.CreateGEP(Ptr,
> > -
> >                    ConstantInt::get(TD.getIntPtrType(Ptr->getType()),
> > Client.Offset),
> > -                    flag_verbose_asm ? "ro" : "");
> > +                            ConstantInt::get(TD.getIntPtrType(Ptr-
> > >getType()),
> > +                                             Client.Offset),
> > +                            flag_verbose_asm ? "ro" : "");
> >      Align = MinAlign(Align, Client.Offset);
> >      MaxStoreSize -= Client.Offset;
> >    }
> > @@ -5677,9 +5675,7 @@
> >    if (!validate_gimple_arglist(stmt, INTEGER_TYPE, POINTER_TYPE,
> > VOID_TYPE))
> >      return false;
> > 
> > -  // FIXME: Where do I get the address space from here?
> > -  unsigned AS = 0;
> > -  Type *IntPtr = TD.getIntPtrType(Context, AS);
> > +  Type *IntPtr = TD.getIntPtrType(Context, 0);
> >    Value *Offset = EmitMemory(gimple_call_arg(stmt, 0));
> >    Value *Handler = EmitMemory(gimple_call_arg(stmt, 1));
> > 
> > @@ -6604,15 +6600,14 @@
> > 
> >    // Convert the elements.
> >    SmallVector<Constant*, 16> Elts;
> > -  // FIXME: Where do I get the address space from?
> > -  unsigned AS = 0;
> > -  IntegerType *IntTy = getDataLayout().getIntPtrType(Context, AS);
> >    for (tree elt = TREE_VECTOR_CST_ELTS(reg); elt; elt =
> > TREE_CHAIN(elt)) {
> >      Constant *Elt = EmitRegisterConstant(TREE_VALUE(elt));
> >      // LLVM does not support vectors of pointers, so turn any
> >      pointers
> > into
> >      // integers.
> > -    if (isa<PointerType>(Elt->getType()))
> > +    if (isa<PointerType>(Elt->getType())) {
> > +      IntegerType *IntTy =
> > + getDataLayout().getIntPtrType(Elt->getType());
> >        Elt = Builder.getFolder().CreatePtrToInt(Elt, IntTy);
> > +    }
> >      Elts.push_back(Elt);
> >    }
> > 
> > 
> > Modified: dragonegg/trunk/src/TypeConversion.cpp
> > URL: http://llvm.org/viewvc/llvm-
> > project/dragonegg/trunk/src/TypeConversion.cpp?rev=166672&r1=166671&r2=1
> > 66672&view=diff
> > ========================================================================
> > ======
> > --- dragonegg/trunk/src/TypeConversion.cpp (original)
> > +++ dragonegg/trunk/src/TypeConversion.cpp Thu Oct 25 04:12:37 2012
> > @@ -456,11 +456,9 @@
> >      return StructType::get(EltTy, EltTy, NULL);
> >    }
> > 
> > -  case OFFSET_TYPE: {
> > -    // FIXME: Need to get the Address space here.
> > -    unsigned AS = 0;
> > -    return getDataLayout().getIntPtrType(Context, AS);
> > -  }
> > +  case OFFSET_TYPE:
> > +    return getDataLayout().getIntPtrType(Context,
> > + TYPE_ADDR_SPACE(type));
> > +
> >    case POINTER_TYPE:
> >    case REFERENCE_TYPE:
> >      // void* -> byte*
> > @@ -487,10 +485,10 @@
> >    case VECTOR_TYPE: {
> >      // LLVM does not support vectors of pointers, so turn any
> >      pointers
> > into
> >      // integers. <-- This isn't true since at least 3.1 as far as
> >      I
> > know - MicahV
> > -    // FIXME: Need to get the Address space here.
> > -    unsigned AS = 0;
> > +    // FIXME     ^-- Yes, but does it work reliably? - Duncan
> >      Type *EltTy = isa<ACCESS_TYPE>(TREE_TYPE(type)) ?
> > -      getDataLayout().getIntPtrType(Context, AS) :
> > getRegType(TREE_TYPE(type));
> > +      getDataLayout().getIntPtrType(Context,
> > TYPE_ADDR_SPACE(TREE_TYPE(type))) :
> > +      getRegType(TREE_TYPE(type));
> >      return VectorType::get(EltTy, TYPE_VECTOR_SUBPARTS(type));
> >    }
> > 
> > @@ -1423,8 +1421,7 @@
> >      // which are really just integer offsets.  Return the
> >      appropriate
> > integer
> >      // type directly.
> >      // Caching the type conversion is not worth it.
> > -    // FIXME: Need to get the Address space here.
> > -    unsigned AS = 0;
> > +    unsigned AS = TYPE_ADDR_SPACE(type);
> >      return CheckTypeConversion(type,
> > getDataLayout().getIntPtrType(Context, AS));
> >    }
> >    case REAL_TYPE:
> > @@ -1463,13 +1460,11 @@
> >      Type *Ty;
> >      // LLVM does not support vectors of pointers, so turn any
> >      pointers
> > into
> >      // integers.
> > -    if (isa<ACCESS_TYPE>(TREE_TYPE(type))) {
> > -      // FIXME: Need to get the Address space here.
> > -      unsigned AS = 0;
> > -      Ty = getDataLayout().getIntPtrType(Context, AS);
> > -    } else {
> > +    if (isa<ACCESS_TYPE>(TREE_TYPE(type)))
> > +      Ty = getDataLayout().getIntPtrType(Context,
> > +
> > TYPE_ADDR_SPACE(TREE_TYPE(type)));
> > +    else
> >        Ty = ConvertTypeNonRecursive(main_type(type));
> > -    }
> >      Ty = VectorType::get(Ty, TYPE_VECTOR_SUBPARTS(type));
> >      return RememberTypeConversion(type, Ty);
> >    }
> > 
> > 
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-- 
Hal Finkel
Postdoctoral Appointee
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-commits mailing list