diff options
| author | Bill Wendling <isanbard@gmail.com> | 2012-11-30 23:18:12 +0000 |
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2012-11-30 23:18:12 +0000 |
| commit | 3c6591d6ea4611b8ca0c3fc09a3554c2ae42a72c (patch) | |
| tree | ab0d0d1556b50e385cc518e38d619d7d877086e0 /clang/lib/Basic/Targets.cpp | |
| parent | f15af485a0e33ccc467c53d4e2b0dfc85b3d6930 (diff) | |
| download | bcm5719-llvm-3c6591d6ea4611b8ca0c3fc09a3554c2ae42a72c.tar.gz bcm5719-llvm-3c6591d6ea4611b8ca0c3fc09a3554c2ae42a72c.zip | |
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.
llvm-svn: 169054
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index d6312d6e5dc..3c076ca4f03 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -3364,6 +3364,8 @@ public: 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 @@ public: 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; |

