diff options
| author | Jim Laskey <jlaskey@mac.com> | 2005-08-18 15:52:30 +0000 | 
|---|---|---|
| committer | Jim Laskey <jlaskey@mac.com> | 2005-08-18 15:52:30 +0000 | 
| commit | 32d4c85278719aee6d060d01c7b94ffcf83f388e (patch) | |
| tree | 50af9d36d97a7065a5bfd3b52b0f7a9c1a94a6b8 /llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp | |
| parent | b3821a3943f283204f820d9458c925bbb191d680 (diff) | |
| download | bcm5719-llvm-32d4c85278719aee6d060d01c7b94ffcf83f388e.tar.gz bcm5719-llvm-32d4c85278719aee6d060d01c7b94ffcf83f388e.zip | |
Handle loading of 0x????0000 constants with a single instruction.
llvm-svn: 22858
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp index fb2a93c7187..2f09a639593 100644 --- a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp +++ b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp @@ -1738,12 +1738,16 @@ unsigned ISel::SelectExpr(SDOperand N, bool Recording) {      case MVT::i32:        {          int v = (int)cast<ConstantSDNode>(N)->getSignExtended(); -        if (v < 32768 && v >= -32768) { -          BuildMI(BB, PPC::LI, 1, Result).addSImm(v); -        } else { +        unsigned Hi = Hi16(v); +        unsigned Lo = Lo16(v); +        if (Hi && Lo) {            Tmp1 = MakeIntReg(); -          BuildMI(BB, PPC::LIS, 1, Tmp1).addSImm(v >> 16); -          BuildMI(BB, PPC::ORI, 2, Result).addReg(Tmp1).addImm(v & 0xFFFF); +          BuildMI(BB, PPC::LIS, 1, Tmp1).addSImm(Hi); +          BuildMI(BB, PPC::ORI, 2, Result).addReg(Tmp1).addImm(Lo); +        } else if (Lo) { +          BuildMI(BB, PPC::LI, 1, Result).addSImm(Lo); +        } else { +          BuildMI(BB, PPC::LIS, 1, Result).addSImm(Hi);          }        }      } | 

