[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