OSDN Git Service

1. Refactored handling of integer immediate values for add, or, xor and sub.
authorChris Lattner <sabre@nondot.org>
Wed, 10 Aug 2005 16:34:52 +0000 (16:34 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 10 Aug 2005 16:34:52 +0000 (16:34 +0000)
commit0d7d99fd44bb1eaa0c034d26d50d025a160bdb04
tree9f048cd9cf6ead06c7759e6f355083ac8fd54a6c
parentd2ff5ef654fed763926e28a791d09057849f5373
1. Refactored handling of integer immediate values for add, or, xor and sub.
  New routine: ISel::SelectIntImmediateExpr
  2. Now checking use counts of large constants.  If use count is > 2 then drop
  thru so that the constant gets loaded into a register.
  Source:

int %test1(int %a) {
entry:
       %tmp.1 = add int %a,      123456789      ; <int> [#uses=1]
       %tmp.2 = or  int %tmp.1,  123456789      ; <int> [#uses=1]
       %tmp.3 = xor int %tmp.2,  123456789      ; <int> [#uses=1]
       %tmp.4 = sub int %tmp.3, -123456789      ; <int> [#uses=1]
       ret int %tmp.4
}

Did Emit:

       .machine ppc970

       .text
       .align  2
       .globl  _test1
_test1:
.LBB_test1_0:   ; entry
       addi r2, r3, -13035
       addis r2, r2, 1884
       ori r2, r2, 52501
       oris r2, r2, 1883
       xori r2, r2, 52501
       xoris r2, r2, 1883
       addi r2, r2, 52501
       addis r3, r2, 1883
       blr

Now Emits:

       .machine ppc970

       .text
       .align  2
       .globl  _test1
_test1:
.LBB_test1_0:   ; entry
       lis r2, 1883
       ori r2, r2, 52501
       add r3, r3, r2
       or r3, r3, r2
       xor r3, r3, r2
       add r3, r3, r2
       blr

Patch by Jim Laskey!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22749 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelPattern.cpp