diff options
| author | Nate Begeman <natebegeman@mac.com> | 2009-01-18 02:01:21 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2009-01-18 02:01:21 +0000 |
| commit | 7e5185b2649f1f5c95e01be3570c0edb529480fe (patch) | |
| tree | f915284212cc06d4ac4aa8495288a6486be97425 | |
| parent | eb09754a9de51289a2c0987c94792fa5f53bbce5 (diff) | |
| download | bcm5719-llvm-7e5185b2649f1f5c95e01be3570c0edb529480fe.tar.gz bcm5719-llvm-7e5185b2649f1f5c95e01be3570c0edb529480fe.zip | |
A couple more vector component access fixes.
llvm-svn: 62443
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 11 | ||||
| -rw-r--r-- | clang/test/CodeGen/ext-vector.c | 2 | ||||
| -rw-r--r-- | clang/test/Coverage/c-language-features.inc | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 6540b2ccc36..4dd06b924a2 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1160,6 +1160,17 @@ unsigned ExtVectorElementExpr::getNumElements() const { bool ExtVectorElementExpr::containsDuplicateElements() const { const char *compStr = Accessor.getName(); unsigned length = Accessor.getLength(); + + // Halving swizzles do not contain duplicate elements. + if (!strcmp(compStr, "hi") || !strcmp(compStr, "lo") || + !strcmp(compStr, "even") || !strcmp(compStr, "odd")) + return false; + + // Advance past s-char prefix on hex swizzles. + if (*compStr == 's') { + compStr++; + length--; + } for (unsigned i = 0; i != length-1; i++) { const char *s = compStr+i; diff --git a/clang/test/CodeGen/ext-vector.c b/clang/test/CodeGen/ext-vector.c index 657b2858535..ae877edb815 100644 --- a/clang/test/CodeGen/ext-vector.c +++ b/clang/test/CodeGen/ext-vector.c @@ -15,7 +15,7 @@ float4 vec4, vec4_2; float f; void test2() { - vec2 = vec4.rg; // shorten + vec2 = vec4.xy; // shorten f = vec2.x; // extract elt vec4 = vec4.yyyy; // splat diff --git a/clang/test/Coverage/c-language-features.inc b/clang/test/Coverage/c-language-features.inc index 6944b9d65e9..9a52e56c21d 100644 --- a/clang/test/Coverage/c-language-features.inc +++ b/clang/test/Coverage/c-language-features.inc @@ -136,7 +136,7 @@ typedef __attribute__((ext_vector_type(4))) float float4; void f5() { float4 t0 = (float4) { 0, 1, 2, 3 }; float4 t1 = t0; - t0.lo.e = t1.hi.x; + t0.lo.even = t1.hi.x; } void f6() { |

