diff options
author | Justin Bogner <mail@justinbogner.com> | 2015-04-30 22:58:28 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2015-04-30 22:58:28 +0000 |
commit | 2e5d484597ff0ab232f8db03c5e2bb2933cdb88e (patch) | |
tree | 2c5a5832045319c4b4caa472ad618269b0d7d84a /clang/lib/CodeGen | |
parent | 9dd1fbdca6548b401ae224c608e69a1fe909cbcf (diff) | |
download | bcm5719-llvm-2e5d484597ff0ab232f8db03c5e2bb2933cdb88e.tar.gz bcm5719-llvm-2e5d484597ff0ab232f8db03c5e2bb2933cdb88e.zip |
InstrProf: Fix handling of profile counters in the body of range based for
We were assigning the counter for the body of the loop to the loop
variable initialization for some reason here, but our tests completely
lacked coverage for range-for loops. This fixes that and makes the
logic generally more similar to the logic for a regular for.
llvm-svn: 236277
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CodeGenPGO.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CodeGenPGO.cpp b/clang/lib/CodeGen/CodeGenPGO.cpp index 27e4c7fc091..c90b025e551 100644 --- a/clang/lib/CodeGen/CodeGenPGO.cpp +++ b/clang/lib/CodeGen/CodeGenPGO.cpp @@ -447,6 +447,7 @@ struct ComputeRegionCounts : public ConstStmtVisitor<ComputeRegionCounts> { void VisitCXXForRangeStmt(const CXXForRangeStmt *S) { RecordStmtCount(S); + Visit(S->getLoopVarStmt()); Visit(S->getRangeStmt()); Visit(S->getBeginEndStmt()); // Counter tracks the body of the loop. @@ -455,8 +456,7 @@ struct ComputeRegionCounts : public ConstStmtVisitor<ComputeRegionCounts> { // Visit the body region first. (This is basically the same as a while // loop; see further comments in VisitWhileStmt.) Cnt.beginRegion(); - CountMap[S->getLoopVarStmt()] = PGO.getCurrentRegionCount(); - Visit(S->getLoopVarStmt()); + CountMap[S->getBody()] = PGO.getCurrentRegionCount(); Visit(S->getBody()); Cnt.adjustForControlFlow(); @@ -475,7 +475,6 @@ struct ComputeRegionCounts : public ConstStmtVisitor<ComputeRegionCounts> { BC.ContinueCount); CountMap[S->getCond()] = PGO.getCurrentRegionCount(); Visit(S->getCond()); - Cnt.adjustForControlFlow(); Cnt.applyAdjustmentsToRegion(BC.BreakCount + BC.ContinueCount); RecordNextStmtCount = true; } |