diff options
Diffstat (limited to 'llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp index e549448..2b2d4e4 100644 --- a/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchTargetMachine.cpp @@ -34,6 +34,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeLoongArchTarget() { RegisterTargetMachine<LoongArchTargetMachine> X(getTheLoongArch32Target()); RegisterTargetMachine<LoongArchTargetMachine> Y(getTheLoongArch64Target()); auto *PR = PassRegistry::getPassRegistry(); + initializeLoongArchOptWInstrsPass(*PR); initializeLoongArchPreRAExpandPseudoPass(*PR); initializeLoongArchDAGToDAGISelPass(*PR); } @@ -145,6 +146,7 @@ public: bool addInstSelector() override; void addPreEmitPass() override; void addPreEmitPass2() override; + void addMachineSSAOptimization() override; void addPreRegAlloc() override; }; } // end namespace @@ -187,6 +189,14 @@ void LoongArchPassConfig::addPreEmitPass2() { addPass(createLoongArchExpandAtomicPseudoPass()); } +void LoongArchPassConfig::addMachineSSAOptimization() { + TargetPassConfig::addMachineSSAOptimization(); + + if (TM->getTargetTriple().isLoongArch64()) { + addPass(createLoongArchOptWInstrsPass()); + } +} + void LoongArchPassConfig::addPreRegAlloc() { addPass(createLoongArchPreRAExpandPseudoPass()); } |