Does "+" warn? If so, it probably shouldn't. -eric
On Fri, Nov 30, 2012 at 3:18 PM, Bill Wendling <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
