summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/BPF/BPFTargetMachine.cpp
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2018-03-13 06:47:06 +0000
committerYonghong Song <yhs@fb.com>2018-03-13 06:47:06 +0000
commite91802f33624f8e747f4128d5ad1dae2bb5d0da3 (patch)
tree7c4398076a38e222d74b257b90bc6f84889ef9c7 /llvm/lib/Target/BPF/BPFTargetMachine.cpp
parent80b882ecc565ae8b27dd6a61f37d74a0aef7e959 (diff)
downloadbcm5719-llvm-e91802f33624f8e747f4128d5ad1dae2bb5d0da3.tar.gz
bcm5719-llvm-e91802f33624f8e747f4128d5ad1dae2bb5d0da3.zip
bpf: New post-RA peephole optimization pass to eliminate bad RA codegen
This new pass eliminate identical move: MOV rA, rA This is particularly possible to happen when sub-register support enabled. The special type cast insn MOV_32_64 involves different register class on src (i32) and dst (i64), RA could generate useless instruction due to this. This pass also could serve as the bast for further post-RA optimization. Signed-off-by: Jiong Wang <jiong.wang@netronome.com> Signed-off-by: Yonghong Song <yhs@fb.com> llvm-svn: 327370
Diffstat (limited to 'llvm/lib/Target/BPF/BPFTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/BPF/BPFTargetMachine.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/BPF/BPFTargetMachine.cpp b/llvm/lib/Target/BPF/BPFTargetMachine.cpp
index 91ff64ba797..84d89bff74f 100644
--- a/llvm/lib/Target/BPF/BPFTargetMachine.cpp
+++ b/llvm/lib/Target/BPF/BPFTargetMachine.cpp
@@ -86,6 +86,7 @@ public:
bool addInstSelector() override;
void addMachineSSAOptimization() override;
+ void addPreEmitPass() override;
};
}
@@ -110,3 +111,11 @@ void BPFPassConfig::addMachineSSAOptimization() {
if (Subtarget->getHasAlu32() && !DisableMIPeephole)
addPass(createBPFMIPeepholePass());
}
+
+void BPFPassConfig::addPreEmitPass() {
+ const BPFSubtarget *Subtarget = getBPFTargetMachine().getSubtargetImpl();
+
+ if (getOptLevel() != CodeGenOpt::None)
+ if (Subtarget->getHasAlu32() && !DisableMIPeephole)
+ addPass(createBPFMIPreEmitPeepholePass());
+}
OpenPOWER on IntegriCloud