Changes in directory llvm/lib/Target/PowerPC:
PPCInstr64Bit.td updated: 1.4 -> 1.5 --- Log message: Add some patterns for globals, so we can now compile this: static unsigned long long X, Y; void test1() { X = Y; } into: _test1: lis r2, ha16(_Y) lis r3, ha16(_X) ld r2, lo16(_Y)(r2) std r2, lo16(_X)(r3) blr --- Diffs of the changes: (+37 -1) PPCInstr64Bit.td | 38 +++++++++++++++++++++++++++++++++++++- 1 files changed, 37 insertions(+), 1 deletion(-) Index: llvm/lib/Target/PowerPC/PPCInstr64Bit.td diff -u llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.4 llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.5 --- llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.4 Mon Jun 19 19:38:36 2006 +++ llvm/lib/Target/PowerPC/PPCInstr64Bit.td Tue Jun 20 16:23:06 2006 @@ -12,6 +12,18 @@ // //===----------------------------------------------------------------------===// +//===----------------------------------------------------------------------===// +// 64-bit operands. +// +def symbolHi64 : Operand<i64> { + let PrintMethod = "printSymbolHi"; +} +def symbolLo64 : Operand<i64> { + let PrintMethod = "printSymbolLo"; +} + + + //===----------------------------------------------------------------------===// // Fixed point instructions. @@ -19,6 +31,13 @@ let PPC970_Unit = 1 in { // FXU Operations. +def LI8 : DForm_2_r0<14, (ops G8RC:$rD, symbolLo64:$imm), + "li $rD, $imm", IntGeneral, + [(set G8RC:$rD, immSExt16:$imm)]>; +def LIS8 : DForm_2_r0<15, (ops G8RC:$rD, symbolHi64:$imm), + "lis $rD, $imm", IntGeneral, + [(set G8RC:$rD, imm16Shifted:$imm)]>; + def OR8 : XForm_6<31, 444, (ops G8RC:$rA, G8RC:$rS, G8RC:$rB), "or $rA, $rS, $rB", IntGeneral, [(set G8RC:$rA, (or G8RC:$rS, G8RC:$rB))]>; @@ -32,6 +51,10 @@ def ADD8 : XOForm_1<31, 266, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), "add $rT, $rA, $rB", IntGeneral, [(set G8RC:$rT, (add G8RC:$rA, G8RC:$rB))]>; +def ADDIS8 : DForm_2<15, (ops G8RC:$rD, G8RC:$rA, symbolHi64:$imm), + "addis $rD, $rA, $imm", IntGeneral, + [(set G8RC:$rD, (add G8RC:$rA, imm16Shifted:$imm))]>; + def MULHD : XOForm_1<31, 73, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), "mulhd $rT, $rA, $rB", IntMulHW, [(set G8RC:$rT, (mulhs G8RC:$rA, G8RC:$rB))]>; @@ -163,7 +186,6 @@ //===----------------------------------------------------------------------===// // Instruction Patterns // - // Extensions and truncates to/from 32-bit regs. def : Pat<(i64 (zext GPRC:$in)), (RLDICL (OR4To8 GPRC:$in, GPRC:$in), 0, 32)>; @@ -177,3 +199,17 @@ (RLDICR G8RC:$in, imm:$imm, (SHL64 imm:$imm))>; def : Pat<(srl G8RC:$in, (i64 imm:$imm)), (RLDICL G8RC:$in, (SRL64 imm:$imm), imm:$imm)>; + +// Hi and Lo for Darwin Global Addresses. +def : Pat<(PPChi tglobaladdr:$in, 0), (LIS8 tglobaladdr:$in)>; +def : Pat<(PPClo tglobaladdr:$in, 0), (LI8 tglobaladdr:$in)>; +def : Pat<(PPChi tconstpool:$in , 0), (LIS8 tconstpool:$in)>; +def : Pat<(PPClo tconstpool:$in , 0), (LI8 tconstpool:$in)>; +def : Pat<(PPChi tjumptable:$in , 0), (LIS8 tjumptable:$in)>; +def : Pat<(PPClo tjumptable:$in , 0), (LI8 tjumptable:$in)>; +def : Pat<(add G8RC:$in, (PPChi tglobaladdr:$g, 0)), + (ADDIS8 G8RC:$in, tglobaladdr:$g)>; +def : Pat<(add G8RC:$in, (PPChi tconstpool:$g, 0)), + (ADDIS8 G8RC:$in, tconstpool:$g)>; +def : Pat<(add G8RC:$in, (PPChi tjumptable:$g, 0)), + (ADDIS8 G8RC:$in, tjumptable:$g)>; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits