[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.95 -> 1.96 --- Log message: Fix CodeGen/X86/shift-folding.ll:test3 on X86 --- Diffs of the changes: (+1 -1) SelectionDAGISel.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.95 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.95 Tue Nov 8 23:03:03 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Nov 9 10:50:40 2005 @@ -641,7 +641,7 @@ if (isPowerOf2_64(ElementSize)) { unsigned Amt = Log2_64(ElementSize); IdxN = DAG.getNode(ISD::SHL, N.getValueType(), IdxN, - getIntPtrConstant(Amt)); + DAG.getConstant(Amt, TLI.getShiftAmountTy())); N = DAG.getNode(ISD::ADD, N.getValueType(), N, IdxN); continue; } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c 2002-08-02-CastTest.c 2003-04-22-Switch.c 2003-05-02-DependentPHI.c 2003-07-08-BitOpsTest.c printargs.c StructModifyTest
Changes in directory llvm-test/SingleSource/UnitTests: 2002-05-02-ArgumentTest.c updated: 1.1 -> 1.2 2002-08-02-CastTest.c updated: 1.1 -> 1.2 2003-04-22-Switch.c updated: 1.2 -> 1.3 2003-05-02-DependentPHI.c updated: 1.1 -> 1.2 2003-07-08-BitOpsTest.c updated: 1.1 -> 1.2 printargs.c updated: 1.2 -> 1.3 StructModifyTest.c updated: 1.1 -> 1.2 --- Log message: These warnings were bugging me --- Diffs of the changes: (+14 -7) 2002-05-02-ArgumentTest.c |3 ++- 2002-08-02-CastTest.c |3 ++- 2003-04-22-Switch.c |3 ++- 2003-05-02-DependentPHI.c |3 ++- 2003-07-08-BitOpsTest.c |3 ++- StructModifyTest.c|3 ++- printargs.c |3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) Index: llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c diff -u llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.1 llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.2 --- llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c:1.1 Thu May 2 12:43:17 2002 +++ llvm-test/SingleSource/UnitTests/2002-05-02-ArgumentTest.c Wed Nov 9 12:08:08 2005 @@ -3,7 +3,8 @@ printf("%d, %f, %d, %lld, %d, %f\n", s, X, C, LL, I, D); } -void main() { +int main() { testfunc(12, 1.245f, 'x', 123456677890LL, -10, 45e14); +return 0; } Index: llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c diff -u llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.1 llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.2 --- llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c:1.1 Fri Aug 2 13:44:13 2002 +++ llvm-test/SingleSource/UnitTests/2002-08-02-CastTest.c Wed Nov 9 12:08:08 2005 @@ -4,7 +4,8 @@ return (unsigned char)X; } -void main() { +int main() { printf("%d\n", test(123456)); +return 0; } Index: llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c diff -u llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.2 llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.3 --- llvm-test/SingleSource/UnitTests/2003-04-22-Switch.c:1.2Wed Apr 23 11:18:37 2003 +++ llvm-test/SingleSource/UnitTests/2003-04-22-Switch.cWed Nov 9 12:08:08 2005 @@ -17,8 +17,9 @@ } -void main() { +int main() { unsigned i; for (i = 0; i < 10; ++i) func(i); + return 0; } Index: llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c diff -u llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.1 llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.2 --- llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c:1.1 Sat May 3 01:58:11 2003 +++ llvm-test/SingleSource/UnitTests/2003-05-02-DependentPHI.c Wed Nov 9 12:08:08 2005 @@ -13,10 +13,11 @@ List Node5 = {&Node4, 0}; -void main() { +int main() { List *PrevL, *CurL; for (PrevL = 0, CurL = &Node5; CurL; PrevL = CurL, CurL = CurL->Next) { printf("%d %d\n", CurL->Data, PrevL ? PrevL->Data : -1); } +return 0; } Index: llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c diff -u llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.1 llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.2 --- llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.c:1.1Tue Jul 29 15:24:56 2003 +++ llvm-test/SingleSource/UnitTests/2003-07-08-BitOpsTest.cWed Nov 9 12:08:08 2005 @@ -10,6 +10,7 @@ printf("%d %d %d %d %d\n", bxor, bor, band, bandnot, bornot); } -void main() { +int main() { test(7, 8, -5, 5); + return 0; } Index: llvm-test/SingleSource/UnitTests/printargs.c diff -u llvm-test/SingleSource/UnitTests/printargs.c:1.2 llvm-test/SingleSource/UnitTests/printargs.c:1.3 --- llvm-test/SingleSource/UnitTests/printargs.c:1.2Sun Mar 17 20:59:00 2002 +++ llvm-test/SingleSource/UnitTests/printargs.cWed Nov 9 12:08:08 2005 @@ -2,9 +2,10 @@ int puts(const char *); -void main(int argc, char **argv) { +int main(int argc, char **argv) { int i; printf("#Args = %d. They are:\n", argc-1); for (i = 1; i < argc; ++i) puts(argv[i]); +return 0; } Index: llvm-test/SingleSource/UnitTests/StructModifyTest.c diff -u llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.1 llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.2 --- llvm-test/SingleSource/UnitTests/StructModifyTest.c:1.1 Thu Jan 16 16:58:09 2003 +++ llvm-test/SingleSource/UnitTests/StructModifyTest.c Wed Nov 9 12:08:08 2005 @@ -13,7 +13,7 @@ printf("%d, %f, %f, %lld\n", V->w, V->x, V->y, V->z); } -void main() { +int main() { S2Ty E; E.A.w = 1; E.A.x = 123.42f; @@ -26,5 +26,6 @@ printS1(&E.A); printS1(&E.B); + return 0; } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/CodeGen/RegAllocLocal.cpp
Changes in directory llvm/lib/CodeGen: RegAllocLocal.cpp updated: 1.75 -> 1.76 --- Log message: Nuke noop copies. --- Diffs of the changes: (+11 -4) RegAllocLocal.cpp | 15 +++ 1 files changed, 11 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/RegAllocLocal.cpp diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.75 llvm/lib/CodeGen/RegAllocLocal.cpp:1.76 --- llvm/lib/CodeGen/RegAllocLocal.cpp:1.75 Tue Nov 8 23:28:45 2005 +++ llvm/lib/CodeGen/RegAllocLocal.cpp Wed Nov 9 12:22:42 2005 @@ -488,9 +488,11 @@ void RA::AllocateBasicBlock(MachineBasicBlock &MBB) { // loop over each instruction - MachineBasicBlock::iterator MI = MBB.begin(); - for (; MI != MBB.end(); ++MI) { -const TargetInstrDescriptor &TID = TM->getInstrInfo()->get(MI->getOpcode()); + MachineBasicBlock::iterator MII = MBB.begin(); + const TargetInstrInfo &TII = *TM->getInstrInfo(); + while (MII != MBB.end()) { +MachineInstr *MI = MII++; +const TargetInstrDescriptor &TID = TII.get(MI->getOpcode()); DEBUG(std::cerr << "\nStarting RegAlloc of: " << *MI; std::cerr << " Regs have values: "; for (unsigned i = 0; i != RegInfo->getNumRegs(); ++i) @@ -621,9 +623,14 @@ removePhysReg(PhysReg); } } + +// Finally, if this is a noop copy instruction, zap it. +unsigned SrcReg, DstReg; +if (TII.isMoveInstr(*MI, SrcReg, DstReg) && SrcReg == DstReg) + MBB.erase(MI); } - MI = MBB.getFirstTerminator(); + MachineBasicBlock::iterator MI = MBB.getFirstTerminator(); // Spill all physical registers holding virtual registers now. for (unsigned i = 0, e = RegInfo->getNumRegs(); i != e; ++i) ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.204 -> 1.205 --- Log message: Handle the trivial (but common) two-op case more efficiently --- Diffs of the changes: (+18 -11) LegalizeDAG.cpp | 29 ++--- 1 files changed, 18 insertions(+), 11 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.204 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.204 Tue Nov 8 17:32:44 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Nov 9 12:48:57 2005 @@ -633,19 +633,26 @@ } break; } - case ISD::TokenFactor: { -std::vector Ops; -bool Changed = false; -// Legalize the operands -for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { - SDOperand Op = Node->getOperand(i); - Ops.push_back(LegalizeOp(Op)); - Changed |= Ops[i] != Op; + case ISD::TokenFactor: +if (Node->getNumOperands() == 2) { + bool Changed = false; + SDOperand Op0 = LegalizeOp(Node->getOperand(0)); + SDOperand Op1 = LegalizeOp(Node->getOperand(1)); + if (Op0 != Node->getOperand(0) || Op1 != Node->getOperand(1)) +Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Op0, Op1); +} else { + std::vector Ops; + bool Changed = false; + // Legalize the operands. + for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { +SDOperand Op = Node->getOperand(i); +Ops.push_back(LegalizeOp(Op)); +Changed |= Ops[i] != Op; + } + if (Changed) +Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops); } -if (Changed) - Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops); break; - } case ISD::CALLSEQ_START: case ISD::CALLSEQ_END: ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaISelLowering.cpp AlphaISelPattern.cpp AlphaInstrFormats.td AlphaInstrInfo.cpp AlphaInstrInfo.td AlphaRegisterInfo.cpp AlphaRegisterInfo.h AlphaRegisterIn
Changes in directory llvm/lib/Target/Alpha: AlphaISelLowering.cpp updated: 1.7 -> 1.8 AlphaISelPattern.cpp updated: 1.177 -> 1.178 AlphaInstrFormats.td updated: 1.11 -> 1.12 AlphaInstrInfo.cpp updated: 1.5 -> 1.6 AlphaInstrInfo.td updated: 1.70 -> 1.71 AlphaRegisterInfo.cpp updated: 1.29 -> 1.30 AlphaRegisterInfo.h updated: 1.7 -> 1.8 AlphaRegisterInfo.td updated: 1.12 -> 1.13 --- Log message: whatever. Intermediate patch to see what breaks. Seems ok. --- Diffs of the changes: (+277 -136) AlphaISelLowering.cpp |4 - AlphaISelPattern.cpp | 59 +++ AlphaInstrFormats.td | 32 ++-- AlphaInstrInfo.cpp|4 - AlphaInstrInfo.td | 187 ++ AlphaRegisterInfo.cpp | 69 ++ AlphaRegisterInfo.h |3 AlphaRegisterInfo.td | 55 -- 8 files changed, 277 insertions(+), 136 deletions(-) Index: llvm/lib/Target/Alpha/AlphaISelLowering.cpp diff -u llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.7 llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.8 --- llvm/lib/Target/Alpha/AlphaISelLowering.cpp:1.7 Thu Oct 6 11:54:29 2005 +++ llvm/lib/Target/Alpha/AlphaISelLowering.cpp Wed Nov 9 13:17:08 2005 @@ -50,8 +50,8 @@ setSetCCResultContents(ZeroOrOneSetCCResult); addRegisterClass(MVT::i64, Alpha::GPRCRegisterClass); - addRegisterClass(MVT::f64, Alpha::FPRCRegisterClass); - addRegisterClass(MVT::f32, Alpha::FPRCRegisterClass); + addRegisterClass(MVT::f64, Alpha::F8RCRegisterClass); + addRegisterClass(MVT::f32, Alpha::F4RCRegisterClass); setOperationAction(ISD::BRCONDTWOWAY, MVT::Other, Expand); setOperationAction(ISD::BRTWOWAY_CC, MVT::Other, Expand); Index: llvm/lib/Target/Alpha/AlphaISelPattern.cpp diff -u llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.177 llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.178 --- llvm/lib/Target/Alpha/AlphaISelPattern.cpp:1.177Sat Oct 29 11:45:02 2005 +++ llvm/lib/Target/Alpha/AlphaISelPattern.cpp Wed Nov 9 13:17:08 2005 @@ -786,8 +786,11 @@ .addReg(argvregs[i]); break; case MVT::f32: + BuildMI(BB, Alpha::CPYSS, 2, args_float[i]).addReg(argvregs[i]) +.addReg(argvregs[i]); + break; case MVT::f64: - BuildMI(BB, Alpha::CPYS, 2, args_float[i]).addReg(argvregs[i]) + BuildMI(BB, Alpha::CPYST, 2, args_float[i]).addReg(argvregs[i]) .addReg(argvregs[i]); break; } @@ -843,8 +846,10 @@ BuildMI(BB, Alpha::BIS, 2, Result).addReg(Alpha::R0).addReg(Alpha::R0); break; case MVT::f32: - case MVT::f64: -BuildMI(BB, Alpha::CPYS, 2, Result).addReg(Alpha::F0).addReg(Alpha::F0); +BuildMI(BB, Alpha::CPYSS, 2, Result).addReg(Alpha::F0).addReg(Alpha::F0); +break; + case MVT::f64: +BuildMI(BB, Alpha::CPYST, 2, Result).addReg(Alpha::F0).addReg(Alpha::F0); break; } return Result+N.ResNo; @@ -1039,10 +1044,17 @@ Select(Chain); unsigned r = cast(Node->getOperand(1))->getReg(); //std::cerr << "CopyFromReg " << Result << " = " << r << "\n"; - if (MVT::isFloatingPoint(N.getValue(0).getValueType())) -BuildMI(BB, Alpha::CPYS, 2, Result).addReg(r).addReg(r); - else + switch(N.getValue(0).getValueType()) { + case MVT::f32: +BuildMI(BB, Alpha::CPYSS, 2, Result).addReg(r).addReg(r); +break; + case MVT::f64: +BuildMI(BB, Alpha::CPYST, 2, Result).addReg(r).addReg(r); +break; + default: BuildMI(BB, Alpha::BIS, 2, Result).addReg(r).addReg(r); +break; + } return Result; } @@ -1488,16 +1500,19 @@ if(ISD::FABS == N.getOperand(0).getOpcode()) { Tmp1 = SelectExpr(N.getOperand(0).getOperand(0)); -BuildMI(BB, Alpha::CPYSN, 2, Result).addReg(Alpha::F31).addReg(Tmp1); +BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYSNT : Alpha::CPYSNS, +2, Result).addReg(Alpha::F31).addReg(Tmp1); } else { Tmp1 = SelectExpr(N.getOperand(0)); -BuildMI(BB, Alpha::CPYSN, 2, Result).addReg(Tmp1).addReg(Tmp1); +BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYSNT : Alpha::CPYSNS +, 2, Result).addReg(Tmp1).addReg(Tmp1); } return Result; case ISD::FABS: Tmp1 = SelectExpr(N.getOperand(0)); -BuildMI(BB, Alpha::CPYS, 2, Result).addReg(Alpha::F31).addReg(Tmp1); +BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYST : Alpha::CPYSS, 2, Result) + .addReg(Alpha::F31).addReg(Tmp1); return Result; case ISD::FP_ROUND: @@ -1519,10 +1534,12 @@ case ISD::ConstantFP: if (ConstantFPSDNode *CN = dyn_cast(N)) { if (CN->isExactlyValue(+0.0)) { -BuildMI(BB, Alpha::CPYS, 2, Result).addReg(Alpha::F31) +BuildMI(BB, DestType == MVT::f64 ? Alpha::CPYST : Alpha::CPYSS +, 2, Result).addReg(Alpha::F31) .addReg(Alpha::F
[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: SelectionDAGISel.cpp updated: 1.96 -> 1.97 --- Log message: Refactor intrinsic lowering stuff out of visitCall --- Diffs of the changes: (+107 -98) SelectionDAGISel.cpp | 205 ++- 1 files changed, 107 insertions(+), 98 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.97 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.96 Wed Nov 9 10:50:40 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Nov 9 13:44:01 2005 @@ -46,7 +46,6 @@ static const bool ViewDAGs = 0; #endif - namespace llvm { //======// /// FunctionLoweringInfo - This contains information that is global to a @@ -405,6 +404,7 @@ void visitStore(StoreInst &I); void visitPHI(PHINode &I) { } // PHI nodes are handled specially. void visitCall(CallInst &I); + const char *visitIntrinsicCall(CallInst &I, unsigned Intrinsic); void visitVAStart(CallInst &I); void visitVAArg(VAArgInst &I); @@ -737,123 +737,133 @@ DAG.getSrcValue(I.getOperand(1; } +/// visitIntrinsicCall - Lower the call to the specified intrinsic function. If +/// we want to emit this as a call to a named external function, return the name +/// otherwise lower it and return null. +const char * +SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { + switch (Intrinsic) { + case Intrinsic::vastart: visitVAStart(I); return 0; + case Intrinsic::vaend:visitVAEnd(I); return 0; + case Intrinsic::vacopy: visitVACopy(I); return 0; + case Intrinsic::returnaddress: visitFrameReturnAddress(I, false); return 0; + case Intrinsic::frameaddress: visitFrameReturnAddress(I, true); return 0; + case Intrinsic::setjmp: +return "_setjmp"+!TLI.usesUnderscoreSetJmpLongJmp(); +break; + case Intrinsic::longjmp: +return "_longjmp"+!TLI.usesUnderscoreSetJmpLongJmp(); +break; + case Intrinsic::memcpy: visitMemIntrinsic(I, ISD::MEMCPY); return 0; + case Intrinsic::memset: visitMemIntrinsic(I, ISD::MEMSET); return 0; + case Intrinsic::memmove: visitMemIntrinsic(I, ISD::MEMMOVE); return 0; + + case Intrinsic::readport: + case Intrinsic::readio: { +std::vector VTs; +VTs.push_back(TLI.getValueType(I.getType())); +VTs.push_back(MVT::Other); +std::vector Ops; +Ops.push_back(getRoot()); +Ops.push_back(getValue(I.getOperand(1))); +SDOperand Tmp = DAG.getNode(Intrinsic == Intrinsic::readport ? +ISD::READPORT : ISD::READIO, VTs, Ops); + +setValue(&I, Tmp); +DAG.setRoot(Tmp.getValue(1)); +return 0; + } + case Intrinsic::writeport: + case Intrinsic::writeio: +DAG.setRoot(DAG.getNode(Intrinsic == Intrinsic::writeport ? +ISD::WRITEPORT : ISD::WRITEIO, MVT::Other, +getRoot(), getValue(I.getOperand(1)), +getValue(I.getOperand(2; +return 0; + case Intrinsic::dbg_stoppoint: + case Intrinsic::dbg_region_start: + case Intrinsic::dbg_region_end: + case Intrinsic::dbg_func_start: + case Intrinsic::dbg_declare: +if (I.getType() != Type::VoidTy) + setValue(&I, DAG.getNode(ISD::UNDEF, TLI.getValueType(I.getType(; +return 0; + + case Intrinsic::isunordered: +setValue(&I, DAG.getSetCC(MVT::i1,getValue(I.getOperand(1)), + getValue(I.getOperand(2)), ISD::SETUO)); +return 0; + + case Intrinsic::sqrt: +setValue(&I, DAG.getNode(ISD::FSQRT, + getValue(I.getOperand(1)).getValueType(), + getValue(I.getOperand(1; +return 0; + case Intrinsic::pcmarker: { +SDOperand Tmp = getValue(I.getOperand(1)); +DAG.setRoot(DAG.getNode(ISD::PCMARKER, MVT::Other, getRoot(), Tmp)); +return 0; + } + case Intrinsic::cttz: +setValue(&I, DAG.getNode(ISD::CTTZ, + getValue(I.getOperand(1)).getValueType(), + getValue(I.getOperand(1; +return 0; + case Intrinsic::ctlz: +setValue(&I, DAG.getNode(ISD::CTLZ, + getValue(I.getOperand(1)).getValueType(), + getValue(I.getOperand(1; +return 0; + case Intrinsic::ctpop: +setValue(&I, DAG.getNode(ISD::CTPOP, + getValue(I.getOperand(1)).getValueType(), + getValue(I.getOperand(1; +return 0; + default: +std::cerr << I; +assert(0 && "This intrinsic is not implemented yet!"); +return 0; + } +} + + void SelectionDAGLowering::visitCall(CallInst &I) { const char *RenameFn = 0; - SDOperand Tmp; - if (Function *F = I.getCalledFunction()) +
[llvm-commits] CVS: llvm/include/llvm/CodeGen/SelectionDAG.h SelectionDAGNodes.h
Changes in directory llvm/include/llvm/CodeGen: SelectionDAG.h updated: 1.67 -> 1.68 SelectionDAGNodes.h updated: 1.72 -> 1.73 --- Log message: Switch the allnodes list from a vector of pointers to an ilist of nodes. This eliminates the vector, allows constant time removal of a node from a graph, and makes iteration over the all nodes list stable when adding nodes to the graph. --- Diffs of the changes: (+52 -14) SelectionDAG.h | 20 SelectionDAGNodes.h | 46 -- 2 files changed, 52 insertions(+), 14 deletions(-) Index: llvm/include/llvm/CodeGen/SelectionDAG.h diff -u llvm/include/llvm/CodeGen/SelectionDAG.h:1.67 llvm/include/llvm/CodeGen/SelectionDAG.h:1.68 --- llvm/include/llvm/CodeGen/SelectionDAG.h:1.67 Tue Nov 8 17:30:11 2005 +++ llvm/include/llvm/CodeGen/SelectionDAG.hWed Nov 9 17:46:43 2005 @@ -16,6 +16,8 @@ #define LLVM_CODEGEN_SELECTIONDAG_H #include "llvm/CodeGen/SelectionDAGNodes.h" +#include "llvm/ADT/ilist" + #include #include #include // FIXME remove eventually, turning map into const char* map. @@ -43,8 +45,8 @@ // Root - The root of the entire DAG. EntryNode - The starting token. SDOperand Root, EntryNode; - // AllNodes - All of the nodes in the DAG - std::vector AllNodes; + // AllNodes - A linked list of nodes in the current DAG. + ilist AllNodes; // ValueNodes - track SrcValue nodes std::map, SDNode*> ValueNodes; @@ -64,11 +66,13 @@ void viewGraph(); - typedef std::vector::const_iterator allnodes_iterator; - allnodes_iterator allnodes_begin() const { return AllNodes.begin(); } - allnodes_iterator allnodes_end() const { return AllNodes.end(); } - unsigned allnodes_size() const { return AllNodes.size(); } - + typedef ilist::const_iterator allnodes_const_iterator; + allnodes_const_iterator allnodes_begin() const { return AllNodes.begin(); } + allnodes_const_iterator allnodes_end() const { return AllNodes.end(); } + typedef ilist::iterator allnodes_iterator; + allnodes_iterator allnodes_begin() { return AllNodes.begin(); } + allnodes_iterator allnodes_end() { return AllNodes.end(); } + /// getRoot - Return the root tag of the SelectionDAG. /// const SDOperand &getRoot() const { return Root; } @@ -413,6 +417,6 @@ } }; -} +} // end namespace llvm #endif Index: llvm/include/llvm/CodeGen/SelectionDAGNodes.h diff -u llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.72 llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.73 --- llvm/include/llvm/CodeGen/SelectionDAGNodes.h:1.72 Tue Nov 8 17:30:11 2005 +++ llvm/include/llvm/CodeGen/SelectionDAGNodes.h Wed Nov 9 17:46:43 2005 @@ -22,7 +22,6 @@ #include "llvm/CodeGen/ValueTypes.h" #include "llvm/Value.h" #include "llvm/ADT/GraphTraits.h" -#include "llvm/ADT/GraphTraits.h" #include "llvm/ADT/iterator" #include "llvm/Support/DataTypes.h" #include @@ -35,6 +34,9 @@ class MachineBasicBlock; class SDNode; template struct simplify_type; +template struct ilist_traits; +template class iplist; +template class ilist_iterator; /// ISD namespace - This namespace contains an enum which represents all of the /// SelectionDAG node types and value types. @@ -501,12 +503,20 @@ /// NumOperands/NumValues - The number of entries in the Operand/Value list. unsigned short NumOperands, NumValues; + + /// Prev/Next pointers - These pointers form the linked list of of the + /// AllNodes list in the current DAG. + SDNode *Prev, *Next; + friend struct ilist_traits; /// Uses - These are all of the SDNode's that use a value produced by this /// node. std::vector Uses; public: - + virtual ~SDNode() { +assert(NumOperands == 0 && "Operand list not cleared before deletion"); + } + //======// // Accessors // @@ -586,6 +596,7 @@ OperandList = 0; NumOperands = 0; ValueList = getValueTypeList(VT); NumValues = 1; +Prev = 0; Next = 0; } SDNode(unsigned NT, SDOperand Op) : NodeType(NT), NodeDepth(Op.Val->getNodeDepth()+1) { @@ -595,6 +606,7 @@ Op.Val->Uses.push_back(this); ValueList = 0; NumValues = 0; +Prev = 0; Next = 0; } SDNode(unsigned NT, SDOperand N1, SDOperand N2) : NodeType(NT) { @@ -609,6 +621,7 @@ N1.Val->Uses.push_back(this); N2.Val->Uses.push_back(this); ValueList = 0; NumValues = 0; +Prev = 0; Next = 0; } SDNode(unsigned NT, SDOperand N1, SDOperand N2, SDOperand N3) : NodeType(NT) { @@ -629,6 +642,7 @@ N3.Val->Uses.push_back(this); ValueList = 0; NumValues = 0; +Prev = 0; Next = 0; } SDNode(unsigned NT, SDOperand N1, SDOperand N2, SDOperand N3, SDOperand N4) : NodeType(NT) { @@ -652,6 +666,7 @@ N3.Val->Uses.push_back(this); N4.Val->Uses.push_back(this); ValueList = 0; NumValues = 0; +Prev = 0; Next = 0; } SDNode(unsigned Opc, const std::ve
[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp DAGCombiner.cpp ScheduleDAG.cpp SelectionDAG.cpp
Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.205 -> 1.206 DAGCombiner.cpp updated: 1.60 -> 1.61 ScheduleDAG.cpp updated: 1.44 -> 1.45 SelectionDAG.cpp updated: 1.210 -> 1.211 --- Log message: Switch the allnodes list from a vector of pointers to an ilist of nodes.This eliminates the vector, allows constant time removal of a node froma graph, and makes iteration over the all nodes list stable when adding nodes to the graph. --- Diffs of the changes: (+37 -46) DAGCombiner.cpp |4 +++- LegalizeDAG.cpp | 12 ++-- ScheduleDAG.cpp | 19 --- SelectionDAG.cpp | 48 4 files changed, 37 insertions(+), 46 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.206 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.205 Wed Nov 9 12:48:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Wed Nov 9 17:47:37 2005 @@ -394,7 +394,6 @@ // Now that we have N in, add anything that uses it if all of their operands // are now done. - for (SDNode::use_iterator UI = N->use_begin(), E = N->use_end(); UI != E;++UI) ComputeTopDownOrdering(*UI, Order, Visited); } @@ -409,19 +408,20 @@ // node is only legalized after all of its operands are legalized. std::map Visited; std::vector Order; - Order.reserve(DAG.allnodes_end()-DAG.allnodes_begin()); // Compute ordering from all of the leaves in the graphs, those (like the // entry node) that have no operands. for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(), E = DAG.allnodes_end(); I != E; ++I) { -if ((*I)->getNumOperands() == 0) { - Visited[*I] = 0 - 1U; - ComputeTopDownOrdering(*I, Order, Visited); +if (I->getNumOperands() == 0) { + Visited[I] = 0 - 1U; + ComputeTopDownOrdering(I, Order, Visited); } } - assert(Order.size() == Visited.size() && Order.size() == DAG.allnodes_size()&& + assert(Order.size() == Visited.size() && + Order.size() == +(unsigned)std::distance(DAG.allnodes_begin(), DAG.allnodes_end()) && "Error: DAG is cyclic!"); Visited.clear(); Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.60 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.61 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.60 Wed Nov 2 12:42:59 2005 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Nov 9 17:47:37 2005 @@ -514,7 +514,9 @@ AfterLegalize = RunningAfterLegalize; // Add all the dag nodes to the worklist. - WorkList.insert(WorkList.end(), DAG.allnodes_begin(), DAG.allnodes_end()); + for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(), + E = DAG.allnodes_end(); I != E; ++I) +WorkList.push_back(I); // Create a dummy node (which is not added to allnodes), that adds a reference // to the root node, preventing it from being deleted, and tracking any Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.44 llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.45 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.44 Tue Nov 8 15:54:57 2005 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp Wed Nov 9 17:47:37 2005 @@ -837,21 +837,18 @@ void SimpleSched::PrepareNodeInfo() { // Allocate node information Info = new NodeInfo[NodeCount]; - // Get base of all nodes table - SelectionDAG::allnodes_iterator AllNodes = DAG.allnodes_begin(); - - // For each node being scheduled - for (unsigned i = 0, N = NodeCount; i < N; i++) { -// Get next node from DAG all nodes table -SDNode *Node = AllNodes[i]; + + unsigned i = 0; + for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(), + E = DAG.allnodes_end(); I != E; ++I, ++i) { // Fast reference to node schedule info NodeInfo* NI = &Info[i]; // Set up map -Map[Node] = NI; +Map[I] = NI; // Set node -NI->Node = Node; +NI->Node = I; // Set pending visit count -NI->setPending(Node->use_size()); +NI->setPending(I->use_size()); } } @@ -1235,7 +1232,7 @@ /// void SimpleSched::Schedule() { // Number the nodes - NodeCount = DAG.allnodes_size(); + NodeCount = std::distance(DAG.allnodes_begin(), DAG.allnodes_end()); // Test to see if scheduling should occur bool ShouldSchedule = NodeCount > 3 && ScheduleStyle != noScheduling; // Set up minimum info for scheduling Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.210 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.211 --- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.210Tue Nov 8 17:30:28 2005 +++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Wed Nov 9 17:47:3
[llvm-commits] CVS: llvm/lib/VMCore/Type.cpp
Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.129 -> 1.130 --- Log message: Force packed vectors to be a power of two in length. --- Diffs of the changes: (+2 -0) Type.cpp |2 ++ 1 files changed, 2 insertions(+) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.129 llvm/lib/VMCore/Type.cpp:1.130 --- llvm/lib/VMCore/Type.cpp:1.129 Wed Jul 27 01:12:34 2005 +++ llvm/lib/VMCore/Type.cppWed Nov 9 19:40:59 2005 @@ -19,6 +19,7 @@ #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/SCCIterator.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/Support/MathExtras.h" #include #include using namespace llvm; @@ -1005,6 +1006,7 @@ PackedType *PackedType::get(const Type *ElementType, unsigned NumElements) { assert(ElementType && "Can't get packed of null types!"); + assert(isPowerOf2_32(NumElements) && "Vector length should be a power of 2!"); PackedValType PVT(ElementType, NumElements); PackedType *PT = PackedTypes.get(PVT); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.cpp llvmAsmParser.y
Changes in directory llvm/lib/AsmParser: llvmAsmParser.cpp updated: 1.22 -> 1.23 llvmAsmParser.y updated: 1.236 -> 1.237 --- Log message: Force vectors to be a power of two in size --- Diffs of the changes: (+170 -170) llvmAsmParser.cpp | 332 +++--- llvmAsmParser.y |8 - 2 files changed, 170 insertions(+), 170 deletions(-) Index: llvm/lib/AsmParser/llvmAsmParser.cpp diff -u llvm/lib/AsmParser/llvmAsmParser.cpp:1.22 llvm/lib/AsmParser/llvmAsmParser.cpp:1.23 --- llvm/lib/AsmParser/llvmAsmParser.cpp:1.22 Sun Nov 6 00:46:53 2005 +++ llvm/lib/AsmParser/llvmAsmParser.cppWed Nov 9 19:42:43 2005 @@ -1,5 +1,5 @@ -/* A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y +/* A Bison parser, made from /Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y by GNU Bison version 1.28 */ #define YYBISON 1 /* Identify Bison output. */ @@ -104,7 +104,7 @@ #defineVAARG_old 347 #defineVANEXT_old 348 -#line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 14 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -963,7 +963,7 @@ } -#line 873 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 873 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" typedef union { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -2160,7 +2160,7 @@ switch (yyn) { case 2: -#line 991 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 991 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX) // Outside of my range! ThrowException("Value too large for type!"); @@ -2168,7 +2168,7 @@ ; break;} case 4: -#line 999 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 999 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX) // Outside of my range! ThrowException("Value too large for type!"); @@ -2176,55 +2176,55 @@ ; break;} case 33: -#line 1022 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1022 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.StrVal = yyvsp[-1].StrVal; ; break;} case 34: -#line 1025 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1025 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.StrVal = 0; ; break;} case 35: -#line 1029 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1029 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.Linkage = GlobalValue::InternalLinkage; ; break;} case 36: -#line 1030 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1030 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.Linkage = GlobalValue::LinkOnceLinkage; ; break;} case 37: -#line 1031 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1031 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.Linkage = GlobalValue::WeakLinkage; ; break;} case 38: -#line 1032 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1032 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.Linkage = GlobalValue::AppendingLinkage; ; break;} case 39: -#line 1033 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1033 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.Linkage = GlobalValue::ExternalLinkage; ; break;} case 40: -#line 1035 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1035 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.UIntVal = CallingConv::C; ; break;} case 41: -#line 1036 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1036 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.UIntVal = CallingConv::C; ; break;} case 42: -#line 1037 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1037 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.UIntVal = CallingConv::Fast; ; break;} case 43: -#line 1038 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1038 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { yyval.UIntVal = CallingConv::Cold; ; break;} case 44: -#line 1039 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1039 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmParser.y" { if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val) ThrowException("Calling conv too large!"); @@ -2232,31 +2232,31 @@ ; break;} case 45: -#line 1047 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y" +#line 1047 "/Volumes/ProjectsDisk/cvs/llvm/lib/AsmParser/llvmAsmP
[llvm-commits] CVS: llvm/docs/LangRef.html
Changes in directory llvm/docs: LangRef.html updated: 1.114 -> 1.115 --- Log message: Packed elements must be a power of two in size --- Diffs of the changes: (+3 -2) LangRef.html |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.114 llvm/docs/LangRef.html:1.115 --- llvm/docs/LangRef.html:1.114Sun Nov 6 02:02:57 2005 +++ llvm/docs/LangRef.html Wed Nov 9 19:44:22 2005 @@ -850,7 +850,8 @@ of elements. Packed types are used when multiple primitive data are operated in parallel using a single instruction (SIMD). A packed type requires a size (number of -elements) and an underlying primitive data type. Packed types are +elements) and an underlying primitive data type. Vectors must have a power +of two length (1, 2, 4, 8, 16 ...). Packed types are considered first class. Syntax: @@ -3387,7 +3388,7 @@ mailto:[EMAIL PROTECTED]">Chris Lattner http://llvm.cs.uiuc.edu";>The LLVM Compiler Infrastructure - Last modified: $Date: 2005/11/06 08:02:57 $ + Last modified: $Date: 2005/11/10 01:44:22 $ ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Transforms/Scalar/Reg2Mem.cpp
Changes in directory llvm/lib/Transforms/Scalar: Reg2Mem.cpp added (r1.1) --- Log message: The pass everyone has been waiting for! Reg2Mem for fun you can opt -reg2mem -mem2reg --- Diffs of the changes: (+79 -0) Reg2Mem.cpp | 79 1 files changed, 79 insertions(+) Index: llvm/lib/Transforms/Scalar/Reg2Mem.cpp diff -c /dev/null llvm/lib/Transforms/Scalar/Reg2Mem.cpp:1.1 *** /dev/null Wed Nov 9 19:58:48 2005 --- llvm/lib/Transforms/Scalar/Reg2Mem.cpp Wed Nov 9 19:58:38 2005 *** *** 0 --- 1,79 + //===- Reg2Mem.cpp - Convert registers to allocas -===// + // + // The LLVM Compiler Infrastructure + // + // This file was developed by the LLVM research group and is distributed under + // the University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===--===// + // + // This file demotes all registers to memory references. It is intented to be + // the inverse of PromoteMemoryToRegister. By converting to loads, the only + // values live accross basic blocks are allocas and loads before phi nodes. + // It is intended that this should make CFG hacking much easier. + // To make later hacking easier, the entry block is split into two, such that + // all introduced allocas and nothing else are in the entry block. + // + //===--===// + + #include "llvm/Transforms/Scalar.h" + #include "llvm/Transforms/Utils/Local.h" + #include "llvm/Pass.h" + #include "llvm/Function.h" + #include "llvm/Module.h" + #include "llvm/BasicBlock.h" + #include "llvm/Instructions.h" + #include "llvm/ADT/Statistic.h" + + #include + + using namespace llvm; + + namespace { + Statistic<> NumDemoted("reg2mem", "Number of registers demoted"); + + struct RegToMem : public FunctionPass { + +bool valueEscapes(Instruction* i) { + BasicBlock* bb = i->getParent(); + for(Value::use_iterator ii = i->use_begin(), ie = i->use_end(); + ii != ie; ++ii) + if (cast(*ii)->getParent() != bb) + return true; + return false; + } + + virtual bool runOnFunction(Function &F) { + if (!F.isExternal()) { + //give us a clean block + BasicBlock& bbhead = F.getEntryBlock(); + bbhead.splitBasicBlock(bbhead.begin()); + + //find the instructions + std::list worklist; + for (Function::iterator ibb = F.begin(), ibe = F.end(); + ibb != ibe; ++ibb) + for (BasicBlock::iterator iib = ibb->begin(), iie = ibb->end(); +iib != iie; ++iib) { + if(valueEscapes(iib)) + worklist.push_front(&*iib); + } + //demote escaped instructions + NumDemoted += worklist.size(); + for (std::list::iterator ilb = worklist.begin(), +ile = worklist.end(); ilb != ile; ++ilb) + DemoteRegToStack(**ilb, false); + return true; + } + return false; + } + }; + + RegisterOpt X("reg2mem", "Demote all values to stack slots"); + } + + // createDemoteRegisterToMemory - Provide an entry point to create this pass. + // + FunctionPass *llvm::createDemoteRegisterToMemoryPass() { + return new RegToMem(); + } ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/include/llvm/Transforms/Scalar.h
Changes in directory llvm/include/llvm/Transforms: Scalar.h updated: 1.58 -> 1.59 --- Log message: The pass everyone has been waiting for! Reg2Mem for fun you can opt -reg2mem -mem2reg --- Diffs of the changes: (+6 -0) Scalar.h |6 ++ 1 files changed, 6 insertions(+) Index: llvm/include/llvm/Transforms/Scalar.h diff -u llvm/include/llvm/Transforms/Scalar.h:1.58 llvm/include/llvm/Transforms/Scalar.h:1.59 --- llvm/include/llvm/Transforms/Scalar.h:1.58 Sat Nov 5 03:21:28 2005 +++ llvm/include/llvm/Transforms/Scalar.h Wed Nov 9 19:58:38 2005 @@ -162,6 +162,12 @@ // FunctionPass *createPromoteMemoryToRegisterPass(); +//===--===// +// +// This pass is used to demote registers to memory references . +// In basically undoes the PromoteMemoryToRegister pass to +// make cfg hacking easier. +FunctionPass *createDemoteRegisterToMemoryPass(); //===--===// // ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/include/llvm/Transforms/LinkAllPasses.h
Changes in directory llvm/include/llvm/Transforms: LinkAllPasses.h updated: 1.24 -> 1.25 --- Log message: needs to go here to apparently. --- Diffs of the changes: (+1 -0) LinkAllPasses.h |1 + 1 files changed, 1 insertion(+) Index: llvm/include/llvm/Transforms/LinkAllPasses.h diff -u llvm/include/llvm/Transforms/LinkAllPasses.h:1.24 llvm/include/llvm/Transforms/LinkAllPasses.h:1.25 --- llvm/include/llvm/Transforms/LinkAllPasses.h:1.24 Sat Oct 29 00:32:20 2005 +++ llvm/include/llvm/Transforms/LinkAllPasses.hWed Nov 9 20:07:45 2005 @@ -88,6 +88,7 @@ (void) llvm::createPREPass(); (void) llvm::createProfileLoaderPass(); (void) llvm::createPromoteMemoryToRegisterPass(); + (void) llvm::createDemoteRegisterToMemoryPass(); (void) llvm::createPruneEHPass(); (void) llvm::createRaiseAllocationsPass(); (void) llvm::createRaisePointerReferencesPass(); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits