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

Unified Diff: src/IceTargetLoweringX86BaseImpl.h

Issue 1838753002: Subzero: Remove IceString. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes Created 4 years, 9 months 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/IceTargetLoweringX86Base.h ('k') | src/IceTimerTree.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTargetLoweringX86BaseImpl.h
diff --git a/src/IceTargetLoweringX86BaseImpl.h b/src/IceTargetLoweringX86BaseImpl.h
index 0819078b4c7b654b929e1919e625f403dd1d0222..7394ab1b7f08362426f0aa6504801798fbece001 100644
--- a/src/IceTargetLoweringX86BaseImpl.h
+++ b/src/IceTargetLoweringX86BaseImpl.h
@@ -376,6 +376,21 @@ void TargetX86Base<TraitsType>::staticInit(GlobalContext *Ctx) {
Ctx->getFlags().getUseNonsfi() ? Traits::FK_Gotoff : Traits::FK_Abs;
}
+template <typename TraitsType>
+bool TargetX86Base<TraitsType>::shouldBePooled(const Constant *C) {
+ if (auto *ConstFloat = llvm::dyn_cast<ConstantFloat>(C)) {
+ return !Utils::isPositiveZero(ConstFloat->getValue());
+ }
+ if (auto *ConstDouble = llvm::dyn_cast<ConstantDouble>(C)) {
+ return !Utils::isPositiveZero(ConstDouble->getValue());
+ }
+ if (GlobalContext::getFlags().getRandomizeAndPoolImmediatesOption() !=
+ RPI_Pool) {
+ return false;
+ }
+ return C->shouldBeRandomizedOrPooled();
+}
+
template <typename TraitsType> void TargetX86Base<TraitsType>::translateO2() {
TimerMarker T(TimerStack::TT_O2, Func);
@@ -855,7 +870,8 @@ Variable *TargetX86Base<TraitsType>::getPhysicalRegister(RegNumT RegNum,
}
template <typename TraitsType>
-IceString TargetX86Base<TraitsType>::getRegName(RegNumT RegNum, Type Ty) const {
+const char *TargetX86Base<TraitsType>::getRegName(RegNumT RegNum,
+ Type Ty) const {
return Traits::getRegName(Traits::getGprForType(Ty, RegNum));
}
@@ -5868,10 +5884,11 @@ void TargetX86Base<TraitsType>::lowerCaseCluster(const CaseCluster &Case,
}
constexpr RelocOffsetT RelocOffset = 0;
- const IceString &FunctionName = Func->getFunctionName();
+ GlobalString FunctionName = Func->getFunctionName();
constexpr Variable *NoBase = nullptr;
- Constant *Offset = Ctx->getConstantSym(
- RelocOffset, InstJumpTable::makeName(FunctionName, JumpTable->getId()));
+ auto JTName = GlobalString::createWithString(
+ Ctx, InstJumpTable::makeName(FunctionName, JumpTable->getId()));
+ Constant *Offset = Ctx->getConstantSym(RelocOffset, JTName);
uint16_t Shift = typeWidthInBytesLog2(PointerType);
constexpr auto Segment = X86OperandMem::SegmentRegisters::DefaultSegment;
@@ -6818,11 +6835,9 @@ Operand *TargetX86Base<TraitsType>::legalize(Operand *From, LegalMask Allowed,
return makeZeroedRegister(Ty, RegNum);
}
- std::string Buffer;
- llvm::raw_string_ostream StrBuf(Buffer);
- llvm::cast<Constant>(From)->emitPoolLabel(StrBuf);
- llvm::cast<Constant>(From)->setShouldBePooled(true);
- Constant *Offset = Ctx->getConstantSym(0, StrBuf.str());
+ auto *CFrom = llvm::cast<Constant>(From);
+ assert(CFrom->getShouldBePooled());
+ Constant *Offset = Ctx->getConstantSym(0, CFrom->getLabelName());
auto *Mem = X86OperandMem::create(Func, Ty, nullptr, Offset);
From = Mem;
}
@@ -7039,7 +7054,7 @@ void TargetX86Base<TraitsType>::emit(const ConstantFloat *C) const {
if (!BuildDefs::dump())
return;
Ostream &Str = Ctx->getStrEmit();
- C->emitPoolLabel(Str);
+ Str << C->getLabelName();
}
template <typename TraitsType>
@@ -7047,7 +7062,7 @@ void TargetX86Base<TraitsType>::emit(const ConstantDouble *C) const {
if (!BuildDefs::dump())
return;
Ostream &Str = Ctx->getStrEmit();
- C->emitPoolLabel(Str);
+ Str << C->getLabelName();
}
template <typename TraitsType>
@@ -7059,7 +7074,8 @@ template <class Machine>
void TargetX86Base<Machine>::emit(const ConstantRelocatable *C) const {
if (!BuildDefs::dump())
return;
- assert(!Ctx->getFlags().getUseNonsfi() || C->getName() == GlobalOffsetTable);
+ assert(!Ctx->getFlags().getUseNonsfi() ||
+ C->getName().toString() == GlobalOffsetTable);
Ostream &Str = Ctx->getStrEmit();
Str << "$";
emitWithoutPrefix(C);
@@ -7086,7 +7102,7 @@ TargetX86Base<TraitsType>::randomizeOrPoolImmediate(Constant *Immediate,
return Immediate;
}
- if (!Immediate->shouldBeRandomizedOrPooled(Ctx)) {
+ if (!Immediate->shouldBeRandomizedOrPooled()) {
// the constant Immediate is not eligible for blinding/pooling
return Immediate;
}
@@ -7129,17 +7145,14 @@ TargetX86Base<TraitsType>::randomizeOrPoolImmediate(Constant *Immediate,
// insert: mov $label, Reg
// => Reg
assert(Ctx->getFlags().getRandomizeAndPoolImmediatesOption() == RPI_Pool);
- Immediate->setShouldBePooled(true);
+ assert(Immediate->getShouldBePooled());
// if we have already assigned a phy register, we must come from
// advancedPhiLowering()=>lowerAssign(). In this case we should reuse the
// assigned register as this assignment is that start of its use-def
// chain. So we add RegNum argument here.
Variable *Reg = makeReg(Immediate->getType(), RegNum);
- IceString Label;
- llvm::raw_string_ostream Label_stream(Label);
- Immediate->emitPoolLabel(Label_stream);
constexpr RelocOffsetT Offset = 0;
- Constant *Symbol = Ctx->getConstantSym(Offset, Label_stream.str());
+ Constant *Symbol = Ctx->getConstantSym(Offset, Immediate->getLabelName());
constexpr Variable *NoBase = nullptr;
X86OperandMem *MemOperand =
X86OperandMem::create(Func, Immediate->getType(), NoBase, Symbol);
@@ -7179,7 +7192,7 @@ TargetX86Base<TraitsType>::randomizeOrPoolImmediate(X86OperandMem *MemOperand,
return MemOperand;
}
- if (!C->shouldBeRandomizedOrPooled(Ctx)) {
+ if (!C->shouldBeRandomizedOrPooled()) {
return MemOperand;
}
@@ -7240,12 +7253,10 @@ TargetX86Base<TraitsType>::randomizeOrPoolImmediate(X86OperandMem *MemOperand,
if (RegNum.hasValue())
return MemOperand;
Variable *RegTemp = makeReg(IceType_i32);
- IceString Label;
- llvm::raw_string_ostream Label_stream(Label);
- MemOperand->getOffset()->emitPoolLabel(Label_stream);
- MemOperand->getOffset()->setShouldBePooled(true);
+ assert(MemOperand->getOffset()->getShouldBePooled());
constexpr RelocOffsetT SymOffset = 0;
- Constant *Symbol = Ctx->getConstantSym(SymOffset, Label_stream.str());
+ Constant *Symbol =
+ Ctx->getConstantSym(SymOffset, MemOperand->getOffset()->getLabelName());
constexpr Variable *NoBase = nullptr;
X86OperandMem *SymbolOperand = X86OperandMem::create(
Func, MemOperand->getOffset()->getType(), NoBase, Symbol);
@@ -7274,8 +7285,8 @@ void TargetX86Base<TraitsType>::emitJumpTable(
return;
Ostream &Str = Ctx->getStrEmit();
const bool UseNonsfi = Ctx->getFlags().getUseNonsfi();
- const IceString &FunctionName = Func->getFunctionName();
- const IceString Prefix = UseNonsfi ? ".data.rel.ro." : ".rodata.";
+ GlobalString FunctionName = Func->getFunctionName();
+ const char *Prefix = UseNonsfi ? ".data.rel.ro." : ".rodata.";
Str << "\t.section\t" << Prefix << FunctionName
<< "$jumptable,\"a\",@progbits\n";
Str << "\t.align\t" << typeWidthInBytes(getPointerType()) << "\n";
@@ -7328,7 +7339,7 @@ void TargetDataX86<TraitsType>::emitConstantPool(GlobalContext *Ctx) {
assert(CharsPrinted >= 0);
assert((size_t)CharsPrinted < llvm::array_lengthof(buf));
(void)CharsPrinted; // avoid warnings if asserts are disabled
- Const->emitPoolLabel(Str);
+ Str << Const->getLabelName();
Str << ":\n\t" << T::AsmTag << "\t" << buf << "\t/* " << T::TypeName << " "
<< Value << " */\n";
}
@@ -7379,7 +7390,7 @@ void TargetDataX86<TraitsType>::lowerJumpTables() {
if (!BuildDefs::dump())
return;
Ostream &Str = Ctx->getStrEmit();
- const IceString Prefix = IsPIC ? ".data.rel.ro." : ".rodata.";
+ const char *Prefix = IsPIC ? ".data.rel.ro." : ".rodata.";
for (const JumpTableData &JT : Ctx->getJumpTables()) {
Str << "\t.section\t" << Prefix << JT.getFunctionName()
<< "$jumptable,\"a\",@progbits\n";
@@ -7397,7 +7408,7 @@ void TargetDataX86<TraitsType>::lowerJumpTables() {
template <typename TraitsType>
void TargetDataX86<TraitsType>::lowerGlobals(
- const VariableDeclarationList &Vars, const IceString &SectionSuffix) {
+ const VariableDeclarationList &Vars, const std::string &SectionSuffix) {
const bool IsPIC = Ctx->getFlags().getUseNonsfi();
switch (Ctx->getFlags().getOutFileType()) {
case FT_Elf: {
@@ -7406,7 +7417,7 @@ void TargetDataX86<TraitsType>::lowerGlobals(
} break;
case FT_Asm:
case FT_Iasm: {
- const IceString &TranslateOnly = Ctx->getFlags().getTranslateOnly();
+ const std::string TranslateOnly = Ctx->getFlags().getTranslateOnly();
OstreamLocker L(Ctx);
for (const VariableDeclaration *Var : Vars) {
if (GlobalContext::matchSymbolName(Var->getName(), TranslateOnly)) {
« no previous file with comments | « src/IceTargetLoweringX86Base.h ('k') | src/IceTimerTree.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698