ahatanak added a comment.

This patch doesn't detect more complex conflicts (like the following code), but 
I think it's OK for now.

  asm ("foo" : "=Q" (x) : : "%rax", "%rbx", "%rcx", "%rdx"); // Q: Any register 
accessible as rh: a, b, c, and d. 



> TargetInfo.h:593
>    ///
>    /// For example, on x86 it will return "ax" when "eax" is passed in.
> +  StringRef getNormalizedGCCRegisterName(StringRef Name,

It looks like this comment was wrong: it didn't return "ax" when "eax" was 
passed in Name.

> TargetInfo.cpp:406
>  StringRef
> -TargetInfo::getNormalizedGCCRegisterName(StringRef Name) const {
> +TargetInfo::getNormalizedGCCRegisterName(StringRef Name,
> +bool ReturnCannonical) const {

I think it's spelled "Canonical" rather than "Cannonical".

The comment added here doesn't seem correct to me. ReturnCanonical is used to 
make this function return the "canonical" register instead of the register 
passed in Name (e.g., when ReturnCanonical=true and Name="rax", it returns 
"ax").

> Targets.cpp:2718
> +      switch (Constraint[i]) {
> +        // Ignore these
> +      case '*':

Can we skip the checks for all these non-alphabet characters and handle them in 
"default"? Would doing so be incorrect?

> asm.c:34
> +  int a,b,c;
> +  asm ("nop" : "=r" (no_clobber_conflict) : "r" (clobber_conflict) : 
> "%rcx"); // expected-error {{asm-specifier for input or output variable 
> conflicts with asm clobber list}}
> +  asm ("nop" : "=r" (clobber_conflict) : "r" (no_clobber_conflict) : 
> "%rcx"); // expected-error {{asm-specifier for input or output variable 
> conflicts with asm clobber list}}

Do you think you can improve the error message using '^' so that it's clear 
which constraint has a conflict with the clobbers? I was thinking about 
something like this:

error: inline-asm constraint "=r" conflicts with clobber list

asm ("nop" : "=r" (no_clobber_conflict) : "r" (clobber_conflict) : "%rcx");

  ^

https://reviews.llvm.org/D15075



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

Reply via email to