Changes in directory llvm/lib/Target/PowerPC:
PPCInstr64Bit.td updated: 1.7 -> 1.8 --- Log message: Add some more immediate patterns. This allows us to compile: void test6() { Y = 0xABCD0123BCDE4567; } into: _test6: lis r2, -21555 lis r3, ha16(_Y) ori r2, r2, 291 rldicr r2, r2, 32, 31 oris r2, r2, 48350 ori r2, r2, 17767 std r2, lo16(_Y)(r3) blr --- Diffs of the changes: (+30 -0) PPCInstr64Bit.td | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+) Index: llvm/lib/Target/PowerPC/PPCInstr64Bit.td diff -u llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.7 llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.8 --- llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.7 Tue Jun 20 17:38:59 2006 +++ llvm/lib/Target/PowerPC/PPCInstr64Bit.td Tue Jun 20 18:03:01 2006 @@ -215,6 +215,17 @@ // Instruction Patterns // +def HI32_48 : SDNodeXForm<imm, [{ + // Transformation function: shift the immediate value down into the low bits. + return getI32Imm((unsigned short)(N->getValue() >> 32)); +}]>; + +def HI48_64 : SDNodeXForm<imm, [{ + // Transformation function: shift the immediate value down into the low bits. + return getI32Imm((unsigned short)(N->getValue() >> 48)); +}]>; + + // Immediate support. // Handled above: // sext(0x0000_0000_0000_FFFF, i8) -> li imm @@ -234,6 +245,25 @@ def : Pat<(i64 zext_0x0000_0000_FFFF_7FFF_i16:$imm), (ORIS8 (LI8 (LO16 imm:$imm)), (HI16 imm:$imm))>; +// zext(0x0000_0000_FFFF_FFFF, i16) -> oris (ori (li 0), lo16(imm)), imm>>16 +def zext_0x0000_0000_FFFF_FFFF_i16 : PatLeaf<(imm), [{ + return (N->getValue() & 0xFFFFFFFF00000000ULL) == 0; +}]>; +def : Pat<(i64 zext_0x0000_0000_FFFF_FFFF_i16:$imm), + (ORIS8 (ORI8 (LI8 0), (LO16 imm:$imm)), (HI16 imm:$imm))>; + + +// Fully general (and most expensive: 6 instructions!) immediate pattern. +def : Pat<(i64 imm:$imm), + (ORI8 + (ORIS8 + (RLDICR + (ORI8 + (LIS8 (HI48_64 imm:$imm)), + (HI32_48 imm:$imm)), + 32, 31), + (HI16 imm:$imm)), + (LO16 imm:$imm))>; // Extensions and truncates to/from 32-bit regs. _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits