Commit c2ec5817 by Jan Voung

Clarify which type "Label" refers to (generic vs X86)

There is a generic Label that can be used as-is for ARM and MIPS, and there is an x86 derived class Label which adds the concept of near and far (for 8-bit vs 32-bit jumps). Previously, one method "getOrCreateCfgNodeLabel" would say that it returns a Label when it means the generic one in some cases and the x86 one in other cases. Split that into getCfgNodeLabel and getOrCreateCfgNodeLabel where getCfgNodeLabel returns the generic one and getOrCreateCfgNodeLabel is part of the x86 code and returns the x86 one. BUG=none R=ascull@google.com, stichnot@chromium.org Review URL: https://codereview.chromium.org/1265023003 .
parent 1eda90a1
...@@ -249,7 +249,7 @@ public: ...@@ -249,7 +249,7 @@ public:
virtual llvm::ArrayRef<uint8_t> getNonExecBundlePadding() const = 0; virtual llvm::ArrayRef<uint8_t> getNonExecBundlePadding() const = 0;
/// Get the label for a CfgNode. /// Get the label for a CfgNode.
virtual Label *getOrCreateCfgNodeLabel(SizeT NodeNumber) = 0; virtual Label *getCfgNodeLabel(SizeT NodeNumber) = 0;
/// Mark the current text location as the start of a CFG node /// Mark the current text location as the start of a CFG node
/// (represented by NodeNumber). /// (represented by NodeNumber).
virtual void bindCfgNodeLabel(SizeT NodeNumber) = 0; virtual void bindCfgNodeLabel(SizeT NodeNumber) = 0;
......
...@@ -61,7 +61,7 @@ public: ...@@ -61,7 +61,7 @@ public:
llvm_unreachable("Not yet implemented."); llvm_unreachable("Not yet implemented.");
} }
Label *getOrCreateCfgNodeLabel(SizeT NodeNumber) override { Ice::Label *getCfgNodeLabel(SizeT NodeNumber) override {
(void)NodeNumber; (void)NodeNumber;
llvm_unreachable("Not yet implemented."); llvm_unreachable("Not yet implemented.");
} }
......
...@@ -62,7 +62,7 @@ public: ...@@ -62,7 +62,7 @@ public:
llvm::report_fatal_error("Not yet implemented."); llvm::report_fatal_error("Not yet implemented.");
} }
Label *getOrCreateCfgNodeLabel(SizeT NodeNumber) override { Ice::Label *getCfgNodeLabel(SizeT NodeNumber) override {
(void)NodeNumber; (void)NodeNumber;
llvm_unreachable("Not yet implemented."); llvm_unreachable("Not yet implemented.");
} }
......
...@@ -38,6 +38,7 @@ class TargetX8632; ...@@ -38,6 +38,7 @@ class TargetX8632;
namespace X8632 { namespace X8632 {
using Immediate = ::Ice::X86Internal::Immediate; using Immediate = ::Ice::X86Internal::Immediate;
using Label = ::Ice::X86Internal::Label;
class AssemblerX8632 : public X86Internal::AssemblerX86Base<TargetX8632> { class AssemblerX8632 : public X86Internal::AssemblerX86Base<TargetX8632> {
AssemblerX8632(const AssemblerX8632 &) = delete; AssemblerX8632(const AssemblerX8632 &) = delete;
......
...@@ -150,8 +150,9 @@ public: ...@@ -150,8 +150,9 @@ public:
nop(Padding); nop(Padding);
} }
Label *getOrCreateCfgNodeLabel(SizeT NodeNumber) override; Ice::Label *getCfgNodeLabel(SizeT NodeNumber) override;
void bindCfgNodeLabel(SizeT NodeNumber) override; void bindCfgNodeLabel(SizeT NodeNumber) override;
Label *getOrCreateCfgNodeLabel(SizeT Number);
Label *getOrCreateLocalLabel(SizeT Number); Label *getOrCreateLocalLabel(SizeT Number);
void bindLocalLabel(SizeT Number); void bindLocalLabel(SizeT Number);
......
...@@ -70,6 +70,12 @@ Label *AssemblerX86Base<Machine>::getOrCreateLabel(SizeT Number, ...@@ -70,6 +70,12 @@ Label *AssemblerX86Base<Machine>::getOrCreateLabel(SizeT Number,
} }
template <class Machine> template <class Machine>
Ice::Label *AssemblerX86Base<Machine>::getCfgNodeLabel(SizeT NodeNumber) {
assert(NodeNumber < CfgNodeLabels.size());
return CfgNodeLabels[NodeNumber];
}
template <class Machine>
Label *AssemblerX86Base<Machine>::getOrCreateCfgNodeLabel(SizeT NodeNumber) { Label *AssemblerX86Base<Machine>::getOrCreateCfgNodeLabel(SizeT NodeNumber) {
return getOrCreateLabel(NodeNumber, CfgNodeLabels); return getOrCreateLabel(NodeNumber, CfgNodeLabels);
} }
......
...@@ -664,8 +664,7 @@ void Cfg::emitJumpTables() { ...@@ -664,8 +664,7 @@ void Cfg::emitJumpTables() {
Ctx->addJumpTable(MangledName, JumpTable->getId(), NumTargets); Ctx->addJumpTable(MangledName, JumpTable->getId(), NumTargets);
for (SizeT I = 0; I < NumTargets; ++I) { for (SizeT I = 0; I < NumTargets; ++I) {
SizeT Index = JumpTable->getTarget(I)->getIndex(); SizeT Index = JumpTable->getTarget(I)->getIndex();
JT.pushTarget( JT.pushTarget(getAssembler()->getCfgNodeLabel(Index)->getPosition());
getAssembler()->getOrCreateCfgNodeLabel(Index)->getPosition());
} }
} }
} break; } break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment