Minor cleanup for choose expressions: add a helper that returns the 
chosen sub-expression, rather than just evaluating the condition.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66018 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index d0d14f2..38bcc9b 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -603,11 +603,7 @@
     return LV_Valid;
   case ChooseExprClass:
     // __builtin_choose_expr is an lvalue if the selected operand is.
-    if (cast<ChooseExpr>(this)->isConditionTrue(Ctx))
-      return cast<ChooseExpr>(this)->getLHS()->isLvalue(Ctx);
-    else
-      return cast<ChooseExpr>(this)->getRHS()->isLvalue(Ctx);
-
+    return cast<ChooseExpr>(this)->getChosenSubExpr(Ctx)->isLvalue(Ctx);
   case ExtVectorElementExprClass:
     if (cast<ExtVectorElementExpr>(this)->containsDuplicateElements())
       return LV_DuplicateVectorComponents;
@@ -1110,9 +1106,7 @@
   case Expr::CXXDefaultArgExprClass:
     return CheckICE(cast<CXXDefaultArgExpr>(E)->getExpr(), Ctx);
   case Expr::ChooseExprClass: {
-    const ChooseExpr *CE = cast<ChooseExpr>(E);
-    Expr *SubExpr = CE->isConditionTrue(Ctx) ? CE->getLHS() : CE->getRHS();
-    return CheckICE(SubExpr, Ctx);
+    return CheckICE(cast<ChooseExpr>(E)->getChosenSubExpr(Ctx), Ctx);
   }
   }
 }
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 86a7e82..6fb2abe 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -389,10 +389,8 @@
 }
 
 APValue PointerExprEvaluator::VisitChooseExpr(ChooseExpr *E) {
-  Expr* EvalExpr = E->isConditionTrue(Info.Ctx) ? E->getLHS() : E->getRHS();
-
   APValue Result;
-  if (EvaluatePointer(EvalExpr, Result, Info))
+  if (EvaluatePointer(E->getChosenSubExpr(Info.Ctx), Result, Info))
     return Result;
   return APValue();
 }
@@ -522,10 +520,8 @@
 }
 
 APValue VectorExprEvaluator::VisitChooseExpr(const ChooseExpr *E) {
-  Expr* EvalExpr = E->isConditionTrue(Info.Ctx) ? E->getLHS() : E->getRHS();
-
   APValue Result;
-  if (EvaluateVector(EvalExpr, Result, Info))
+  if (EvaluateVector(E->getChosenSubExpr(Info.Ctx), Result, Info))
     return Result;
   return APValue();
 }
@@ -1185,9 +1181,7 @@
 }
 
 bool IntExprEvaluator::VisitChooseExpr(const ChooseExpr *E) {
-  Expr* EvalExpr = E->isConditionTrue(Info.Ctx) ? E->getLHS() : E->getRHS();
-
-  return Visit(EvalExpr);
+  return Visit(E->getChosenSubExpr(Info.Ctx));
 }
 
 bool IntExprEvaluator::VisitUnaryReal(const UnaryOperator *E) {
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index d54c695..3ab8568 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -178,11 +178,7 @@
   case Expr::CompoundLiteralExprClass:
     return EmitCompoundLiteralLValue(cast<CompoundLiteralExpr>(E));
   case Expr::ChooseExprClass:
-    // __builtin_choose_expr is the lvalue of the selected operand.
-    if (cast<ChooseExpr>(E)->isConditionTrue(getContext()))
-      return EmitLValue(cast<ChooseExpr>(E)->getLHS());
-    else
-      return EmitLValue(cast<ChooseExpr>(E)->getRHS());
+    return EmitLValue(cast<ChooseExpr>(E)->getChosenSubExpr(getContext()));
   }
 }
 
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp
index c676b57..e970ba2 100644
--- a/lib/CodeGen/CGExprComplex.cpp
+++ b/lib/CodeGen/CGExprComplex.cpp
@@ -509,8 +509,7 @@
 }
 
 ComplexPairTy ComplexExprEmitter::VisitChooseExpr(ChooseExpr *E) {
-  // Emit the LHS or RHS as appropriate.
-  return Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() :E->getRHS());
+  return Visit(E->getChosenSubExpr(CGF.getContext()));
 }
 
 ComplexPairTy ComplexExprEmitter::VisitInitListExpr(InitListExpr *E) {
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 38cc3ee..9951d87 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -1307,9 +1307,7 @@
 }
 
 Value *ScalarExprEmitter::VisitChooseExpr(ChooseExpr *E) {
-  // Emit the LHS or RHS as appropriate.
-  return
-    Visit(E->isConditionTrue(CGF.getContext()) ? E->getLHS() : E->getRHS());
+  return Visit(E->getChosenSubExpr(CGF.getContext()));
 }
 
 Value *ScalarExprEmitter::VisitVAArgExpr(VAArgExpr *VE) {