[cfe-commits] r76531 - in /cfe/trunk: lib/Analysis/CFG.cpp test/Analysis/dead-stores.c

Mike Stump mrs at apple.com
Mon Jul 20 18:46:19 PDT 2009


Author: mrs
Date: Mon Jul 20 20:46:17 2009
New Revision: 76531

URL: http://llvm.org/viewvc/llvm-project?rev=76531&view=rev
Log:
Wire up CFG improvements for __builtin_choose_expr.

Modified:
    cfe/trunk/lib/Analysis/CFG.cpp
    cfe/trunk/test/Analysis/dead-stores.c

Modified: cfe/trunk/lib/Analysis/CFG.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFG.cpp?rev=76531&r1=76530&r2=76531&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/CFG.cpp (original)
+++ cfe/trunk/lib/Analysis/CFG.cpp Mon Jul 20 20:46:17 2009
@@ -521,6 +521,18 @@
 }
 
 CFGBlock *CFGBuilder::VisitChooseExpr(ChooseExpr *C) {
+  // See if this is a known constant.
+  bool KnownTrue = false;
+  bool KnownFalse = false;
+  Expr::EvalResult Result;
+  if (C->getCond()->Evaluate(Result, *Context)
+      && Result.Val.isInt()) {
+    if (Result.Val.getInt().getBoolValue())
+      KnownTrue = true;
+    else
+      KnownFalse = true;
+  }
+
   CFGBlock* ConfluenceBlock = Block ? Block : createBlock();
   ConfluenceBlock->appendStmt(C);
   if (!FinishBlock(ConfluenceBlock))
@@ -539,8 +551,14 @@
     return 0;
   
   Block = createBlock(false);
-  Block->addSuccessor(LHSBlock);
-  Block->addSuccessor(RHSBlock);
+  if (KnownFalse)
+    Block->addSuccessor(0);
+  else
+    Block->addSuccessor(LHSBlock);
+  if (KnownTrue)
+    Block->addSuccessor(0);
+  else
+    Block->addSuccessor(RHSBlock);
   Block->setTerminator(C);
   return addStmt(C->getCond());  
 }

Modified: cfe/trunk/test/Analysis/dead-stores.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/dead-stores.c?rev=76531&r1=76530&r2=76531&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/dead-stores.c (original)
+++ cfe/trunk/test/Analysis/dead-stores.c Mon Jul 20 20:46:17 2009
@@ -207,6 +207,8 @@
   int y16 = 4;
   int y17 = 4;
   int y18 = 4;
+  int y19 = 4;
+  int y20 = 4;
 
   ++x; // expected-warning{{never read}}
   ++y1;
@@ -227,6 +229,8 @@
   ++y16;
   ++y17;
   ++y18;
+  ++y19;
+  ++y20;
 
   switch (j) {
   case 1:
@@ -324,5 +328,13 @@
     }
     (void)y18;
     break;
+  case 17:
+    __builtin_choose_expr(0, (void)x, ((void)y19, ({ return; })));
+    (void)x;
+    break;
+  case 19:
+    __builtin_choose_expr(1, ((void)y20, ({ return; })), (void)x);
+    (void)x;
+    break;
   }
 }





More information about the cfe-commits mailing list