[llvm-bugs] [Bug 27509] New: Function Passes inadvertently skipped

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Apr 25 05:07:59 PDT 2016


            Bug ID: 27509
           Summary: Function Passes inadvertently skipped
           Product: tools
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: opt
          Assignee: unassignedbugs at nondot.org
          Reporter: jesper.antonsson at ericsson.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

In opt.cpp, if there are any passes specified in the argument list after an
optimizaton level is specified, the OptLevelO<x> is set to false by code like

    if (OptLevelO3 && OptLevelO3.getPosition() < PassList.getPosition(i)) {
      AddOptimizationPasses(Passes, *FPasses, 3, 0);
      OptLevelO3 = false;

This seems to be done to avoid rerunning AddOptimizationPasses(). But later,
FPasses is run only if any of these OptLevels are true:

  if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) {
    for (Function &F : *M)

Thus FPasses is not run and I consider that a bug. My suggestion for a bugfix
is simple:

--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -598,7 +598,7 @@ int main(int argc, char **argv) {
   if (OptLevelO3)
     AddOptimizationPasses(Passes, *FPasses, 3, 0);

-  if (OptLevelO1 || OptLevelO2 || OptLevelOs || OptLevelOz || OptLevelO3) {
+  if (FPasses) {
     for (Function &F : *M)

Jesper Antonsson, Ericsson AB

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160425/5c05703c/attachment.html>

More information about the llvm-bugs mailing list