[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