summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2008-05-14 19:38:39 +0000
committerEli Friedman <eli.friedman@gmail.com>2008-05-14 19:38:39 +0000
commita1b4ed8003d4f8bde8b4d459b8002e7e21e88456 (patch)
treee75ded96ab1d4cffc2e4e31f5c32e8345477d11c /clang/lib/AST/Expr.cpp
parent3ab94df276ea939f05fc2395876a06a2e73f5ad4 (diff)
downloadbcm5719-llvm-a1b4ed8003d4f8bde8b4d459b8002e7e21e88456.tar.gz
bcm5719-llvm-a1b4ed8003d4f8bde8b4d459b8002e7e21e88456.zip
Implementation of __builtin_shufflevector, a portable builtin capable of
expressing the full flexibility of the LLVM shufflevector instruction. The expected immediate usage is in *mmintrin.h, so that they don't depend on the mess of gcc-inherited (and not completely implemented) shuffle builtins. llvm-svn: 51113
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r--clang/lib/AST/Expr.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 2ac30b4c8cb..45c6a8721f8 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -500,6 +500,7 @@ Expr *Expr::IgnoreParenCasts() {
bool Expr::isConstantExpr(ASTContext &Ctx, SourceLocation *Loc) const {
+ return true;
switch (getStmtClass()) {
default:
if (Loc) *Loc = getLocStart();
@@ -1363,6 +1364,14 @@ Stmt::child_iterator OverloadExpr::child_end() {
return reinterpret_cast<Stmt**>(&SubExprs[NumExprs]);
}
+// ShuffleVectorExpr
+Stmt::child_iterator ShuffleVectorExpr::child_begin() {
+ return reinterpret_cast<Stmt**>(&SubExprs[0]);
+}
+Stmt::child_iterator ShuffleVectorExpr::child_end() {
+ return reinterpret_cast<Stmt**>(&SubExprs[NumExprs]);
+}
+
// VAArgExpr
Stmt::child_iterator VAArgExpr::child_begin() {
return reinterpret_cast<Stmt**>(&Val);
OpenPOWER on IntegriCloud