[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
This revision was automatically updated to reflect the committed changes. Closed by commit rL287688: [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else. (authored by koriakin). Changed prior to commit: https://reviews.llvm.org/D21737?vs=75550=78917#toc Repository: rL LLVM https://reviews.llvm.org/D21737 Files: cfe/trunk/lib/CodeGen/BackendUtil.cpp Index: cfe/trunk/lib/CodeGen/BackendUtil.cpp === --- cfe/trunk/lib/CodeGen/BackendUtil.cpp +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp @@ -298,9 +298,13 @@ PassManagerBuilderWrapper PMBuilder(CodeGenOpts, LangOpts); - // Figure out TargetLibraryInfo. + // Figure out TargetLibraryInfo. This needs to be added to MPM and FPM + // manually (and not via PMBuilder), since some passes (eg. InstrProfiling) + // are inserted before PMBuilder ones - they'd get the default-constructed + // TLI with an unknown target otherwise. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -333,6 +337,8 @@ PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO; PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; + MPM.add(new TargetLibraryInfoWrapperPass(*TLII)); + // Add target-specific passes that need to run as early as possible. if (TM) PMBuilder.addExtension( @@ -416,6 +422,7 @@ } // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM.add(createVerifierPass()); Index: cfe/trunk/lib/CodeGen/BackendUtil.cpp === --- cfe/trunk/lib/CodeGen/BackendUtil.cpp +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp @@ -298,9 +298,13 @@ PassManagerBuilderWrapper PMBuilder(CodeGenOpts, LangOpts); - // Figure out TargetLibraryInfo. + // Figure out TargetLibraryInfo. This needs to be added to MPM and FPM + // manually (and not via PMBuilder), since some passes (eg. InstrProfiling) + // are inserted before PMBuilder ones - they'd get the default-constructed + // TLI with an unknown target otherwise. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -333,6 +337,8 @@ PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO; PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; + MPM.add(new TargetLibraryInfoWrapperPass(*TLII)); + // Add target-specific passes that need to run as early as possible. if (TM) PMBuilder.addExtension( @@ -416,6 +422,7 @@ } // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM.add(createVerifierPass()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
mehdi_amini accepted this revision. mehdi_amini added a comment. This revision is now accepted and ready to land. LGTM. Thanks! Comment at: lib/CodeGen/BackendUtil.cpp:422 // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) koriakin wrote: > mehdi_amini wrote: > > This seems unnecessary? > This ensures FPM passes get the right TLI as well - since I'm removing the > PMBuilder.LIbraryInfo assignment, they would otherwise get the > default-constructed ones. Or should I keep the assignment instead, and only > special-case MPM? Oh right, I was looking at the existing code and I missed that you were removing the LibraryInfo initialization. Repository: rL LLVM https://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
koriakin added inline comments. Comment at: lib/CodeGen/BackendUtil.cpp:422 // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) mehdi_amini wrote: > This seems unnecessary? This ensures FPM passes get the right TLI as well - since I'm removing the PMBuilder.LIbraryInfo assignment, they would otherwise get the default-constructed ones. Or should I keep the assignment instead, and only special-case MPM? Repository: rL LLVM https://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
mehdi_amini added inline comments. Comment at: lib/CodeGen/BackendUtil.cpp:422 // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) This seems unnecessary? Repository: rL LLVM https://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
koriakin updated this revision to Diff 75550. koriakin added a comment. Added a comment explaining the reason. Repository: rL LLVM https://reviews.llvm.org/D21737 Files: lib/CodeGen/BackendUtil.cpp Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -295,9 +295,13 @@ PassManagerBuilderWrapper PMBuilder(CodeGenOpts, LangOpts); - // Figure out TargetLibraryInfo. + // Figure out TargetLibraryInfo. This needs to be added to MPM and FPM + // manually (and not via PMBuilder), since some passes (eg. InstrProfiling) + // are inserted before PMBuilder ones - they'd get the default-constructed + // TLI with an unknown target otherwise. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -330,6 +334,8 @@ PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO; PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; + MPM.add(new TargetLibraryInfoWrapperPass(*TLII)); + // Add target-specific passes that need to run as early as possible. if (TM) PMBuilder.addExtension( @@ -413,6 +419,7 @@ } // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM.add(createVerifierPass()); Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -295,9 +295,13 @@ PassManagerBuilderWrapper PMBuilder(CodeGenOpts, LangOpts); - // Figure out TargetLibraryInfo. + // Figure out TargetLibraryInfo. This needs to be added to MPM and FPM + // manually (and not via PMBuilder), since some passes (eg. InstrProfiling) + // are inserted before PMBuilder ones - they'd get the default-constructed + // TLI with an unknown target otherwise. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -330,6 +334,8 @@ PMBuilder.PrepareForLTO = CodeGenOpts.PrepareForLTO; PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; + MPM.add(new TargetLibraryInfoWrapperPass(*TLII)); + // Add target-specific passes that need to run as early as possible. if (TM) PMBuilder.addExtension( @@ -413,6 +419,7 @@ } // Set up the per-function pass manager. + FPM.add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM.add(createVerifierPass()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
koriakin added a comment. In https://reviews.llvm.org/D21737#468861, @mehdi_amini wrote: > Missing test. This is tested by https://reviews.llvm.org/D21741 (along with https://reviews.llvm.org/D21736). Repository: rL LLVM https://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
mehdi_amini added inline comments. Comment at: lib/CodeGen/BackendUtil.cpp:459 @@ -456,2 +458,3 @@ legacy::FunctionPassManager *FPM = getPerFunctionPasses(); + FPM->add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) It is not super clean to duplicated this code. Also the minimum is to document why it is done. Repository: rL LLVM http://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
mehdi_amini requested changes to this revision. mehdi_amini added a comment. This revision now requires changes to proceed. Missing test. Repository: rL LLVM http://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
dnovillo accepted this revision. dnovillo added a comment. This revision is now accepted and ready to land. LGTM Repository: rL LLVM http://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
asl added a comment. Hrm? Why I'm set to review this? Repository: rL LLVM http://reviews.llvm.org/D21737 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21737: [PATCH] [CodeGen] Insert TargetLibraryInfoWrapperPass before anything else.
koriakin created this revision. koriakin added a reviewer: asl. koriakin added a subscriber: cfe-commits. koriakin set the repository for this revision to rL LLVM. Currently, TargetLibraryInfoWrapperPass is inserted by PMBuilder. However, some passes are inserted manually before the PMBuilder ones - if any of them happens to use TargetLibraryInfoWrapperPass, it'll get a default-constructed one, with an unknown target triple. This happens to InstrProfiling in D21736, breaking it. Repository: rL LLVM http://reviews.llvm.org/D21737 Files: lib/CodeGen/BackendUtil.cpp Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -329,7 +329,8 @@ // Figure out TargetLibraryInfo. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -364,6 +365,7 @@ PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; legacy::PassManager *MPM = getPerModulePasses(); + MPM->add(new TargetLibraryInfoWrapperPass(*TLII)); // If we are performing a ThinLTO importing compile, invoke the LTO // pipeline and pass down the in-memory module summary index. @@ -454,6 +456,7 @@ // Set up the per-function pass manager. legacy::FunctionPassManager *FPM = getPerFunctionPasses(); + FPM->add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM->add(createVerifierPass()); Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -329,7 +329,8 @@ // Figure out TargetLibraryInfo. Triple TargetTriple(TheModule->getTargetTriple()); - PMBuilder.LibraryInfo = createTLII(TargetTriple, CodeGenOpts); + std::unique_ptr TLII( + createTLII(TargetTriple, CodeGenOpts)); switch (Inlining) { case CodeGenOptions::NoInlining: @@ -364,6 +365,7 @@ PMBuilder.RerollLoops = CodeGenOpts.RerollLoops; legacy::PassManager *MPM = getPerModulePasses(); + MPM->add(new TargetLibraryInfoWrapperPass(*TLII)); // If we are performing a ThinLTO importing compile, invoke the LTO // pipeline and pass down the in-memory module summary index. @@ -454,6 +456,7 @@ // Set up the per-function pass manager. legacy::FunctionPassManager *FPM = getPerFunctionPasses(); + FPM->add(new TargetLibraryInfoWrapperPass(*TLII)); if (CodeGenOpts.VerifyModule) FPM->add(createVerifierPass()); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits