diff options
author | android-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com> | 2022-04-20 06:23:46 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-04-20 06:23:46 +0000 |
commit | 7c32109130a20e6ee084eb6f079c171318a0c317 (patch) | |
tree | 65900d9cc1feb45c92ccb36fd59ea24427660ff0 | |
parent | 146dc450be14dba9214b3ee9c5279acf2bf6910e (diff) | |
parent | 50889e762234d8e87580aab9d2679af818de7793 (diff) | |
download | swiftshader-7c32109130a20e6ee084eb6f079c171318a0c317.tar.gz |
Roll SwiftShader from b5af7cabd5ea to ea5f37f39193 (1 revision) am: 8eaf8092af am: 5b439ff423 am: 50889e7622
Original change: https://android-review.googlesource.com/c/platform/external/swiftshader/+/2067886
Change-Id: Icaf9c8030063bcb2a5502d188ed9d93df05122b4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/Reactor/LLVMJIT.cpp | 70 | ||||
-rw-r--r-- | src/Reactor/LLVMReactor.cpp | 39 |
3 files changed, 102 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 802c04694..3ff561345 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -404,6 +404,7 @@ if(MSVC) "/wd4838" # conversion from 'type_1' to 'type_2' requires a narrowing conversion "/wd5030" # attribute 'attribute' is not recognized "/wd5038" # data member 'member1' will be initialized after data member 'member2' data member 'member' will be initialized after base class 'base_class' + "/wd4146" # unary minus operator applied to unsigned type, result still unsigned ) # Treat specific warnings as errors diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp index b6ee7267d..a217b92a2 100644 --- a/src/Reactor/LLVMJIT.cpp +++ b/src/Reactor/LLVMJIT.cpp @@ -31,7 +31,6 @@ __pragma(warning(push)) #include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h" #include "llvm/ExecutionEngine/SectionMemoryManager.h" #include "llvm/IR/DiagnosticInfo.h" -#include "llvm/IR/LegacyPassManager.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Host.h" #include "llvm/Support/TargetSelect.h" @@ -40,6 +39,22 @@ __pragma(warning(push)) #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar/GVN.h" +#if LLVM_VERSION_MAJOR >= 13 // New pass manager +# include "llvm/IR/PassManager.h" +# include "llvm/Passes/PassBuilder.h" +# include "llvm/Transforms/Scalar/ADCE.h" +# include "llvm/Transforms/Scalar/DeadStoreElimination.h" +# include "llvm/Transforms/Scalar/EarlyCSE.h" +# include "llvm/Transforms/Scalar/LICM.h" +# include "llvm/Transforms/Scalar/Reassociate.h" +# include "llvm/Transforms/Scalar/SCCP.h" +# include "llvm/Transforms/Scalar/SROA.h" +# include "llvm/Transforms/Scalar/SimplifyCFG.h" +#else // Legacy pass manager +# include "llvm/IR/LegacyPassManager.h" +# include "llvm/Transforms/Scalar.h" +#endif + #ifdef _MSC_VER __pragma(warning(pop)) #endif @@ -848,6 +863,58 @@ void JITBuilder::optimize(const rr::Config &cfg) } #endif // ENABLE_RR_DEBUG_INFO +#if LLVM_VERSION_MAJOR >= 13 // New pass manager + llvm::LoopAnalysisManager lam; + llvm::FunctionAnalysisManager fam; + llvm::CGSCCAnalysisManager cgam; + llvm::ModuleAnalysisManager mam; + llvm::PassBuilder pb; + + pb.registerModuleAnalyses(mam); + pb.registerCGSCCAnalyses(cgam); + pb.registerFunctionAnalyses(fam); + pb.registerLoopAnalyses(lam); + pb.crossRegisterProxies(lam, fam, cgam, mam); + + llvm::ModulePassManager pm; + llvm::FunctionPassManager fpm; + + if(__has_feature(memory_sanitizer) && msanInstrumentation) + { + llvm::MemorySanitizerOptions msanOpts; + pm.addPass(llvm::ModuleMemorySanitizerPass(msanOpts)); + pm.addPass(llvm::createModuleToFunctionPassAdaptor(llvm::MemorySanitizerPass(msanOpts))); + } + + for(auto pass : cfg.getOptimization().getPasses()) + { + switch(pass) + { + case rr::Optimization::Pass::Disabled: break; + case rr::Optimization::Pass::CFGSimplification: fpm.addPass(llvm::SimplifyCFGPass()); break; + case rr::Optimization::Pass::LICM: fpm.addPass(llvm::createFunctionToLoopPassAdaptor( + llvm::LICMPass(llvm::SetLicmMssaOptCap, llvm::SetLicmMssaNoAccForPromotionCap, true))); + break; + case rr::Optimization::Pass::AggressiveDCE: fpm.addPass(llvm::ADCEPass()); break; + case rr::Optimization::Pass::GVN: fpm.addPass(llvm::GVNPass()); break; + case rr::Optimization::Pass::InstructionCombining: fpm.addPass(llvm::InstCombinePass()); break; + case rr::Optimization::Pass::Reassociate: fpm.addPass(llvm::ReassociatePass()); break; + case rr::Optimization::Pass::DeadStoreElimination: fpm.addPass(llvm::DSEPass()); break; + case rr::Optimization::Pass::SCCP: fpm.addPass(llvm::SCCPPass()); break; + case rr::Optimization::Pass::ScalarReplAggregates: fpm.addPass(llvm::SROAPass()); break; + case rr::Optimization::Pass::EarlyCSEPass: fpm.addPass(llvm::EarlyCSEPass()); break; + default: + UNREACHABLE("pass: %d", int(pass)); + } + } + + if(!fpm.isEmpty()) + { + pm.addPass(llvm::createModuleToFunctionPassAdaptor(std::move(fpm))); + } + + pm.run(*module, mam); +#else // Legacy pass manager llvm::legacy::PassManager passManager; if(__has_feature(memory_sanitizer) && msanInstrumentation) @@ -876,6 +943,7 @@ void JITBuilder::optimize(const rr::Config &cfg) } passManager.run(*module); +#endif } std::shared_ptr<rr::Routine> JITBuilder::acquireRoutine(const char *name, llvm::Function **funcs, size_t count, const rr::Config &cfg) diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp index 74a83a3ea..33904af54 100644 --- a/src/Reactor/LLVMReactor.cpp +++ b/src/Reactor/LLVMReactor.cpp @@ -23,7 +23,6 @@ #include "llvm/IR/Intrinsics.h" #include "llvm/IR/IntrinsicsX86.h" -#include "llvm/IR/LegacyPassManager.h" #include "llvm/IR/Verifier.h" #include "llvm/Pass.h" #include "llvm/Support/Alignment.h" @@ -32,6 +31,16 @@ #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/Scalar.h" +#if LLVM_VERSION_MAJOR >= 13 // New pass manager +# include "llvm/Passes/PassBuilder.h" +#else // Legacy pass manager +# include "llvm/IR/LegacyPassManager.h" +# include "llvm/Pass.h" +# include "llvm/Transforms/Coroutines.h" +# include "llvm/Transforms/IPO.h" +# include "llvm/Transforms/Scalar.h" +#endif + #include <fstream> #include <iostream> #include <mutex> @@ -614,10 +623,9 @@ std::shared_ptr<Routine> Nucleus::acquireRoutine(const char *name, const Config: } #if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG) + if(llvm::verifyModule(*jit->module, &llvm::errs())) { - llvm::legacy::PassManager pm; - pm.add(llvm::createVerifierPass()); - pm.run(*jit->module); + llvm::report_fatal_error("Invalid LLVM module"); } #endif // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG) @@ -4391,6 +4399,23 @@ std::shared_ptr<Routine> Nucleus::acquireCoroutine(const char *name, const Confi if(isCoroutine) { +#if LLVM_VERSION_MAJOR >= 13 // New pass manager + llvm::PassBuilder pb; + llvm::LoopAnalysisManager lam; + llvm::FunctionAnalysisManager fam; + llvm::CGSCCAnalysisManager cgam; + llvm::ModuleAnalysisManager mam; + + pb.registerModuleAnalyses(mam); + pb.registerCGSCCAnalyses(cgam); + pb.registerFunctionAnalyses(fam); + pb.registerLoopAnalyses(lam); + pb.crossRegisterProxies(lam, fam, cgam, mam); + + llvm::ModulePassManager mpm = + pb.buildO0DefaultPipeline(llvm::OptimizationLevel::O0); + mpm.run(*jit->module, mam); +#else // Run manadory coroutine transforms. llvm::legacy::PassManager pm; @@ -4401,13 +4426,13 @@ std::shared_ptr<Routine> Nucleus::acquireCoroutine(const char *name, const Confi pm.add(llvm::createCoroCleanupLegacyPass()); pm.run(*jit->module); +#endif } #if defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG) + if(llvm::verifyModule(*jit->module, &llvm::errs())) { - llvm::legacy::PassManager pm; - pm.add(llvm::createVerifierPass()); - pm.run(*jit->module); + llvm::report_fatal_error("Invalid LLVM module"); } #endif // defined(ENABLE_RR_LLVM_IR_VERIFICATION) || !defined(NDEBUG) |