r217994 - [X86, inline-asm] Check that the input size is correct for constraints R, q, Q,

Eric Christopher echristo at gmail.com
Thu Sep 18 11:34:35 PDT 2014


>
>
>

+  case 'x':
> +  case 'f':
> +  case 't':
> +  case 'u':
> +    return Size <= 128;
>

Hans pointed out that you'll have problems here with _m256 and wanting an
avx register. There is, afaict, no separate constraint for "gimme an avx
register" that's different from SSE registers. There is the 'v' constraint
which works for avx 512 (evex encoded) registers.

-eric



> +  }
> +
> +  return true;
> +}
>
>  std::string
>  X86TargetInfo::convertConstraint(const char *&Constraint) const {
> @@ -3109,14 +3127,21 @@ public:
>                           unsigned Size) const override {
>      switch (Constraint[0]) {
>      default: break;
> +    case 'R':
> +    case 'q':
> +    case 'Q':
>      case 'a':
>      case 'b':
>      case 'c':
>      case 'd':
> +    case 'S':
> +    case 'D':
>        return Size <= 32;
> +    case 'A':
> +      return Size <= 64;
>      }
>
> -    return true;
> +    return X86TargetInfo::validateInputSize(Constraint, Size);
>    }
>  };
>  } // end anonymous namespace
>
> Modified: cfe/trunk/test/CodeGen/x86_32-inline-asm.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_32-inline-asm.c?rev=217994&r1=217993&r2=217994&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/x86_32-inline-asm.c (original)
> +++ cfe/trunk/test/CodeGen/x86_32-inline-asm.c Wed Sep 17 18:35:14 2014
> @@ -1,5 +1,8 @@
>  // RUN: %clang_cc1 -triple i386-apple-darwin9 -verify %s
> +
>  // <rdar://problem/12415959>
> +// rdar://problem/11846140
> +// rdar://problem/17476970
>
>  typedef unsigned int u_int32_t;
>  typedef u_int32_t uint32_t;
> @@ -7,6 +10,12 @@ typedef u_int32_t uint32_t;
>  typedef unsigned long long u_int64_t;
>  typedef u_int64_t uint64_t;
>
> +typedef float __m128 __attribute__ ((vector_size (16)));
> +typedef float __m256 __attribute__ ((vector_size (32)));
> +
> +__m128 val128;
> +__m256 val256;
> +
>  int func1() {
>    // Error out if size is > 32-bits.
>    uint32_t msr = 0x8b;
> @@ -21,4 +30,17 @@ int func1() {
>    unsigned char data;
>    unsigned int port;
>    __asm__ volatile("outb %0, %w1" : : "a" (data), "Nd" (port)); // No
> error expected.
> +
> +  __asm__ volatile("outb %0, %w1" : : "R" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'R'}}
> +  __asm__ volatile("outb %0, %w1" : : "q" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'q'}}
> +  __asm__ volatile("outb %0, %w1" : : "Q" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'Q'}}
> +  __asm__ volatile("outb %0, %w1" : : "b" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'b'}}
> +  __asm__ volatile("outb %0, %w1" : : "c" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'c'}}
> +  __asm__ volatile("outb %0, %w1" : : "d" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'd'}}
> +  __asm__ volatile("outb %0, %w1" : : "S" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'S'}}
> +  __asm__ volatile("outb %0, %w1" : : "D" (val), "Nd" (port)); //
> expected-error {{invalid input size for constraint 'D'}}
> +  __asm__ volatile("foo1 %0" : : "A" (val128)); // expected-error
> {{invalid input size for constraint 'A'}}
> +  __asm__ volatile("foo1 %0" : : "f" (val256)); // expected-error
> {{invalid input size for constraint 'f'}}
> +  __asm__ volatile("foo1 %0" : : "t" (val256)); // expected-error
> {{invalid input size for constraint 't'}}
> +  __asm__ volatile("foo1 %0" : : "u" (val256)); // expected-error
> {{invalid input size for constraint 'u'}}
>  }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140918/2f930cb5/attachment.html>


More information about the cfe-commits mailing list