[cfe-commits] r169054 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Basic/Targets.cpp test/CodeGen/arm-asm-warn.c

Eric Christopher echristo at gmail.com
Fri Nov 30 15:24:29 PST 2012


Does "+" warn? If so, it probably shouldn't.

-eric


On Fri, Nov 30, 2012 at 3:18 PM, Bill Wendling <isanbard at gmail.com> wrote:

> Author: void
> Date: Fri Nov 30 17:18:12 2012
> New Revision: 169054
>
> URL: http://llvm.org/viewvc/llvm-project?rev=169054&view=rev
> Log:
> Don't warn if the input size is less than the register size. Also don't
> warn if
> the output size is greater than the register size. No truncation occurs
> with
> those. Reword warning to make it clearer what's the problem is.
>
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>     cfe/trunk/lib/Basic/Targets.cpp
>     cfe/trunk/test/CodeGen/arm-asm-warn.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=169054&r1=169053&r2=169054&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Nov 30
> 17:18:12 2012
> @@ -5152,7 +5152,8 @@
>      "accepted due to -fheinous-gnu-extensions, but clang may remove
> support "
>      "for this in the future">;
>    def warn_asm_mismatched_size_modifier : Warning<
> -    "the size being stored is truncated, use a modifier to specify the
> size">,
> +    "the value is truncated when put into register, "
> +    "use a modifier to specify the size">,
>      InGroup<ASMOperandWidths>;
>  }
>
>
> Modified: cfe/trunk/lib/Basic/Targets.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=169054&r1=169053&r2=169054&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Basic/Targets.cpp (original)
> +++ cfe/trunk/lib/Basic/Targets.cpp Fri Nov 30 17:18:12 2012
> @@ -3364,6 +3364,8 @@
>    virtual bool validateConstraintModifier(StringRef Constraint,
>                                            const char Modifier,
>                                            unsigned Size) const {
> +    bool isOutput = (Constraint[0] == '=');
> +
>      // Strip off constraint modifiers.
>      while (Constraint[0] == '=' ||
>             Constraint[0] == '+' ||
> @@ -3375,7 +3377,7 @@
>      case 'r': {
>        switch (Modifier) {
>        default:
> -        return Size == 32;
> +        return (isOutput && Size >= 32) || Size <= 32;
>        case 'q':
>          // A register of size 32 cannot fit a vector type.
>          return false;
>
> Modified: cfe/trunk/test/CodeGen/arm-asm-warn.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-asm-warn.c?rev=169054&r1=169053&r2=169054&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/arm-asm-warn.c (original)
> +++ cfe/trunk/test/CodeGen/arm-asm-warn.c Fri Nov 30 17:18:12 2012
> @@ -1,7 +1,16 @@
>  // REQUIRES: arm-registered-target
>  // RUN: %clang_cc1 -triple armv7 %s -emit-llvm -o /dev/null
> -// <rdar://problem/12284092>
>
> +char bar();
> +
> +void t1(int x, char y) {
> +  __asm__ volatile("mcr p15, 0, %1, c9, c12, 5;"
> +                   "mrc p15, 0, %0, c9, c13, 2;"
> +                   : "=r" (x)
> +                   : "r" (bar())); // no warning
> +}
> +
> +// <rdar://problem/12284092>
>  typedef __attribute__((neon_vector_type(2))) long long int64x2_t;
>  typedef struct int64x2x4_t {
>    int64x2_t val[4];
> @@ -9,10 +18,10 @@
>  int64x2x4_t t2(const long long a[]) {
>    int64x2x4_t r;
>    __asm__("vldm %[a], { %q[r0], %q[r1], %q[r2], %q[r3] }"
> -          : [r0] "=r"(r.val[0]), // expected-warning {{the size being
> stored is truncated, use a modifier to specify the size}}
> -            [r1] "=r"(r.val[1]), // expected-warning {{the size being
> stored is truncated, use a modifier to specify the size}}
> -            [r2] "=r"(r.val[2]), // expected-warning {{the size being
> stored is truncated, use a modifier to specify the size}}
> -            [r3] "=r"(r.val[3])  // expected-warning {{the size being
> stored is truncated, use a modifier to specify the size}}
> +          : [r0] "=r"(r.val[0]), // expected-warning {{the value is
> truncated when put into register, use a modifier to specify the size}}
> +            [r1] "=r"(r.val[1]), // expected-warning {{the value is
> truncated when put into register, use a modifier to specify the size}}
> +            [r2] "=r"(r.val[2]), // expected-warning {{the value is
> truncated when put into register, use a modifier to specify the size}}
> +            [r3] "=r"(r.val[3])  // expected-warning {{the value is
> truncated when put into register, use a modifier to specify the size}}
>            : [a] "r"(a));
>    return r;
>  }
>
>
> _______________________________________________
> 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/20121130/686f4ba9/attachment.html>


More information about the cfe-commits mailing list