[llvm-commits] [dragonegg] r141668 - in /dragonegg/trunk: include/dragonegg/Internals.h src/Convert.cpp

Duncan Sands baldrick at free.fr
Tue Oct 11 07:46:27 PDT 2011


Author: baldrick
Date: Tue Oct 11 09:46:26 2011
New Revision: 141668

URL: http://llvm.org/viewvc/llvm-project?rev=141668&view=rev
Log:
Add support for VEC_WIDEN_MULT_HI_EXPR and VEC_WIDEN_MULT_LO_EXPR.
Codegen currently produces rotten code - it just scalarizes them.

Modified:
    dragonegg/trunk/include/dragonegg/Internals.h
    dragonegg/trunk/src/Convert.cpp

Modified: dragonegg/trunk/include/dragonegg/Internals.h
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/include/dragonegg/Internals.h?rev=141668&r1=141667&r2=141668&view=diff
==============================================================================
--- dragonegg/trunk/include/dragonegg/Internals.h (original)
+++ dragonegg/trunk/include/dragonegg/Internals.h Tue Oct 11 09:46:26 2011
@@ -585,6 +585,10 @@
   Value *EmitReg_VEC_INTERLEAVE_LOW_EXPR(tree_node *op0, tree_node *op1);
   Value *EmitReg_VEC_PACK_TRUNC_EXPR(tree_node *type, tree_node *op0,
                                      tree_node *op1);
+  Value *EmitReg_VEC_WIDEN_MULT_HI_EXPR(tree_node *type, tree_node *op0,
+                                        tree_node *op1);
+  Value *EmitReg_VEC_WIDEN_MULT_LO_EXPR(tree_node *type, tree_node *op0,
+                                        tree_node *op1);
 
   Value *EmitLoadOfLValue(tree_node *exp);
   Value *EmitOBJ_TYPE_REF(tree_node *exp);

Modified: dragonegg/trunk/src/Convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/Convert.cpp?rev=141668&r1=141667&r2=141668&view=diff
==============================================================================
--- dragonegg/trunk/src/Convert.cpp (original)
+++ dragonegg/trunk/src/Convert.cpp Tue Oct 11 09:46:26 2011
@@ -6994,6 +6994,20 @@
                        !TYPE_UNSIGNED(TREE_TYPE(type)));
 }
 
+Value *TreeToLLVM::EmitReg_VEC_WIDEN_MULT_HI_EXPR(tree type, tree op0,
+                                                  tree op1) {
+  Value *Hi0 = EmitReg_VecUnpackHiExpr(type, op0);
+  Value *Hi1 = EmitReg_VecUnpackHiExpr(type, op1);
+  return Builder.CreateMul(Hi0, Hi1);
+}
+
+Value *TreeToLLVM::EmitReg_VEC_WIDEN_MULT_LO_EXPR(tree type, tree op0,
+                                                  tree op1) {
+  Value *Lo0 = EmitReg_VecUnpackLoExpr(type, op0);
+  Value *Lo1 = EmitReg_VecUnpackLoExpr(type, op1);
+  return Builder.CreateMul(Lo0, Lo1);
+}
+
 
 //===----------------------------------------------------------------------===//
 //                        ... Exception Handling ...
@@ -7984,6 +7998,10 @@
   case VEC_UNPACK_FLOAT_LO_EXPR:
   case VEC_UNPACK_LO_EXPR:
     RHS = EmitReg_VecUnpackLoExpr(type, rhs1); break;
+  case VEC_WIDEN_MULT_HI_EXPR:
+    RHS = EmitReg_VEC_WIDEN_MULT_HI_EXPR(type, rhs1, rhs2); break;
+  case VEC_WIDEN_MULT_LO_EXPR:
+    RHS = EmitReg_VEC_WIDEN_MULT_LO_EXPR(type, rhs1, rhs2); break;
   }
 
   return TriviallyTypeConvert(RHS, getRegType(type));





More information about the llvm-commits mailing list