summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-10-25 19:32:37 +0000
committerChris Lattner <sabre@nondot.org>2005-10-25 19:32:37 +0000
commite1fd05ebde0de282c4eb7abde9a32d1beec356e7 (patch)
tree06b6af66981c47fc29dd69ddf90b8bc107a95c1b /llvm/lib/Target/PowerPC
parent3b409a85eb2d7a70d2f3aace87d21db1eda7e719 (diff)
downloadbcm5719-llvm-e1fd05ebde0de282c4eb7abde9a32d1beec356e7.tar.gz
bcm5719-llvm-e1fd05ebde0de282c4eb7abde9a32d1beec356e7.zip
Fix a couple of minor bugs. The first fixes povray, the second fixes things
if the dag combiner isn't run llvm-svn: 23981
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 336c2b15408..7b3227dcaa8 100644
--- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -898,8 +898,11 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) {
Tmp = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),CPI);
else
Tmp = CurDAG->getTargetNode(PPC::LIS, MVT::i32, CPI);
- CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI);
- return SDOperand(N, 0);
+ if (N->hasOneUse()) {
+ CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI);
+ return SDOperand(N, 0);
+ }
+ return CurDAG->getTargetNode(PPC::LA, MVT::i32, Tmp, CPI);
}
case ISD::GlobalAddress: {
GlobalValue *GV = cast<GlobalAddressSDNode>(N)->getGlobal();
@@ -1035,7 +1038,10 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) {
unsigned SH, MB, ME;
if (isRotateAndMask(N->getOperand(0).Val, Imm, false, SH, MB, ME)) {
Val = Select(N->getOperand(0).getOperand(0));
- } else {
+ } else if (Imm == 0) {
+ // AND X, 0 -> 0, not "rlwinm 32".
+ return Select(N->getOperand(1));
+ } else {
Val = Select(N->getOperand(0));
isRunOfOnes(Imm, MB, ME);
SH = 0;
OpenPOWER on IntegriCloud