aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'backend/lib/CodeGen')
-rw-r--r--backend/lib/CodeGen/MachineCombiner.cpp18
-rw-r--r--backend/lib/CodeGen/MachinePipelinePasses.cpp18
2 files changed, 25 insertions, 11 deletions
diff --git a/backend/lib/CodeGen/MachineCombiner.cpp b/backend/lib/CodeGen/MachineCombiner.cpp
index 54915ab..9a87b6f 100644
--- a/backend/lib/CodeGen/MachineCombiner.cpp
+++ b/backend/lib/CodeGen/MachineCombiner.cpp
@@ -25,6 +25,20 @@ namespace rcc {
namespace {
[[nodiscard]] const MachinePassContract &combinerContract(MachineCombinerStage Stage) {
+ static const MachinePassContract PreLegalizer = [] {
+ MachinePassContract Value{
+ .Name = "riscv-prelegalizer-combiner",
+ .Requires = {MachineFunctionProperty::IsSSA},
+ .Sets = {},
+ .Clears = {},
+ .RequiredAnalyses = {},
+ .VerificationStage = PipelineStage::MachineIRInput,
+ };
+ Value.ThreadSafety = PassThreadSafety::ThreadSafe;
+ Value.DeclaredChanges = {MachinePassChange::Instructions, MachinePassChange::Operands,
+ MachinePassChange::Registers};
+ return Value;
+ }();
static const MachinePassContract SelectedSSA = [] {
MachinePassContract Value{
.Name = "machine-combiner-selected-ssa",
@@ -85,6 +99,8 @@ namespace {
return Value;
}();
switch (Stage) {
+ case MachineCombinerStage::PreLegalizer:
+ return PreLegalizer;
case MachineCombinerStage::SelectedSSA:
return SelectedSSA;
case MachineCombinerStage::PreRegisterAllocation:
@@ -94,7 +110,7 @@ namespace {
case MachineCombinerStage::PostFrame:
return PostFrame;
}
- return SelectedSSA;
+ return PreLegalizer;
}
[[nodiscard]] Error prefixedError(const Error &Failure, std::string Prefix) {
diff --git a/backend/lib/CodeGen/MachinePipelinePasses.cpp b/backend/lib/CodeGen/MachinePipelinePasses.cpp
index 9bde291..3dae07e 100644
--- a/backend/lib/CodeGen/MachinePipelinePasses.cpp
+++ b/backend/lib/CodeGen/MachinePipelinePasses.cpp
@@ -24,7 +24,7 @@ namespace {
[[nodiscard]] const MachinePassContract &legalizerContract() {
static const MachinePassContract Contract{
- .Name = "Legalizer",
+ .Name = "legalizer",
// LLVM's GlobalISel legalizer operates on SSA form and does not require
// the optional register-liveness tracking property.
.Requires = {MachineFunctionProperty::IsSSA},
@@ -38,7 +38,7 @@ namespace {
[[nodiscard]] const MachinePassContract &bankSelectContract() {
static const MachinePassContract Contract{
- .Name = "RegisterBankSelect",
+ .Name = "regbankselect",
.Requires = {MachineFunctionProperty::Legalized},
.Sets = {MachineFunctionProperty::RegBankSelected},
.Clears = {},
@@ -50,7 +50,7 @@ namespace {
[[nodiscard]] const MachinePassContract &instructionSelectContract() {
static const MachinePassContract Contract{
- .Name = "InstructionSelect",
+ .Name = "instruction-select",
.Requires = {MachineFunctionProperty::Legalized, MachineFunctionProperty::RegBankSelected},
.Sets = {MachineFunctionProperty::Selected},
.Clears = {},
@@ -281,8 +281,7 @@ registerConfigurationFingerprint(const MachineRegisterInfo &RegInfo) noexcept {
[[nodiscard]] Expected<void> clearTrackedLivenessFlags(MachineFunction &Function,
MachinePassResult &Result) {
- if (!Result.Changed ||
- !Function.properties().has(MachineFunctionProperty::TracksLiveness))
+ if (!Result.Changed || !Function.properties().has(MachineFunctionProperty::TracksLiveness))
return {};
bool Changed = false;
for (MachineInstr *Instruction : layoutInstructions(Function)) {
@@ -291,8 +290,7 @@ registerConfigurationFingerprint(const MachineRegisterInfo &RegInfo) noexcept {
if (!Operand.isRegister())
continue;
RegisterOperandFlags Flags = Operand.registerFlags();
- if (!Flags.has(RegisterOperandFlag::Kill) &&
- !Flags.has(RegisterOperandFlag::Dead))
+ if (!Flags.has(RegisterOperandFlag::Kill) && !Flags.has(RegisterOperandFlag::Dead))
continue;
Flags.clear(RegisterOperandFlag::Kill);
Flags.clear(RegisterOperandFlag::Dead);
@@ -413,9 +411,9 @@ Expected<MachinePassResult> LegalizerPass::runImplementation(MachineFunction &Fu
if (!InstructionWasErased) {
const OpcodeState After = stateOf(*Instruction);
if (After == Before)
- return std::unexpected(passFailure(
- "target legalizer made no observable progress for '" + Descriptor->Name + "'",
- ErrorCode::InternalError));
+ return std::unexpected(passFailure("target legalizer made no observable progress for '" +
+ Descriptor->Name + "'",
+ ErrorCode::InternalError));
}
Result.Changed = true;
Result.Changes.add(MachinePassChange::Instructions);