diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-10-25 19:32:37 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-10-25 19:32:37 +0000 |
| commit | e1fd05ebde0de282c4eb7abde9a32d1beec356e7 (patch) | |
| tree | 06b6af66981c47fc29dd69ddf90b8bc107a95c1b /llvm/lib/Target/PowerPC | |
| parent | 3b409a85eb2d7a70d2f3aace87d21db1eda7e719 (diff) | |
| download | bcm5719-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.cpp | 12 |
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; |

