diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-11-17 17:52:01 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-11-17 17:52:01 +0000 |
| commit | 4b11fa284d268b29ae59a1766e6a09442b4be205 (patch) | |
| tree | 6aaf0d56bc64380abd5f6510e7c92ce57bae628a /llvm/lib/Target | |
| parent | 3648c204726023315bf351f3a274788c30df415f (diff) | |
| download | bcm5719-llvm-4b11fa284d268b29ae59a1766e6a09442b4be205.tar.gz bcm5719-llvm-4b11fa284d268b29ae59a1766e6a09442b4be205.zip | |
Generate LA and ADDIS when possible.
llvm-svn: 24395
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCInstrInfo.td | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCInstrInfo.td b/llvm/lib/Target/PowerPC/PPCInstrInfo.td index c549fddfa26..0b79cda8f88 100644 --- a/llvm/lib/Target/PowerPC/PPCInstrInfo.td +++ b/llvm/lib/Target/PowerPC/PPCInstrInfo.td @@ -256,7 +256,8 @@ def ADDIS : DForm_2<15, (ops GPRC:$rD, GPRC:$rA, symbolHi:$imm), [(set GPRC:$rD, (add GPRC:$rA, imm16Shifted:$imm))]>; def LA : DForm_2<14, (ops GPRC:$rD, GPRC:$rA, symbolLo:$sym), "la $rD, $sym($rA)", IntGeneral, - []>; + [(set GPRC:$rD, (add GPRC:$rA, + (PPClo tglobaladdr:$sym, 0)))]>; def MULLI : DForm_2< 7, (ops GPRC:$rD, GPRC:$rA, s16imm:$imm), "mulli $rD, $rA, $imm", IntMulLI, [(set GPRC:$rD, (mul GPRC:$rA, immSExt16:$imm))]>; @@ -786,9 +787,10 @@ def : Pat<(srl G8RC:$in, imm:$imm), (RLDICL G8RC:$in, (SRL64 imm:$imm), imm:$imm)>; // Hi and Lo for Darwin Global Addresses. -def : Pat<(PPChi tglobaladdr:$in, (i32 0)), (LIS node:$in)>; -def : Pat<(PPClo tglobaladdr:$in, (i32 0)), (LI node:$in)>; - +def : Pat<(PPChi tglobaladdr:$in, (i32 0)), (LIS tglobaladdr:$in)>; +def : Pat<(PPClo tglobaladdr:$in, (i32 0)), (LI tglobaladdr:$in)>; +def : Pat<(add GPRC:$in, (PPChi tglobaladdr:$g, 0)), + (ADDIS GPRC:$in, tglobaladdr:$g)>; // Same as above, but using a temporary. FIXME: implement temporaries :) /* |

