rnk added inline comments.

================
Comment at: include/llvm/MC/MCParser/MCAsmParser.h:64
                                     unsigned &Offset) = 0;
+  virtual bool EvaluateLookupAsEnum(void *LookupResult,int64_t &Result) = 0;
 };
----------------
mharoush wrote:
> rnk wrote:
> > It would be cleaner if InlineAsmIdentifierInfo simply contained an APInt 
> > indicating that the identifier in question was an enum, or other integral 
> > constant expression. Less callbacks to implement.
> Done
Thanks! This is better.


================
Comment at: include/llvm/MC/MCParser/MCAsmParser.h:40
   void *OpDecl;
   bool IsVarDecl;
   unsigned Length, Size, Type;
----------------
Please group the booleans to reduce padding. Ideally, make this an enum 
something like:
```
enum IdKind : uint8_t {
  Variable,
  Function,
  ConstInt,
};
IdKind Kind;
```
This is smaller and prevents nonsense states.


================
Comment at: lib/Target/X86/AsmParser/X86AsmParser.cpp:1382
+        if (const MCConstantExpr *CE = 
+            dyn_cast_or_null<const MCConstantExpr>(Val)) {
+          StringRef ErrMsg;
----------------
Please use clang-format here and elsewhere


================
Comment at: lib/Target/X86/AsmParser/X86AsmParser.cpp:722
+  bool ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End, 
+                            bool &ReplaceEnumIdentifier);
   std::unique_ptr<X86Operand>
----------------
mharoush wrote:
> rnk wrote:
> > Please try to eliminate the need for this extra boolean out parameter.
> This flag is used in case we try to compile something like mov edx, A+6 ( 
> when A is defined as ConstantEnum ) the original condition (Line:1905) will 
> skip the rewrite since we have an identifier as the first Token, however if 
> we try to compile 6+A it will be rewritten as expected.
> 
> I tried to solve this in different ways, I got either the exact opposite (A+6 
> was replaced and 6+A wasn't) or a collision of rewrites when trying to 
> preform other forms of replacements and leaving this section intact. 
> 
> I can perhaps change the way we handle general expressions to the same way we 
> handle them under parseIntelBracExpression, meaning use the first iteration 
> of X86AsmParser to reformat the string (write imm prefixes and replace 
> identifiers when needed) then refactor the string to its canonical form on 
> the second pass. 
> 
> In short this was the simplest solution that worked without regression, maybe 
> you have a better idea?
> 
> If the issue is the method signature pollution I can move this flag into the 
> SM class as a member to indicate a rewrite is needed, however since this flag 
> and method are limited to this context alone, I am not sure if the overhead 
> is wanted in such case . 
I suspect there is a way to simplify the code so that this corner case no 
longer exists. I don't really have time to dig through the test cases to come 
up with it, but please make an effort.


Repository:
  rL LLVM

https://reviews.llvm.org/D33278



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to