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

Duncan Sands baldrick at free.fr
Fri May 27 03:48:53 PDT 2011


Author: baldrick
Date: Fri May 27 05:48:53 2011
New Revision: 132184

URL: http://llvm.org/viewvc/llvm-project?rev=132184&view=rev
Log:
Add support for VEC_COND_EXPR.

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=132184&r1=132183&r2=132184&view=diff
==============================================================================
--- dragonegg/trunk/include/dragonegg/Internals.h (original)
+++ dragonegg/trunk/include/dragonegg/Internals.h Fri May 27 05:48:53 2011
@@ -729,7 +729,7 @@
   Value *EmitLoadOfLValue(tree_node *exp);
   Value *EmitOBJ_TYPE_REF(tree_node *exp);
   Value *EmitADDR_EXPR(tree_node *exp);
-  Value *EmitCOND_EXPR(tree_node *exp);
+  Value *EmitCondExpr(tree_node *exp);
   Value *EmitCallOf(Value *Callee, gimple_statement_d *stmt,
                     const MemRef *DestLoc, const AttrListPtr &PAL);
   CallInst *EmitSimpleCall(StringRef CalleeName, tree_node *ret_type,

Modified: dragonegg/trunk/src/Convert.cpp
URL: http://llvm.org/viewvc/llvm-project/dragonegg/trunk/src/Convert.cpp?rev=132184&r1=132183&r2=132184&view=diff
==============================================================================
--- dragonegg/trunk/src/Convert.cpp (original)
+++ dragonegg/trunk/src/Convert.cpp Fri May 27 05:48:53 2011
@@ -2391,22 +2391,24 @@
   return Builder.CreateBitCast(LV.Ptr, ConvertType(TREE_TYPE(exp)));
 }
 
-Value *TreeToLLVM::EmitCOND_EXPR(tree exp) {
+Value *TreeToLLVM::EmitCondExpr(tree exp) {
   // Emit the condition.  It may not be in SSA form, but if not then it is a
   // comparison.
-  tree cond = COND_EXPR_COND(exp);
+  // COND_EXPR_COND and friends do not work for VEC_COND_EXPR, which is also
+  // handled here, which is why the tree operands are accessed directly.
+  tree cond = TREE_OPERAND(exp, 0);
   Value *CondVal = COMPARISON_CLASS_P(cond) ?
     EmitCompare(TREE_OPERAND(cond, 0), TREE_OPERAND(cond, 1), TREE_CODE(cond)) :
     EmitRegister(cond);
 
   // Ensure the condition has i1 type.
-  if (!CondVal->getType()->isIntegerTy(1))
+  if (!CondVal->getType()->getScalarType()->isIntegerTy(1))
     CondVal = Builder.CreateICmpNE(CondVal,
                                    Constant::getNullValue(CondVal->getType()));
 
   // Emit the true and false values.
-  Value *TrueVal = EmitRegister(COND_EXPR_THEN(exp));
-  Value *FalseVal = EmitRegister(COND_EXPR_ELSE(exp));
+  Value *TrueVal = EmitRegister(TREE_OPERAND(exp, 1));
+  Value *FalseVal = EmitRegister(TREE_OPERAND(exp, 2));
 
   // Select the value to use based on the condition.
   return Builder.CreateSelect(CondVal, TrueVal, FalseVal);
@@ -8362,9 +8364,10 @@
   default: return EmitRegister(rhs);
 
   // Expressions (tcc_expression).
-  case ADDR_EXPR:    return EmitADDR_EXPR(rhs);
-  case COND_EXPR:    return EmitCOND_EXPR(rhs);
-  case OBJ_TYPE_REF: return EmitOBJ_TYPE_REF(rhs);
+  case ADDR_EXPR:     return EmitADDR_EXPR(rhs);
+  case COND_EXPR:
+  case VEC_COND_EXPR: return EmitCondExpr(rhs);
+  case OBJ_TYPE_REF:  return EmitOBJ_TYPE_REF(rhs);
 
   // Exceptional (tcc_exceptional).
   case CONSTRUCTOR:





More information about the llvm-commits mailing list