[llvm-commits] [llvm] r163175 - in /llvm/trunk: include/llvm/InlineAsm.h lib/VMCore/ConstantsContext.h lib/VMCore/Core.cpp lib/VMCore/InlineAsm.cpp

Chad Rosier michael_rosier at apple.com
Tue Sep 4 23:40:48 PDT 2012


On Sep 4, 2012, at 8:05 PM, Chandler Carruth wrote:

> On Tue, Sep 4, 2012 at 10:11 PM, Matt Beaumont-Gay <matthewbg at google.com> wrote:
> On Tue, Sep 4, 2012 at 3:46 PM, Chad Rosier <mcrosier at apple.com> wrote:
> > Author: mcrosier
> > Date: Tue Sep  4 17:46:24 2012
> > New Revision: 163175
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=163175&view=rev
> > Log:
> > [ms-inline asm] Add the inline assembly dialect, AsmDialect, to the InlineAsm
> > class.
> >
> > Modified:
> >     llvm/trunk/include/llvm/InlineAsm.h
> >     llvm/trunk/lib/VMCore/ConstantsContext.h
> >     llvm/trunk/lib/VMCore/Core.cpp
> >     llvm/trunk/lib/VMCore/InlineAsm.cpp
> >
> > Modified: llvm/trunk/include/llvm/InlineAsm.h
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InlineAsm.h?rev=163175&r1=163174&r2=163175&view=diff
> > ==============================================================================
> > --- llvm/trunk/include/llvm/InlineAsm.h (original)
> > +++ llvm/trunk/include/llvm/InlineAsm.h Tue Sep  4 17:46:24 2012
> > @@ -43,10 +43,12 @@
> >    std::string AsmString, Constraints;
> >    bool HasSideEffects;
> >    bool IsAlignStack;
> > -
> > +  /// AsmDialect - 0 is AT&T (default) and 1 is the Intel dialect.
> > +  unsigned AsmDialect;
> 
> Comment from the peanut gallery: Either we're not going to grow any
> more dialects, in which case maybe this should be a bool, or we are,
> in which case this should be an enum.

I'll take care of the enum in the morning.

> I think an enum makes the most sense either way -- it's self documenting and matches the plan for the IR dialect support: focus on the two we care about today, but leave open the possibility of more later.

I was thinking about this after I left work today.  I think I'm going to rename the nsdialect to inteldialect.  Originally, we were using a function attribute, which were running low on bits.  When the time arrived that we wanted to add another dialect we were going to add a side structure.  However, now that this isn't being implemented as a function attribute, I don't think we need to worry so much about saving bits (we have 30 bits and I don't suspect we're going to be adding much beyond the sideeffect, alignstack, and [a-zA-Z]*dialect) .  I also think the inteldialect keyword gives some indication as to what it means; nsdialect isn't very intuitive.

I'll change this tomorrow assuming no one objects.

 Chad

>  
> 
> > +
> >    InlineAsm(PointerType *Ty, const std::string &AsmString,
> >              const std::string &Constraints, bool hasSideEffects,
> > -            bool isAlignStack);
> > +            bool isAlignStack, unsigned asmDialect);
> >    virtual ~InlineAsm();
> >
> >    /// When the ConstantUniqueMap merges two types and makes two InlineAsms
> > @@ -58,11 +60,12 @@
> >    ///
> >    static InlineAsm *get(FunctionType *Ty, StringRef AsmString,
> >                          StringRef Constraints, bool hasSideEffects,
> > -                        bool isAlignStack = false);
> > +                        bool isAlignStack = false, unsigned asmDialect = 0);
> >
> >    bool hasSideEffects() const { return HasSideEffects; }
> >    bool isAlignStack() const { return IsAlignStack; }
> > -
> > +  unsigned getDialect() const { return AsmDialect; }
> > +
> >    /// getType - InlineAsm's are always pointers.
> >    ///
> >    PointerType *getType() const {
> >
> > Modified: llvm/trunk/lib/VMCore/ConstantsContext.h
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantsContext.h?rev=163175&r1=163174&r2=163175&view=diff
> > ==============================================================================
> > --- llvm/trunk/lib/VMCore/ConstantsContext.h (original)
> > +++ llvm/trunk/lib/VMCore/ConstantsContext.h Tue Sep  4 17:46:24 2012
> > @@ -352,18 +352,21 @@
> >  struct InlineAsmKeyType {
> >    InlineAsmKeyType(StringRef AsmString,
> >                     StringRef Constraints, bool hasSideEffects,
> > -                   bool isAlignStack)
> > +                   bool isAlignStack, unsigned asmDialect)
> >      : asm_string(AsmString), constraints(Constraints),
> > -      has_side_effects(hasSideEffects), is_align_stack(isAlignStack) {}
> > +      has_side_effects(hasSideEffects), is_align_stack(isAlignStack),
> > +      asm_dialect(asmDialect) {}
> >    std::string asm_string;
> >    std::string constraints;
> >    bool has_side_effects;
> >    bool is_align_stack;
> > +  unsigned asm_dialect;
> >    bool operator==(const InlineAsmKeyType& that) const {
> >      return this->asm_string == that.asm_string &&
> >             this->constraints == that.constraints &&
> >             this->has_side_effects == that.has_side_effects &&
> > -           this->is_align_stack == that.is_align_stack;
> > +           this->is_align_stack == that.is_align_stack &&
> > +           this->asm_dialect == that.asm_dialect;
> >    }
> >    bool operator<(const InlineAsmKeyType& that) const {
> >      if (this->asm_string != that.asm_string)
> > @@ -374,6 +377,8 @@
> >        return this->has_side_effects < that.has_side_effects;
> >      if (this->is_align_stack != that.is_align_stack)
> >        return this->is_align_stack < that.is_align_stack;
> > +    if (this->asm_dialect != that.asm_dialect)
> > +      return this->asm_dialect < that.asm_dialect;
> >      return false;
> >    }
> >
> > @@ -490,7 +495,8 @@
> >  struct ConstantCreator<InlineAsm, PointerType, InlineAsmKeyType> {
> >    static InlineAsm *create(PointerType *Ty, const InlineAsmKeyType &Key) {
> >      return new InlineAsm(Ty, Key.asm_string, Key.constraints,
> > -                         Key.has_side_effects, Key.is_align_stack);
> > +                         Key.has_side_effects, Key.is_align_stack,
> > +                         Key.asm_dialect);
> >    }
> >  };
> >
> > @@ -499,7 +505,8 @@
> >    typedef InlineAsmKeyType ValType;
> >    static ValType getValType(InlineAsm *Asm) {
> >      return InlineAsmKeyType(Asm->getAsmString(), Asm->getConstraintString(),
> > -                            Asm->hasSideEffects(), Asm->isAlignStack());
> > +                            Asm->hasSideEffects(), Asm->isAlignStack(),
> > +                            Asm->getDialect());
> >    }
> >  };
> >
> >
> > Modified: llvm/trunk/lib/VMCore/Core.cpp
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Core.cpp?rev=163175&r1=163174&r2=163175&view=diff
> > ==============================================================================
> > --- llvm/trunk/lib/VMCore/Core.cpp (original)
> > +++ llvm/trunk/lib/VMCore/Core.cpp Tue Sep  4 17:46:24 2012
> > @@ -1055,9 +1055,11 @@
> >  LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty, const char *AsmString,
> >                                  const char *Constraints,
> >                                  LLVMBool HasSideEffects,
> > -                                LLVMBool IsAlignStack) {
> > +                                LLVMBool IsAlignStack,
> > +                                unsigned AsmDialect) {
> >    return wrap(InlineAsm::get(dyn_cast<FunctionType>(unwrap(Ty)), AsmString,
> > -                             Constraints, HasSideEffects, IsAlignStack));
> > +                             Constraints, HasSideEffects, IsAlignStack,
> > +                             AsmDialect));
> >  }
> >
> >  LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB) {
> >
> > Modified: llvm/trunk/lib/VMCore/InlineAsm.cpp
> > URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/InlineAsm.cpp?rev=163175&r1=163174&r2=163175&view=diff
> > ==============================================================================
> > --- llvm/trunk/lib/VMCore/InlineAsm.cpp (original)
> > +++ llvm/trunk/lib/VMCore/InlineAsm.cpp Tue Sep  4 17:46:24 2012
> > @@ -27,19 +27,20 @@
> >
> >  InlineAsm *InlineAsm::get(FunctionType *Ty, StringRef AsmString,
> >                            StringRef Constraints, bool hasSideEffects,
> > -                          bool isAlignStack) {
> > -  InlineAsmKeyType Key(AsmString, Constraints, hasSideEffects, isAlignStack);
> > +                          bool isAlignStack, unsigned asmDialect) {
> > +  InlineAsmKeyType Key(AsmString, Constraints, hasSideEffects, isAlignStack,
> > +                       asmDialect);
> >    LLVMContextImpl *pImpl = Ty->getContext().pImpl;
> >    return pImpl->InlineAsms.getOrCreate(PointerType::getUnqual(Ty), Key);
> >  }
> >
> >  InlineAsm::InlineAsm(PointerType *Ty, const std::string &asmString,
> >                       const std::string &constraints, bool hasSideEffects,
> > -                     bool isAlignStack)
> > +                     bool isAlignStack, unsigned asmDialect)
> >    : Value(Ty, Value::InlineAsmVal),
> > -    AsmString(asmString),
> > -    Constraints(constraints), HasSideEffects(hasSideEffects),
> > -    IsAlignStack(isAlignStack) {
> > +    AsmString(asmString), Constraints(constraints),
> > +    HasSideEffects(hasSideEffects), IsAlignStack(isAlignStack),
> > +    AsmDialect(asmDialect) {
> >
> >    // Do various checks on the constraint string and type.
> >    assert(Verify(getFunctionType(), constraints) &&
> >
> >
> > _______________________________________________
> > 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
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120904/316d262d/attachment.html>


More information about the llvm-commits mailing list