diff options
| author | czhengsz <czhengsz@cn.ibm.com> | 2019-10-25 04:13:30 -0400 |
|---|---|---|
| committer | czhengsz <czhengsz@cn.ibm.com> | 2019-10-25 04:13:30 -0400 |
| commit | 822059147bf2870d88321824d41c92abb1f671d1 (patch) | |
| tree | 83461863c01b11ed1bac1c23a3d35abecfff3f63 /llvm/lib/Target/PowerPC/PPCRegisterInfo.h | |
| parent | a6712889f5f1702dfa535718abe400d1a83174c5 (diff) | |
| download | bcm5719-llvm-822059147bf2870d88321824d41c92abb1f671d1.tar.gz bcm5719-llvm-822059147bf2870d88321824d41c92abb1f671d1.zip | |
[PowerPC] [Peephole] fold frame offset by using index form to save add.
renamable $x6 = ADDI8 $x1, -80 ;;; 0 is replaced with -80
renamable $x6 = ADD8 killed renamable $x6, renamable $x5
STW killed renamable $r3, 4, killed renamable $x6 :: (store 4 into %ir.14, !tbaa !2)
After PEI there is a peephole opt opportunity to combine above -80 in ADDI8 with 4 in the STW to eliminate unnecessary ADD8.
Expected result:
renamable $x6 = ADDI8 $x1, -76
STWX killed renamable $r3, renamable $x5, killed renamable $x6 :: (store 4 into %ir.6, !tbaa !2)
Reviewed by: stefanp
Differential Revision: https://reviews.llvm.org/D66329
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCRegisterInfo.h')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCRegisterInfo.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h index a50e05920cd..a5fbb0c6ec6 100644 --- a/llvm/lib/Target/PowerPC/PPCRegisterInfo.h +++ b/llvm/lib/Target/PowerPC/PPCRegisterInfo.h @@ -61,6 +61,15 @@ class PPCRegisterInfo : public PPCGenRegisterInfo { public: PPCRegisterInfo(const PPCTargetMachine &TM); + /// getMappedIdxOpcForImmOpc - Return the mapped index form load/store opcode + /// for a given imm form load/store opcode \p ImmFormOpcode. + /// FIXME: move this to PPCInstrInfo class. + unsigned getMappedIdxOpcForImmOpc(unsigned ImmOpcode) const { + if (!ImmToIdxMap.count(ImmOpcode)) + return PPC::INSTRUCTION_LIST_END; + return ImmToIdxMap.find(ImmOpcode)->second; + } + /// getPointerRegClass - Return the register class to use to hold pointers. /// This is used for addressing modes. const TargetRegisterClass * |

