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

Side by Side Diff: src/IceTargetLowering.cpp

Issue 1506653002: Subzero: Add Non-SFI support for x86-32. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fill in part of the lit test 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 unified diff | Download patch
OLDNEW
1 //===- subzero/src/IceTargetLowering.cpp - Basic lowering implementation --===// 1 //===- subzero/src/IceTargetLowering.cpp - Basic lowering implementation --===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 TargetLowering *TargetLowering::createLowering(TargetArch Target, Cfg *Func) { 99 TargetLowering *TargetLowering::createLowering(TargetArch Target, Cfg *Func) {
100 #define SUBZERO_TARGET(X) \ 100 #define SUBZERO_TARGET(X) \
101 if (Target == Target_##X) \ 101 if (Target == Target_##X) \
102 return Target##X::create(Func); 102 return Target##X::create(Func);
103 #include "llvm/Config/SZTargets.def" 103 #include "llvm/Config/SZTargets.def"
104 104
105 Func->setError("Unsupported target"); 105 Func->setError("Unsupported target");
106 return nullptr; 106 return nullptr;
107 } 107 }
108 108
109 void TargetLowering::staticInit(TargetArch Target) { 109 void TargetLowering::staticInit(const ClFlags &Flags) {
110 const TargetArch Target = Flags.getTargetArch();
110 // Call the specified target's static initializer. 111 // Call the specified target's static initializer.
111 switch (Target) { 112 switch (Target) {
112 default: 113 default:
113 llvm::report_fatal_error("Unsupported target"); 114 llvm::report_fatal_error("Unsupported target");
114 break; 115 break;
115 #define SUBZERO_TARGET(X) \ 116 #define SUBZERO_TARGET(X) \
116 case Target_##X: { \ 117 case Target_##X: { \
117 static bool InitGuard##X = false; \ 118 static bool InitGuard##X = false; \
118 if (InitGuard##X) \ 119 if (InitGuard##X) \
119 return; \ 120 return; \
120 InitGuard##X = true; \ 121 InitGuard##X = true; \
121 Target##X::staticInit(); \ 122 Target##X::staticInit(Flags); \
122 } break; 123 } break;
123 #include "llvm/Config/SZTargets.def" 124 #include "llvm/Config/SZTargets.def"
124 } 125 }
125 } 126 }
126 127
127 TargetLowering::TargetLowering(Cfg *Func) 128 TargetLowering::TargetLowering(Cfg *Func)
128 : Func(Func), Ctx(Func->getContext()), Context() {} 129 : Func(Func), Ctx(Func->getContext()), Context() {}
129 130
130 std::unique_ptr<Assembler> TargetLowering::createAssembler(TargetArch Target, 131 std::unique_ptr<Assembler> TargetLowering::createAssembler(TargetArch Target,
131 Cfg *Func) { 132 Cfg *Func) {
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 InstCall *Call = 506 InstCall *Call =
506 InstCall::create(Func, MaxSrcs, Dest, CallTarget, HasTailCall); 507 InstCall::create(Func, MaxSrcs, Dest, CallTarget, HasTailCall);
507 return Call; 508 return Call;
508 } 509 }
509 510
510 bool TargetLowering::shouldOptimizeMemIntrins() { 511 bool TargetLowering::shouldOptimizeMemIntrins() {
511 return Ctx->getFlags().getOptLevel() >= Opt_1 || 512 return Ctx->getFlags().getOptLevel() >= Opt_1 ||
512 Ctx->getFlags().getForceMemIntrinOpt(); 513 Ctx->getFlags().getForceMemIntrinOpt();
513 } 514 }
514 515
515 void TargetLowering::emitWithoutPrefix(const ConstantRelocatable *C) const { 516 void TargetLowering::emitWithoutPrefix(const ConstantRelocatable *C,
517 const char *Suffix) const {
516 if (!BuildDefs::dump()) 518 if (!BuildDefs::dump())
517 return; 519 return;
518 Ostream &Str = Ctx->getStrEmit(); 520 Ostream &Str = Ctx->getStrEmit();
519 if (C->getSuppressMangling()) 521 if (C->getSuppressMangling())
520 Str << C->getName(); 522 Str << C->getName();
521 else 523 else
522 Str << Ctx->mangleName(C->getName()); 524 Str << Ctx->mangleName(C->getName());
525 Str << Suffix;
523 RelocOffsetT Offset = C->getOffset(); 526 RelocOffsetT Offset = C->getOffset();
524 if (Offset) { 527 if (Offset) {
525 if (Offset > 0) 528 if (Offset > 0)
526 Str << "+"; 529 Str << "+";
527 Str << Offset; 530 Str << Offset;
528 } 531 }
529 } 532 }
530 533
531 void TargetLowering::emit(const ConstantRelocatable *C) const {
532 if (!BuildDefs::dump())
533 return;
534 Ostream &Str = Ctx->getStrEmit();
535 Str << getConstantPrefix();
536 emitWithoutPrefix(C);
537 }
538
539 std::unique_ptr<TargetDataLowering> 534 std::unique_ptr<TargetDataLowering>
540 TargetDataLowering::createLowering(GlobalContext *Ctx) { 535 TargetDataLowering::createLowering(GlobalContext *Ctx) {
541 TargetArch Target = Ctx->getFlags().getTargetArch(); 536 TargetArch Target = Ctx->getFlags().getTargetArch();
542 #define SUBZERO_TARGET(X) \ 537 #define SUBZERO_TARGET(X) \
543 if (Target == Target_##X) \ 538 if (Target == Target_##X) \
544 return TargetData##X::create(Ctx); 539 return TargetData##X::create(Ctx);
545 #include "llvm/Config/SZTargets.def" 540 #include "llvm/Config/SZTargets.def"
546 541
547 llvm::report_fatal_error("Unsupported target data lowering"); 542 llvm::report_fatal_error("Unsupported target data lowering");
548 } 543 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 581
587 Ostream &Str = Ctx->getStrEmit(); 582 Ostream &Str = Ctx->getStrEmit();
588 const bool HasNonzeroInitializer = Var.hasNonzeroInitializer(); 583 const bool HasNonzeroInitializer = Var.hasNonzeroInitializer();
589 const bool IsConstant = Var.getIsConstant(); 584 const bool IsConstant = Var.getIsConstant();
590 const SizeT Size = Var.getNumBytes(); 585 const SizeT Size = Var.getNumBytes();
591 const IceString MangledName = Var.mangleName(Ctx); 586 const IceString MangledName = Var.mangleName(Ctx);
592 587
593 Str << "\t.type\t" << MangledName << ",%object\n"; 588 Str << "\t.type\t" << MangledName << ",%object\n";
594 589
595 const bool UseDataSections = Ctx->getFlags().getDataSections(); 590 const bool UseDataSections = Ctx->getFlags().getDataSections();
591 const bool UseNonsfi = Ctx->getFlags().getUseNonsfi();
596 const IceString Suffix = 592 const IceString Suffix =
597 dataSectionSuffix(SectionSuffix, MangledName, UseDataSections); 593 dataSectionSuffix(SectionSuffix, MangledName, UseDataSections);
598 if (IsConstant) 594 if (IsConstant && UseNonsfi)
595 Str << "\t.section\t.data.rel.ro" << Suffix << ",\"aw\",%progbits\n";
596 else if (IsConstant)
599 Str << "\t.section\t.rodata" << Suffix << ",\"a\",%progbits\n"; 597 Str << "\t.section\t.rodata" << Suffix << ",\"a\",%progbits\n";
600 else if (HasNonzeroInitializer) 598 else if (HasNonzeroInitializer)
601 Str << "\t.section\t.data" << Suffix << ",\"aw\",%progbits\n"; 599 Str << "\t.section\t.data" << Suffix << ",\"aw\",%progbits\n";
602 else 600 else
603 Str << "\t.section\t.bss" << Suffix << ",\"aw\",%nobits\n"; 601 Str << "\t.section\t.bss" << Suffix << ",\"aw\",%nobits\n";
604 602
605 if (IsExternal) 603 if (IsExternal)
606 Str << "\t.globl\t" << MangledName << "\n"; 604 Str << "\t.globl\t" << MangledName << "\n";
607 605
608 const uint32_t Align = Var.getAlignment(); 606 const uint32_t Align = Var.getAlignment();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 if (Target == Target_##X) \ 663 if (Target == Target_##X) \
666 return TargetHeader##X::create(Ctx); 664 return TargetHeader##X::create(Ctx);
667 #include "llvm/Config/SZTargets.def" 665 #include "llvm/Config/SZTargets.def"
668 666
669 llvm::report_fatal_error("Unsupported target header lowering"); 667 llvm::report_fatal_error("Unsupported target header lowering");
670 } 668 }
671 669
672 TargetHeaderLowering::~TargetHeaderLowering() = default; 670 TargetHeaderLowering::~TargetHeaderLowering() = default;
673 671
674 } // end of namespace Ice 672 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698