aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-autoroll <android-autoroll@skia-public.iam.gserviceaccount.com>2022-04-20 06:23:46 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-04-20 06:23:46 +0000
commit7c32109130a20e6ee084eb6f079c171318a0c317 (patch)
tree65900d9cc1feb45c92ccb36fd59ea24427660ff0
parent146dc450be14dba9214b3ee9c5279acf2bf6910e (diff)
parent50889e762234d8e87580aab9d2679af818de7793 (diff)
downloadswiftshader-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.txt1
-rw-r--r--src/Reactor/LLVMJIT.cpp70
-rw-r--r--src/Reactor/LLVMReactor.cpp39
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)