[llvm-commits] [llvm] r165057 - in /llvm/trunk: include/llvm/MC/MCParser/MCParsedAsmOperand.h lib/Target/X86/AsmParser/X86AsmParser.cpp

Jim Grosbach grosbach at apple.com
Tue Oct 2 15:16:23 PDT 2012


No. We talked about this. Why are you committing this without further discussion. I have significant problems with this approach.

Please revert.

On Oct 2, 2012, at 2:49 PM, Chad Rosier <mcrosier at apple.com> wrote:

> Author: mcrosier
> Date: Tue Oct  2 16:49:07 2012
> New Revision: 165057
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=165057&view=rev
> Log:
> [ms-inline asm] Add basic support for wildcard MCParsedAsmOperands.  This type
> of operand is specific to MS-style inline assembly and should not be generated
> when parsing normal assembly.
> 
> The purpose of the wildcard operands are to allow the AsmParser to match
> multiple instructions (i.e., MCInsts) to a given ms-style asm statement.  For
> the time being the matcher just returns the first match.  This patch only
> implements wildcard matches for memory operands.  Support for register
> wildcards will be added in the near future.
> 
> Modified:
>    llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h
>    llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
> 
> Modified: llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h?rev=165057&r1=165056&r2=165057&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h (original)
> +++ llvm/trunk/include/llvm/MC/MCParser/MCParsedAsmOperand.h Tue Oct  2 16:49:07 2012
> @@ -34,6 +34,13 @@
>   /// isMem - Is this a memory operand?
>   virtual bool isMem() const = 0;
> 
> +  /// isMSAsmWildcard - Is this a wildcard operand?  This is specific to
> +  /// MS-style inline assembly and should never happen in normal assembly.
> +  virtual bool isMSAsmWildcard() const { return false; }
> +
> +  /// setMSAsmWildcard - Convert the operand into a wildcard.
> +  virtual void setMSAsmWildcard(unsigned Size) { }
> +
>   /// getStartLoc - Get the location of the first token of this operand.
>   virtual SMLoc getStartLoc() const = 0;
>   /// getEndLoc - Get the location of the last token of this operand.
> 
> Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=165057&r1=165056&r2=165057&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
> +++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Tue Oct  2 16:49:07 2012
> @@ -158,7 +158,8 @@
>     Token,
>     Register,
>     Immediate,
> -    Memory
> +    Memory,
> +    MSAsmWildcard
>   } Kind;
> 
>   SMLoc StartLoc, EndLoc;
> @@ -185,6 +186,10 @@
>       unsigned Scale;
>       unsigned Size;
>     } Mem;
> +
> +    struct {
> +      unsigned Size;
> +    } MSAsm;
>   };
> 
>   X86Operand(KindTy K, SMLoc Start, SMLoc End)
> @@ -318,25 +323,32 @@
> 
>   bool isMem() const { return Kind == Memory; }
>   bool isMem8() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 8);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 8)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 8);
>   }
>   bool isMem16() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 16);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 16)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 16);
>   }
>   bool isMem32() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 32);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 32)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 32);
>   }
>   bool isMem64() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 64);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 64)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 64);
>   }
>   bool isMem80() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 80);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 80)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 80);
>   }
>   bool isMem128() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 128);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 128)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 128);
>   }
>   bool isMem256() const {
> -    return Kind == Memory && (!Mem.Size || Mem.Size == 256);
> +    return (Kind == Memory && (!Mem.Size || Mem.Size == 256)) ||
> +      (Kind == MSAsmWildcard && MSAsm.Size == 256);
>   }
> 
>   bool isMemVX32() const {
> @@ -363,6 +375,12 @@
> 
>   bool isReg() const { return Kind == Register; }
> 
> +  bool isMSAsmWildcard() const { return Kind == MSAsmWildcard; }
> +  void setMSAsmWildcard(unsigned Size) {
> +    Kind = MSAsmWildcard;
> +    this->MSAsm.Size = Size;
> +  }
> +
>   void addExpr(MCInst &Inst, const MCExpr *Expr) const {
>     // Add as immediates when possible.
>     if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(Expr))
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list