diff options
| author | Nate Begeman <natebegeman@mac.com> | 2005-12-10 02:36:00 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2005-12-10 02:36:00 +0000 |
| commit | 4e56db674ccb175168dfaaede0e52a8de632455c (patch) | |
| tree | 08e71dcaa8308a707037ef548872943e86d04dfa /llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | |
| parent | 3c5198336c4e07d9d9e1f8f26b698487fb04e6e0 (diff) | |
| download | bcm5719-llvm-4e56db674ccb175168dfaaede0e52a8de632455c.tar.gz bcm5719-llvm-4e56db674ccb175168dfaaede0e52a8de632455c.zip | |
Add support for TargetConstantPool nodes to the dag isel emitter, and use
them in the PPC backend, to simplify some logic out of Select and
SelectAddr.
llvm-svn: 24657
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 29 |
1 files changed, 5 insertions, 24 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 8517bf7c9b3..01d089d9b91 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -423,7 +423,8 @@ bool PPCDAGToDAGISel::SelectAddr(SDOperand Addr, SDOperand &Op1, assert(!cast<ConstantSDNode>(Addr.getOperand(1).getOperand(1))->getValue() && "Cannot handle constant offsets yet!"); Op1 = Addr.getOperand(1).getOperand(0); // The global address. - assert(Op1.getOpcode() == ISD::TargetGlobalAddress); + assert(Op1.getOpcode() == ISD::TargetGlobalAddress || + Op1.getOpcode() == ISD::TargetConstantPool); Op2 = Select(Addr.getOperand(0)); return false; // [&g+r] } else { @@ -433,20 +434,11 @@ bool PPCDAGToDAGISel::SelectAddr(SDOperand Addr, SDOperand &Op1, } } - if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Addr)) { - Op1 = getI32Imm(0); + if (FrameIndexSDNode *FI = dyn_cast<FrameIndexSDNode>(Addr)) Op2 = CurDAG->getTargetFrameIndex(FI->getIndex(), MVT::i32); - return false; - } else if (ConstantPoolSDNode *CP = dyn_cast<ConstantPoolSDNode>(Addr)) { - Op1 = Addr; - if (PICEnabled) - Op2 = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),Op1); - else - Op2 = CurDAG->getTargetNode(PPC::LIS, MVT::i32, Op1); - return false; - } + else + Op2 = Select(Addr); Op1 = getI32Imm(0); - Op2 = Select(Addr); return false; } @@ -893,17 +885,6 @@ SDOperand PPCDAGToDAGISel::Select(SDOperand Op) { CurDAG->getTargetFrameIndex(FI, MVT::i32), getI32Imm(0)); } - case ISD::ConstantPool: { - Constant *C = cast<ConstantPoolSDNode>(N)->get(); - SDOperand Tmp, CPI = CurDAG->getTargetConstantPool(C, MVT::i32); - if (PICEnabled) - Tmp = CurDAG->getTargetNode(PPC::ADDIS, MVT::i32, getGlobalBaseReg(),CPI); - else - Tmp = CurDAG->getTargetNode(PPC::LIS, MVT::i32, CPI); - if (N->hasOneUse()) - return CurDAG->SelectNodeTo(N, PPC::LA, MVT::i32, Tmp, CPI); - return CodeGenMap[Op] = CurDAG->getTargetNode(PPC::LA, MVT::i32, Tmp, CPI); - } case ISD::FADD: { MVT::ValueType Ty = N->getValueType(0); if (!NoExcessFPPrecision) { // Match FMA ops |

