Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: src/IceTargetLowering.cpp

Issue 1551633002: Subzero. Refactoring. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTargetLowering.cpp
diff --git a/src/IceTargetLowering.cpp b/src/IceTargetLowering.cpp
index dcbb8802924eb948b04a64e69a9877f910e54462..69f7f12cb054651b8e6ad61814fc76452d9a5bc5 100644
--- a/src/IceTargetLowering.cpp
+++ b/src/IceTargetLowering.cpp
@@ -18,23 +18,43 @@
#include "IceTargetLowering.h"
-#include "IceAssemblerARM32.h"
-#include "IceAssemblerMIPS32.h"
-#include "IceAssemblerX8632.h"
-#include "IceAssemblerX8664.h"
#include "IceCfg.h" // setError()
#include "IceCfgNode.h"
+#include "IceGlobalContext.h"
#include "IceGlobalInits.h"
#include "IceInstVarIter.h"
#include "IceOperand.h"
#include "IceRegAlloc.h"
-#include "IceTargetLoweringARM32.h"
-#include "IceTargetLoweringMIPS32.h"
-#include "IceTargetLoweringX8632.h"
-#include "IceTargetLoweringX8664.h"
-namespace Ice {
+// We prevent target-specific implementation details from leaking outside their
+// implementations by forbidding #include of target-specific header files
+// anywhere outside their own files. To create target-specific objects
+// (TargetLowering, TargetDataLowering, and TargetHeaderLowering) we use the
+// following named constructors. For reference, each target Foo needs to
+// implement the following named constructors and initializer:
+//
+// namespace Foo {
+// unique_ptr<Ice::TargetLowering> createTargetLowering(Ice::Cfg *);
+// unique_ptr<Ice::TargetDataLowering>
+// createTargetDataLowering(Ice::GlobalContext*);
+// unique_ptr<Ice::TargetHeaderLowering>
+// createTargetHeaderLowering(Ice::GlobalContext *);
+// void staticInit();
+// }
+#define SUBZERO_TARGET(X) \
+ namespace X { \
+ std::unique_ptr<::Ice::TargetLowering> \
+ createTargetLowering(::Ice::Cfg *Func); \
+ std::unique_ptr<::Ice::TargetDataLowering> \
+ createTargetDataLowering(::Ice::GlobalContext *Ctx); \
+ std::unique_ptr<::Ice::TargetHeaderLowering> \
+ createTargetHeaderLowering(::Ice::GlobalContext *Ctx); \
+ void staticInit(); \
+ } // end of namespace X
+#include "llvm/Config/SZTargets.def"
+#undef SUBZERO_TARGET
+namespace Ice {
void LoweringContext::init(CfgNode *N) {
Node = N;
End = getNode()->getInsts().end();
@@ -96,14 +116,17 @@ Variable *LoweringContext::availabilityGet(Operand *Src) const {
return nullptr;
}
-TargetLowering *TargetLowering::createLowering(TargetArch Target, Cfg *Func) {
+std::unique_ptr<TargetLowering>
+TargetLowering::createLowering(TargetArch Target, Cfg *Func) {
+ switch (Target) {
+ default:
+ llvm::report_fatal_error("Unsupported target");
#define SUBZERO_TARGET(X) \
- if (Target == Target_##X) \
- return Target##X::create(Func);
+ case Target_##X: \
+ return ::X::createTargetLowering(Func);
#include "llvm/Config/SZTargets.def"
-
- Func->setError("Unsupported target");
- return nullptr;
+#undef SUBZERO_TARGET
+ }
}
void TargetLowering::staticInit(TargetArch Target) {
@@ -111,33 +134,23 @@ void TargetLowering::staticInit(TargetArch Target) {
switch (Target) {
default:
llvm::report_fatal_error("Unsupported target");
- break;
#define SUBZERO_TARGET(X) \
case Target_##X: { \
static bool InitGuard##X = false; \
- if (InitGuard##X) \
+ if (InitGuard##X) { \
return; \
+ } \
InitGuard##X = true; \
- Target##X::staticInit(); \
- } break;
+ ::X::staticInit(); \
+ }
#include "llvm/Config/SZTargets.def"
+#undef SUBZERO_TARGET
}
}
TargetLowering::TargetLowering(Cfg *Func)
: Func(Func), Ctx(Func->getContext()), Context() {}
-std::unique_ptr<Assembler> TargetLowering::createAssembler(TargetArch Target,
- Cfg *Func) {
-#define SUBZERO_TARGET(X) \
- if (Target == Target_##X) \
- return std::unique_ptr<Assembler>(new X::Assembler##X());
-#include "llvm/Config/SZTargets.def"
-
- Func->setError("Unsupported target assembler");
- return nullptr;
-}
-
void TargetLowering::genTargetHelperCalls() {
for (CfgNode *Node : Func->getNodes()) {
Context.init(Node);
@@ -539,12 +552,15 @@ void TargetLowering::emit(const ConstantRelocatable *C) const {
std::unique_ptr<TargetDataLowering>
TargetDataLowering::createLowering(GlobalContext *Ctx) {
TargetArch Target = Ctx->getFlags().getTargetArch();
+ switch (Target) {
+ default:
+ llvm::report_fatal_error("Unsupported target");
#define SUBZERO_TARGET(X) \
- if (Target == Target_##X) \
- return TargetData##X::create(Ctx);
+ case Target_##X: \
+ return ::X::createTargetDataLowering(Ctx);
#include "llvm/Config/SZTargets.def"
-
- llvm::report_fatal_error("Unsupported target data lowering");
+#undef SUBZERO_TARGET
+ }
}
TargetDataLowering::~TargetDataLowering() = default;
@@ -661,12 +677,15 @@ void TargetDataLowering::emitGlobal(const VariableDeclaration &Var,
std::unique_ptr<TargetHeaderLowering>
TargetHeaderLowering::createLowering(GlobalContext *Ctx) {
TargetArch Target = Ctx->getFlags().getTargetArch();
+ switch (Target) {
+ default:
+ llvm::report_fatal_error("Unsupported target");
#define SUBZERO_TARGET(X) \
- if (Target == Target_##X) \
- return TargetHeader##X::create(Ctx);
+ case Target_##X: \
+ return ::X::createTargetHeaderLowering(Ctx);
#include "llvm/Config/SZTargets.def"
-
- llvm::report_fatal_error("Unsupported target header lowering");
+#undef SUBZERO_TARGET
+ }
}
TargetHeaderLowering::~TargetHeaderLowering() = default;
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698