[PATCH] Add __builtin_convertvector

hfinkel at anl.gov hfinkel at anl.gov
Mon Sep 16 20:41:46 PDT 2013



================
Comment at: include/clang/AST/Expr.h:3474
@@ +3473,3 @@
+/// vector type of the same arity.
+class ConvertVectorExpr : public Expr { // Should this be an ExplicitCastExpr?
+private:
----------------
Eli Friedman wrote:
> No, this should not be a CastExpr.
Okay; I copied this comment from the AsTypeExpr node, so we should probably remove it from there too.

================
Comment at: lib/CodeGen/CGExprScalar.cpp:1011
@@ +1010,3 @@
+      Res = Builder.CreateIntCast(Src, DstTy, InputSigned, "conv");
+    else if (InputSigned)
+      Res = Builder.CreateSIToFP(Src, DstTy, "conv");
----------------
Eli Friedman wrote:
> What if the destination type is a bool vector?
I think bool vectors are explicitly forbidden (in r190721).

================
Comment at: lib/Sema/SemaExpr.cpp:4489
@@ +4488,3 @@
+                     << E->getSourceRange());
+
+  return Owned(new (Context) ConvertVectorExpr(E, DstTy, VK, OK, BuiltinLoc,
----------------
Eli Friedman wrote:
> You might want to be careful exactly what vector types we accept here... but I can't think of anything you actually need to check for, so maybe not.
I *think* that everything relevant is checked in Sema::BuildExtVectorType and HandleVectorSizeAttr (in SemaType.cpp), and so checking that we have a vector type should be sufficient.

I could add an assert here just to be on the safe side; something like assert(Ty->isBuiltinType() && !Ty->isBooleanType() && (Ty->isIntegerType() || Ty->->isRealFloatingType()) && "...");

================
Comment at: lib/Sema/TreeTransform.h:9171
@@ +9170,3 @@
+  llvm_unreachable("Cannot transform convertVector expressions yet");
+}
+
----------------
Eli Friedman wrote:
> It would be nice to fix this before committing.
Agreed; this is another thing coped from the AsTypeExpr code. How can I test this?



http://llvm-reviews.chandlerc.com/D1677



More information about the cfe-commits mailing list