[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